42 first principles

Push to deploy

My most blissful hours as a software engineer are those where I can uninterruptedly focus on an implementation task. It's a joyful state of mind, which is called The Zone, and it means for me to be able to concentrate for a prolonged time on a specific detail or problem. This phase is then concluded, when the feature is complete, the tests are green and the changes are pushed to the repository. I can now make a coffee and think about the next new thing to work on.

What I don't want is to spend time waiting for my change to be deployed, or worse deploy them manually. This involves boring, tedious, repetitive steps which have to be executed in a specific order. Computers are great at this, they have an unlimited amount of patience and are perfect at executing instructions in a given order.

Automating deployment processes implictly creates living documentation of the systems needed to put changes in front of consumers, and therefore adds resilience to any software project. The instructions how to deploy the project are always up to date, because they do the deployment.

I spent a significant amount of time in enabling and maintaining deployments, however in my experience is this time wisely invested in times where I could plan it, and allowes me to move fast in times of crisis.

Push to deploy requires confidence to deploy. This confidence is created by using techniques like test-driven-development, end-to-end testing, static code analysis and others to ensure that run-time defects to not happen often and that a change. Those are first-principles in their own right which I will focus in later posts.

busFactor = ∞

Push to deploy is a way to increase the bus factor significantly. It allows me to go on vacation. By actively moving knowledge into code, I also enable colleagues to learn how things are done and work together.

For me this is one of the main principles I apply every day, because it enables me to move fast, and with confidence.

This post is part of the 42 first principles series.