- requirements are expressed as scenarios = user stories, which are later broken down into tasks to implement
- programmers work in pairs
- test-first development (but when added new functionality we not only run new tests, but also all the previous ones)
- incremental development, the releases are small and frequent (2 weeks), regular, continuous integration
- full-time customer engagement in the development team; defining acceptance tests for the system; requirements; the user chooses the next story!
- constant refactoring of the code! => keeping it simple and easier to change
- everyone owns all the code (collective ownership)
- no long working hours
- Select user stories for the release
- Break it down into tasks
- Plan the release
- Develop (and integrate) test software
- Release software
- Evaluate system
** Example:
-> user story - what he wants to do in the system, in order
-> 3 tasks - exactly how to perform the payment.. that you have to check that the credit card is valid, or the library card did not expire
-> task description - description in detail, what are inputs (also if string? integer?), what are the outputs, and description of algorithm: take the first four digits and check at the card's issuer, check if the expiry date is bigger then today's date, everything step by step...