Our teams are small, which enables us to adapt and respond quickly to change. We are co-located with our product owners. We are empowered to self-organise. Our teams include all the necessary skills to make our own decisions and take immediate action. We work in an environment where everything is visible, with information posted publicly on walls. We keep things simple and our process generates repeatable results.
Every project starts with a chartering workshop that brings all stakeholders together. Among other things, we create a shared vision for the project, a goal road-map and the criteria for success.
Every week: Every week we deliver a product increment that realises business value for our product owners and can be deployed to production. We deliver on time and on budget because we fix time and fix budget. Our product owner varies scope, if necessary. At the start of every week we plan in detail the highest business value work that we can complete within the next week. At the end of every week we learn by inspecting how we worked during the last week and we adapt to achieve improvement.
Every day we concentrate on building product, not mock-ups. We hustle because we care as much about the product as the product owner. We hold a stand-up to synchronize the day's activities. We make commitments to one another about what we'll complete that day and we hold one another accountable to those commitments. Every day we record running tested features because it's the best measure of progress. It focuses everyone's attention, provokes more meaningful feedback, and we learn more about what we're building. We also re-estimate the work remaining to deliver our commitments for the week. We track these metrics on a publicly visible burn-up chart. Everyone always knows where we're at with respect to our goals.
Every 32 minutes testers in the team collaborate with the developers. The latest software is deployed to our dedicated QA environment and exploratory testing is performed as the software evolves.
Every 20 minutes we collaborate with the product owner. Rather than having all business input up-front followed by a black hole until the final release, our product owners are continuously involved, consulted and challenged. This is a different kind of product management. It's active product ownership that directly steers the development effort.Working together we make lots of small decisions to keep moving forward. We can make these quickly. And we can reverse them quickly. If one doesn't work we can go back and change it. We try different things, fail fast and learn, and we get things done. If we need to make bigger decisions, we make them at the latest responsible moment when more information is available.
Every 8 minutes we integrate changes with the entire code base and execute 1400 automated unit tests and 340 automated acceptance tests. Effectively, this provides continuous regression testing. The number of automated tests grow as new functionality is added because we employ test-driven development. On average, we have less than 5 defects a week per product.
Every minute we pay constant attention to technical excellence with simple, effective, incremental design driven by continuous, repeatable automated testing. By programming in pairs, we perform continuous code reviews to bake quality in. We don't inspect for it afterwards. And we never compromise on quality.
Push to go live:
When we go live we click a button on the cruisecontrol boxes. Our automated build runs, executes all the tests and then automatically deploys the applications to the production environments. Automated tests are then executed against the production boxes to ensure the deployment is successful. Manual intervention is not required.
By the end of the day, developers and testers will have collaborated 16 times to perform exploratory testing, they'll have collaborated with the product owner 24 times, and completed 60 integrations, running 20,400 automated acceptance tests and 84,000 automated unit tests.