Most organizations start doing agile (or Scrum or lean or …) imperfectly. Someone introduces a few practices or a manager gets a team some training, or a person starts using agile terminology. And things might improve, particularly with the use of iterations. One of the core ideas of agile methods is to have frequent delivery of valuable results. In fact, this core idea can be used to drive the improvement of an agile process. How? Here are four methods of perfecting agile by expanding the definition of done.
Let’s suppose you already understand the benefits of agile. With these benefits in mind, you would like to improve the organization’s ability to deliver working, valuable results at the end of every iteration so that you can get better at realizing those benefits. The primary way to do this is by expanding the definition of done. You can imagine this like so:
On a regular basis, the team/organization find ways to bring work done in either the preparation stage or the close stage into every iteration of the agile portion of the project. By moving the work from these “bookend” stages into the iterations, you reduce the amount of time spent in those stages and simultaneously create a more complete delivery every iteration. The “definition of done” is now expanded to contain the results or value delivered by the work that was taken out of the startup and shutdown stages of the project. By expanding the definition of done, each iteration delivers a more “complete” increment of value, and there is less work done before or after iterations in order to plan or deliver. This gradual process allows the team to get better at doing agile.
There are four methods for transferring work from the start and end of a project into the iterations of a project.Expand the Agile Team’s Skill Set
In some ways, this is the simplest and most common approach to expanding the definition of done in the agile portion of a project. By training, coaching, mentoring, re-assigning or hiring, a team’s capacity to do work is expanded and used to expand the definition of done. As a simple example, a software developer might learn to use an automated unit testing framework and therefore expand the definition of done to include some amount of unit test coverage of delivered code. In general, training, coaching and mentoring existing team members should be preferred over adding people to the team since the addition disrupts the team’s development and can increase communication overhead among team members.
Expand the Agile Team’s Authority
Sometimes, a team is not able to do part of the preparation work or close up work because they are not authorized to do so. This may be a policy, a unspoken assumption or a bureaucratic procedure. By giving the team (or some person on the team) the authority to do this work, the team can find ways to do it every iteration instead of having to work through another non-team individual. Again, a simple example here is a situation where a technical person is given permission to talk directly to an end user in order to reduce the need for up-front requirements gathering and analysis and reduce the need for end-of-project user acceptance testing. The obvious challenge to do this is the question of trust (or lack thereof).
Automate an Existing Manual Process
Automation is often given far less than its due consideration. This is primarily be cause automating a process is an investment of work in and of itself. Fortunately, it is often easy to measure the ROI or savings involved with automation. In many agile environments, heavy automation is critical and a huge enabler for very short iterations. Automated testing, automated translation, automated build processes, are all common areas of improvement. Agile teams should always be looking for opportunities to automate their own work. In this way, the automation work itself is transformed from a separate project to a responsibility of the team.
Remove Wasteful Processes
There are some parts of the project preparation work and the project close up work that are pure waste! There is no independent value to these activities, nor is there indirect value to them. An excellent example of this sort of thing is an approval process that _always_ grants approval (“rubber stamping”). One insurance organization I worked with as they were converting to an agile approach discovered that their “second stage” approvals always allowed proposed projects to proceed. Since they often incurred a 4-6 week delay for this approval process, it became obvious that they should “get rid of it”. Now, what they actually did is made it so that it became a parallel review process rather than a gated approval process; this was so that the true purpose of the activity could still be met: to help stakeholders understand the projects that were being worked upon. Here, there is no need to take this approval process and somehow work it into every iteration. An agile approach tends to increase the visibility of the work anyway, so it may be discovered later on that the review process can also be done away with.
Agile is often implemented in a limited fashion when it is first adopted by most teams and organizations. The four methods of expanding the definition of done can help a team or organization get better at doing agile and therefore reap more of the benefits of agile. These methods are simple: expand the agile team’s capacity, their authority, have them automate manual processes and remove wasteful activities from the process.
2 thoughts on “Four Methods of Perfecting Agile”
One question that comes up as a Project manager is “how do you measure completeness” with Agile? So often MS Project can’t accurately reflect how far along the development cycle has gone. I’ve attempted this several times, however it’s hard to measure and it’s difficult to truly estimate, especially in an organization that forces developers to work on several projects at once.
Thoughts? I already think that Agile only works for dedicated teams and not ones that have to share team members. Am I right?
Measuring completeness is impossible no matter what method one is using unless you are building something that will _never_ be changed in the future… which as we all know is just not the way software systems work.
That said, from a project perspective, progress is easy to measure in agile methods using velocity and a release or project burndown chart. Basically, the work that the team does and will do in the future is measured in size and value and then chunked up into Sprints (iterations/cycles). At the end of each cycle, the team delivers something potentially shippable and there is a certain amount remaining. This remaining amount can be tracked cycle by cycle to produce a burndown chart. The slope of this chart will allow you to determine the point where it will get to zero remaining work and this is your progress measurement.
Also, as for dedicated teams, you are partially correct: agile works best with dedicated teams… but that is true for any method! Dedicated teams are superior to shared team members under all circumstances when measuring for value delivered over time. I challenge you to work the numbers to see what I mean!