Do less work to build successful products
One challenge to successful product development is to do less work. To put this in context, it’s about removing wasted effort and becoming Lean. This isn’t a new concept, but it’s harder than it sounds.
“Simplicity — the art of maximizing the amount of work not done — is essential” — Agile Principle
The idea of not doing work to avoid waste is an Agile principle, but it’s also the foundation of the Lean philosophy.
Waste is unnecessary work that either adds no value or produces too much work at the wrong time. This can create bottlenecks elsewhere and results in low efficiency and increased cost.
This article explores these ideas from a Lean point-of-view and in the context of Agile product development.
What is Lean?
Lean principles stem from a turn-around in fortune for Toyota’s troubled manufacturing process in the 1930s. It was later coined by James P. Womack and Daniel T. Jones in 1990s.
It started with a simple idea. Instead of optimising each step of a process in isolation, we instead need to consider the efficiency and throughput of the process overall.
In doing this, Toyota achieved a Just In Time manufacturing process. This required downsizing machinery and resources that produced too much work (waste), and investment towards bottlenecks that couldn’t produce enough work to keep up.
By optimising towards an overall maximum steady flow of work through a system, costs were lowered and speed-to-market improved. The same idea can be applied to product delivery for the same advantages. Agile delivery helps achieve this, but there are challenges.
Lean Delivery Challenges
A manufacturing process is different from Agile product development. In manufacturing the steps in the process are quantifiable. Every input into a step in the process results in the same level of work to produce the same output.
In Agile product delivery, the level of work required varies per story and also per discipline per story. Rather than optimising the required level of machinery for a step in a manufacturing process, we are instead considering a varying level of effort needed for humans.
This is a problem. Machinery can be tuned to work at a fixed pace. What goes in always comes out exactly as expected. Humans are more complex.
The Human Factor
When motivated, humans are driven to work through a set of tasks as quickly and efficiently as possible, barring coffee breaks. Unlike machines, they can’t be easily tuned to eliminate waste.
As humans, we are often rewarded and measured based on how quickly we can deliver quality work. This re-enforces the desire to produce more work than needed and keep moving onto more tasks.
In doing this, by our nature, we replicate the troubled Toyota plant of the 1930s. What happens is each individual behaves like a highly efficient machine and without considering the overall process.
This leads to what is referred to as a Feature Factory. Each step produces work as quickly as possible and hands over to the next. In being super efficient as individuals and working in increased isolation, much like the factory, it leads to waste in the overall system.
The consequence of waste is an unnecessary use of money and time to produce less value to the customer that could otherwise be achieved.
It’s counter-intuitive to humans, but slowing down and focusing on smaller chunks of work improves delivery of more value in less time, and with less money.
Examples of waste:
- Re-work needed upstream and frequent context switching — new work is already in progress, so focus is lost from constant juggling of work
- Incomplete work is thrown away — caused by late changes, reprioritisation, or when the budget runs out leaving unfinished work
- Large queues of incomplete work not delivered to customers — impacts the ability to get feedback early and opportunities to pivot
Causes of waste from an inexperienced Agile team:
- Individuals focused on their own tasks and not the overall process
- Break-down in collaboration and communication
- Not limiting work-in-progress
- Imbalance of resources within a team
- Stories are not self-contained or not deliverable in isolation
- Considering the bigger picture outside of the immediate story
Fixing the Factory
Agile methodologies promote rituals to facilitate collaboration to keep things Lean. It supports a more streamlined approach to delivery, but the human factor sometimes takes over and teams lose focus.
It takes team discipline and a good appreciation of the overall process and goals to be successful with Agile. Make sure teams have a basic training or at least a good introduction into the process, principles, and purpose.
One problem with inexperienced Agile teams is the traditional role structures that constrain individuals to a specialist discipline. A good Agile team is cross-functional and everyone helps out to deliver a small set of stories before starting any new work.
This means people can help with the exploration of edge-cases, validation of the story as it develops, assist with the planning of user-testing, or help with testing in general. To do this successfully there should be lots of discussions, the work-in-progress should be visible to the whole team to comment on, ask questions, test, and support. Early builds should be available leveraging Continuous Delivery and automation.
Problems arise when individuals complete a task in their specialist area and then just pick up new work without consideration to the overall process.
When using Kanban without the required cap on WIP, this can quickly get out of control as individuals become focused on picking up new tasks. This creates bottlenecks that are clearly visible on a Kanban board.
With Scrum, velocity should be measured based on story-pointing and Sprint sizes adjusted to ensure room to collaborate and deliver reliably without rework during the Sprints. Incomplete stories or extra stories started within a Sprint are an indication of things going wrong.
Monitor how long stories are in progress for in stand-ups or on a board and ensure the team focus on unblocking issues quickly.
Problems also occur when stories depend on other stories or become too granular or too general. They should have one focus and be clear on the desired value to the business or customer. They should not dictate up-front how it’s implemented, contain excessive technical detail or require detailed planning prior to starting work. Upfront planning detracts from team collaboration and ideation.
When work is started, teams should focus on the minimum effort required to complete the single unit of customer value. They shouldn’t plan for and work on the “bigger picture”. This can evolve as future stories are reached and based on changing priorities.
It may require adjustments to a design or implementation as the product develops, but each story should be self-contained and implemented to work within the context of the current product. This helps communicate the edge-cases and considerations needed across the team to deliver each story and deliver working software.
If designs consider future stories for example, then the rest of the team may not know how the product should behave without the missing pieces not covered in the immediate story they are working on.
Staying Lean means that no work is wasted if priorities change.
Agile frameworks provide rituals and processes to help prevent waste and encourage collaboration. Many teams take the bits they like and often ignore or don’t appreciate the subtleties of the parts they throw away. It’s important to understand how to deliver effectively with specific Agile frameworks and how to build and encourage cross-functional behaviour within a team.
The primary goal is to deliver customer value as efficiently as possible in small iterations. Staying Lean allows user testing and customer validation to drive prioritisation of future stories and pivot as needed without waste.
Just like the Toyota factory, the overall delivery process is benefited through team discipline and a focus on the overall process, rather than individual rockstar effort.