Scrum is one of the self-styled agile approaches to software development that emerged around the turn of the century. Today it is arguably the most popular of these processes due to its elegant simplicity and ease of adoption.
Invented by Jeff Sutherland and Ken Schwaber, Scrum splits a project into a number of fixed length time boxes or iterations called sprints. At the beginning of each sprint the project team meets to select a subset of items from a priortised to-do list known as the product backlog. The subset of items chosen from the product backlog are the items that provide the most business value for the customer and which the team believe they can complete by the end of the sprint. This selection process is known as Sprint Planning.
The team work uninterrupted for the whole sprint on the items they have selected. In the meantime, a person assigned the role of Product Owner for the project works with the customer to modify, refine, add to, and adjust the relative priorities of the items left on the product backlog. The aim of the Product Owner is to ensure the items of highest current business value are always at the top of the backlog, and are ready to be selected and worked on during the next sprint. In addition, the Product Owner is available to the team throughout the sprint to answer questions about the items being worked on during that sprint.
At the end of a sprint the team hold a Sprint Review meeting where they demonstrate the completed work to the Product Owner and other interested parties. Any incomplete items, or rejected items go back on the Product Backlog with relative priorities adjusted as necessary.
The process then repeats until the Product Backlog contains no more items worth developing.
Scrum derives its name from a very short, disciplined, stand-up meeting called a Scrum meeting, held every day by the project team during a sprint. Each member of the development team lists what they have done since the last Scrum meeting, what they will be working until the next Scrum meeting, and anything blocking their progress. No discussion is allowed during the Scrum meeting. All necessary follow-up discussion is held between interested parties afterwards, enabling other team members to continue working.
Scrum defines only one other meeting, a short retrospective held within the team after each Sprint Review meeting to discuss and decide on possible improvements to the way they are working during sprints.
In addition to the role of Product Owner who is ultimately responsible for the contents of the Product Backlog and Development Team member, Scrum defines only one other role, that of Scrum Master. The Scrum Master is a somewhat deceptively named, facilitation and coaching role that enables and enforces the Scrum process.
Scrum is deliberately silent on all technical and engineering aspects of the project. It requires the Development Team to organise itself to do whatever is necessary to meet its commitment to deliver the items chosen to be developed during each sprint.
There is no doubt that Scrum has proven that small teams of dedicated, skilled developers that work well together can produce high-quality software that does what is asked for.
To be honest, most people in the industry including most managers already knew that. What those managers may not have known is whether they had teams of dedicated, skilled developers that worked well together, and whether or not what those teams were being asked to produce was what was actually needed.
Scrum strips away much of the baggage of older, more formal processes and makes how development teams work much more visible. It does the same for those that supply the requirements for the software; the product owners and their sources. There are no large documents or complicated repositories of detailed business and technical requirements or designs subject to interpretation, ambiguity and omissions to hide behind. Scrum is the teeny-weeny polka-dot bikini of software development processes, leaving little left to the imagination, and inescapably revealing the state of the project to all who wish to see it.
Compared to other processes, Scrum is:
- Easy to adopt
- Provides good visibility of project status
To be successful, Scrum requires a very able and strong Product Owner or a Product Owner with good problem domain knowledge supported by a very able and strong Scrum Master.
It also requires able, experienced, and disciplined development team members because it provides:
- No guidance on technical or engineering best practice especially with respect to architecture: problem domain, technical, or physical.
- No guidance on verification best practice such as automated testing and peer review.
- No guidance on technical documentation best practice such as design, operations, and end user guides.
Coordination between multiple Scrum teams on such things as overall, shared architecture and integration work, is a challenge. While a number of solutions have been proposed, none of them are officially part of the definition of Scrum.
Andy Carmichael, Better Software Faster, 2002
Another common question that teams new to Scrum ask is what should they
do with the story points of an incomplete User Story at the end of a Sprint?. Should the team be 'credited'
with those points or not?
FDD combines key advantages of other agile approaches with model-centric techniques and
fluid team organisation. This means that FDD easily scales to much larger teams and projects than generally recommended
for other agile approaches. FDD is also characterised by an emphasis on quality throughout the process, and timely,
accurate, meaningful status reporting and progress tracking for all levels of leadership.
Domain-Driven Design comes as a bit of a surprise to those who have been taught
that agile software development and especially eXtreme Programming do away with the need for analysis and design
techniques like object modeling and notations like the Unified Modeling
Language (UML). It is actually very obvious that any software team working in a .Net language, Java, Objective-C,
C++ or any of the object-oriented dynamic languages such as Python or Ruby has an object model at the heart of their
The premise behind eXtreme Programming is that the cost of making changes to software does not need to grow
exponentially more expensive throughout a project or product development life-cycle. That the cost of change does
increase exponentially over-time is attributed to unnecessary complexity added early in the project product life-cycle;
complexity that provides the flexibility to address all the changes that might be asked for in the future.