Simulations

Simulations is a canvas for any system you can write down as stated assumptions and run: people or things queueing through steps, a formula under uncertainty, stocks and flows over time, a cohort walking states — or a prompt set run across Theo's engines and graded. A deterministic engine runs the model thousands of times and reports where the queue forms, how busy each resource is, and how every what-if moves the numbers — with every parameter sourced, every run reproducible, and every comparison answered with a confidence interval. It is built for operations planning — staffing, capacity, bottlenecks, protocol design, underwriting, forecasting, engine selection — in healthcare, insurance, manufacturing, logistics, labs, and anywhere else a decision rests on a model.

The fastest way to startOpen Simulations from the sidebar (under Tools), pick a shape under What are you modelling? for a blank canvas that already runs, or open a starter and press Run. Each simulation is its own project: it lives in your Library, and you can share it, invite collaborators, and browse its version history like any other project.

Four ways to build a simulation

Start from a template

The hub ships nine runnable starters across domains — a textbook M/M/1 queue, a coffee shop rush, an emergency department, an insurance claims pipeline, an assembly line with a bottleneck, a support desk, warehouse picking, a hospital core lab, and a Mars-transit medical bay. Each opens with a working model whose starter numbers are flagged as estimates so you know exactly what to replace with your own data.

Build it on the canvas

Pick a block from the rail on the left — with a block selected, one click chains the next one after it; or drag it onto the canvas, or onto an arrow to slot it in between. Pull an arrow from any block and let go on empty canvas to see what can come next. Every block is bound to the model as you place it: a Step gets a service-time distribution, a Resource gets a capacity, a Decision splits its branches evenly until you set the shares. A blank simulation already runs — you extend it, you never fill in a form first.

Simulate an existing flowchart

In the flowchart editor, press Simulate this flowchart. Your start nodes become arrivals, your end nodes become outcomes, decisions become routers, and every other step gets a timed activity — as a new simulation project, with the chart left untouched.

Or describe it to Theo

Describe the system in a sentence or two and Theo drafts the process, looks up the rates and durations it needs (literature, trials, labels, operational benchmarks), and binds behaviour to every step with each number recorded against its source. The model lands as a card in chat and opens on the same canvas.

The split that makes this trustworthy: you or Theo author the model; the engine computes the results. Theo never estimates a wait time or a utilization itself — every number on a card came out of the simulation, and the same model with the same seed produces exactly the same numbers every time, on any machine.

Five engine families

Discrete-event

Things flowing through steps that take time and seize resources: an ER, a claims pipeline, a core lab, a coffee shop, an assembly line. Reports time in system, waits, utilization, throughput and outcome shares.

Monte Carlo

A formula under uncertainty, sampled thousands of times: a loss ratio, a project NPV, a cash runway. Reports distributions (p5 / p50 / p95) and which inputs drive the result.

System dynamics

Stocks and flows integrated over time: an epidemic curve, an inventory with a reorder point, a population with a carrying capacity. Reports levels over time, peaks and final states.

Markov chain

A cohort moving between states each cycle: disease progression, loan delinquency, subscriber churn. Reports occupancy over time, absorption shares and discounted rewards.

AI eval

A prompt set run across the engines you pick and graded — exactly, by containment, by number, by JSON shape, or by a judge engine with your rubric. Reports accuracy, judge score, latency and head-to-head win rates per engine. Every call is billed as it completes, and the result is a recorded run rather than a certificate, because engine answers are not reproducible.

Pick the shape under What are you modelling? on the hub, or describe the system and let the composer guess it. The blocks, the panel and the results change with the family; the document, sharing, history and the Ask Theo rail stay the same.

On the canvas

The rail on the left holds the blocks for your kind of model, each with a one-line meaning. For a queue: Arrivals create entities on a schedule (exponential, constant, or any other distribution). Steps take time and may seize one or more Resources (staff, machines, beds) with a capacity. Decisions split the flow by the shares written on their arrows. Outcomes end the flow and are graded positive, negative or neutral. Notes annotate and never carry flow.

Building is one gesture at a time. Every block has a dot on each side: arrows come in on the left and leave from the right. Click the right-hand dot to get What comes next? — the blocks that can follow, one click each, and the new block slides into place already connected. Drag the dot instead to draw an arrow yourself: release it anywhere on another block to connect them, or over empty canvas for the same menu. Select a block and click a tile in the rail to chain it the same way, or drop a tile onto an arrow to slot it in between. Tidy up (bottom-right) lays the whole model out left to right.

Run lives in the header: the green pill runs the replications in your browser (the count and the seed sit under Advanced); on a queue, Play plays one shift live on the canvas. When a run finishes, a scoreboard slides over the bottom of the canvas with the headline numbers, their confidence intervals, and how they moved since the previous run.

