Agile Principles: Technical Excellence Enhances Agility

Agile Principles: Technical Excellence Enhances Agility

Twenty years ago, an agile rebellion started among a small pocket of besieged software developers. Today, the benefits of agile methodologies have improved stock trading, federal bureaucracies, celebrity chef-led humanitarian efforts. Yet Agile has started to lose favor. This has prompted us to get back to basics and start a series focusing on the Principles of Agile.

The ninth principle of the Agile Manifesto reads:

Continuous attention to technical excellence and good design enhances agility.

For software engineers and designers, this principle is delightfully self-affirming. Of course we want to believe that doing things “well”, and doing things “The Right Way™” is worth the time and effort we put toward it. It feels like an axiom to most of us, and why not, if it was incorrect then it would undermine a good chunk of how most of us spend our careers.

But from the outside, this agile principle feels counterintuitive. After all, isn’t an obsession with “technical excellence” and “good design” just going to slow you down? If we just push that stuff off until later, won’t it help us move faster now? How can we be sure this extra “design” is really going to pay off? Surely we can just delay some of that stuff now and get things done, and then pay attention to it in the future when it becomes a problem?

It’s always too late

Have you ever watched a show about hoarders? If not, then good for you, you’re not missing much. The gist of these shows is that a desperate family agrees to go on national television, and air their family’s secrets, in a last ditch effort to help a family member who has reached the point where collecting stuff is destroying their existence.

What began decades earlier as a slow accumulation of possessions, turned into a health and safety hazard as their home was filled with more and more things. These interventions are occurring only when their entire house is filled with feet of junk, and side effects such as pest infestations, mold growth, and even structural instability are directly compromising the health and safety of the family member.

The story is the same over and over. They waited way too late. By why? Why didn’t they intervene earlier when it was a much more tractable problem? Couldn’t they tell when their penchant for accumulating had become a real problem?

Change is obvious when you start at the end

What started as a cluttered kitchen counter turned into a cluttered kitchen table. Then the table filled up and they started setting things on the stove. Next the kitchen chairs started getting things piled on them. Then there was nowhere to eat a meal, much less cook it. But to get that space back would now require them to clean off the chairs, the table, the counters, and figure out what to do with all of this stuff! Organizing all of it is so much more time consuming than just setting it down somewhere. And they need all of this stuff, why would they have brought it in if they didn’t need it?

And so instead of cleaning out the kitchen they decided to order food. Next thing they know they are ordering out most of their food and eating in the living room. This hurts their finances and increases the amount of trash coming into the house. It also affects their health and makes it even harder for them to address their situation.

As the situation progresses, the problems compound, and addressing any of them starts feeling simultaneously more daunting and more pointless. So they just start ignoring the problem, and making excuses for why they are in the situation. And so the situation slowly gets worse and worse, until the individual is living in truly horrific conditions. Conditions that cause people watching the show to recoil in horror.

Who would want to live like that?

Nobody. In every case, if you had taken that individual at the very beginning and dropped them into a house filled with as much clutter as they had amassed over the years, they would have responded with the same horror you did. It is the slow accretion over many years that causes the adaptation to the situation they were in.

Once the problem reaches a breaking point, the combination of their habits and the overwhelming volume of stuff means that the task has long since become insurmountable without outside help and resources. And this is how they end up exploited on national television while the show hosts, mouths agape, don Tyvek suits and spelunk through their living room.

Software is disturbingly similar

If you’ve worked in a software environment buried in technical debt or suffering from years of poor design, this probably hits really close to home. It can feel stifling. Spending much of your days just trying to keep the environment from crumbling, not having any time to push anything forward or deliver any value.

But it didn’t start off with someone saying “We don’t care about writing good software!” Nobody made a conscious decision to bury the team in technical debt. It was a long and slow process, mostly started by indecision, and a desire to get things done.

“We will write the tests later.” “We will do user testing later.” “We will address it in the future.” “Let’s just get this working.”

Sound familiar? We all know how this works. Once our current task hits the “complete” column, the next three critical tasks are already staring us in the face. So we sigh, and move on, leaving a TODO in the code that will remain as an enduring monument of self-delusion.

So we sigh, and move on, leaving a TODO in the code that will remain as an enduring monument of self-delusion.

And so it accretes. The corners that were cut earlier will force later developers and designers to cut corners as well. Our metaphorical dining room table was full, and so we had no choice but to start piling things on the chairs. If we had tried to take time to clean off the kitchen table, we never would have shipped our features on time. At some point it was no longer a choice, it became a necessity to get anything done in the system.

If you can get today’s work done today, but you do it in such a way that you can’t possibly get tomorrow’s work done tomorrow, then you lose.

Martin Fowler

Addressing it would take a level of resources that the team simply can’t muster, and so everyone plods forward, depositing their own layer of sediment in the system. Eventually entropy takes over and velocity slows to the point where it becomes an existential threat to the business. At this point outside resources are needed to right the ship.

By the time it reaches this point, it has been building for so long it is hard to see how it could have reached any other conclusion. A decade ago it would have taken relatively small changes, but now it would take a monumental effort.

But it doesn’t have to be that way.

Eternal vigilance is the price of agility

Good technical and design practices might feel optional at the beginning of a project. On a small project you might even be able to get by without them altogether. The danger lies in the fact that on larger projects you can get away without them for a very long time. Too long. But at some point there will be an inflection point, and even if you’re paying attention, the inertia of your situation can turn it into a fait accompli.

To avoid this fate, “continuous attention” is the price we have to pay. From day one, we need to ensure that we are eternally vigilant of the practices that will keep our system and our user experience from becoming a weight that will drown any hope of being agile. 20 years ago the authors of the Agile Manifesto understood this. They knew that if we weren’t constantly vigilant about technical excellence, it wouldn’t matter what other practices we were following, our agility would eventually be eroded by a technical quagmire.

Loved the article? Hated it? Didn’t even read it?

We’d love to hear from you.

Reach Out

Leave a comment

Leave a Reply

Your email address will not be published.

More Insights

View All