Definition of done

There are two kinds of software development: routine and well-understood work which can be analyzed and estimated and managed like any other work, and exploratory work where there are a lot of unknowns and it must be managed differently.

It helps to call out what “done” means for any task:

  • Research
  • Analysis
  • Design
  • Documentation
  • Development
  • Unit testing
  • Integration testing
  • Quality testing
  • User acceptance testing
  • Move to production

You could add other deliverables to this list that fit your organization.

By including this list in the task assignment, you can highlight to the development team what “done” means for that task (one or more of the items). For a normal task, possibly multiple of these would be highlighted including “move to production”. For an exploratory task, it might only be “research”, and then another task might be assigned with “analysis” or “design” highlighted, and repeat these as necessary until the topic is well-enough understood to be able to assign more routine development tasks to complete it.

This is also useful to put gates in place for a highly sensitive change so that the team knows not to move it to production (because it’s not highlighted) until a separate task is created to do the last part after sufficient testing has been completed, possibly in multiple tasks to test different aspects of the change.

Jonathan Buhacoff Avatar