What is agile and why should I care?
With all the buzz about agile in the software development community these days, it's easy
to get lost in the jargon and clutter. Very simply, agile practices iteratively and incrementally deliver
high quality, valuable, working software to customers. Agile practices empower software development
teams to effectively guide software development projects. Agile development embraces change in a project as
normal and to be expected. Most importantly, agile development emphasizes collaboration and feedback, both internal
and external to improve the quality and value of software as well as to provide continuous improvement
of the agile development process.
How does DTS use agile?
At DTS, we're not just agile trainers or coaches. We're an active software development team
that uses agile practices on a daily basis. Agile practices permeate every aspect of our work, from
software development to project management. We've adopted Scrum as our overarching agile project management/software
development process. However, we also incorporate elements of Extreme Programming (XP) and Test Driven
Development (TDD) into our daily practices. By using agile to guide both our project management and engineering
practices, we have been able to continuously improve the quality and value of the software we deliver to our customers.
We also use agile to continually improve our organizational culture and our development practices.
The Agile Process
The agile process is an iterative process that breaks complex work down into short iterations. Before
an iteration begins, the development team collaborates with the customer to develop a backlog of stories
that will address the needs of the customer. It's kind of like a to-do list for the project. The customer
prioritizes the list to make sure that the most valuable stories are at the top of the backlog. The development
team selects a set of stories from the backlog that they think can be completed by the end of the iteration (usually
2-4 weeks in length) and decomposes them into small tasks.
The team commits to each other to deliver the functionality that addresses the needs of the selected stories by
the close of the iteration. Then, they get to work. On a daily basis, the team meets for 15 minutes to synchronize their work in a daily meeting. They answer 3 basic questions:
- What did you work on yesterday?
- What are you working on today?
- Are there any impediments to completing your work?
At the end of the iteration, the team conducts a live demonstration for their customer of all of the
functionality they developed in the previous iteration. The customer either accepts or rejects the
functionality and discusses any issues with the development team. The team then meets apart from their
customer and reflects on the last iteration. Again, they answer three questions:
- What went well?
- What didn't go so well?
- What do we need to do to improve the way we work in the next iteration?
The customer reviews the backlog and can add, delete, or modify stories based on their current business
needs or on the results of the last iteration. This kicks off the next planning meeting and another
iteration. The team continues in this iterative fashion until the project is completed.
This is the heart of agile software development. Delivery of working software on a regular basis, customer collaboration, responding
to change, and enabling and embracing the interactions of individuals on a project team.