This guide is for production planners, operations managers, and plant managers at fluid milk processing plants who need to move past spreadsheets and tribal knowledge. You will learn how to model raw-milk intake, separation, pasteurization, homogenization, and filling in Schantt — with per-class routing, sequence-dependent CIP changeovers, and mixed batch-and-flow pipelines — so you can build optimized schedules that respect your plant's equipment, shifts, and cleaning requirements.
This guide follows a fictional composite company built from industry research on fluid milk processing; all names, parameters, and figures are illustrative.
Industry context
Fluid milk processing turns raw farm milk into finished dairy products through a sequence of thermal and mechanical steps. Raw milk arrives at the plant by tanker, is pumped into refrigerated silos, and must be processed within a 72-hour hold window to maintain quality and regulatory compliance. A typical mid-market plant runs a pasteurization line six days a week with a double-shift production calendar while receiving milk seven days a week on a single shift — creating a buffer that must be carefully managed.
Green Valley Dairy runs 85 people at a single ~4,000 m² facility making three product classes across seven production stages, scheduled by a two-person planning team. The plant receives 150,000 litres of raw milk per day (up to 200,000 litres at peak) into two 60,000-litre silos and one 15,000-litre cream silo, giving 120,000 litres of raw storage capacity. Cold storage holds 1,500 pallet positions at 4 °C or below. A single shared CIP skid services all product-contact surfaces, and changeovers between different product classes consume 60 to 90 minutes for a full five-phase cleaning cycle, while a quick water rinse between the same product class takes only 10 to 15 minutes. The production calendar runs Monday through Saturday with a 16-hour double shift (06:00 to 22:00), while raw milk receiving runs every day of the week on a single 12-hour shift (06:00 to 18:00). All throughput and changeover values in this guide are illustrative — readers should calibrate against their own plant's CIP durations and rinse policies.
Process overview
flowchart LR
R["Raw Receiving and Storage"]
S["Separation and Standardization"]
P["Pasteurization"]
CP["Cream Pasteurization"]
H["Homogenization"]
F["Filling and Packaging"]
CF["Cream Filling"]
R -->|"All classes"| S
S -->|"Reduced-fat, Buttermilk"| P
S -->|"Cream"| CP
P -->|"Reduced-fat"| H
P -->|"Buttermilk"| F
H -->|"Reduced-fat"| F
CP -->|"Cream"| CF
Green Valley Dairy's production stages — reduced-fat milk, buttermilk, and cream each follow distinct routings through shared and dedicated equipment.
Skip-routing note. Cream skips main pasteurization, homogenization, and filling — it routes through dedicated cream pasteurization and cream filling instead. Buttermilk skips homogenization and proceeds directly from pasteurization to filling via a bridging transfer time.
Scheduling challenges and how Schantt handles them
The production schedule at a fluid milk plant like Green Valley Dairy is driven by market demand — a daily or weekly order book for each product class. (If your schedule is driven by a different input such as raw milk availability or contract minimums, the modelling approach remains the same; you will adjust the job quantities to match your constraint, and the algorithm still optimises timing around that input.) Schantt's scheduling algorithm minimizes total production time — the makespan, or overall completion window across all jobs — scheduling forward from a chosen start date. A practical planning horizon for this scenario is one week: enough to capture the full cycle of raw intake, pasteurization runs, filling, and calendar exceptions. The algorithm runs in two modes relevant to this guide. Auto mode — you provide a list of product-and-quantity jobs without specifying the order, and Schantt decides the sequence, machine assignments, and detailed timing. Semi-Auto mode — you define the production sequence and may set an earliest-start time for each job; Schantt preserves your order and optimises machine assignments and timing within the sequence.
What Schantt handles well
-
Multi-stage production flow — a route through Raw Receiving, Separation and Standardization, Pasteurization, Homogenization, and Filling, with transfer times for pumped handoffs and conveyor delays.
-
Per-class routing with stage skipping — Cream bypasses main pasteurization, homogenization, and filling via dedicated cream-processing stages; buttermilk skips homogenization on the main line. Each class follows only its required stages.
-
Mixed batch-and-flow pipelines — Raw milk silos (batch — receiving and storage as batch stages with batch capacities) feeding continuous pasteurization (flow stage with line speed), filling lines (flow stage), all in one ordered route.
-
Parallel-machine stages — Multiple filling lines as parallel machines on the Filling stage, each with its own per-class throughput so filler speeds correctly reflect the container size and product viscosity.
-
Sequence-dependent changeovers — Directional changeover-time matrices capture the difference between a quick water rinse between similar products (10–15 minutes) and a full CIP cycle between incompatible families (60–90 minutes), letting the optimizer favour lower-changeover sequences. Because a shared CIP circuit coordinates cleaning across the pasteurizer, homogenizer, and filler as one unit, the full matrix is placed on the filler (the gate machine) with minimal entries on upstream machines — see the gate-machine workaround in Step 5.
-
Shift-aware availability — Two calendars total: a Production calendar (Mon–Sat, 06:00–22:00 double shift, shared by Pasteurization and Filling) and a Receiving calendar (Mon–Sun, 06:00–18:00 single shift, assigned to the raw-milk silos), plus calendar exceptions for holidays and machine downtimes for maintenance windows.
How Schantt handles each challenge
1. Raw milk perishability and FIFO sequencing.
- Raw milk must be processed within a 72-hour hold window, and the plant's FIFO discipline means older milk is prioritised before fresher supply. This perishability deadline is a hard operational constraint that stops being feasible once milk exceeds the window.
- Schantt models earliest-start constraints per job in Semi-Auto mode, so you can set the oldest milk's first operation to begin as soon as the schedule starts, pushing it through before later arrivals. The algorithm preserves your fixed production order and assigns machines to minimise total production time. The 72-hour window itself is confirmed by manually inspecting the Gantt — the schedule orders the work, and you verify that every job's raw-milk stage completes within the hold window.
2. CIP-driven changeover optimisation.
- A shared CIP skid cleans every product-contact surface, and the cleaning time depends on what was run before. A water rinse between the same product class takes 10–15 minutes, while a full five-phase CIP between incompatible classes (such as buttermilk after reduced-fat milk) takes 60–90 minutes — and the durations are asymmetric (buttermilk to reduced-fat takes 90 minutes; reduced-fat to buttermilk takes 60). Choosing the wrong sequence can consume a full shift in cleaning alone.
- Schantt captures these as directional changeover-time matrices on the HTST pasteurizer and each filler. The algorithm folds every changeover duration into each job's start time as it evaluates candidate plans. In Auto mode it can reorder jobs to find a lower-changeover sequence; in Semi-Auto it holds your fixed order and reduces changeover time by assigning jobs to the best machine. The planner enters the durations based on their plant's CIP data — Schantt does not derive cleaning times from product attributes.
3. Pasteurizer-to-filler bounded window.
- After pasteurisation, reduced-fat milk and buttermilk pass through a 2,000-litre surge tank before reaching the filler. At 10,000 litres per hour upstream, the tank fills in roughly 12 minutes, and the safe dwell time at the tank is approximately 30 minutes — a bounded window in which the downstream filler must start.
- Schantt models this with a partial-transfer setting on the pasteurisation stage: a 2,000-litre partial transfer quantity lets the downstream stage begin as soon as the surge volume is available, without waiting for the full upstream batch. The pasteurizer-to-filler transfer time sets the minimum handoff delay, and the surge tank's limited capacity means the downstream start follows the upstream completion closely. The planner checks the Gantt to confirm the actual gap stays within the maximum safe dwell — Schantt does not enforce a hard latest-start deadline.
Surge-tank caveat. Not all plants have a refrigerated surge buffer between pasteurisation and filling. In plants without one, the pasteurizer-to-filler handoff is a true no-wait: the filler must draw immediately as the pasteuriser runs, with minimal buffer to absorb timing variation. For such plants, tighten the partial-transfer quantity and transfer time to reflect the tighter coupling, and verify the handoff gap on the Gantt more rigorously — a gap longer than a few minutes may indicate a constraint violation.
4. Shared CIP skid contention.
- One CIP skid serves the HTST pasteurizer, homogenizer, and all filler lines. When two machines need cleaning at the same time, only one can use the skid — the other waits. Contention can cascade, pushing pasteurisation and filling out of sync and delaying the entire schedule.
- Because the CIP skid is not modelled as a shared resource, the planner handles contention manually: you enter changeover durations on each machine independently, then stagger cleaning windows so no two machines request the skid simultaneously. On the Gantt, overlapping changeover bars signal a conflict, and you adjust the sequence or shift start times to resolve it. This manual approach works well for a mid-market plant with one skid and moderate changeover frequency.
5. Quality holds and crew-availability scheduling.
- After filling, product enters a mandatory 48-hour micro hold while rapid coliform tests clear it for release. This hold consumes shelf life — two days out of a 14-to-21-day window — and filler-crew availability varies when format changes require extra hands that may not be staffed.
- Schantt does not model a quality-hold release gate or labour scheduling. Instead, the planner places a fixed-duration calendar buffer after the Filling stage to account for the hold window, and removes unstaffed hours from the machine calendar for filler-crew gaps. The calendar buffer is a manual placeholder — the planner monitors the hold expiry separately. Machine calendar adjustments (non-working hours removed from availability) are Schantt's native mechanism for encoding crew gaps without a separate workforce model.
What to model in Schantt
To model Green Valley Dairy's production environment, you will create the following entities in Schantt:
| Entity | Count | Notes |
|---|---|---|
| Stage | 7 | Six flow stages, one batch stage — Raw Receiving and Storage is batch; the rest are flow |
| Machine | 10 | Silo A, Silo B, and Cream Silo on Receiving; Separator and Standardizer; HTST Pasteurizer; Cream HTST; Homogenizer; HDPE Filler and Gable-top Filler on Filling; Cream Filler |
| Product Class | 3 | Reduced-Fat Milk (full route), Cream (stage-skipping through dedicated equipment), Buttermilk (skips homogenization) |
| Product | 3 | One representative product per class — 2% Milk Gal, Heavy Cream Pt, Buttermilk Qt |
| Calendar | 2 | Production Calendar (Mon–Sat, 06:00–22:00, default) and Receiving Calendar (Mon–Sun, 06:00–18:00) |
Step-by-step setup
1. Create the seven stages in order. Create each stage in position order: Raw Receiving and Storage (batch), Separation and Standardization (flow), Pasteurization (flow), Cream Pasteurization (flow), Homogenization (flow), Filling and Packaging (flow), Cream Filling (flow). Set the production type and position for each stage. Then, on each stage's detail page, configure the transfer times between consecutive stages:
Transfer times:
- Raw Receiving and Storage → Separation and Standardization: 15 minutes
- Separation and Standardization → Pasteurization: 5 minutes
- Pasteurization → Homogenization: 5 minutes
- Homogenization → Filling and Packaging: 10 minutes
- Separation and Standardization → Cream Pasteurization: 10 minutes (bridge for cream)
- Cream Pasteurization → Cream Filling: 10 minutes
- Pasteurization → Filling and Packaging: 20 minutes (bridge for buttermilk, which skips homogenization)
The three skip-bridge entries are required — without them, buttermilk and cream would have no valid path through the stage sequence.
2. Add the ten machines to their stages. Assign each machine to its parent stage:
Raw Receiving and Storage: Silo A, Silo B, Cream Silo — all on the Receiving Calendar.
Separation and Standardization: Separator and Standardizer
Pasteurization: HTST Pasteurizer — on the Production Calendar.
Cream Pasteurization: Cream HTST — on the Production Calendar.
Homogenization: Homogenizer — on the Production Calendar.
Filling and Packaging: HDPE Filler, Gable-top Filler — on the Production Calendar.
Cream Filling: Cream Filler — on the Production Calendar.
3. Create the three product classes and define each class's routing. Create Reduced-Fat Milk, Cream, and Buttermilk. On each product class's detail page, enable the routings shown in the process-overview diagram, and set the partial-transfer legs where applicable:
Partial-transfer settings:
- Reduced-Fat Milk on Pasteurization: enable partial transfer, quantity 2,000 litres (matching the surge tank volume).
- Buttermilk on Pasteurization: enable partial transfer, quantity 2,000 litres.
All other routings leave partial transfer disabled. Cream routes through Raw Receiving, Separation, Cream Pasteurization, and Cream Filling only — it does not touch the main pasteurizer, homogenizer, or filling stages.
4. Add one product per class. Create 2% Milk Gal (Reduced-Fat Milk), Heavy Cream Pt (Cream), and Buttermilk Qt (Buttermilk). Assign each a display colour for the Gantt — for example, Reduced-Fat Milk in blue, Cream in amber, Buttermilk in purple.
5. Set capacity parameters and changeovers on each machine. On each machine's detail page, configure the per-class throughput or batch parameters, and the directional changeover-time matrix:
Per-class throughput (flow stages — litres per hour):
- Separator and Standardizer: 10,000 L/h for all three product classes.
- HTST Pasteurizer: 10,000 L/h for Reduced-Fat Milk and Buttermilk (Cream does not route here).
- Cream HTST: 3,000 L/h for Cream only.
- Homogenizer: 10,000 L/h for Reduced-Fat Milk only.
- HDPE Filler: 3,000 L/h for Reduced-Fat Milk.
- Gable-top Filler: 2,400 L/h for Buttermilk.
- Cream Filler: 2,000 L/h for Cream.
Per-class batch parameters (batch stages):
- Silo A and Silo B: 60,000-litre batch size, 480-minute cycle, for Reduced-Fat Milk, Cream, and Buttermilk.
- Cream Silo: 15,000-litre batch size, 240-minute cycle, for Cream.
Shared CIP circuit — gate-machine workaround. The pasteurizer, homogenizer, and filler share one CIP circuit — they clean as a coordinated block, not independently. Setting independent changeover times on each machine would let the algorithm mis-sequence them. The workaround: place the full directional changeover matrix only on the filling machines (the gate machines that anchor the sequence), and set equal or zero changeover entries on the pasteurizer and homogenizer so the algorithm sequences based on the filler's changeover penalty. The planner confirms alignment on the Gantt.
Directional changeover matrices — configure the full matrix on the HDPE Filler and Gable-top Filler. Set minimal entries on the HTST Pasteurizer and Homogenizer. Illustrative durations:
HDPE Filler and Gable-top Filler changeovers (full directional matrix):
- Reduced-Fat Milk → Reduced-Fat Milk: 10 minutes (same-class rinse)
- Reduced-Fat Milk → Buttermilk: 60 minutes (full CIP)
- Buttermilk → Reduced-Fat Milk: 90 minutes (full CIP, asymmetric)
- Buttermilk → Buttermilk: 10 minutes (same-class rinse)
HTST Pasteurizer changeovers (minimal — shared CIP circuit, see note above):
- Reduced-Fat Milk → Reduced-Fat Milk: 0 minutes
- Reduced-Fat Milk → Buttermilk: 0 minutes
- Buttermilk → Reduced-Fat Milk: 0 minutes
- Buttermilk → Buttermilk: 0 minutes
Homogenizer changeovers (minimal — shared CIP circuit):
- Reduced-Fat Milk → Reduced-Fat Milk: 0 minutes
Cream HTST and Cream Filler carry no changeover entries — they run a single product class. Silo A and Silo B carry light changeovers (15 minutes within class, 30 minutes cross-class). All values are illustrative — calibrate against your own plant's cleaning data.
6. Configure calendars, exceptions, and downtimes. Create the Production Calendar (Mon–Sat, 06:00–22:00) as the default, and the Receiving Calendar (Mon–Sun, 06:00–18:00) — assign the latter to Silo A, Silo B, and Cream Silo. Add three calendar exceptions as non-working days: New Year's Day (January 1), International Workers' Day (May 1), and the year-end shutdown (December 31). Add two machine downtimes: HTST mid-year maintenance (June 15, 06:00–12:00) and the factory-wide year-end shutdown (December 24–26).
For step-by-step instructions on configuring each of these in Schantt, see the Schantt documentation.
Common mistakes
1. Setting independent changeovers on pasteurizer and filler as if they clean independently. When the pasteurizer, homogenizer, and filler share one CIP circuit, a changeover on any one of them is a changeover on all of them — the whole product-contact path cleans as a block. Entering a full directional matrix on both the pasteurizer and the filler with different durations on each gives the optimizer conflicting signals: it may offset a pasteurizer changeover from the filler changeover, producing a schedule where the pasteurizer finishes cleaning before the filler starts (or vice versa), which does not reflect the real coordinated circuit. Fix: Set zero changeover entries on the pasteurizer and homogenizer (shared CIP circuit), and place the full directional matrix — with the 6:1 easy-to-hard ratio and directional asymmetry — only on the filling machines. The changeover penalty on the filler drives sequencing, and you confirm alignment on the Gantt.
2. One product class for all products. Grouping reduced-fat milk, cream, and buttermilk into a single class means all products share one routing. Cream's skip through dedicated stages and buttermilk's homogenization bypass cannot be expressed. Fix: Create one product class per divergent routing — three classes in this scenario — and define each class's distinct stage path on its detail page.
3. A single filler throughput for all container sizes. Using one throughput value on the HDPE Filler for both gallon jugs and half-pint cartons produces incorrect run times. The same machine runs at different speeds for different container sizes and product viscosities. Fix: Configure per-class throughput on each filler machine — for example, 3,000 L/h for Reduced-Fat Milk on the HDPE Filler, 2,400 L/h for Buttermilk on the Gable-top Filler — matching your actual line speeds per container and product.
4. Missing bridging transfer times for stage-skipping classes. Without a bridging transfer time from Pasteurization directly to Filling, buttermilk has no valid route when it skips Homogenization — the schedule cannot chain buttermilk's pasteurisation operation to its filling operation. Fix: Add a bridging transfer time (20 minutes in this scenario) from the stage before the skipped span to the stage after it, for every class that skips an interior stage.
5. Copying illustrated changeover values without calibration. Using the guide's example durations (10-minute rinse, 90-minute full CIP) directly in your plant without checking your own cleaning records produces schedules whose timing does not match your floor reality. Fix: Replace every illustrated duration with durations measured or estimated from your plant's CIP skid, piping configuration, and rinse policies.
What a good schedule looks like
A well-configured schedule transforms the planning week from a reactive juggling exercise into a repeatable, optimised production plan. Without Schantt, Green Valley Dairy's two-person planning team sequences jobs manually using a spreadsheet, relying on tribal knowledge to estimate changeover times and check conflicts.
Before (spreadsheet):
- Pasteurizer changeovers are guessed as a flat 45 minutes for every transition, overestimating rinse times and underestimating cross-class CIP windows — the schedule regularly overruns Friday evening into Saturday overtime.
- Cream is scheduled as a note on the same row as reduced-fat milk, and buttermilk's homogenization skip is handled by manually deleting the homogenizer row — easy to miss, producing an invalid plan.
- Filler speeds use a single average rate regardless of container, so filling runs take longer than budgeted and the downstream schedule slips.
- The shared CIP skid is not tracked — overlapping cleaning windows surface only when a machine operator calls the planner mid-week to say the pasteurizer and filler both need CIP at the same time.
After (Schantt Auto or Semi-Auto mode):
- Directional changeover matrices produce accurate time estimates — the optimizer sequences jobs to cluster same-class runs, reducing total cleaning time across the week by favouring short rinses over full CIP transitions.
- Each product class follows its correct routing automatically — cream operations appear on dedicated cream-stage rows, buttermilk operations skip homogenization without manual deletion, and every path chains correctly through bridging transfer times.
- Per-class filler throughputs reflect real line speeds — the HDPE Filler's 3,000 L/h for gallon jugs and the Gable-top Filler's 2,400 L/h for buttermilk quarts produce accurate run durations that stay within shift boundaries.
- Changeover bars on the Gantt make CIP sequences visible at a glance — the planner spots potential skid contention when two machines show overlapping cleaning blocks and adjusts the sequence before the week starts, rather than fielding calls during production.
- The 16-hour daily production window is respected automatically — operations that would extend into non-working time are clamped forward to the next shift start, and non-working periods appear as shaded overlays so the planner sees exactly why a job pauses overnight.
Ready to schedule your own facility?
Try Schantt free — no credit card required. Go from spreadsheet to optimized Gantt chart in 60 minutes.
Try Schantt Free