Key documentation features:
- all check-ins had a story reference (so we had traceability back to customer requirements and through to tests) - a process quality auditor told us this is all we needed for ISO900xx (or whatever) given our existing process
- all physical story cards had:
- a signature of a real customer (required before the story can be scheduled for work)
- a physical date stamp when completed (done to all completed stories at the end of the iteration)
- a shiny, pink heart sticker - when a story required help from MIS or the DBA (because we love them and want to draw attention to where we need outside help)
1) How do I integrate Documentation into your Agile workflow to increase efficiency and comprehension in your projects? By documentation, I'm thinking business-oriented documentation and "how-tos", not source code documentation.
I'm thinking of a company I used to work for that had a very short template document for project kick-off meetings. The customer inside our company had to complete one of these documents to initiate a project. The template covered all the things we might need to do. It didn't ask for all the answers or commit people to solutions - it was just to prompt people to think about all the things we know that might affect projects of the kind that we did. It covered things like:
- which functions of our existing code do the clients need?
- what new, custom things does the customer need?
- prompts to get the internal customer to involve all the people that might be needed to get things done - e.g. networking people, the CTO (for expenditures and policies), devs, MIS (for infrastructure changes), the DBA (for corporate reporting-type work because we mostly did our own DBAing inside the apps)
- an idea of timescales for different pieces of the project
We generally tried to do only the documentation that was specifically needed. In particular, we preferred auto-generated technical documentation such as:
- javadoc for publishing APIs
- junit-based tests for descriptions of behaviour of components
Today, I'd include BDD frameworks (e.g. JBehave, Cucumber, Concordion, Fitnesse...) that all help create "executable documents" that describe what the system does in clear, customer-level acceptance tests.
2) How do I integrate this with other tools?
We used a wiki for the bulk of documentation - because of the difficulty of versioning and sharing word documents around the world between teams. (We ran a follow-the-sun distributed XP model with three different teams sharing a codebase, building a closely related suite of products.)
We planned projects and iterations on index cards in the old-fashioned XP way, although our heads of development recorded estimates and summaries that were published for people who wanted a quick report of the current state.
Summary
- We tried to minimise the amount of documentation - by focusing on what's needed and by whom rather than writing big, weighty tomes for "general use".
- We preferred automated technical documentation because of the rate of change of our code and the cost of documentation work - which is taken out of normal dev time.
- We preferred manual, index card-based planning because it encourages more collaborative team behaviour, and because it's simpler and faster - even though the heads of dev had to write up regular summaries.
If you focus on simplicity and concreteness, it's amazing how little electronic documentation you really need - especially management documentation.