The panel on the right has three modes. Build follows your selection — the picked block or arrow when there is one, otherwise the whole model: run settings, anything the validator wants fixed, the ledger of every parameter and where it came from, and attached data. Results holds the KPI grid, utilization, outcomes and the histogram, with Send to Theo Sheets and Certify run. What-if compares scenarios against the baseline.

Sharing works like every other project: invite by email with viewer, commenter or editor permission, or create a share link. Collaborators see each other's presence, and version history keeps a snapshot you can preview and restore.

TheoTheo on the canvas

Tips. Theo watches the model and offers one small callout at a time — a block with no way out, the dot that adds the next block, the first Run, live playback, what-if, certifying, the report. Dismiss a tip and it stays gone; hovering a dot, an arrow's pill or a delta explains it in a sentence.

Theo's read. When a run lands, Theo reads the results under the scoreboard in one spoken paragraph: where the bottleneck is, what moved since the previous run and whether it moved more than noise, and which inputs are still estimates. It is on by default (Theo explains each run under Advanced); turn it off and press Explain when you want it. Ask more continues the same thread in the Ask Theo rail. Every number Theo says came out of the engine — he describes the result, he never computes one.

Talk to Theo puts Theo on the line while you work. He floats over the canvas, can see the model as you change it, narrates a live run as it plays (“triage is queueing, both nurses are busy”), and reads the result when it lands. Ask him to add a step, change a capacity, run again, explain the result, or open a panel and he does it through the same canvas your own gestures use — every change shows up as a note you can undo. Mute or end the call from the capsule; the transcript lands in the rail's history so the conversation stays one thread.

Reading the results

  • Length of stay / time in system. How long an entity spends from arrival to exit, averaged over replications.
  • Wait at a step. Time spent queued before that step starts — the number that finds a bottleneck.
  • Utilization. Busy time divided by available capacity for a resource pool. Above ~85% queues grow fast.
  • Throughput. Completions per time unit over the measured window.
  • Outcomes. The share of entities that ended at each named end state (admitted, discharged, spoiled, paid…).
  • 95% CI. The interval the replication mean falls in with 95% confidence. Two results whose intervals overlap are not reliably different.

When you set a target (“door-to-doctor under 30 minutes”) the KPI is graded on target or off target against the replication mean.

What-ifs and The Algorithm

Ask in plain language — “add a second triage nurse”, “halve the lab turnaround”, “skip the completeness check” — and Theo runs the scenario against the baseline with the same random numbers, so the difference you see is the change you made, not noise. Each KPI comes back with a paired delta, badged significant only when the intervals do not overlap.

The Algorithm bypasses every step in turn, re-runs, and grades each one removable, keep, or unclear by the headline KPI and by whether negative outcomes rise. It is the fastest way to find the step that costs the most and buys the least. “Removable” means the model shows no harm when the step is skipped — the decision about reality is still yours.

On the canvas, the panel's What-if mode lets you do the same by hand: bypass a step, change a capacity, override a parameter, run again, and compare with delta chips. Press Play next to Run to see one shift play out on the canvas — queues filling and resources going busy in real time, with a speed control and a scrubber.

Provenance and certified runs

Every parameter in a simulation carries a source: a literature citation, a trial, a label, a web reference, a figure you supplied, or an explicit estimate you should verify. The card counts them (“9 parameters — 6 sourced, 3 estimated”) and the panel's Build mode lists each one under Inputs with its link. Starter and block defaults are always estimates; the moment you type a number yourself it is recorded as yours. Theo never invents a citation; if it could not find one, the parameter is labelled an estimate.

Certify a run and Theo re-executes the exact model and seed on the server, checks the result matches, signs it, and appends it to an immutable ledger. The downloadable certificate carries the model hash, the assumptions hash, the seed, the engine version, and the KPIs — enough for anyone to re-run it and get the same numbers. Ask Theo to critique a simulation and an independent multi-model panel red-teams the assumptions before you act on them.

The visual report turns a certified run into something a room can follow: a narrated, scene-by-scene walk through the model, the headline number and its confidence band, where the pressure sits, the outcomes, which inputs are still estimates, and how it compares with the previous certified run. Theo rebuilds the report from the certified model and seed on the server — if the model has changed since, he refuses rather than show numbers the seal does not cover — and every figure in the narration comes from the engine. Share it by link (view-only, revocable at any time) so people without an account can watch, or Present together so everyone with the report open follows your scene.

What a simulation is — and is notA simulation is an operations-planning model built from stated assumptions. It is not clinical decision support, not a diagnosis, and not a validated forecast; its numbers are only as good as the sourced parameters. Use it to size staffing, find bottlenecks, and compare protocol designs — then verify the estimates it flagged before you act.

Related Articles

Was this article helpful?