Agile Practices

There are many specific agile development methods.  Most promote development, teamwork, collaboration, and process adaptability throughout the life-cycle of the project.

Agile methods break tasks into small increments with minimal planning, and do not directly involve long-term planning.  Iterations are short time frames (“time-boxes”) that typically last from one to four weeks.  Each iteration involves a team working through a full software development cycle including planning, requirements analysis, design, coding, unit testing, and acceptance testing when a working product is demonstrated to stakeholders. This helps minimise overall risk, and lets the project adapt to changes quickly.  Stakeholders produce documentation as required.  An iteration may not add enough functionality to warrant a market release, but the goal is to have an available release (with minimal bugs) at the end of each iteration.  Multiple iterations may be required to release a product or new features.

Team composition in an agile project is usually cross-functional and self-organising without consideration for any existing corporate hierarchy or the corporate roles of team members.  Team members normally take responsibility for tasks that deliver the functionality that an iteration requires. They decide individually how to meet an iteration’s requirements.

Agile methods emphasise face-to-face communication over written documents when the team is all in the same location.  When a team works in different locations, they maintain daily contact through videoconferencing, voice, e-mail, etc.

Most agile teams work in a single open office, which facilitates such communication. Team size is typically small (5-9 people) to help make team communication and team collaboration easier.  Larger development efforts may be delivered by multiple teams working toward a common goal or different parts of an effort.  This may also require a coordination of priorities across teams.

No matter what development disciplines are required, each agile team will contain a customer representative.  This person is appointed by stakeholders to act on their behalf and makes a personal commitment to being available for developers to answer mid-iteration problem-domain questions. 

At the end of each iteration, stakeholders and the customer representative review progress and re-evaluate priorities with a view to optimising the return on investment and ensuring alignment with customer needs and company goals.

Most agile implementations use a routine and formal daily face-to-face communication among team members. This specifically includes the customer representative and any interested stakeholders as observers.  In a brief session, team members report to each other what they did yesterday, what they intend to do today, and what their roadblocks are.  This standing face-to-face communication prevents problems from being hidden.

Agile emphasises working software as the primary measure of progress.  This, combined with the preference for face-to-face communication, produces less written documentation than other methods.  The agile method encourages stakeholders to prioritise features with other iteration outcomes based exclusively on business value perceived at the beginning of the iteration.

The emphasis on working software as a measure of progress leads to a total transparency of the current state of the project to all stakeholders.  As the project progresses, a tally of the work completed by the team in each iteration is kept and used to derive a measure of the team’s capacity to produce features in the project.  This measure (often called the “velocity” of the team) allows for a realistic and evidence-based estimation of the actual time required to complete the remaining work of the project.  By exposing this to all stakeholders, the business is given the early opportunity to select which features to defer to later releases (thereby ensuring the best return on investment) or to alter the schedule and expected delivery date accordingly.  This transparency means that agile development projects do not generate surprises late in a project when the options to manage then are limited.

Specific tools and techniques such as continuous integration, automated testing, pair programming, test driven development, design patterns, domain-driven design, code refactoring and other techniques are often used to improve quality and enhance project agility.

NEXT: Why consider Agile Development?