At VitalSource, we use Scrum as a way to apply Agile principles to the way we develop, deliver and maintain software product. Scrum gives discipline to the way we do Agile. The artifacts and ceremony around Scrum are important and keep us moving forward. Daily stand-ups, sprint demos, story grooming sessions, retrospectives gives us a cadence that insures we are doing the right thing, delivering value, removing impediments, and communicating with stakeholders and with each other.
Can we make commitments to delivery dates with Scrum? The answer is absolutely yes. We do it successfully all the time. But, before I jump into that, let me first say that because software has no constraints set by the physical world, estimating software complexity is a notoriously difficult thing to do, and you have to understand complexity before you can have accurate estimating. By complexity I mean - how much work will it take to build a software product, which implies, how hard will it be to do? There was a time when there was a lot of work put into figuring out software complexity, but by and large, in commercial software development no one does anymore, but rather the focus has been on better techniques to deliver software product.
To be clear, waterfall models were (and still are) terrible at software completion estimates. Large specs were written, which inevitably couldn’t cover all nuances and use-cases, the specs were handed over to user interface designers, who would design interfaces no one could implement, which was then turned over to developers, who would scramble to write code that matches the specs and user designs, and the dates would slip because the developers had to go back to the spec writers for clarity, and the spec writers would have to re-write the spec, and maybe consult with an end-user, while at the same time the business owners would be harping about the delivery date that could not be missed, developers would have to squeeze in more time, rush to the end, hand it over to QA, who would rush through testing (because you were already late), and developers and testers would fight over bugs, and then everything would be turned over for acceptance testing, which you never really had to time to do, and finally you get the product out the door, most often late, buggy and incomplete, only to find that the delivered product did not end up looking like the spec which was written months before. It was a nightmare, which pitted people against each other.
Scrum takes a radically different approach to software development by putting product managers, QA engineers, and software developers on the same team, working together on a sprint-by-sprint bases to incrementally deliver business value in the product that can be seen and used. Each increment, or sprint, gets you closer to the end game - the product delivery date. The beauty of the model is that after each sprint, the team reassess what is left to do, measures risk, re-prioritizes work, and moves on to the next sprint. Users stories, which represent business value, get completed each sprint and so the product gets incrementally done - and that includes closing bugs so they don’t accumulate until the very end. During the sprint demo everyone gets to see the product evolving. Every sprint represents an opportunity for the team to do a course correction on the path to successful product delivery.
At VitalSource, we deliberately use the term “forecast” when talking about delivery milestones. Because that is what it is, a forecast. The farther out in time it is, the less trustworthy a forecast is, the closer, the more accurate it is. A team can forecast that, “we believe it will take us ten 2-week sprints to have that feature complete”. They base that on their understanding of the their cadence and the complexity of the features (user stories). We have found that our forecasts have been pretty accurate, and have several successes that demonstrate so. We will naturally have time where forecasts will be off, but the beauty of Scrum is that we find out sooner rather than later, because after each sprint we can see if we believe we are on target.
Can we commit to “firm” dates? Yes, we can, and we often do. This is particularly true when we have commitments with external customers or partners. This is essentially “time boxing” the work. In order for a time-boxed effort to work, the team has to develop a prioritized list of work and agree on the minimal needed, and agree that the minimum can comfortably fit into that time-box. If there is time left, they can work down the prioritized backlog of features. Again, we have had success doing this, and I have seen it work may times in my career.
One of the best feelings in the world is to get product out the door. Even better: an awesome product that our customers are excited about and solve their real problems.