Building software means solving problems on a mass scale. There are technical problems, design problems, functionality problems, usability problems, deployment problems, the list is endless and ongoing. Because the time and effort needed to solve problems is generally unpredictable this means that predicting when software development will be finished is a challenge. The simple fact is that sometimes things go well and sometimes less well.
Modern development teams employ a range of tactics and techniques to deliver features predictably in this environment of uncertainty but some of these are subtle and sometimes misunderstood. Clarke Ching is an expert speaker on these delivery issues and shared his thoughts and insights at a recent Agile Yorkshire meetup.