Last modified: Apr 23, 2014
An agile approach characterized by
Kent Beck, 1999
Communication
Simplicity
“What is the simplest thing that could possibly work?”
Humanity: concern for the team members
Economics: Make sure that what you are doing has value to the customer.
e.g., automated tests help me (the developer) design & code today. Also benefit maintainers down the road. Benefit customers by improving reliability and reducing costs
negative example: extensive internal documentation
Improvement
“In software development, ‘perfect’ is a verb, not an adjective.”
Diversity: skills attitudes, and perspectives
Flow: continuous flow of activities rather than discrete phases
Opportunity (rather than problems)
(Beck, Extreme Programming Explained, Figure 3)
Primary Practices
Team must span the required skill set for the project
“An interested observer should be able to walk into the team space and get an idea of how the project is going in fifteen seconds.”
“Work only as many hours as you can be productive”
“and only as many hours as you can sustain”
Write all production programs with two people sitting at one machine.
Pairs…
Thinking an be done alone, but not coding
“the word “requirement” is just plain wrong. Out of one thousand pages of ‘requirements’, if you deploy a system with the right 20% or 10% or even 5%, you will likely realize all of the business benefit envisioned for the whole system. So what were the other 80%? Not ‘requirements’; they weren’t really mandatory or obligatory.”
Start week by writing automated tests for the stories
Rest of week is implementation and debugging
At end of week, software is deployable with new functionality
At the start of a quarter, reflection and planning
Reflection
Automated build should be build and run tests in tem minutes
Anything longer should be done less frequently.
“A build that takes longer than ten minutes will be used much less often, missing the opportunity for feedback. A shorter build doesn’t give you time to drink your coffee.”
Integrate and test changes every couple of hours
“Team programming isn’t a divide and conquer problem. It’s a divide, conquer, and integrate problem”
Integration should produce the complete product
Write a failing test before changing any code.
Addresses:
Create conditions where changes in design do not have exaggerated costs (a la Boehm)
Adapt the design to changes in (or discovery of) requirements