The kanban software development community can be traced back to Agile2007 in Washington DC. At that conference, a number of people were talking about their different approaches to development that they were using. Chris Matts was talking about "real options" and "feature injection," Arlo Belshee was talking about "naked planning," and David Anderson was talking about kanban. All three had some similarities, which inspired a group of people to go away and experiment themselves and share their experiences. The name the group chose to use as an identity was “Kanban.”
Kanban is the Japanese word for visual card, and it can have a number of interpretations with respect to software development. Firstly, it could be used to refer to the index card commonly used by agile teams. Secondly, it could be used to refer to an agile team’s task board, or story board. Finally, it could be used to refer to the whole system within which an agile team works.
In his book Toyota Production System , Taiichi Ohno says, “The two pillars of the Toyota production system are just-in-time and automation with a human touch, or autonomation. The tool used to operate the system is kanban.” With this perspective, a kanban system for software development refers to the whole system, and not simply the tool or the board. The community chose to name the systemic approach after the tool that inspired much of the thinking.
Viewing kanban as a systemic approach leads to systems thinking. Systems can be thought of as being made up of elements, which interact to meet a purpose. They are more than the sum of the parts, and the system’s purpose is crucial in determining the system’s behavior.
John Seddon, in his Vanguard Method , says that the way we think about systems usually defines the system, which then defines performance. In order to improve a system, we should change our mind-set by first understanding the purpose of the system. This allows us to define measures which help create knowledge about whether the system is meeting that purpose. Finally we can design a method to enable the system to meet that purpose.
Kanban is a way of designing a method, and generating metrics, in order to improve capability to meet a purpose. The remainder of this article discusses five aspects of a kanban system: workflow, visualization, work in process, cadence, and learning. These aspects are not practices to be followed, but leverage points that help thinking about the method used to change and improve an organizations delivery capability.
Workflow is the understanding of how business or customer value travels through the kanban system. The agile community recognized that software development is a knowledge creation activity that includes randomness and variation and the “inspect and adapt” mantra is the response that makes the impact visible such that the feedback can be used to learn and respond accordingly. We can take this further by understanding the mathematics and science behind the randomness and variation and exploiting this to our advantage.
Recognizing the workflow through an activity such as value stream mapping can give us this additional transparency, which we can use to influence our process. Value stream mapping is so called because its focus is on understanding how units of value flow through a system. For software development, this can be generalized into how units of value expand into smaller units of work, which then collapse back to deliver the original value.