Paul Ducey
DuceyWORK ← All Skills
✓ Free · MIT License Manufacturing Healthcare Service

VSM Calculator

Turn a table of process steps with cycle time, changeover, uptime, and inventory into takt time, effective cycle time, lead time, PCE, and the bottleneck. Current-state and future-state delta. Missing observations get [NEEDS GEMBA] instead of a guess.

Get the Definitions Right First

Confusing cycle time and takt time costs real money

A step can run faster than takt and the line can still miss customer demand if uptime, changeover, or another step is the constraint. The calculator compares effective cycle time (corrected for uptime and changeover) against takt, not the raw number.

Cycle Time (C/T)
stopwatch at one step → seconds per unit
The time to complete one unit at one step. A measurement from a stopwatch or system log, not an estimate, not a nameplate speed. Specific to one step, one worker, one method.
Takt Time
Available Time ÷ Customer Demand
The pace requirement set by the customer. Not a property of any machine or operator. It's how fast the customer is pulling. If demand rises, takt falls and the line has to speed up.
Lead Time
sum of all processing + all queue/wait time
Total elapsed time for one unit to travel the whole value stream, including every queue, every unit of inventory sitting in front of each step. Almost always many times longer than the sum of cycle times.
Process Cycle Efficiency
Processing Time ÷ Lead Time
The fraction of lead time where something is actually happening to the product. A PCE under 5–10% is typical and not itself a crisis. It's a target for kaizen when leadership wants shorter lead time.
Effective Cycle Time
(C/T + C/O ÷ lot size) ÷ Uptime
Cycle time with the changeover spread over the units made between changeovers, then corrected for unplanned downtime. This is the number to compare against takt, because the raw C/T flatters the step by ignoring when it's not running.
Days of Supply
Inventory Units ÷ Daily Demand
Inventory in front of a step expressed as how many days' worth of output it represents. Makes queue sizes comparable across steps with different volumes and cycle times.

Common Mistakes

The numbers that get VSMs wrong

Using raw C/T instead of effective C/T for the bottleneck call
A step that runs fast but goes down frequently has a higher effective C/T than raw. The bottleneck is the step with the longest effective cycle time once you account for uptime and changeover. Compare it with takt.
Inventory in units only, not days of supply
100 units before a step that makes 5/day is 20 days of supply. 100 units before a step that makes 500/day is 4.8 hours. Both look the same in units but are radically different in meaning.
Unconfirmed cycle times treated as facts
A cycle time from one lap, or from memory, carries different confidence than a two-week MES log. The source and sample size stay with every number in the report, or it gets [NEEDS GEMBA].
Declaring a bottleneck when two steps are within noise
If two steps' effective cycle times are close, the skill says so explicitly rather than declaring a single bottleneck the data doesn't cleanly support.

How It Works

Give it a table. Get back the map's numbers.

01
Provide demand and available time

Just two numbers the calculator can't proceed without: demand per day (or per shift) and the actual available production time net of breaks and planned maintenance.

02
Paste or describe your process steps

A CSV with step name, cycle time, changeover, lot size, uptime %, and inventory before each step. If you describe steps in prose, the skill builds the table and shows it back for confirmation before running.

03
The calculator runs

vsm_calc.py steps.csv --demand N --available-time-s N produces takt, per-step effective C/T, days of supply, totals, PCE, and the bottleneck call with the formulas spelled out.

04
Missing observations become to-do items

Any step with no observed cycle time gets [NEEDS GEMBA: time this step]. Never a guess. The closing block of the report lists exactly which steps still need a stopwatch.

05
Optional: future-state delta

Pass a second CSV with the proposed future-state values and the report adds a delta table: what changes, by how much, and what the new PCE and lead time would be.

Sample Output

What a VSM Calc report looks like

Example: Stamping Line, 4 Steps

Demand: 750 units/day · Available time: 25,200 s (7-hour shift) · Takt = 33.6 s/unit · One changeover per 750 units. Illustrative numbers, run through the shipped vsm_calc.py.

Step C/T (s) C/O (min) Uptime Eff. C/T (s) Inv. Before Days of Supply Hours of Supply
Blank 28 15 92% 31.7 420 units 0.56 days 3.9 h
Form 31 45 88% 39.3 ← bottleneck 280 units 0.37 days 2.6 h
Pierce 24 10 95% 26.1 160 units 0.21 days 1.5 h
Trim 19 8 97% 20.2 90 units 0.12 days 0.8 h
Totals 102 s processing 950 units queue 1.27 days 8.9 h
Bottleneck call

Form is the bottleneck at 39.3 s effective C/T vs. 33.6 s takt. The line is 17% over takt at this step. Cutting the 45-minute changeover to 20 minutes brings Form to 37.0 s, still 10% over takt, so Form's 88% uptime has to improve too. Note: Blank and Form cycle times come from a 14-day MES log; Pierce and Trim were observed (12 and 8 cycles). Confirm sample sizes before treating the bottleneck call as final.

Examples

Works for plants and clinics alike

🏭 Manufacturing
🏥 Healthcare

Stamping line current-state: 5 steps, VSM walk data, 2-week MES cycle time log. Changeover is in seconds and lot size is the units made between changeovers. Future-state comparison after reducing the Form changeover.

step,cycle_time_s,changeover_s,lot_size,uptime_pct,inventory_before,source
Blank,28,900,750,92,420,MES log 14 days
Form,31,2700,750,88,280,MES log 14 days
Pierce,24,600,750,95,160,Observed 12 cycles
Trim,19,480,750,97,90,Observed 8 cycles
[NEEDS GEMBA: Inspect — no data yet]

Outpatient clinic visit flow. The skill mirrors the user's vocabulary: "units" becomes "patients," "changeover" becomes "turnaround," "days of supply" becomes "patients waiting."

step,cycle_time_s,changeover_s,lot_size,uptime_pct,inventory_before,source
Check-in,180,120,1,99,8,Observed 20 visits
Vitals,240,180,1,95,5,Observed 20 visits
Provider,900,600,1,85,12,EHR log 30 days
Checkout,120,60,1,98,3,Observed 20 visits
Healthcare note

Takt in a clinic is demand-driven differently than a plant: "available time" is the clinic's scheduled hours, and "demand" is appointment slots filled. The skill flags where these differ from traditional manufacturing assumptions.

What you get

A real run on the sample data

Unedited output. The sample message at the top went to Claude Sonnet 4.6 (an earlier-generation model, so a newer one may word things differently) with this skill installed in Claude Code, which ran its calculator script, on September 29, 2026. Scroll inside the frame to read the whole reply.

VSM Calc: the full reply from a real run on the sample data, ending with what the skill did, what still needs a human, and one next step.

Open the full image

Installation

Drop it in, describe your steps

1
Why Claude Code. This skill does its arithmetic with a small Python script so no number is ever guessed, and a claude.ai chat can't run the script. Install Claude Code from code.claude.com/docs. It needs Python 3 on your computer.
2
Download and unzip vsm-calc.zip.
3
Put it where Claude Code looks. In the folder you'll work in, run mkdir -p .claude/skills and then move the unzipped vsm-calc folder into .claude/skills/.
4
Run it. Open a terminal in that folder, run claude, and say "Run the vsm-calc skill on my_export.csv." Try the sample file first, stamping-current.csv, in resources/examples/.

Related Skills

VSM leads to OEE or root cause next

Once you know which step is the bottleneck, OEE tells you how it's losing time. If a step's effective C/T is high because of recurring failures, root cause investigates why.