Let’s imagine you’re trying to lose weight.
You have heard great things about the ‘Straight Path’ diet, and it’s intuitively sensible. The diet sets out a fairly strict meal plan, eating different foods than you would normally choose, and with a strange number of meals per day; obviously it’s going to take some effort to follow, but is relatively simple once you get into the swing of things.
(Lets be clear right now that this is just an analogy (actually, it’s a meta-analogy, but don’t worry about that yet), and this diet doesn’t exist. Stick with me.)
At the point where you decide you like the sound of the ‘Straight Path’ diet, you’ve got two choices:
- Abandon your existing habits and strictly follow the ‘Straight Path’ meal plan, or
- Try and incrementally modify your existing habits, sometimes incorporating concepts you read about in the ‘Straight Path’ plan and trying to get ever closer to that ideal.
Choose your own adventure
Option 1 sounds like a pain in the ass, right? And option 2 seems much more sensible.
After all, it’s much easier to make small changes than huge ones; much easier to convince yourself to maybe eat one less slice of pizza than last week, or swap just one of those snickers for a granola bar, than to suddenly give up all your normal preferences and hit the tofu six times a day, right?
Option 2 is intuitively more sensible.
And don’t forget that this is reality, and you don’t live like a monk. You have parties to go to, dinners with friends, and so you’re going to have to be pragmatic about it. There are going to be times when it’s just impossible to stick to the ‘Straight Path’ meal plan; times where the only food around is fast food, and you need to eat.
So any kind of absolutism about following your diet isn’t useful - worse, it’s counter productive, alienating yourself from your friends and fellow party goers with this talk of a diet that they don’t understand or care about.
No, better to go for Option 2. Right? Wrong.
The straight path
If the diet was the meta-analogy, here’s the actual underlying one.
You have a goal, and there’s a clear, straight-line path which you are confident aims you square at that goal. You are currently in the wide swamp that runs alongside the path.
You have two choices:
- Get onto that path as soon as you can, and then ardently stay on the path, each step in the same direction
- Try to keep an eye on the path, but still move forwards through the swamp, trying to slowly get closer to it.
My thesis is that the only sensible choice is Option 1.
Option 2 is far harder. Each step brings a choice - expend effort trying to move closer to the ideal, or be pragmatic and scramble forward a little bit, hopefully not moving too much further away from the path. Each one of those choices takes time, and energy. And each one is an opportunity to be diverted in the wrong direction.
Option 1, the “Straight Path”, means getting up onto the path from where you current are as fast as you can. From that point, the direction of each step is clear, leaving more time to focus on other aspects of your journey.
Even when you’re on the straight path, it’s obvious that there are times you’ll need to leave it. Going back to the diet analogy, whenever you go out to a party, or a restaurant, you’re obviously going to have to compromise in order to have a successful evening.
If you’re on the straight path, you are always aware of the relative cost of these exceptions. In some cases they are justifiable, and in others they are not, but you can always measure their impact because you have a baseline - essentially, the amount of effort it’s going to take you to get back on the path.
If you’re making each choice as it comes, improvising or trying to judge every situation on its own merits, then it’s almost impossible to really evaluate the longer-term impact they will have.
What I’m saying
It’s more valuable to pick an approach, a technique or a methodology that you have confidence in and then follow it devotedly, almost robotically, than to never pick one in the name of ‘being pragmatic’.
That what agile and TDD have in common with martial arts, dieting, exercise, yoga, and all manner of pursuits. It’s about discipline.
It’s about saying “this is how I do things, because I know that this works.”
And it’s about always being aware of the costs, the debt, of deviating from that approach, technique or methodology; judging when we must make sacrifices to survive, and when it is better to preserve our behaviour instead. It’s about always being conscious of the distance between you and the ideal, and trying to get back to the ideal as soon as possible.
Epilogue (and the real point)
There’s no way to be disciplined if you can’t describe what you should be doing. You can’t practice a martial art if you haven’t been taught the basics, and then worked to refine it under supervision. You can’t stick to a diet if you don’t have a clear understanding of what the rules of that diet are. You aren’t doing yoga if you’re just standing on one leg for a few minutes every day.
And you can’t claim to “be doing agile software development” if you don’t have a clear definition of what that means, and are willing to stick to that definition regardless of what the client wants, thinks or says. It doesn’t just mean “I don’t agree to fixed scopes or fixed price contracts”, and then everything else is improvised. There’s no technique in that.
That’s probably why a lot of people don’t like the term agile anymore. It’s also probably why some people prefer talking about XP, which describes a concrete set of practices, rather than hand-waving statements of intent that are open to wide-ranging (and often ultimately meaningless) interpretations and executions.
But regardless of whatever interpretation you choose: if you’re going to claim to work in an agile way, that means having principles and sticking to them except in the most extreme circumstances (and probably sticking to them then, too). Being pragmatic is too often just an excuse for doing what seems easy at the time.