Reading time: 3.5 minutes
Are there any ‘silver bullets’ in software development?
Fred Brooks led the IBM’s System/360 development effort and recounted that delivery story and strategies in The Mythical Man-Month (brilliant) said:
“There is no single development, in either technology or management technique, which by itself promises even one order-of-magnitude improvement within a decade in productivity, in reliability, in simplicity.”
— Fred Brooks, No Silver Bullet, 1986
This is where the “there are no Silver Bullets in software development” came from. Brooks doubled-down on this a decade later with:
“It is my opinion, and that is all, that the accidental or representational part of the work is now down to about half or less of the total.”
— Fred Brooks, “No Silver Bullet” Refired, 1995
Mark sees Silver Bullets!
Mark Seemann makes an interesting argument in ‘Yes silver bullet’ that our industry has observed at least two developments that have yielded an order of magnitude improvement in productivity:
- the World Wide Web
- Automated Testing
He also lists some honorable mentions that made large, though perhaps not orders of magnitude improvements: git/distributed version control systems, garbage collected languages, and Agile software development.
Mark is a self-employed programmer and software architect. I read Mark’s essay at lunch and found myself shaking my head in agreement. This counter-argument really interest me because I have agreed with Brooks and shared that message with teams and in training for years.
Am I wrong?
After lunch, I started building a continuous integration and delivery pipeline for a serverless application deployed on AWS Lambda. The application is written in Python, managed with the (Javascript-based) Serverless framework, and uses CircleCI for continuous integration and delivery. One of the most frustrating bits came up when I was trying to align the build and deploy environment’s version of Python to the one was use in Lambda, Python 3.7. One of the ‘successful’ commit messages in that journey was:
Go back to python3.7 and install nodejs and npm
Installation performed using the
setup_8.x
script, but thisactually installs node version v10.15.2. npm 5.8.0 complains
about this version being too old (it’s not too old, it’s too new),
but that will probably go away if we update npm.
WAT.
Maybe you’re thinking, “Javascript and Python? Of course it’s a tire fire of accidental complexity.”
I certainly started questioning the existence or and non-existence of Silver Bullets again. And I think it’s important to treat this topic with a bit of nuance.
Distribution matters
The availability, practicality, and effectiveness of applying a given practice or innovation is what matters in the real world.
The future is already here — it’s just not very evenly distributed.
–William Gibson, 1993
The entirety of the technology industry does not have the Silver Bullet of “automated testing” or even the “World Wide Web.”
Example: It seems like only a small portion of Terraform developers test their infrastructure code even though v1.0.0 of kitchen-terraform was published over two years ago.
This is ‘weird’ because if automated testing provides an order of magnitude improvement in software development productivity, then it would seem like Terraform module developers would adopt automated testing en-masse. But we don’t observe that. For example, only 4 of the 23 Terraform modules in the community Terraform AWS registry have even a basic automated test, though most have an ‘example’ directory which is a precursor.
My point is not that serverless or Terraform or any other particular technology has a problem. It’s that…
We label the technologies with fully developed silver bullets with adjectives like “mature” and “well-understood” or (negatively) “commoditized” or “boring.” New technologies are missing those labels almost by definition.
By contrast, when you choose a new technology or introduce something new into your existing world, we need to expect some gaps and disruption.
We have to build up the the implementations of “silver bullets” for each new technology in its supporting ecosystem over time. Sometimes we need to do it for combinations of technologies. Sometimes we have abstractions that reduce the effort and sometimes those abstractions make it worse.
Assessing and addressing gaps for ‘Silver Bullet’ development practices should shoot to the top of backlog because they have huge effects on productivity.
Fortunately, I think this might be getting easier to do, but you should look before you leap. Try and determine what the likely challenges are and how much you’re willing to invest to obtain or maintain a 2x, 3x, or 10x improvement.
Putting out my little technology tire fire took less than a day and now I have unlocked access to an emerging practice (1) that might become a productivity, operations, and satisfaction Silver Bullet: Continuous Delivery of a Serverless application.
#NoDrama
(1) well, I’m sure CD for Serverless is “well-understood” or “boring” to some people, but not me yet; hopefully next week