Think unnaturallyWe humans take a lot of natural ideas with us from the material world, to the software world where they aren't context appropriate.
We pesky humans tend to take a lot of bad habits with us from the material world, when we venture into the virtual world of software development.
Well, maybe they’re not bad habits, per se. But some of the ideas aren’t context appropriate.
Probably the most obvious example is that we aren’t building bridges. Physical construction has much less possibility for last-minute changes than the software world. If you’re building a bridge over a river, and decide half way through the project that it should be placed 100 meters down stream, you get to start over mostly from scratch.
If you’re building a software integration between two applications, and half way through decide that you want to change one of the vendors on the end of the integration, you may have to discard a little bit of code, but you generally won’t have to start over from scratch.
Another area where physical-world thinking doesn’t translate well to the software world is the idea of decoupling delivery of a product, from exposing functionality.
Traditionally, when you order a new vaccuum cleaner, it’s delivered to your home as a complete product. You have the physical device, and you have the capabilities of that device. They are one and the same. (I’m ignoring smart devices for the moment.)
In the software world, this isn’t true. Or it doesn’t have to be.
And I’m not just talking about pushing patches to a web server. The difference is deeper and more fundamental than that.
The confusion often surfaces in statements like “We can’t use continuous deployment, because our custoemrs don’t want changes every day.”
This is a sign of physical-world thinking being misapplied to software-world reality.
In the software world, there’s no requirement that deployment of new software means exposing of new functionality. In fact, most software deployments I’ve been involved in in my decades-long career have not exposed any new functionality at all. Nor have they fixed bugs.
I can imagine someone thinking “What’s the point, then? What were you doing?”
I was deploying a part of a feature, which remained unexposed.
It would be a bit like selling a vaccuum cleaner that part of a sweeper attachment. And that attachment was invisible. And weightless.
In reality, there are now physical products that ship like this. As some companies have begun bringing the reality of software-thinking into the physical world. One example is the ability to rent heated seats in new BMWs in certain markets. The cars come equipped with “invisible” seat heaters. They can be enabled via software for those who pay.
Why would you ever need to deploy new features multiple times per day?
That's not why we do CD. When using CD, large features are typically behind a feature flag.
Well, some good came from it
After a failed monster deployment, we're finally switching to continuous deployment.