Implementing Agile (a practical guide)
Most organisations that do not use Agile methodologies for managing software development projects, I’m sure hear of the benefits of Agile and would like to enjoy the advantages. What follows is my experience of implementing Agile (from a practical perspective).
With the understanding that Agile is a Development Methodology, rather than a Project Management methodology, the interface between the development and the business is key.
The first step was to establish certain assumptions (basically in accordance with the Agile Manifesto):
1. Code can be compiled and run at any time
2. Nominated ‘Customer Champions’ (or Proxies) contribute directly to the project and make decisions on behalf of the business/users at large
3. Requirements can be prioritised and success can be achieved without every requirement captured being delivered
To achieve the first point, the technical teams adopted Test-Driven Development. Requirements were defined in ‘use case’ format and tools employed to automate the running of tests. Committing would perform all tests automatically and highlight any errors throughout the system, so that code ‘checked-in’ should never break the build. Tools to automate the generation of intelligent test data were used.
To achieve the second point, a Customer Champion was identified and assigned to the Project Team, providing feedback and representing the business/users.
Thirdly, the requirements were assessed to establish a core set of features that would satisfy the basic purpose of the project. My rule of thumb (using MoSCoW) was that 65-70% or lower should be ‘Must-haves’. Your judgement may consider a higher or lower proportion, depending on likelihood of change and complexity in the solution.
Since the Clients required traditional reporting (i.e. MS Project Plan) the following approach was used:
I defined the plan to describe the Sprints preferably 1 or 2 weeks duration, the pattern I used was as follows:
- Each Sprint starts with a Sprint Start session where the backlog is reviewed and work items agreed.
- Each day a Scrum meeting is scheduled to monitor progress of the sprint and to resolve any obstacles.
- Each Sprint ends with a Sprint Demo session, where the team reviews the achievements with a demonstration of the new features.
- Define a Stage Review period between groups of Sprints in order to perform any necessary optimisation/refactoring and business/project reviews.
- The Customer Champion may approve the build for deployment to a ‘User Test’ environment at the end of each Sprint. They would then manage any critical feedback and update the Project Backlog accordingly.
I implemented three Stage Reviews, so that the project should have all the ‘must-haves’ completed for the second Stage Review and the third stage becomes implementation of lower priority requirements or possibly outstanding rework of items previously complete (due to recent changes in the business).
Incidentally, the Sprint construct also works for non-technical deliverables (i.e. documentation).
The Project Plan does not describe the work to be done (therein lies the flexibility) it describes the process, and other tools should be used to manage the work items, therefore the plan should remain constant and it is convenient to establish a ‘template’, that can be reused for projects of varying scale.
We used 37signals ‘Tada List’ to manage the Backlog and development activity during the Sprint. The team established items for the current Sprint and maintained work status through the Scrum.
Note: For the benefit of those unfamiliar, ‘Use Case’ is a way of expressing low-level requirements in the form:
“As an X will be able to Y in order to Z”
For example:
- As a “logged-out user” I will be able to “enter correct username and password” in order to “change to a logged-in state“
- As a “logged-out user” I will be able to “enter incorrect username or password” in order to “see a login warning message”
- As a “logged-in user” I will be able to “upload a photo” in order to “associate with my profile“
(It is usual to group these use cases into ‘features’, which form the work items in the backlog).