Software developers are all familiar with the concept of agile development, but perhaps less well-known is the practice of Kanban, an important facet of agile and agile-like development cycles. Kanban is not a paradigm in and of itself, but a way to manage projects, tasks and team planning. With Kanban, projects are done just in time, on a rolling basis.
To better understand what Kanban is all about, let me explain the features, similarities and differences between the two software development concepts.
Agile software development is a response to the old way of creating software. In modern software development, speed, efficiency and transparency are key. Instead of focusing on comprehensive documentation, sticking to a rigid software plan, and micro-management, agile software development emphasizes embracing change, collaborating with customers, and continual improvement.
From the Manifesto for Agile Development: “We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: Individuals and interactions over processes and tools. Working software over comprehensive documentation. Customer collaboration over contract negotiation. Responding to change over following a plan.”
With agile software development, teams are self-organized. The theory is that self-organized teams are the most efficient and most effective teams. Tasks are assigned, but the chief sign of success is through the delivery of working software. The developers are in constant contact with their product managers, the production team, and the administrative team.
Agile software development calls for daily meetings, although distributed teams have tweaked this process slightly. Video conferencing and weekly reports can be a better approach, for example. These daily or weekly meetings are structured within sprints, which are usually thirty days in length. These sprints call for deliverables upon which there will be inspection, retrospective analysis, and implementation of change.
The 12 principles of Agile Software are as follows:
- The highest priority is customer satisfaction which is achieved through the continuous delivery of high-quality software
- Leverage and welcome change, even late into development
- Working software should be delivered often, every few weeks or every few months, with a preference for shorter timeframes
- Technical and non-technical people, developers and administration, should be in constant contact
- Self-motivated teams should be trusted and given the best environment possible to get their work done
- The most effective teams are self-organized
- Face-to-face interaction is the best way to communicate
- Deliverables, i.e. working software, is the most important KPI
- The pace should be consistent and maintainable throughout development
- Inspection and transparency should happen continuously
- Minimize the amount of avoidable work (and re-work)
- Throughout development, at regular intervals, reassess and reanalyze your project in order to retune your team and boost productivity
Sticking to the principles listed in the manifesto will help guide you as you create your software product. Understanding user-optimized design as well as just in time project management principles will allow you to flourish without running out of time or going over budget.
Kanban means billboard in Japanese. It was developed by Toyota in the forties as a way to manage projects on the fly, then repurposed in the early 2000’s to increase the efficiency of software development teams.
Kanban is a visual way to process project management. Humans can understand and interpret visual stimuli much more quickly than reading text. The idea behind it is transparency and visibility is best achieved through the use of visual cards. These cards are put on a board.
You’ve probably been exposed to Kanban in some way, shape, or form through project billboards. Using sticky notes on a project board to track tasks you’ve done, tasks you’ve assigned, and tasks in progress is an implementation of Kanban. Project management tools like Trello are examples of more sophisticated implementations. Lists, cards, and boards are used so you can assign team members present and future tasks as well as evaluating past ones.
Ultimately, agile software development is about responding to change and being flexible to whatever may arise without forfeiting quality. Delivering working software is the major KPI for agile software development teams. This work is arrived at by self-organized, highly-motivated teams with clear mission objectives.
Constant communication, assessment, and reorganization is necessary to complete high quality software projects. Increasing transparency, visibility, and cooperation among team members is the best way to facilitate software development.