Like a fool I missed the obvious. Most of my day and some of the teams was spent trying to get to the bottom of a “Item not found in Dictionary” error on my install test site. During development I would have just attached a debugger and quickly discovered that the item wasn’t in the dictionary because I hadn’t got the latest database from source control this morning. We ended up on a wild goose chase involving thread synchronisation issues. Had we just raised a more useful error or added some trace information to our code we would have had it fixed in seconds.
So what was the root cause of this problem? Was it really my carelessness or was it our incomplete code that could have thrown a more meaningful error? Well I guess it was both but the danger of relying on debuggers is starting to become clear to me. You only have to add defensive code once and you won’t need to attach a debugger to solve the problem again (saving time in the long run).
If we say the code is incomplete we need to recognise that because the cost of this incompleteness is not immediate it is so much greater. These lessons just reinforce the principles of Scrum and Lean Software Development.