Critical path
The chain of steps that decides total time, and how the tool finds it.
The critical path is the chain of steps that decides total time. Shorten a step that is off the critical path and the total time is unchanged — this is why so many improvement efforts produce no measurable result.
How the tool determines it
- Enumerate every execution scenario and sort them by time.
- Take the slowest scenario.
- Within that scenario, keep only the slowest branch at each parallel block — because only that branch decides the time of the block.
branch_time = max((segment.time for segment in combo), default=0.0)
slowest = max(combo, key=lambda s: s.time) # nhánh dài nhất
merged = _Segment(
time=branch_time + tail.time, # thời gian: chỉ nhánh chậm nhất
ids=branch_ids | tail.ids, # mọi bước đã chạy
critical=slowest.critical | tail.critical, # nhưng đường găng chỉ đi qua nhánh chậm
)
Both branches run, so both are counted in the cost. But the critical path only goes through the 40-minute branch. In the interface, the 20-minute step keeps its original colour while the 40-minute step is outlined in pink.
Cut the 20-minute branch down to 5 minutes: total time is unchanged. Cut the 40-minute branch down to 25 minutes: total time drops by 15 minutes.
Where to see the critical path
- Both diagrams outline the steps on the critical path in pink and thicken the flows connecting them.
- The per-step metrics table adds a critical path label.
- The formulas tab marks the slowest scenario.
- Turn it off and on with the Highlight critical path switch if it feels cluttered.
The critical path can move
Telling it apart from “the heaviest step”
A step can take a great deal of time and still not be on the critical path (it runs in parallel with an even longer branch). Conversely, a short step that sits on the main sequential chain always belongs to the critical path. The Analysis charts tab shows both points of view at once: circle size is weight, pink outline is the critical path.