SN-Logo NewSN-Logo NewSN-Logo NewSN-Logo New
  • Scrum Courses
  • Agile Keynotes
  • Agile Books & Tools
  • Blog
  • About
  • Contact
0

CHF0.00

✕
What is the role of a Business Analyst in Scrum?
18-11-2012
How do I do #Stoos in my company?
22-11-2012

Sample Definition of Done

Published by Peter Stevens on 19-11-2012
Categories
  • done
  • Q+A
  • scrum
Tags

Why does Scrum have a Definition of Done? Simple, everyone involved in the project needs to know and understand what Done means. Furthermore, Done should be really done, as in, ‘there is nothing stopping us from earning value with this function, except maybe the go-ahead from the Product Owner. Consider the alternative:

Project Manager: Is this function done?
Developer: Yes
Project Manager: So we can ship it?
Developer: Well, No. It needs to be tested, and I need to write some documentation, but the code works, really. I tested it… (pause) …on my machine.

What’s wrong with this exchange? To the developer and to the project manager, “done” means something rather different. To the developer in this case, done means: “I don’t have to work on this piece of code any more (unless the tester tells me something is wrong).” The project leader is looking for a statement that the code is ready to ship.

At its most basic level, a definition of Done creates a shared understanding of what it means to be finished, so everybody in the project means the same thing when they say “it’s done”. More subtly, the definition of Done is an expression of the team’s quality standards. A more rigorous definition of Done will be associated with higher quality software. Generally the team will become more productive (“have a higher velocity”) as their definition of Done becomes more stringent, because they will spend less time fixing old problems. Rework all but disappears.

So the Definition of Done should evolve as the project advances. Here is the first Definition of Done my team used when we started to develop the HappinessApp:

  1. Unit tests written and green
  2. Source code committed on server
  3. Jenkins built version and all tests green
  4. Code review completed (or pair-programmed)
  5. How-to-Demo verified before presentation to Product Owner
  6. Ok from Product Owner

For each Product Backlog Item (“story”), my team and I agreed on a workflow to show that the story has been implemented correctly. We call this “how-to-demo.” More subtly, the combination of story title and how-to-demo limits the scope of the story and prevents scope creep during the sprint!

This definition served us well until we started releasing our beta test results to customers, starting with me. I was are first customer. So we enhanced the definition of done as follows:

  1. Potentially releasable build available for download 
  2. Summary of changes updated to include newly implemented features
  3. Inactive/unimplemented features hidden or greyed out (not executable)
  4. Unit tests written and green
  5. Source code committed on server
  6. Jenkins built version and all tests green
  7. Code review completed (or pair-programmed)
  8. How to Demo verified before presentation to Product Owner
  9. Ok from Product Owner
Very quickly, we discovered that an upgrade on an actual iPhone would overwrite existing user data. This was a bad thing (especially for a diary application!), so we added another point:
  1. Upgrade verified while keeping all user data intact.
  2. Potentially releasable build available for download 
  3. Summary of changes updated to include newly implemented features
  4. Inactive/unimplemented features hidden or greyed out (not executable)
  5. Unit tests written and green
  6. Source code committed on server
  7. Jenkins built version and all tests green
  8. Code review completed (or pair-programmed)
  9. How to Demo verified before presentation to Product Owner
  10. Ok from Product Owner

This version held up pretty well through the next 8 sprints or so until we finished developing the beta version. We did experiment with two other points which were inspired by Release It, the guide to designing and deploying production-ready software:

  1. Design review -> list of how-could-this-feature-break failure cases (at least 3 unhappy paths)
  2. Identified failure cases covered in design decision or unit test

