Expand description
§Lean Value Stream Metrics
Every flow metric in this crate descends from the five baseline measurements of classical Lean value stream mapping, developed at Toyota and generalized across manufacturing, operations, and service delivery long before software adopted them: lead time, process time, cycle time, percent complete and accurate (%C/A), and takt time. This module implements %C/A, rolled throughput yield, and takt time — the three that do not already have a direct home elsewhere in this crate.
§Formula
%C/A = usable units without rework / total units × 100%
Rolled throughput yield = %C/A(stage 1) × %C/A(stage 2) × ... × %C/A(stage N)
Takt time = available working time / customer demand over that period§Why it matters
%C/A measures something the flow metrics do not: how much of what a stage produces is actually usable by the next stage without being sent back. Rolled up across a multi-stage value stream (rolled throughput yield), it reveals how rework compounds invisibly across handoffs: three stages each individually running at 90% complete-and-accurate compound to roughly 73% overall — a number that looks nothing like any single stage’s own report and is usually the more honest one. Takt time reframes capacity planning around real customer demand rather than existing pace.
§Example
use software_engineering::lean_value_stream_metrics::{
percent_complete_and_accurate, rolled_throughput_yield, takt_time,
};
// A stage that produces 90 usable units out of 100: 90% C/A.
let stage_pca = percent_complete_and_accurate(90.0, 100.0).unwrap();
assert!((stage_pca - 90.0).abs() < 1e-9);
// Three stages each at 90% C/A compound to about 73% rolled throughput yield.
let rty = rolled_throughput_yield(&[0.90, 0.90, 0.90]);
assert!((rty - 0.729).abs() < 1e-9);
// 400 minutes of available working time against demand for 20 units: 20 min/unit.
let takt = takt_time(400.0, 20.0).unwrap();
assert_eq!(takt, 20.0);§Pitfalls
- Measuring %C/A only at final delivery, the chapter’s central gaming vector: a team can report a high final-stage %C/A while earlier stages quietly produce rework fixed before anyone measures it. Roll %C/A up multiplicatively across every stage instead.
- Setting takt time from current capacity instead of real customer demand defeats the purpose of the metric, which is to reveal a gap between demand and capacity.
- Reporting %C/A without pairing it against flow velocity allows a rising throughput number to hide a falling rework rate.
§Sources
- Rother, Mike, and John Shook. Learning to See: Value Stream Mapping to Create Value and Eliminate Muda. Lean Enterprise Institute, 1999.
- Ohno, Taiichi. Toyota Production System: Beyond Large-Scale Production. Productivity Press, 1988.
Topic doc: 02-08-lean-value-stream-metrics.md
Functions§
- percent_
complete_ and_ accurate - Percent complete and accurate (%C/A): the share of a stage’s output that a downstream team can use without rework.
- rolled_
throughput_ yield - Rolled throughput yield: the product of every stage’s %C/A fraction across a multi-stage value stream.
- takt_
time - Takt time: the maximum acceptable time to complete a unit to cleanly match customer demand.