Is Everything Code?
Marc Andreessen is famous for saying that “software is eating the world,” a flippant way of saying that nearly every product and service relies on software to deliver on its business promise. Modern software development and delivery practices such as agile and DevOps are taking this to the next level as one might argue that today, nearly everything in software development is code, as more and more of the software process itself is automated. Obviously, our software applications are comprised of code, but that’s only the start of it.
Software tests are code
The recent 2018 Accelerate: State of DevOps Report makes this clear. High performing organizations now automate on average more than 80 percent of their testing work, up from 70 percent just a year ago. While there will always be a need to perform some manual testing—either because automation cannot identify certain kinds of errors or the cost of automation for some tests are too high—there is no doubt that tests are primarily code today.
Delivery orchestration is code
Back in the dark ages of software development, the process of moving code from its development environments into testing environments and, ultimately, into production, was an intensive manual process that was fraught with risk. Thanks to continuous integration and delivery practices—along with tooling to support this process—managing builds, tracking versions of release candidates, and promoting applications to downstream environments is all done with code.
Environment provisioning/deprovisioning is code
The ability to setup and teardown development, test, and production environments has become code, too. Whether these environments are on premise in a datacenter or cloud-based, code now drives these activities. The mainstream use of virtual machines and containers has made automating these practices practical, reducing human error and time.
Production deployments are code
We no longer need to nervously deploy code into production at midnight on a Friday evening, expecting days if not weeks of debugging issues to get new production code to work. Along with automated delivery orchestration has come the ability to automatically deploy applications into production environments just like we do into earlier environments. Besides pushing application code into production, automated deployments can deploy mechanisms to rollback code if necessary and monitor applications for performance, reliability, and security. Deployments are now code, too.
So what will become code next?
Hardware as code
Software-based hardware design languages, robotic assembly, and 3-D printing technology are converging to make it possible to design, prototype, and build all sorts of hardware automatically using code. In the future, it might be possible to build nearly any product using just raw materials and software-controlled systems.
People as code
While I’m not a big believer that robots are going to take over the earth and put us all out of business, there is no question that the push toward automating the creation of code and mechanisms to self-heal defective systems could mature to the point where most code is created by other code. Rudimentary code generation techniques already exist and artificial intelligence is pushing the envelope in these areas and who knows for sure how far it will go.