Manufacturers of fine chemicals and custom synthesis products run multi-stage batch campaigns across shared multi-purpose reactor pools, filter trains, and dryers. This guide shows how to model that equipment, configure chemistry-driven changeovers and per-class routings, and use optimisation to sequence campaigns on shared plant in Schantt.
This guide follows a fictional composite company built from industry research on fine chemicals / custom synthesis; all names, parameters, and figures are illustrative.
Industry context
Fine-chemical and custom-synthesis plants operate as multi-purpose batch facilities, producing intermediates, advanced intermediates, and custom molecules for pharmaceutical, agrochemical, and specialty end-markets. Campaign sizes range from a few hundred to several thousand kilograms, and a single plant may hold forty or more active products spanning several product classes — acid chlorides, amines, Grignard reagents, and others — each with distinct chemistry that imposes different processing conditions, hold-time sensitivities, and cleaning requirements between campaigns.
The scheduling environment is defined by shared equipment. Ten or more reactors of varied materials (glass-lined, stainless steel, Hastelloy) serve a smaller number of downstream work-up machines — quench vessels, filter-dryers, centrifuges, distillation columns, and dryers — creating a classic bottleneck at the isolation and purification stages. Reaction cycles span 8–28 hours depending on chemistry and vessel size, while work-up steps (quench, filtration, distillation) run 1–12 hours. Changeovers between chemically incompatible campaigns demand thorough cleaning-in-place cycles that run from 30 minutes for a same-class rinse to four hours for a full CIP and bake between incompatible chemistries. Campaign durations are driven by both processing time and the cumulative cleaning overhead the sequence imposes.
Plants operate a single day shift (08:00–18:00, Monday to Friday), so every hour of processing and cleaning must fit into a ten-hour working window. A twelve-hour reaction started at 08:00 finishes at 20:00 — two hours after shift end — and the batch holds overnight before the next step can begin. This calendar constraint amplifies the impact of both long reaction cycles and extended cleaning sequences, making sequence-dependent changeover optimisation especially valuable.
Production is driven by customer orders for specific molecules, often with short lead times, and rush orders arrive one to three times per month. The planning team sequences campaigns to maximise reactor utilisation while keeping downstream work-up stages fed — a balancing act that spreadsheets struggle to maintain when orders or equipment availability change. Inter-stage transfers take 45–60 minutes and include in-process control sampling that the schedule must respect. With roughly 10–15 concurrent active campaigns in the pipeline at any time, the combinatorial complexity of vessel assignment, changeover optimisation, and work-up queue management quickly exceeds what manual methods can handle efficiently.
Meridian Custom Synthesis runs ~85 people at a 4,000 m² facility, making 3 product classes across 6 production stages, scheduled by a 3-person planning team.
Process overview
flowchart LR
R["Reaction<br/>(BATCH)"] --> Q["Quench & extraction<br/>(BATCH)"]
Q --> F["Filtration / centrifugation<br/>(BATCH)"]
F --> D["Distillation / purification<br/>(BATCH)"]
D --> DR["Drying<br/>(BATCH)"]
DR --> P["Packaging<br/>(FLOW)"]
Q -.-> D
D -.-> P
Italic caption: The six-stage production flow at a fine-chemical and custom-synthesis plant. Reaction through Packaging, with per-class routing allowing some product classes to skip Filtration and Drying.
Skip routing. Acid chlorides bypass Filtration and Drying entirely, moving Quench → Distillation → Packaging. Grignard products also skip Drying, flowing Quench → Filtration → Distillation → Packaging. Only Amines visit all six stages.
Scheduling challenges and how Schantt handles them
This guide assumes a customer-order-driven scenario: campaign start dates and priorities are set by confirmed orders and rush requests, not by a level-loaded forecast. If your plant runs a make-to-stock or hybrid model, the same modelling approach applies — the demand driver changes, but the equipment model, routings, and optimisation logic remain the same.
Schantt's scheduling algorithm minimises total production time by exploring both job sequence and machine assignment across the shared plant. It schedules forward from a start date; this guide assumes a practical horizon of 4–8 weeks. The algorithm offers two modes: Auto mode rebuilds the full optimised schedule from scratch, exploring both job order and machine assignments; Semi-Auto mode preserves the planner's job sequence while optimising machine assignments around it. Both modes respect all configured changeovers, transfer times, calendars, and downtimes.
What Schantt handles well
- Multi-stage batch campaign flow — model each production step (reaction, quench, filtration, distillation, drying, packaging) as an ordered stage; campaigns advance step by step through the defined route.
- Campaign-level vessel contention resolution — Schantt assigns campaigns across the shared reactor pool, filter trains, and dryers, resolving daily competition for equipment automatically.
- Chemistry-driven directional changeovers — set per-pair cleaning durations so the optimiser favours sequences with lower cleaning time; the chemistry knowledge stays with the planner.
- Per-class routing with stage skipping — each product class specifies exactly its required stages, so campaigns only visit the machines they need and skip stages that do not apply.
- Work-up bottleneck visibility — filters, centrifuges, and dryers modelled as parallel batch stages with material-wait tracking, revealing hidden downstream queues that spreadsheets miss.
- Rapid schedule regeneration for rush orders — Auto mode rebuilds the optimised schedule with new jobs in a single run; Semi-Auto mode preserves a fixed sequence while optimising machine assignment around an inserted rush job.
How Schantt handles each challenge
1. Shared multi-purpose vessel contention.
- Ten reactors serve three product classes, each with different batch sizes and cycle durations. Every campaign competes for the same pool of glass-lined, stainless-steel, and Hastelloy vessels. In a spreadsheet, the planner reserves reactors manually, colour-coding cells to avoid double-booking. The process consumes 1–2 hours per day, and manual assignment extends total campaign time by 10–20% because vessels sit idle while the planner re-assigns.
- Schantt models each reactor as a machine on the Reaction stage and records which product classes each vessel can handle through the processing-time entries. When the schedule is generated, the algorithm explores every eligible vessel for each campaign — larger batches land on the bigger reactors (R-105 at 1,600 kg, R-106 at 2,400 kg) while small batches fill R-110 at 200 kg — and chooses the assignment that minimises total production time. The planner sees the final vessel allocation on the Gantt and can override any assignment manually.
2. Chemistry-driven cleaning and changeovers.
- Changeovers between incompatible chemistries take up to four hours of CIP and baking, while same-class rinses finish in 30 minutes. The sequence of campaigns directly determines total cleaning time. Without a system that accounts for directional cleaning durations, the planner estimates changeover time manually and sequences campaigns by experience. Unoptimised sequences add roughly 90 minutes of avoidable cleaning per changeover, accumulating to 4–6 hours of lost productive time per week.
- Schantt captures changeover time as a directional, per-machine matrix — from acid chlorides to amines may take 180 minutes on a given reactor while the reverse takes 120 minutes. The algorithm folds each changeover into the schedule's total production time, so sequences that cluster compatible campaigns score better. The changeover appears on the Gantt as its own labelled segment before the processing bar. The planner enters the durations based on established cleaning procedures; Schantt does not derive them from chemistry rules or validate their adequacy. Where a shared CIP skid serves multiple reactors, the planner staggers cleaning windows and reviews the Gantt for overlap manually.
3. Work-up train bottlenecks.
- Four filtration machines, three distillation columns, and four dryers serve ten reactors at approximately a 1:2.5 work-up-to-reactor ratio. When multiple campaigns finish reaction close together, the work-up stages queue, and material waits. Spreadsheets do not model downstream queues at all. When a filtration or drying step is ready but the machine is occupied, the batch waits — often 2–6 hours per campaign day — without any visibility in the planning tool that a queue is forming.
- Schantt models filtration, distillation, and drying as parallel-machine batch stages with inter-stage transfer times. When a downstream machine is busy, the simulation inserts a material-wait pause on the operation's row, and the planner sees it as a labelled segment on the Gantt. This makes the queue visible and lets the planner adjust sequence or shift patterns to relieve the bottleneck. Partial transfer on the Reaction→Quench handoff lets the downstream stage begin on the first usable portion while the reactor is still running, reducing idle time.
4. Rush-order disruption.
- One to three rush orders arrive per month. Each one forces the planning team to manually reassign vessels and reshuffle campaigns, taking 4–8 hours of planner time. The cumulative effect is 2–4 working weeks lost to re-scheduling per year.
- In Auto mode, Schantt rebuilds the full optimised schedule including the new rush order in a single run, exploring revised sequences and machine assignments across the whole plant. In Semi-Auto mode, the planner inserts the rush job at a chosen position and the algorithm optimises only the machine assignments around the fixed sequence — useful when external constraints (raw material availability, customer window) dictate the order and the planner wants to preserve the existing campaign queue. The planner reviews the updated Gantt, checks that each batch's downstream start falls inside any viable processing window for hold-time-sensitive products (the planner verifies this on the Gantt; the system does not enforce maximum windows automatically), and publishes the revised plan. What took a day of manual rework now completes in minutes.
What to model in Schantt
Before you begin entering data, take stock of the physical plant. Each stage maps to a distinct processing step, each machine to a physical vessel or line on the floor, and each product class to a group of chemistries that share the same route. The five entity types below define the full production environment as top-level objects in Schantt:
| Entity | Count | Notes |
|---|---|---|
| Stages | 6 | Reaction (BATCH) → Quench & extraction (BATCH) → Filtration / centrifugation (BATCH) → Distillation / purification (BATCH) → Drying (BATCH) → Packaging (FLOW) |
| Machines | 26 | 10 reactors, 3 quench vessels, 4 filtration machines, 3 distillation columns, 4 dryers, 2 packaging lines |
| Product Classes | 3 | Acid chlorides, Amines, Grignard / organometallic — with divergent per-class routings |
| Products | 3 | One representative product per class |
| Calendars | 1 | Monday–Friday 08:00–18:00 single day shift |
Step-by-step setup
1. Create the stages in production order. Add six stages: Reaction, Quench & extraction, Filtration / centrifugation, Distillation / purification, Drying, and Packaging. Set Reaction through Drying as BATCH and Packaging as FLOW. On each stage's detail page, enter the transfer times between consecutive stages — 45 minutes from Reaction to Quench, 60 minutes from Quench to Filtration, 45 minutes from Filtration to Distillation, 60 minutes from Distillation to Drying, and 60 minutes from Drying to Packaging. For the skip routes, add bridging transfer times: 50 minutes from Quench directly to Distillation (for Acid chlorides, which skip Filtration), and 60 minutes from Distillation directly to Packaging (for Acid chlorides and Grignard, which skip Drying).
2. Add the machines to each stage. Assign each machine to its stage:
- Reaction: 10 reactors — R-101 through R-110
- Quench & extraction: 3 vessels — Q-201 through Q-203
- Filtration / centrifugation: 4 machines — F-301 through F-304
- Distillation / purification: 3 columns — D-401 through D-403
- Drying: 4 dryers — DR-501 through DR-504
- Packaging: 2 lines — P-601, P-602
3. Define product classes and per-class routing. Create three product classes: Acid chlorides, Amines, and Grignard / organometallic. On each class's detail page, define the routing — which stages the class visits, in order. Enable partial transfer on the Reaction→Quench handoff for all three classes, which lets the downstream quench stage begin processing the first 300–500 kg before the reactor batch fully completes:
- Acid chlorides: Reaction → Quench → Distillation → Packaging (skips Filtration and Drying); partial-transfer quantity 300 kg. Acid chlorides are typically isolated by direct distillation from the quench phase, so filtration is unnecessary.
- Amines: Reaction → Quench → Filtration → Distillation → Drying → Packaging (all six stages); partial-transfer quantity 500 kg. This is the longest route, reflecting amine salts that require solids isolation, purification, and drying.
- Grignard: Reaction → Quench → Filtration → Distillation → Packaging (skips Drying); partial-transfer quantity 300 kg. Grignard solutions remain in solvent through isolation, so the drying step is bypassed.
4. Add one product per class. Create a representative product for each class — for example, 4-Chlorobenzoyl chloride (CBC) for Acid chlorides, N-Benzylmethylamine (NBMA) for Amines, and Cyclopropylmagnesium bromide solution (CPMB, 1 M in THF) for Grignard. Each product inherits its class routing automatically.
5. Set machine capacity and changeovers. On each machine's detail page, enter the batch-cycle parameters for every product class the machine can process. For batch stages (Reaction through Drying), enter the cycle duration in minutes and the batch size in kilograms. For Packaging (FLOW), enter the throughput rate in kilograms per hour.
- Reaction machines: enter durations per (product class, machine) pair — for example, R-101 runs acid chlorides at 720 minutes and 400 kg, amines at 1,080 minutes and 400 kg, and Grignard at 480 minutes and 200 kg (R-110). Larger vessels like R-106 handle 2,400 kg batches. Machines that cannot process a particular class simply lack an entry for that class — this is how equipment eligibility is encoded.
- Quench, Filtration, Distillation, Drying machines: enter parameters for the product classes each machine serves, matching from the class's routing.
- Packaging lines: P-601 runs at 400 kg/h, P-602 at 300 kg/h, both serving all three classes.
- Changeovers on Reaction machines: enter directional cleaning durations as a matrix — 30 minutes for same-class rinses, 120–180 minutes between related chemistries, and up to 240 minutes between incompatible classes (e.g., Grignard to Acid chlorides). At minimum, configure the cross-class pairs. Include changeover entries for Quench, Filtration, Distillation, and Packaging machines where product-class transitions occur.
6. Configure calendars, exceptions, and downtimes (optional). Create one calendar for the standard single day shift (Monday–Friday 08:00–18:00), which approximates crew capacity. Then add calendar exceptions for non-working days — New Year's Day, International Workers' Day, Christmas Day, and a half-day on Christmas Eve. Add machine downtimes for scheduled maintenance events such as the year-end plant shutdown (plant-wide, 26–31 December), the reactor R-104 re-glassing shutdown (March 15 – April 4), and the P-601 drum-filler calibration (a single day in June).
For step-by-step instructions on configuring each of these in Schantt, see the Schantt documentation.
Common mistakes
1. Using one blanket changeover duration for all pairs. A single changeover value applied to every sequence ignores the real spread — 30 minutes for a same-class rinse versus 240 minutes between incompatible chemistries. The optimiser cannot favour compatible sequences, so total cleaning time stays higher than necessary.
Fix: Enter directional per-pair changeover times on each machine that handles multiple product classes. At minimum, define every cross-class pair, even if some directions share the same duration.
2. Defining one product class that covers divergent routes. A single class cannot split into two different stage paths. If acid chlorides, amines, and Grignard all share one class, every product would be routed through all six stages — or through a static subset that fits none of them correctly.
Fix: Create separate product classes for each distinct routing pattern. The dataset carries three; add more if your plant runs additional routing patterns beyond those.
3. Not encoding equipment eligibility restrictions. Every machine that runs a given product class needs processing-time entries for that class. Leaving eligibility implicit — assuming any reactor can handle any chemistry — causes the algorithm to assign campaigns to unsuitable vessels. In fine chemicals, material compatibility is critical: Hastelloy vessels handle corrosive acid chlorides, while glass-lined reactors handle amines but may not suit certain Grignard reagents at scale.
Fix: On each machine's detail page, enter batch-cycle parameters only for the product classes that machine can actually process. A machine with no entries for a class will never receive work from that class, so eligibility is encoded by presence of processing-time data rather than by a separate flag.
4. Modelling fewer machines than exist on the floor. If the plant has four dryers but only two are modelled, the schedule understates drying capacity and the work-up stage appears more constrained than it is. Conversely, modelling a machine that is not available for scheduling (e.g., a dedicated R&D pilot vessel) inflates capacity.
Fix: Count every machine on the floor that campaigns can route through and ensure it appears in the correct stage. Exclude dedicated R&D or pilot equipment that is never available for production campaigns.
5. Omitting skip-bridge transfer times. When a product class skips stages (e.g., acid chlorides skip Filtration and Drying), the system needs a direct transfer time from the stage before the skipped span to the stage after it. Without that bridge, the schedule cannot chain the remaining stages correctly. This is a common oversight because the transfer-times list on the Stage page normally mirrors the consecutive stage flow, and the skip routes are easy to forget.
Fix: For every skip route, add a transfer time from the last visited stage before the skip directly to the first visited stage after it — Quench→Distillation for the Filtration skip, and Distillation→Packaging for the Drying skip. Both routes are used by at least one product class, so both bridges are required.
What a good schedule looks like
An optimised schedule replaces a manual spreadsheet workflow with a visible, machine-assigned production plan that the planning team can regenerate in minutes.
Before (spreadsheet baseline): Planners manage vessel assignments through colour-coded spreadsheet cells, updating them by hand as campaigns start and finish. Work-up queues at filtration and drying are invisible until material arrives and finds a busy machine. Rush orders trigger 4–8 hours of manual re-assignment, and the cumulative re-scheduling burden reaches 2–4 working weeks per year. Cleaning sequences depend on planner memory rather than systematic optimisation.
After (Schantt Auto mode): The schedule assigns each campaign to an eligible vessel across the shared reactor pool, resolving contention automatically and favouring sequences that minimise cross-class cleaning time. With changeover durations entered as a directional per-machine matrix, the optimiser naturally clusters compatible campaigns and reduces the cleaning overhead that manual sequencing misses. Work-up bottlenecks appear as material-wait segments on the Gantt, giving the planner a clear picture of where the queue is forming, which stage is the constraint, and how long each batch waits before processing. Partial transfer on the Reaction→Quench handoff lets the downstream stage begin on the first usable portion before the reactor batch fully completes, compressing the overall campaign timeline by overlapping the transfer with the tail of the reaction. When a rush order arrives, the planner adds the new job and regenerates the schedule in minutes — Auto mode re-optimises both sequence and assignment across all campaigns, or Semi-Auto mode preserves the planned order while reassigning vessels around the insertion. The result is a schedule that the planning team can publish, communicate to the floor, and adjust with confidence, every day, without the hidden queues and manual vessel-tracking that spreadsheets require.
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