Everything as code
Who does not like a good science-fiction movie? Tron(1982), The Matrix(1999-2003) and Avatar(2009) are all good examples of how the various memes of virtualisation were introduced through Hollywood into the mainstream consciousness. As these ideas permeated society so virtualisation permeated the Information Technology world. Virtualisation of servers in the form of virtual machines laid the foundation for a continuous virtualisation trend, including software defined networking, virtualised processes & containerisation and even virtualising just a single function call - all of which has given impetus to the recent cloud revolution. Everything-as-code is however not actually about technology but rather about a way of thinking, of working & of operating. Services & technologies such as lambda functions (cloud functions), Kubernetes (data-centre as code), Docker (systems as code), Ansible (configuration as code), and server virtualisation (provisioning as code) are simply some of the many the enablers of this phenomenon. Development teams need new ways of working to match the velocity-of-change of the technology they using. Technology dependent projects which take longer than three to six months to complete are at risk of being out of date (even considered old) by the time they deliver value. One way of working differently that can aid Development & IT Operational teams to stay relevant is to treat *Everything-as-code*. So in practice how does this philosophy manifest? One example would be that all provisioning of virtual servers, configuration, installation, testing & deployment .etc be codified in a build or deploy pipeline which resides in a source code repository such as Github - these practices have given rise to the now much sought after discipline of DevOps (development-operations).
Another example would be for all design documentation to be done in a Wiki (automatically saved into a source repository (automatically versioning each change/commit) rather than keeping documentation in word style documents. Technical Specifications & Business Requirements thus become living reference-able wikis that can now keep pace with the high velocity-of-change unlike the oh-so-familiar project documentation nightmare of out-of-date specifications & un-referenced documentation lurking in the dark corners of the enterprise's file servers. Both examples above reflect the principal of codifying all operational, project and dev-ops output as artefacts that can be treated in the same way as developers treat their source code. Such artefacts are stored, versioned, and tracked using readily available source management tools or services. Access can be better managed for maximum utility of these enterprise nuggets of intellectual property and specialised knowledge. Everything-as-code means that the output of (all) work is now made tangible (incidentally also a necessary side-effect required for effective remote collaboration), and solidifies the previously implicit knowledge of the employee. A further consequence of the philosophy is reproducible resilience. Once all DevOps configuration is codified (i.e. does not require continual human intervention) and once all documentation is kept securely in a source repository, then the tight dependency on rigid environments whose configuration we dare not change lest we lose operational capability or worse, becomes one where we can freely tear-down and rebuild (also automated as code) any of our operational environments at will. This reproducible resilience not only means that Disaster Recover (& Business Continuity) are baked into the way of working but that where & at what scale the work takes place is also simply a matter of choice. Spinning-up a complete operational environment on-premise becomes no different from doing the same at any cloud provider of choice. I affectionately refer to "Tear-down Mondays" when each week dev-ops automate a complete rebuild of development & testing environments for first-thing in the morning before staff arrive at work. This ability to tear-down and rebuild any and all operational environments automatically (& enforced weekly) guarantees that the business can have complete and continual confidence in its Business Continuity ability, and that any bad (aka "undocumented"/"hard coded") behaviours by staff are found out within the period of a single week, and not at the moment when a real crisis hits, long after the one person who knew what/where/why has already moved on! Any team that wants to sustain the velocity-of-change their technology requires, also needs to be able to communicate at an equivalent velocity. Everything-as-code is one of the enablers of instant accessibility by team members to every other team member's output -- code into source repository, documentation into a wiki, meetings into a corporate social media store & instant messaging using tools like Rocket.Chat, deployment via real-time orchestration platforms such as Jenkins, automated & scripted security testing, webhooks instantly updating chat channels about commits, builds and deploys etc. Therefore, no team-member is left behind. A derivative of this, is the idea that team members (especially when working with remote teams) are required to "publish daily", a discipline for which Everything-as-code is a precondition. No part of the project is ever more than a few hours out of sync with the rest of the project, therefore eradicating inherent project lag. Everything-as-code is a comprehensive philosophy and way of working. One measurable benefit to the business is that Everything-as-code results in a self-documenting outcome. As developers, analysts, dev-ops engineers, even business participants, all adopt this philosophy they systematically translate their implicit knowledge into explicit artefacts in the form of scripts, wikis, pipelines and code - all which become part of the documentation that defines the business and it's operations. This significantly de-risks the business and ensures little-to-no knowledge loss in event of staff succession and other people disruptions. If you are interested in benefiting from an Everything-as-code approach in your development & operational environment please feel free to Contact Us for assistance.