Four plant shapes, one engine. Drag any station's capacity and watch that shape's characteristic pathology emerge on its own.
VATI analysis sorts a plant by the shape of its material flow, not by what it makes. A V flow diverges: one raw material, many end products. An A flow converges: many parts, one end item. A T flow converges into common parts and then diverges again into many configurations. An I flow runs in a straight line. Nothing in this simulator is scripted. Every outcome falls out of three rules: convergence fires at the minimum across its legs, divergence lets the priority branch claim first, and a shared buffer is drawn down first come first served.
running self-check...One trunk operation converts raw material for both branches. After the divergence point, branch A has the priority claim on the shared buffer. Both branches carry 50 units a day of orders and the trunk makes exactly 100 a day, so on paper this plant is perfectly balanced. Watch what branch A's own capacity does to branch B's customers.
Scroll the diagram sideways to see the whole plant.
Bar is the station's capacity. The black tick marks total daily demand of 100 units. Starvation at a non-constraint is normal and cheap. Starvation at the constraint is the expensive kind.
Both branches book 50 units a day, so a single dashed order line covers both. Under the default greedy policy branch A sits exactly on that line while branch B falls away from it.
The Theory of Constraints literature calls the primary problem in V-plants robbing: the operation immediately after a diverging point takes material meant for its sibling. Once that material has been processed down one branch it cannot come back and run through the other without significant rework.
In the default run branch A claims 60 a day against 50 of orders. Those 10 units a day are the same 300 units seen from three sides: 300 robbed, 300 sitting as branch-A dead stock, 300 of branch-B orders never filled. Note what the fix does not change. The trunk converts 100 units a day under both policies.
Two legs feed one assembly. Assembly can only fire when both legs have delivered, so it moves at the rate of the slower leg no matter how fast the other one runs. Leg 1 can make 50 a day, leg 2 can make 30, assembly could do 100. Demand is 50 a day. Watch where everything leg 1 makes actually ends up.
Scroll the diagram sideways to see the whole plant.
Bar is the station's capacity. The black tick marks daily demand of 50 units. Assembly has capacity to spare and is still the station standing idle.
Under a rope the two lines lie on top of each other, because both legs are released at the drum rate.
The classic A-plant problem is synchronising the converging lines so that each one supplies the final assembly point at the right time. Assembly fires at the minimum across its legs, so a fast leg can never buy back a slow one.
Leg 1 runs at 100 percent utilisation and looks like the best performing resource on the floor while it builds 650 units nobody can assemble. Roping leg 1 to the drum rate removes 620 units of WIP and ships exactly the same 900 units. Assembly, meanwhile, sits at 30 percent utilisation and is starved every single day.
Two legs converge into a common-parts assembly, then the common parts diverge again into two configurations. The legs run at 65 against a 60 a day assembly, so this shape is carrying an A-plant problem and a V-plant problem at the same time. Config 1 draws from the shared shelf first. Supply of 60 a day exactly equals the combined order book of 30 plus 30, so every part Config 1 over-draws is a part Config 2 was entitled to.
Scroll the diagram sideways to see the whole plant.
Bar is the station's capacity. The black tick marks total daily demand of 60 units. Both legs sit above the drum, which is exactly why leg WIP runs away while the configure side is fighting over parts.
Shelf level is read at the end of each day, on the left axis. Fill rate is cumulative units shipped divided by cumulative orders, on the right axis.
A T-plant is an A-plant feeding a V-plant, so it inherits synchronisation on the converging side and robbing on the diverging side. Practitioners commonly describe it as the trickiest of the four to schedule, and this run shows why.
The theft is invisible in an averages view. The common-parts shelf never ends a day below 60 units and averages 63, which looks healthy on any inventory report, while Config 2 shipped complete on 4 days out of 30.
Careful with the two counters. 450 parts stolen is not 450 missed orders. It is 390 unfilled Config 2 orders plus 60 units of shelf drawn down over the first four days, while the buffer was still cushioning the theft.
Five stations in a straight line. Station 3 can only do 24 a day, everything else can do 40, and demand is 30 a day. There is no divergence and no convergence here, so the only real question is how much material you release into the front of the line. Push releases at station 1's capacity. Rope releases at the drum rate.
Scroll the diagram sideways to see the whole line.
Bar is the station's capacity. The black tick marks daily demand of 30 units. Every station except the drum has protective capacity, and that is not waste.
One panel per station, all five drawn on the same vertical scale, 0 to 600 units, so the spike is honest. Blue marks the drum.
In a straight line the slowest station sets the pace. Everything upstream of it piles up, everything downstream of it starves, and releasing material faster than the drum can convert it buys inventory and nothing else.
Push and Rope ship the identical 720 units. The rope's steady-state WIP settles at 120, which is exactly the critical WIP from Factory Physics: the drum rate of 24 multiplied by the 5-day raw process time. Lead time follows from Little's Law, WIP divided by throughput, and falls from 26.3 days to 5.0.
This is a deterministic teaching model, not industry data. Thirty daily ticks, integer units, no randomness anywhere, every buffer primed to its steady-state value so day 1 is already running. Each node moves material exactly one step per tick. Numbers here are simulation output from a model defined for this post, not measurements from any plant. Engine ported from the frozen dataset contract v1.0. AI transparency (EU AI Act): this simulator was built with AI assistance under human editorial control; its outputs were verified against the published R reference implementation.