At ThoughtWorks conference, Kris Lander and Gus Power gave a talk about their agile process and practices. They share with us their experience and stress that they are not telling us how to do things but just showing us how they do things. Below is a list of their practices:
1. Sustainable throughput – follow the money and ship every iteration to production. Show financials outside bullpen. Profit vs. return, cost per unit vs. units delivered, capacity cost vs. velocity, rework completed vs. rework queues, flow. Minimize work in process, Avoid inventory, Keep it visible with $ value.
2. 1 week iteration – focus relentlessly on delivering profitable features every week: Surfaces waste, flushes out breaks in value stream, start thinking about done straight away, regulates pressure over longer periods, start on Wednesdays.
3. Automated deployment – maintain a 1-click deploy that requires no manual intervention: Automated deployment to all sites (Test, demo, CI, prod), Robust and repeatable, A/B legs; no down time, used Hudson and Gant, Used separate queue, Automated schema/data migration, Checked deployed version.
4. Iterate to get something out there – enrich the functional depth of features iteratively: Business learns what it needs, cheapest solution first.
5. Dealing with bugs – fix bugs as soon as they are discovered: No bug backlog and no tracking tool, onsite customers says what’s really a bug, within slice, interrupt pair and fix in story, outside story, write pink card with visible priority at top of board.
6. Managing technical debt – don’t get into debt. If you do, repay some of it every iteration: Team decision, confront value fetishists, blue card always visible with $ value.
7. TDD – working from outside in, drive with tests to keep code habitable, testable and maneuverable: Low cost of change, maintain options with succession, do the valuable refactoring, acceptance criteria create common language, executable acceptance tests. Use jsunit, junit, selenium, integration, load. Use different groovy testing patterns.
8. Continuous feedback – Develop stories in vertical slices to create opportunities for feedback: tester does exploratory testing, onsite customer steers feature evolution, interaction designer sees feature evolve, follow the dots to done.
9. Pair programming – work in pairs all the time using pomodoro 25 minutes time-boxing: Maintain energy levels and pace, maintain focus on the acceptance criterion and getting the slice done.
10. Collective ownership – Swap the story owner at least twice a day: no shrinking duties as pair, knowledge sharing helps create generalizing specialists, timeouts, dojos, whiteboard session.
11. Continuous integration – always stay on the trunk and check in at least every 2 hours: single code base, only running tested code, always run the build locally first.
12. Automated build – follow the money and ship every iteration to production: get value from tests, virtualization and parallelization (test constraints), drive optimization and no functional tests, RPMs.
13. Build, front and center – Keep the build status very visible using really big monitors around the bullpen: pass/fail (fun with avatars), selenium runs (multiple browsers in parallel), build stats/Hudson schedule, periodic screen clear.
14. Continuous environmenting – Team administers and support all its environments: stop team shipping crap to production, team develops expertise in how product runs, freedom to innovate in the ‘system space’ to meet business needs, monitoring and alerting with Naglos and Munin.
15. Optimize at the right time – make optimizations in the context of the whole: play scenarios through the real system using selenium, jsunit, junit, httpunit tests measuring with Jamon, view results in interactive graphs (Google charts, open flash)and compare before and after.
16. Fall over with confidence – test failover regularly with automated test: Test redundancy at every level. Automate dropping out database nodes, web nodes, and load balancer.
17. That ‘other stuff’ – The operational stuff (all the non-code computer stuff) is a team responsibility: sysadmin pairs with developers, yellow cards, test-driven, manager external dependencies as partnerships.
18. Charter a course – set out a charter that visualizes where you are trying to get to: vision and goals, futurespective success criteria, high level roadmap and activity stories.
19. Give the backlog some luvin – onsite customer constantly works the board to maximize profit: watch and react to buffer levels, just enough for 4 weeks, paris with the tester to evolve story cards from activities to tasks to tools.
20. Planning – pull in more cards with an on-demand planning game: pre-planning with onsite customer, tester and 2 developers to review acceptance criteria and wireframes and size stories to be .5 to 3 days, pomodoro planning with whole team estimating stories in real time using planning poker.
21. Showcase – stimulate the client to decide whether to fund more iterations or not: same time, same place, sponsor and onsite customer always attend, protect the showcase by managing the run-in, PR Event – Rehearse. Last owner demos story.
They wrap up by summarizing their practices. We maximize profit by shipping running tested features to production at least every week. Automation gives us mobility so we continuously invest in IT to keep it cheap. We don’t track bugs, we fix them. We manage debt so that we can keep moving fast. We are collocated because the conversations never stop. We learn what’s needed by iterating with full time onsite customer at the wheel. Our people are chilled and our team is resilient because we pair program all the time. Non functional and sysadmin work is part of our product development and not an afterthought. We maintain a rigorous test driven approach through our personal discipline. The build monitors are our focal point. If we break the build we fix it immediately, otherwise what’s the point of having it. We plan just enough when we need it. We operate all out environments including production. We make the showcase count because our client will decide whether to invest more money. Work with the right clients.
This presentation is available on InfoQ at http://www.infoq.com/presentations/turning-on-a-sixpence