Much has been said about Lean Manufacturing and how it’s principles align with Software Development. Lean Manufacturing is a methodology that drives towards continuous improvement through the elimination of waste. Single piece flow is a key aspect of Lean Manufacturing and is also fundamental to successful Agile and DevOps methodologies.
Single Piece Flow: Single piece flow is a state of efficient operations, where batch sizes and lot production are replaced by working on one product at a time. While not practical for operations with very low processing times and high change-over time, it is nevertheless a primary goal of Lean Manufacturing to achieve single piece flow in every operation possible.
Achieving single-piece flow necessitates the elimination of all waste. Lean identifies waste in seven categories:
- Unnecessary human motion
- Inventory, and
As a manufacturing firm reduces each of these wastes and endeavours to achieve single piece flow, other benefits follow. These include:
- Improved quality with fewer defects
- Reduced inventory
- Less space required to build product,
- Better overall manufacturing flexibility,
- Identification of future kaizen (Japanese term used by Lean practitioners to mean “improvement”) workshops
- A safer work environment and
- Improved employee morale.
What are the benefits of Single Piece Flow to software Development projects?
For software development projects, tight-knit, multi-disciplinary teams are created to enable a single piece continuous flow to take place. This single work cell (or Scrum team) applies several transformations to a single item of work-in-progress (WIP) at a time. The team does a little analysis, a little design, a little building, and a little testing in very short cycles. Because the team members are multi-talented there are no wait times and work is completed to a high standard very quickly. If defects are found, they are fixed immediately thus reducing the technical debt that builds in large scale waterfall projects over time.
One of the simplest examples of single piece flow in software development is Pair Programming. Pair Programming does not separate coders and testers. Two developers work together continuously testing and developing until the work item is completed. Good pair programming is often completely unstructured and feedback loops happen locally and immediately so there is very little “no value add” activity.
The benefits derived from this approach to software development are:
- Predictable Costs and Schedule
Each Sprint is a fixed duration making the cost predicable. The client is involved in costing, sizing and prioritizing at the beginning of each sprint which improves decision making and created greater engagement.
- Allows for change and reduces need for rework
While the team is focused on delivering an agreed-to subset of the product’s features during each sprint, there is opportunity to refine and reprioritise the product backlog. There is therefore scope for new or changed backlog items to be planned in the next iteration, providing the opportunity to introduce changes within a very short timeframe.
- Delivers value early and frequently
Allowing the client or product owner to determine the priority of features ensure the team understands what’s most important to the client’s business. Allowing them to deliver the features that provide the most business value.
- Improves quality and reduces technical debt
Breaking down the project into small manageable units allows the project team to focus on high-quality development, testing, and collaboration. By generating frequent builds and continuously testing and reviewing quality during each sprint ensures quality is improved because defects are found and fixed quickly and efficiently.