Skip to content
Go back

The Law of Addition

Edit page

Software development is the art of adding B to A, then C to (A+B), and then D to (C+(A+B)). Every feature is a new layer that reshapes what came before it. At the beginning, everything feels fluid — you can move things around freely, rename classes, rebuild modules, erase your mistakes. But the further you go, the more the system resists. Every new piece pulls on a web of assumptions, and you start feeling the weight of your own history.

How developers deal with that weight defines what kind of developers they are.

The first kind sees features as checkboxes. You give them B, they add B. You give them C, they glue C somewhere on top of A+B. They measure progress in commits, not in coherence. They’re not lazy — just focused on motion. When something doesn’t fit, they bend it until it does. “It works” is all they care about.

The second kind pauses before typing. They take a moment to see how the new piece fits into the whole. When B arrives, they ask what A+B should mean. When C arrives, they ask how the system should evolve. They know that to add B properly, they may have to rewrite A — and they do it without complaint. To them, consistency isn’t optional; it’s the only thing that keeps the system alive.

The contrast doesn’t show right away. In the beginning, both deliver A, and then B. The business gets what it asked for. Both teams demo a working feature, both close their tickets. But as the alphabet grows — C, D, E — something starts to drift. The first kind keeps adding, explaining later that E “wasn’t easy because the system wasn’t built for it.” The second kind never has to say that, because they quietly rebuilt it back when B came along.

The business rarely sees this difference. The first group feels fast and reassuring — always in motion, always shipping. The second feels slow, complicated, maybe a bit arrogant. They rename things, argue about data models, ask questions no one wanted to think about. While one group celebrates another quick merge, the other is still refactoring a base class so the next merge won’t be a disaster.

Even the second kind slips sometimes. Deadlines, pressure, tired evenings — they all pull you toward “just add it.” But the next morning, it bothers them. They can’t unsee the fracture they’ve made in the system’s logic. They know it will come back, multiplied.

Every addition leaves a trace. Some systems grow like stories, each chapter building naturally on the last. Others grow like a pile of patches — every fix stitched over the previous one. From a distance, both look like progress. Up close, one still makes sense.

The business rewards motion, not coherence. But coherence is what lets motion continue. A system that can’t adapt eventually stops moving altogether.

Every codebase ends up as a reflection of its authors — how they think, how they compromise, what they’re willing to live with. Some build architectures that can stretch and evolve. Others build monuments to the speed of their past decisions.

Both kinds of developers build software. But only one builds systems that can survive the next letter of the alphabet.


Edit page
Share this post on:

Previous Post
Teamwork Considered Harmful
Next Post
Let It Crash