The climate of technology discussions is increasingly being dominated by annoying platitudes, cookie-cutter maxims which eschew all nuance in favor of cultural memes. Repeated frequently enough, they become indistinguishable from truth.
If you’re not reading Gareth Rushgrove‘s DevOps Weekly newsletter, you really should be. It’s a tremendously useful aggregation of reading materials that, while rarely immediately applicable, provoke deep mental dialogue on the ways that problems can be approached. One such item was Dan North’s Microservices: software that fits in your head, which is an excellent slide deck on microservice architectures and patterns.
But there was this little nugget buried inside:
What startles me about this slide is that DevOps was, in large part, a direct reaction to this mentality being so pervasive in Information Technology. IT is a cost center, said executives, and we must take every opportunity to minimize the damage that it causes. Like whack-a-mole hammers we must stamp out creativity wherever we find it, and institute strict governance processes to ensure that these costs stay low.
Never mind that the most effective large-scale IT environments are the ones who understand how to leverage their previous investments as a first-class platform to build their innovations. As one well-known example involving physical assets, Amazon created Amazon Web Services as a way to earn revenue from their existing computing capacity, which sat mostly idle outside of the holiday shopping season. It has since grown to become the largest web hosting platform in the world.
Somewhere along the line, somebody forgot to consider that code can be an asset too. Technology companies, especially small startups, frequently pivot after discovering that their existing technology can be quickly adapted to fulfill a market need that wasn’t previously anticipated. And there’s no better example of this than one of the most transformative technologies being adopted today: Docker.
Docker, by far the most widely-adopted tool for managing application containers, began as an internal tool for dotCloud, a then little-known PaaS service competing with Heroku, AppFog, and other hosts. This happened because after dotCloud released Docker as a public project and began to speak about it, people recognized the value of the thing itself, a value independent of the specific business problem dotCloud was trying to solve when they wrote Docker.
As North points out, the costs associated with developing software are quite substantial. However, we must be mindful that the code is not the cost itself; it is undeniably an asset, but one with liquidity and depreciation that must be managed like any other asset. This complexity is extremely difficult to manage and isn’t well-adapted to snappy bullet-point aphorisms.
Lean thinking teaches us to limit work in progress, and kanban teaches us that we tie up our capital whenever we invest in materials that aren’t used to produce a good that will sell quickly. It’s crucial that we distinguish useless raw materials from the machining infrastructure we’ve purchased, customized, and created to streamline the production process. With software, they can both look the same.