I’m using lean thinking and lean concepts more these days when talking with managers and executives. And it’s proving to be more effective than talking about agile this and that. Based on my own experiences and recent conversations with Gus Power and Steve Freeman , lean concepts are definitely under-utilised in software development, even if you’re using the common agile techniques.
It’s great working with Gus because, having come from Dell, he has extensive practical knowledge and experience about lean, so I’m learning all the time. At XPDay , I went to Pascal van Cauwenberghe ’s session, The Toyota Way of Managing , to get a refresher. Here’s a combination of the hand-out information and the notes I made:
Everyone and everything works towards a common strategic vision. Is every person adding value? If not, they’re waste. Every person decides their own fate. Every person should accept responsibility for their conduct. And every person should continuously improve their skills to keep adding value.
- The right process will produce the right results.
- Create a continuous flow of work that delivers features to the market regularly. Release working software to production at least once a month.
- Establish a pull system where each step passes its result to the next step as fast as the next step can accept and process it. This helps to avoid overproduction and waste. Use index cards ( kanban ) to facilitate pull. For example, the product owner pulls features from the team a release at a time, while the team pulls user stories from the product owner. Pascal said that every 55 seconds a Toyota rolls off the production line because every 55 seconds a Toyota is sold.
- Eliminate waste ( muda ).
- Minimise inventory and work in process because it’s waste. Keep a little stock and restock frequently. Inventory is features that aren’t released yet, so release often. Work in weekly iterations to build up a release and then release every month.
- Be responsive to customer demands rather than schedules. Listen to user feedback after every release and let the product owner adapt the product backlog and steer development in response.
- Level out the load ( heijunka ), avoid overburdening people (muri) and avoid uneveness (mura) to prevent breaking flow by repeated stopping and starting. Toyota finalises its production schedule one day before the run begins. Everyone should work together at a sustainable pace to maintain flow. Each person should use energized work to maintain a balance between work and play and stay healthy and productive.
- Create a culture of stopping to fix problems and slowing down to get the quality right the first time. Every person is equally responsible for quality. If you notice a problem you have the responsibility to stop the production line. Don’t continue to produce bad products. Use intelligent tools that automatically detect problems, stop themselves ( jidoka ) and alert people. Use cruisecontrol (or something similar) to perform continuous integration , with an extreme feedback device that lets people know when there’s a problem with the build. If the build breaks, someone must take ownership and fix it immediately. No-one else can check code in until the build is restored.
- Repeatable techniques help achieve predictability and form the basis for pull and flow. They also give people time to focus on improving how they work. This leads to empowerment. Every person is responsible for improving how they work individually and collectively, every day.
- Capture accumulated learning about how you work. Use Shu-Ha-Ri as a way of thinking about how you learn a technique.
- Keep everything visible and understandable. Use simple visual indicators ( andon ) to help people understand what’s going on, and to support pull and flow. Use information radiators such as physical planning boards , index cards and big visible charts , and keep them visible at all times by locating them in public areas.
- Use only reliable, well-tested technology that supports people rather than replaces them. But also encourage people to try-out new technologies that might improve how they’re able to work together to achieve flow. Toyota says a machine is in its worst state when it arrives new in the factory. Over time they make it more reliable. Just like a new team.
- Add value to the organisation by developing your people and partners.
- Grow leaders ( sensei ) from within who thoroughly understand the work, live the philosophy and teach it to others. At Toyota, a leader is always teaching two other people to succeed them. Apparently Toyota has expanded faster than its ability to grow new leaders.
- Develop exceptional people who live the philosophy. Provide them with continuous on-the-job training. Create and then empower self-organising, cross-functional teams . Work towards shared goals and continually reinforce the culture and philosophy.
- Respect your partners and suppliers. Show that you value them by challenging and helping them to improve. To maintain flow, Toyota’s partners are required to perform at the same rates as Toyota.
- If you want to know what’s really happening, go to the source and see it for yourself ( genchi genbutsu ). Only then can you really understand the situation and add value.
- Consider many options. Make decisions by consensus and then take action immediately. Ensure everyone who might be affected is involved ( nemawashi - gently dig around the roots of a plant, in order to transplant it carefully ). A decision reached by consensus is binding because it embodies an idea that’s shared and supported by each team member.
- It’s never good enough! Be a learning organisation through reflection (hansei) and continuous improvement ( kaizen ). Hold a retrospective at the end of every iteration to reflect, learn, adapt and then improve.