Skip to main content

When Done is Too Hard

February 24, 2019

Too hard"The Development Team consists of professionals who do the work of delivering a potentially releasable Increment of "Done" product at the end of each Sprint." - The Scrum Guide

The Scrum Guide is markedly ambitious in the standard of professionalism it demands of a team. Development Team members must be self-organizing and cross-functional, to the point that they will repeatedly and sustainably create a valuable product increment -- fit for immediate release -- in no more than one calendar month. All of the design, coding, testing, and integration work for the increment must be completed in each Sprint time-box, with none of that work left undone. This cannot be dismissed as an idle gloss of how Scrum might arguably function in an idealized scenario. The Scrum Guide provides the actual specification of the Scrum Framework, all of which must be implemented in its entirety. If any element or rule is elided then the result is not Scrum.

Yet if you were to examine how Scrum is interpreted and applied in the field, you would rapidly establish that faster and looser interpretations are widespread. Sensible choices about how to implement the framework -- its roles, events, artifacts and rules -- are not always made. Instead, so-called "customizations" are often made to the Scrum specification itself, on the grounds that "pure Scrum" is inappropriate to the organizational context. The result might be described as a kind of impure Scrum, although by definition it certainly means that Scrum is not being implemented at all. More importantly though, the expected benefits of the framework are unlikely to accrue.

The problem usually boils down to this: organizational change is hard. When push comes to shove, it is all too often the Scrum Framework which is modified, and only lip service gets paid to the principles.

Scrum can be butchered in many ways and for all sorts of supposed "reasons". There is however a common denominator which typifies a broken Scrum implementation: the standard for release will not be achieved by the end of a Sprint. In other words, the Definition of Done will be inadequate or inadequately observed. There can be many underlying causes. In some situations a team might be restricted by the tooling they have, such as a weak continuous integration and deployment capability. No less often, they will be impeded by structural or cultural issues within the organization, such as external dependencies. A company release process might be vested in a Change Control Board, for example, which leaves a team disfranchised from production. The work the team performs is not then "Done", because it cannot be safely released into a live environment should the Product Owner choose. Additional work will be needed to complete it. The outcome is that empirical process control cannot be established. Development becomes a game of obfuscation and prevarication, of uncertainty and unmet promises, of smoke and mirrors.

Such dysfunction is not only endemic, it has set expectations across the industry as to how Scrum is meant to be implemented. Definitions of Done that are of less than release standard have become, more or less, "industry normal". Scrum professionals with a clear understanding of what "Done" genuinely means are widely assumed to be unreasonable nit-pickers, or disconcertingly naive about organizational reality, or simply in error. Yet any deficit in the standard needed to deploy an increment into production, by the end of a Sprint, really does mean that Scrum is not being implemented. Empiricism is lacking: the team can't see how each increment performs in reality. It isn't possible to test and prove even the smallest hypothesis, nor to inspect and adapt the product by means of validated learning.

The Scrum Guide tells us that transparency, inspection, and adaptation are the three pillars upon which Scrum stands. Of these three, transparency can arguably be said to come first. If a situation is not clear then it can hardly be inspected, and no sensible adaptation will be possible. Hence the first thing to do with a broken Scrum implementation -- such as a deficit for release -- is to make the problem clear to all. It must be clear to the teams doing the work, the stakeholders who will be impacted, and the executives who are accountable for corporate reputation.

Bear in mind that a Development Team has the right to refuse to do any work, if they cannot commit to its completion by the end of the Sprint. No-one can force them to take on technical debt, for example. Remember also that the Scrum values are commitment, focus, respect, openness, and courage. They may need the courage to assert "We are not yet a Scrum Team, we will not pretend we are until the deficit for release we have highlighted is closed, and we will limit any commitments we are prepared to make accordingly".

In practice of course, few teams consider themselves in a position to be so exacting and forthright in their transparency. Hence they proceed on "best efforts" instead, using a Definition of Done which is inadequate or poorly observed, and for which they incur a deficit for release. Nevertheless, it will still be important to put transparency over the matter, even if it cannot be readily solved. They might, perhaps, consider enumerating the "deficit" within their Definition of Done. However they approach the issue, team members must make it clear that Scrum isn't yet being implemented...and that the gap, and its consequences, are understood.

EXAMPLE DEFINITION OF DONE

Remember that a Definition of Done properly applies to an increment.

1. Environments are prepared for release
First check that no unintegrated work in progress has been left in any development or staging environment. Next, check that the continuous integration framework is verified and working, including regression tests and automated code reviews. The build engine ought to be configured to schedule a build on check-in. It may also trigger hourly or nightly builds. Also, check that all of the test data used to validate the features in the release has itself been validated .

2. Handover to support is complete (Note: This may be elided in a DevOps context or where the Dev Team will follow the product through to support)
All design models and specifications, including user stories and tests, must be accepted by support personnel who will maintain the increment henceforth. Note that they must also be satisfied that they are in competent control of the supporting environment.

3. Review Ready
Part of the work in a Sprint includes preparing for the review. Sprint metrics ought to be available, including burn-down or burn-up charts. Any user stories which have not been completed ought to be re-estimated and returned to the Product Backlog.

