My pair and I were looking for the next story to work on. There are two possible stories we can do. Both are challenging and we have to pick one.
The first story requires hard thinking because we need to redesign a way to unify several fragmented processes. The second story challenges come from the amount of grunt work we need to do. It’s ugly and the idea of wading in it is not pleasant.
So which story did we pick to work on next? We picked the second story because it’s not going to get any better if we put it off. It’s like keeping a balance on a credit card. Each month you pay the interest on it. We decided to suck it up and do it next.
Why did we defer the first story? It requires hard thinking. When I’m confronted with this kind of a problem it brings me back to my university days. My friend introduced to me a concept called the mind incubation period. When a person sees a problem that s/he can’t solve quickly, her brain spawns a process at a subconscious level to find a solution to the problem. He said: “spend sometime on it and then leave it. Every now and then revisit the problem and you’ll be surprised how you’ll see the problem differently. This will help you to find a solution.” I’m applying this logic to the first story, as of now, I haven’t yet figured out the best way to solve it.
Test driven development applies the same principle. When I write test first, I’m saying I’m not ready to develop the thing I need to develop. As I write more tests, the thing I need to develop becomes clearer because I get a chance to the look at the problem from many angles. When it’s time to develop the thing, I now have a better idea of what it’s going to look like.
The rule of thumb: Work on the stuff that’s not going to get better with time. Defer the stuff that requires hard thinking as long as possible.
Ah, but what do you do if you have a problem that requires both grunt work and hard thinking? I’d love to hear your ideas!