Last modified: Apr 21, 2014
A modern variant of incremental development.
Emphasis on
We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- _Responding to change> over following a plan
That is, while there is value in the items on the right, we value the items on the left more.
1) Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
2) Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
3) Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
4) Business people and developers must work together daily throughout the project.
5) Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
6) The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
7) Working software is the primary measure of progress.
8) Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
9) Continuous attention to technical excellence and good design enhances agility.
10) Simplicity – the art of maximizing the amount of work not done – is essential.
11) The best architectures, requirements, and designs emerge from self-organizing teams.
12) At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Key idea in all agile variations.
A user story is a mechanism for incremental requirements elicitation and analysis.
As a calendar owner, I want to view my schedule for the coming week.
As a visitor, I want to see when a calendar owner has free time in their schedule.
As a calendar owner, I want to receive email notication when someone accepts a proposed appointment.
As a systems administrator, I want to back up all calendars so that the data is safeguarded.
These illustrate some common patterns:
Stories can describe new functionality or improvements to existing functionality:
May be hard to define precise completion criteria.
…despite the focus on functionality and non-functional characteristics.
Stories should express a customer’s point of view, using the customer’s language.
One way to achieve this is to ask the customers to write the stories.
Often done on a relative scale.
“This story will take half again as much time as our average story.”
Definition of Done: team’s agreed-upon criteria for declaring work done (e.g., tests passed, integrated, documented, …)
“I know that you are done, but are you DONE-done?”
Automate integration build
Improve performance
Implement interfaces between subsystems
The traditional user story is customer-centric.
But sometimes there are units of work required that don’t fit the traditional definition.
source: The Agile Alliance
Contrast this with a strategy of delivering successive, complete subsystems that will not be revisited
Think of building a house by adding room after room, as opposed to pouring the whole foundation, then framing all the exterior walls, then laying all the floors, then doing all the electrical wiring, then doing all the plumbing, then…
Teams typically try for 4–10 stories per iteration
Select stories to implement in current implementation
Velocity
Rate at which functionality (user stories) completed per iteration.
Most agile approaches define a fixed number of days per iteration
Task Board
Contains stories to be completed in current iteration
Backlog: related stories not being handled this iteration
Once a pace has been established, teams can measure velocity
(Kent Beck)
Each code unit
Test-Driven Development goes beyond our previously-cited “test first, code later” rule
The four steps above are repeated, adding new, tested functionality each time.
Design is on-going
Principles include
refactoring
YAGNI
“You Ain’t Gonna Need It” - argument against early design of elaborate components for future use: “We going to need X eventually. We might was well design it now.” “YAGNI”