I genuinely believe that nearly all the woe in software development, the whole socialtechnical enterprise, derives from the belief that we can sidestep increment & iteration, "a little better now" and "we’ll change it again later".
This applies to the purest coding geekery, and it applies to the schmooshy marketing, and it applies to the structures and process. It applies everywhere we make changes, and in software, everywhere we make changes is everywhere.
When I make attacks on certainty, i’m saying that I think they’ve sidestepped i&i. When I push against "one best way", i’m pushing off from i&i. When I advocate always small, always better, always rework, you guessed it, that’s just me giving i&i it’s true value.
The hardest part of i&i to grasp is actually their interconnectedness. Everybody gets increment at first blush. "we will split the journey into pieces, and each piece will be one increment closer to the destination". The problem with that first blush approach is that travelling from NY to SF is so trivial a problem as to be incomparable with the problems we deal with in the software-for-money trade.
Marketing is way harder than travelling. Coding is way harder than travelling. Managing? Way harder. Process changing? Yep, way way harder.
You see, none of these problems split well, the way lines on a map split at towns. With a map, the splits add up. Every day I get closer. Each increment adds to progress, and no increment ever goes truly backwards or even very sideways. But in our problems, the splits are far more challenging to make. It has to do with a variety of factors. Three of these stand out large, tho, so I’ll enumerate.
- First, the destination moves around. SF does in fact move very slowly over time, but on the scales at which travel takes place, it’s negligible. In software-for-money, destinations move fast and unpredictably.
- Second, even if our destination holds relatively still, the territory between us right now and that destination is largely unexplored, and thus more or less impossible to draw in simple increments.
- Third, because there are people everywhere in our problem, we must constantly account in our splitting for the whole staggering complexity of what people can do when, and that is far beyond the dictates of simple reasoning.
So what we’re saying is that the increment part can’t stand by itself. Plotting a route and progressing additively along it every day just isn’t enough to get us there. It’s very important that we grasp that this is not about desire or will. Yes, of course we wish it were so. Yes, of course we are willing to throw considerable effort at making it so.
But we can’t make it so. Our desire and our will have to drop in the face of the reality.
Enter the iteration. The second I of i&i is the acceptance of the continuous reworking of increments we have already taken. Iteration here is the repetition of change: we are changing things we already changed. We are assuming, further, that we will change them again, the third, the fourth, as many times as we need to to produce interactive splitting of our journey.
It’s like viewing each increment as tentative, a probe, an exploration, an experiment. We engage in those increments because we believe they’ll result in forward motion, but we accept that our belief and the world are two very different things.
This is not a simple relationship, between the two i’s, and we want to be careful not to underestimate its impact.
- Because I am iterating, I can make my increments small and fast.
- because I am iterating, I must make those increments suitable for revisiting.
- Because I am incrementing and iterating both, I must resist sitting still while I try to figure out exactly how it’s gonna go.
- Because all of our workers are i&i’ing they need training and experience to give them mastery of the techniques, and they must surely have healthy (iterated) doses of purpose and autonomy.
- Fear is the killer, and we must provide teams doing i&i with the safety to be wrong, and the techniques needed to make “being wrong” relatively cheap to us.
- And because the work is incremental but with uncertain results, we must expect a high need for rhythm, the frequent building and releasing of compressed tension.
This all adds up to a lot. As we might expect with a sociotechnical enterprise, we will be constantly mixing technique, structure, and human interaction. People want so much for there to be an easier way. Even some folks within our own tradition market their technique as easier, and some no doubt believe that.
I want an easier way, too. But there isn’t one.
If we are to succeed at software for money, we’ve no better choice at this time than to master the ins & outs of increment and iteration.
"Change it better now" and "Change it better again later".