The concept of “done” encompasses both technical and business validation of work produced in the iteration to some previously agreed point. “Done” is an important notion because it serves to provide expectations to both the team and the product owner. Ideally, “done” means what has been produced in the iteration could be implemented immediately. This definition maximizes value to the customer as complete development is not inventoried for later implementation. However, due to technical and other constraints, it may be impractical to deliver all of the work completed in the iteration into production (though it may be possible to implement some of the completed work).
Objective of Defining “Done”
The team and product owner should reach and agreed definition of “done” as it applies to iteration work and for bundled work that will be implemented in one or more releases. If they feel it is necessary, the two parties can even formally document it.
Who should define”Done”
Team members and product owner
How It Is Done
The product owner and the team should meet prior to the start of the first iteration and collaborate (and negotiate) on what “done” should mean in terms of development and functionality within the iteration. They should strive to include in the definition completion of as much validation of each function as possible within the iteration. If the agreed definition of “done” in the iteration does not include complete testing to achieve implementation readiness, then a vision of how that work will be completed prior to increments of product being implemented should be discussed. At the core, the team and product owner should focus on minimizing technical debt that might accumulate.
It is possible that some development – either functional or non-functional – can be implemented at the end of the iteration. In such instances, the product owner and team will need to examine different definitions of “done” that might be applied in the current iteration.
Once definitions of “done” are agreed to by the product owner and the team, the team can use the definition to assist it in determining how much work out of the product backlog it can complete in the iteration.
Preferably, a “done” increment should be tested as thoroughly through the entire validation process as possible (to include unit, system, integration, user acceptance, and performance testing). Any delivery of incremental product in an iteration that does not pass all the way through the validation process must be inventoried and then processed through the remaining testing later. It is imperative that the team and product owner thoroughly discuss the desires of the product owner as to what she believes “done” should be and when she desires functionality to be delivered into production. Technical or process limitations that might impede delivery of functionality into production should be considered by both parties.
Once definitions of “done” are agreed to by the parties, the team must strive to deliver work product that meets the definition of iteration work. If the definition of “done” for iteration work does not include complete testing, the team must also consider how it will further test and deliver that functionality as a bundle in a release.