In the world of Scrum, XP and other forms of Agile software development, many teams use visual control systems to outline the various steps that software goes through during development. These boards are known by various names - Scrum boards, card-boards, task-boards, swim lanes, and probably a few other names that I’m not aware of at the moment. Whatever you call it and whatever agile creed you live by, the primary use of these boards is the same all around – information radiation. Anyone can look at the board at any given moment in time, and know where in the development process a given card is. If you’re doing iterations or sprints, the board also tells you where you are in that time box – if you’re ahead, behind, or on time. The far left column – the iteration backlog – will be filled with cards at the beginning of the iteration. Over the coarse of the iteration, cards will be pushed through each of the columns until they are in the done column. The goal is for every card to be “done done” by the end of the iteration, with a set of features that is now deliverable to the customer.
Visual management tools are very common in agile shops, and for good reason – they work very well. It should come as no surprise, then, that kanban software development also employs various visual management tools, including a kanban board.
On the surface, there isn’t much difference between an average task board and a kanban board. Each of these boards has various columns that represent the stages that a card needs to go through before it is considered done. The real difference in a kanban board, is not the board itself. The board is just a visual indicator, the same as any task board, and the intention is still to get the cards to the “done done” state – that is, delivered to the customer so that they can use the features from that card. The real difference is how the process is approached – by pulling value through the system.
When dealing with a kanban process and visualizing it into a kanban board, the various steps that a card goes through is often called a pipeline. A single card starts at one end of the pipe and flows through to the other end. This flow is enabled via the pull system that happens at the end of the pipe.
In the grocery store example from my previous post on pulling value, the pipeline would would likely include the store shelf, the store back room, the warehouse, the supplier and the product creator.
A Simple Software Development Pipeline
A software development pipeline works the same way as the grocery store pipeline. In this case, though, the product flowing through the pipe is likely to be a feature of the software package.
Consider the following three columns in a simple pipeline for software development: Analysis, Development and Testing. When a customer requests a given feature for a software product, they want to pull that feature out of testing so that they can start using it.
Once that feature has been moved out of Testing and the customer is ready to pull the next feature out, there isn’t anything to pull. At this point, the Testing people would then try to pull the next feature out of Development.
And the same pull happens from Analysis to Development.
In the end, we have created a pipeline for how our development process works. The work that is done flows through that pipeline based on how often the customer wants to pull features out. As one feature exits the pipeline, another feature can be added into the pipeline.
The key to all of this is, again, pulling the features through the system.
Where Do We Go From Here?
I’ve briefly shown how we can take three steps and produce a simple pipeline for work to flow through. There is more to software development than just Analysis, Development and Testing, though. We also have to consider team size and makeup, parallel work, and other constraints. In the next entry of Kanban in Software Development, we’ll flesh out a more complete pipeline and take the next steps to show how to complete our Kanban board, enabling our customers to pull features out of our development process.