4. Code Complete

  • Any and all “To Do” annotations must have been resolved, and the source code has been commented to the satisfaction of the Development Team. Source code should have been refactored to make it understandable, maintainable and better able to support future change. Note that the Red-Green-Refactor pattern found in Test Driven Development is helpful here.
  • Unit test cases must have been designed for all of the features in development, and allow requirements to be traced to the code implementation such as by clear feature-relevant naming conventions. The degree of Code coverage should be known, and should meet or exceed the standard required. The unit test cases should have been executed and the increment proven to work as expected.
  • Peer reviews ought to be done. (Note: If pair programming is used, a separate peer review session might not be required). Source code is checked into the configuration management system with appropriate, peer-reviewed comments added. The source code should have been merged with the main branch and the automatic deployment into elevated environments should be verified.

5. Test Complete
Functional testing should be done. This includes both automated testing and manual exploratory testing, and a test report should have been generated. All outstanding defects (or incidents such as build issues) should be elicited and resolved, or accepted by the team as not being contra-indicative to release. Regression testing has been completed, and the functionality provided in previous iterations has been shown to still work.

DEFICIT FOR RELEASE

"Done" criteria which are needed to effect a release, but which cannot yet be achieved by the team, constitute a deficit. They should be enumerated here (e.g. by moving them out of the Definition of Done). A deficit implies that Scrum is not yet being implemented, and that there is likely to be technical debt.

6. Performance, security, and user acceptance testing must have been done, and the product should be shown to work on all required platforms.

7. Release authorization must be obtained.

 


What did you think about this post?

Comments (4)


Thomas Owens
10:37 pm February 24, 2019

This seems good in theory, but poor in practice. In some environments, there's a big difference between "potentially releasable" and "fit for release". A potentially releasable increment is one that the development team is asserting is ready for release. However, fit for release means that everything is done and release is a viable and valid choice.

I'm mainly referring to user acceptance testing (UAT) or independent verification and validation (IV&V). The keywords being "user" and "independent". The ability of users or clients to perform acceptance testing or an independent verification and validation group being able to execute their verification and validation on the Sprint cadence is beyond the control of a Scrum Team. This could be schedule-based or it could be financially driven (such as when the IV&V is outsourced).

I believe that the Definition of Done needs to align with the Scrum Team's value stream, and "Done" may very well be "ready for UAT" or "ready for IV&V". However, I do think that, in these cases, the Scrum Team should be careful to actually make sure that the work is done. These events should not find show-stopping issues, although they may result in feedback for future iterations. It's also important to recognize that UAT or IV&V may not happen every Sprint, so the entire integrated product should always be ready for UAT or ready for IV&V after every Sprint, which would mean that it is free of regressions.

So, in your examples, I would not consider the completion of UAT or release authorization needing to be obtained a deficit. They are simply part of a different value stream. I would ask that a Scrum Team is delivering a fully integrated product that is ready for UAT, IV&V, or whatever the organization's release process is (with respect to the completed Product Backlog Items from the current and previous Sprints).


Ben (Database Star)
10:52 pm March 4, 2019

Thomas - what is the need for performing UAT or IV&V?
UAT is achieved within the sprint by the development team working with the Product Owner and achieving an agreement of the user story.
IV&V is not something I've heard before, but it sounds like functional testing. This can be achieved by automated (or manual) testing of the software. This can be done within a sprint.


Steven Deneir
10:01 am March 6, 2019

Thanks for sharing Ian.

I see loads of these kinds of "tailoring". And as you mention, the expected benefits are often not achieved. Resulting in statements that "Scrum does not work" on the one hand. And on the other hand to consultants/freelancers who claim to be "Scrum Master", but are only changing some terminology and installing some (often additional) meetings they call the Scrum Events.
As one of my colleagues recently stated: the real danger to Scrum is bad Scrum.


Vagelis Nikolaou
11:04 am February 6, 2022

I haven't seen any project in my career having a huge complete set of all kinds of tests. You can hardly find good unit tests with sufficient coverage plus some integration tests. It is also likely these tests to be deprecated for some periods of time during the project/product lifecycle. The main reason clearly is cost. Everybody desire to produce more "value" with less cost and simply investing time and effort to create perfect tests is considered unacceptable or waste of time and money. We should say that this is normal given that no metrics exist to evaluate what benefits would occur if that really big investment in time and money has been accepted in advance. Shortly we rely on patterns which count mostly the obvious benefit and what we know from previous projects.. trying to improve our approaches within these boundaries.
Moreover, devops the other holy grail is mostly limited to the integration part, running some unit tests and that's all. There is unlikely to find complete automated flows in projects which would run functional tests against UI or more complicated tests in several environments (being created also automatically). The reasons again are cost, time, deadlines, culture, lack of knowledge and expertise, rapid technology evolution and so on...
Having said all these, it means that we see and inspect the reality (as described above), and we should adapt to it properly trying to add (in best case scenario) in the long term, one or more points of best practice towards the ideal scrum situation. Continuous improvement is the goal and not trying to catch somehow an ideal "end of game". From this perspective though, it will be difficult to find real scrum in practice, instead an endless effort to create something that looks like scrum. However, it is still extremely valuable to keep trying towards scrum's goals and principles.