Our developers had difficulties living this one, so we have put them on hold (until something important breaks, then I, as Product Owner, will have the basis for a discussion with the team 😉

In retrospect, the Definition of Done and the engineering practices they imply have served us well. The product has been remarkably free of technical issues, so the team has achieved the proverbial “technical success.” Next step for us is to get it out there and help in become a genuine success.

The Definition of Done is important to Scrum, but there are many facets to done-ness, of which the Definition of Done only covers a few. “What do you mean it’s done? Only two little features have been implemented! Before we can call it done, all 150 features must be implemented!” I look forward to revisiting this topic in a future article, tentatively titled “The Three Faces of Done.” In the mean time, my CSM Students (for whom this article was written) can explain it do you!

[Update 29-May-14: Well, I finally wrote The Three Faces of Done. Check it out!]

Share
1
Peter Stevens
Peter Stevens

Related posts

05-02-2019

Is your agile transition building a train but ignoring the track?


Read more
31-03-2018

Scrum is simple to understand but difficult to master(?)


Read more
09-01-2018

Lowest prices for Scrum Training


Read more

1 Comment

  1. Jefferson Carpenter says:
    27-01-2020 at 16:42

    I think that's still a rather programmer-centric definition of done! Unless the product owner has given the go-ahead and the function has already left the nest, then the function is not done. It should not be "done" to one person and "not done" to another in any circumstance, including between product owner and programmer. If it is, they need to isolate and map out their difference of opinion, and use language that they can both agree on.

Learn more about Agile

  • Certified Scrum Product Owner | Face-2-Face | English | 230413-CP2
    in Zürich
    April 13, 2023 -
    April 14, 2023
    Register Now
  •  

  • Certified Scrum Master | Face-2-Face | English | May 22-23, 2023
    in Zürich
    May 22, 2023 -
    May 23, 2023
    Register Now
  •  

  • Certified Scrum Product Owner | Face-2-Face | English | Jun 15-16, 2023
    in Zürich
    June 15, 2023 -
    June 16, 2023
    Register Now
  •  

  • Certified Scrum Master | Face-2-Face | English | Jul 06-07, 2023
    in Zürich
    July 06, 2023 -
    July 07, 2023
    Register Now
  •  

High Performing Teams

  • Get Stuff Done
  • Get Right Stuff Done
  • Create Alignment
  • Leadership

Free Resources

  • Personal Agility Institute
  • Impressum
  • Terms and Conditions
  • Privacy Policy

Upcoming courses

  • Certified Scrum Product Owner | Face-2-Face | English | 230413-CP2 in Zürich
    April 13, 2023 -
    April 14, 2023
    Register Now
  • Certified Scrum Master | Face-2-Face | English | May 22-23, 2023 in Zürich
    May 22, 2023 -
    May 23, 2023
    Register Now
© 2020 Saat Network GmbH. All Rights Reserved.
    0

    CHF0.00

      ✕

      Login

      Lost your password?

      We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept All”, you consent to the use of ALL the cookies. However, you may visit "Cookie Settings" to provide a controlled consent.
      Read more about our Privacy Policy
      Cookie SettingsAccept All
      Manage consent

      Privacy Overview

      This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
      Necessary
      Always Enabled
      Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
      CookieDurationDescription
      cookielawinfo-checkbox-advertisement1 yearSet by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Advertisement" category .
      cookielawinfo-checkbox-analytics11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
      cookielawinfo-checkbox-functional11 monthsThe cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
      cookielawinfo-checkbox-necessary11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
      cookielawinfo-checkbox-others11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
      cookielawinfo-checkbox-performance11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
      viewed_cookie_policy11 monthsThe cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
      Functional
      Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
      CookieDurationDescription
      mailchimp_landing_site1 monthThe cookie is set by MailChimp to record which page the user first visited.
      Performance
      Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
      Analytics
      Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
      CookieDurationDescription
      CONSENT2 yearsYouTube sets this cookie via embedded youtube-videos and registers anonymous statistical data.
      _ga2 yearsThe _ga cookie, installed by Google Analytics, calculates visitor, session and campaign data and also keeps track of site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognize unique visitors.
      _gat_gtag_UA_42152348_11 minuteSet by Google to distinguish users.
      _gcl_au3 monthsProvided by Google Tag Manager to experiment advertisement efficiency of websites using their services.
      _gid1 dayInstalled by Google Analytics, _gid cookie stores information on how visitors use a website, while also creating an analytics report of the website's performance. Some of the data that are collected include the number of visitors, their source, and the pages they visit anonymously.
      Advertisement
      Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.
      CookieDurationDescription
      NID6 monthsNID cookie, set by Google, is used for advertising purposes; to limit the number of times the user sees an ad, to mute unwanted ads, and to measure the effectiveness of ads.
      test_cookie15 minutesThe test_cookie is set by doubleclick.net and is used to determine if the user's browser supports cookies.
      VISITOR_INFO1_LIVE5 months 27 daysA cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface.
      YSCsessionYSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages.
      yt-remote-connected-devicesneverYouTube sets this cookie to store the video preferences of the user using embedded YouTube video.
      yt-remote-device-idneverYouTube sets this cookie to store the video preferences of the user using embedded YouTube video.
      Others
      Other uncategorized cookies are those that are being analyzed and have not been classified into a category as yet.
      CookieDurationDescription
      COMPASS1 hourNo description
      cookies.jssessionNo description available.
      S1 hourNo description available.
      SAVE & ACCEPT
      Powered by CookieYes Logo