Documentation Driven Deployment

A little bit of documentation goes a long way. Recently, I’ve been using a technique where the documentation can do even more. What if you could manage your server environments in a manner similar to unit testing of software? Ok, that probably doesn’t make a lot of sense. So, let me break it down a little bit.

In an Agile practice, one of the key reasons for performing unit tests it to document your software. It demonstrates how to use the methods you create. It provides examples for others. It proves that your software does what it is supposed to do. It describes the purpose of the method being tested.

As the number of services grow, as is the case when you buy into micro services, there is a lot of work involved standing up those services. If you are using traditional web sites, using PHP, IIS, or something else, you still have to configure the web service for every micro service in your software suite. If you have separate environments for Development, Quality Assurance, Production, and more, then you can multiply the number of services you have to setup by the number of environments. It doesn’t take long to get into the dozens, or even hundreds of those services.

After a while, you need documentation to know what server is hosting a service, and how it is configured. There is a lot more to that configuration as well. What if you could simply use the documentation you create to generate and manage those services? This differs from the process I have often experienced where you do all of your deployment, and then create/update your documentation to match what you have done. I’m thinking it may be better to document first, and have the documentation drive the deployment of your web sites.

Once you have the tool in place to deploy from your documentation, you should be able to reduce your work load greatly, and be assured that your documentation matches your actual configuration, at least once it is deployed.

Any thoughts on the idea? Do you have something similar? Are the software packages you prefer to manage this deployment load for you?