One school of thought is that DevOps exists to solve the problem of wasted developer time for creating environments. Since developers are such a scarce and expensive resource, it makes sense to subordinate operations to development.

Wrong! If you do that you recreate the problems inherent in the machine metaphor – each role with its own specific function.  An alternative is the “organic metaphor” where responsibility for the final deliverable is shared across the organization.

A great illustration of problem with the machine metaphor is in Jez Humble’s post on “Elisabeth Hendrickson Discusses Agile Testing” where she discusses working at a product company which was suffering a series of quality problems. As a result, they hired a VP of QA who set up a QA division. The net result of this, counterintuitively, was to increase the number of bugs. One of the major causes of this was that developers felt that they were no longer responsible for quality, and instead focussed on getting their features into “test” as quickly as they could. Thus they paid less attention to making sure the system was of high quality in the first place, which in turn put more stress on the testers. This created a death spiral of increasingly poor quality, which led to increasing stress on the testers, and so on.

Similarly by allowing development to ignore the needs of production environments you are setting yourself up for development creating products that aren’t deliverable.

That is why we named this post “spherical cow” – creating a solution that is beautiful in theory – but doesn’t work in practice.