Exercise your mind, body . . . and code

Photo credit: Cyril Saulnier via Unsplash

I had two humbling experiences last week.

First, I returned from a two week holiday which I enjoyed greatly - but did very little exercise other than walking. When I resumed my normal exercise regime - nothing too strenuous, but something every day - I was surprised that I found it so hard, and why I felt increasingly stiff and sore as the week progressed. It was a reminder of how quickly you can lose good habits, and how quickly their effects fade.

Second, I did some work on a personal coding project which I hadn’t touched for a few months. I went through the normal experience of being baffled by my own code, before gradually remembering the concepts and structures (and, as usual, puzzling at some of the coding choices I made several years ago). I then tried to make some changes and run the deployment pipeline - and everything crashed. I made some more changes, and everything crashed again. And again.

After a while, I realised that I was buried under an upgrade avalanche, In the few months since I had last worked on the project, there were new versions of cloud services, I was using components which had been deprecated, the container image I used was no longer supported, and I was running an old version of the framework.

I had that cold and sinking feeling that you get when you are severed from your production environment - your ability to deploy depends on a whole load of upgrade work, and you know that every step of that work will have tweaks and problems. Of course, this was my project and I had full admin rights. I could sidestep the pipeline and apply changes by hand - but if I did that once I would be doing it forever. So I ground through the upgrades, cursing my own neglect of the project.

There is a common lesson here about the need for continuous exercise to maintain agility. This seems obvious when we are talking about physical fitness. I knew when I was on holiday that I should eat less and exercise more - but I was on holiday! It was only for a short time, and I knew that I would pay the price on my return (although it was a bit higher than I expected). Most people have had similar experiences, and whatever their choices about exercise, they know the link to health and wellbeing.

The link between exercise and code agility is less obvious - especially to people who don’t build, run and design systems for a living. It has become commonplace to talk about agility in programme delivery, and most programme sponsors are used to their teams talking about concepts such as sprints and backlogs. However, sponsors still expect that when a programme is done that it is done: they have a working product which they expect to keep working indefinitely. They may vaguely appreciate that there is some periodic maintenance required - like a car, the oil needs changing, the tyre pressure needs to be checked, and it needs the occasional service - but the idea that the system needs continuous exercise in the form of regular, frequent change, seems strange and unwelcome. Building technology systems is hard enough in the first place - are we never finished?

Perhaps those of us who build, run and design systems for a living should adopt analogies from biology as well as mechanics. There is a danger in such analogies - given the current focus on AI, we do not want to give the impression that our systems are conscious or alive. However, it would help to signal the features they share with biological systems. When they are first released, they are in their most immature and undeveloped state - managed well, they will develop more capabilities over time. They have a lifetime, and over that lifetime they will grow and adapt to their environment - and, if we do not look after them properly, they wll grow rigid, sclerotic and inflexible. And they require exercise in the form of continuous releases, which keep them supple and agile.

These features are even more apparent when we remember that systems do not simply comprise code and the hardware it runs on: they include the teams that own them and the practices those teams follow. Absent exercise, teams grow as stale as their code.

When we perform a simple, physical exercise, we do much more than the obvious, visible motion. If I lift a weight from the floor, then I exercise my heart, my lungs, my back - and my mind, as I build habits (however hard, however easily forgotten). When we release code, however small the release is, we do much more than make the obvious code change. We refresh the team’s memory of the code base, we test the viability and stability of the environment, and we force ourselves to acknowledge and address how things have shifted.

Exercise matters for systems as well as people.

Previous
Previous

Technology architects aren't vampires: they don't need to be invited in

Next
Next

Adventures in ignorance