Accommodating the Unexpected
As I write this, much of the world is in a state of disarray. Many businesses are shut down for fear of spreading the Covid-19 virus, and others have suddenly switched to distributed work over the internet. Most software developers are working in physical isolation. Even those accustomed to working remotely are reporting that the current situation is affecting their ability to get things done.
I think it is safe to say that no software development organization expected this to happen. No IT department accounted for the disruption in their estimates and plans. While epidemiologists could predict that there would eventually be a worldwide pandemic, even they could not predict the severity or timing of such a disruption.
How has this affected your work? Are you still expecting to meet the plans made before this happened? Have you given up planning altogether, just trying to get something, anything, done? Or have you looked at how things have been progressing in the last 2 or 3 months and adjusted your expectations?
The unexpected happens in smaller, less noticeable ways, all the time. I’m amazed when I see otherwise Agile development shops estimate all the user stories they think will constitute a software release, plan dates on those estimates, and expect to hold that steady as if they won’t learn anything while implementing those stories. Others have been dismayed by such behavior, and call for bypassing planning and just working on what seems valuable at the moment.
I can’t imagine keeping a company successful without reasoning about potential future events. In fact, I think that’s so important that I recommend revisiting this on an ongoing basis. Sure, estimate what’s needed to meet your goals, though I might do it on a higher level than user stories. Make plans based on those estimates, but include contingency buffers in your plans for the unexpected.
Measure your progress along the way. When your progress doesn’t meet your expectations, don’t get out the buggy whip to speed things up. Instead, examine what assumptions were in your estimates and plans. Obviously there’s something going on that you didn’t expect. You can learn from that difference, and adjust your plans to accommodate what you’ve just learned.
If this is helpful to you, you might find value in my book, Software Estimation Without Guessing: Effective Planning in an Imperfect World. You can find the ebook on the Pragmatic Programmer’s website or the paper book through Amazon or your favorite bookstore.