Iterative development approaches have good days : it changes the way you manage projects and most (all?) of agile “frameworks” are iterative ones. With the waterfall model, you set the features to develop and then, you estimate the time required to implement them. With iterative approaches, the paradigm is the opposite; you set the duration (an iteration) and then, you estimate what feature(s) you can develop during it : it is commonly named timeboxing.
It is highly recommended to deliver completed user stories at the end of each iteration and so, you try to estimate the “size”/”cost” of a story. Ideally, each member can estimate the cost, but to estimate correcly, are you sure that the team members have the same definition of done? Whatever the domain, “done” can lead to ambiguity…
What user stories are can help us to define what done means
According to Wikipedia, an user story is:
A user story is a software system requirement formulated as one or more sentences in the everyday or business language of the user. User stories are used with Agile software development methodologies for the specification of requirements (together with acceptance tests). Each user story is limited, so it fits on a small paper note card—usually a 3×5 inches card—to ensure that it does not grow too large. The user stories should be written by the customers for a software project and are their main instrument to influence the development of the software.
Considering this definition, a completed user story is something which has value for the customer. In a developer’s point of view, it implies that the feature is implemented and that it can be seen by the customer. It means that a first definition of done may be: it works on my machine and the customer can test the feature on it. But we know that “it works on my machine” is terrible and we want to go deeper and so, this definition becomes: it works on any machine and the customer can test the feature(acceptance test).
The iceberg is bigger than its top
The problem with this definition is that it focuses only on the visible part of the iceberg (what the customer sees):
If your team doesn’t work/rework on the “invisible” things, you will quickly have troubles and you will have to pay the technical debt soon. Wikipedia references it as:
Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite… The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt. Entire engineering organizations can be brought to a stand-still under the debt load of an unconsolidated implementation, object-oriented or otherwise.
So, whatever the feature, when someone of your team says that it’s done, your first questions may be: “Which unit tests have you written? Have you fixed any warnings from the compiler and from the static code analyzers? Are every previous automatic tests still green?”. All these points are so often ignored that, after few weeks, the software can’t evolve:
So, the definition of done might be:
it works on any machine, the customer can test the feature AND no automated tests is broken, there are new automated tests and no warnings/errors from compiler/static code analyzer.
Conclusion
When you estimate the size of an user story with your team, be sure that everybody has the same definition of done : it will avoid bad surprises. Each of us has to understand that technical debt has to be managed during the whole development.
So, does your team have the same definition? What is yours?





































