The reasoning behind this is that if a feature is not valuable now, it is not worth the investment until it is valuable. Small releases - There is a short time between versions. Refactoring - The code is restructured as necessary to improve structure and performance. Refactoring is done before additional capabilities are added, not while they are being added to be sure the system is not broken during refactoring. Testing - Tests are written first and must run for design to continue.
Testing is done often.
Customers may determine tests required to determine what features work. Integration - Code is continuously integrated together. Correct working hours - Generally limited to 40 hours per week with no overtime for more than one week at a time. This is to keep programmers alert so they do not make mistakes. Customer availability - The customer is on site to answer questions or at least is readily accessible.