Infrastructure as Code: Managing Servers in the CloudCalogero Bonasia
Technical debt is a metaphor for problems in our system which we leave unfixed. As with most financial debts, your system charges interest for technical debt. You might have to pay interest in the form of ongoing manual workarounds needed to keep things running.
You may pay it as extra time taken to make changes which would be simpler with a cleaner architecture. Or charges may take the form of unreliable or hard to use services for your users.
Software craftsmanship is largely about avoiding technical debt. Make a habit of fixing problems and flaws as you discover them, which is preferably as you make them, rather than falling into the bad habit of thinking “it’s good enough for now”.
Martin Fowler talks about the Technical Debt Quadrant, which distinguishes between deliberate versus inadvertent technical debt, and reckless versus prudent technical debt.
Infrastructure as Code (IAC) is a type of IT infrastructure that operations teams can automatically manage and provision through code, rather than using a manual process. Infrastructure as Code is sometimes referred to as programmable infrastructure.
Infrastructure as code, or programmable infrastructure, means writing code (which can be done using a high level language or any descriptive language) to manage configurations and automate provisioning of infrastructure in addition to deployments.
This is not simply writing scripts, but involves using tested and proven software development practices that are already being used in application development.
For example: version control, testing, small deployments, use of design patterns etc. In short, this means you write code to provision and manage your server, in addition to automating processes.
A vast number of tools like vagrant, ansible, puppet, docker makes the whole process even easier. This is even made better by the fact that server hosting sites like aws are providing RESTful apis that can be leveraged.
Virtualisation tools like virtualbox and vagrant or docker are really helpful during development as well.
The IAC process closely resembles formal software design practices in which developers carefully control code versions, test code iterations and limit deployment until the software is proven and approved for production.
Agile organizations want this time to me the bare bones minimum. It is what limits their ability to release new features and fixes to customers. Some organizations have cycle-time down to minutes!
While this is not possible for enterprise applications, the current cycle time of weeks or sometime even months is absolutely unacceptable.
Infrastructure as Code hence has become the cornerstone to allow for the speed that DevOps demands and the management of multiple versions of multiple environments, to handle the CI builds being spun out by development.
Without it, Ops becomes what puts the water (or fall) in water-SCRUM-fall.