The server computes every number
In PlaneSim the client renders and the engine calculates. Every simulation figure on screen was computed server-side, and missing data shows as a dash, never as a flattering default.
PlaneSim's first product principle is written down in five words: server truth or no number at all. If the engine did not compute a figure, the screen does not show it. The client renders; it never derives, estimates, or invents a simulation value.
This sounds like a small internal rule. In practice it decides what almost every screen in the game is allowed to do, so it is worth explaining why we hold it.
What the rule forbids
A client that is allowed to calculate will start helpfully. It will sum a column the server already sent. Then it will estimate a load factor from two numbers that arrived at different times. Then it will project next week's revenue from this week's, because a chart looked empty without the projection. Each step is small, and at the end of them the player is looking at numbers the simulation never produced.
We forbid the first step so the last one can never happen. In PlaneSim the interface displays engine output and does nothing else with it. If a panel shows a route's weekly profit, that profit was computed by the engine, on the server, from the ledger, and sent down as a finished number.
The finance system shows the rule at full depth. Every cent in a PlaneSim world is a ledger entry: categorized, time-stamped, and carrying an operational memo such as the litres of fuel or the passenger count that priced it. Entries roll up by category into an income statement and a balance sheet, and a player can drill any line back down to the individual entries beneath it. At no point in that chain does the client add anything up. The rollups are computed where the entries live.
The honest dash
The rule has a corollary that players notice within their first hour: missing data renders as a dash. Never as zero, never as a placeholder average, never as whatever value makes the airline look healthiest.
A zero is a claim. It says the engine measured something and found nothing there. A dash says the opposite: no measurement exists, draw no conclusion. Collapsing the two is how simulation UIs quietly train players to distrust their own screens. Our design system treats the dash as a first-class element with a reserved slot in every layout, so a card with missing data keeps its exact shape instead of reflowing into a different one.
We apply the same standard to our own marketing. The PlaneSim website shows live world counters only when the world servers actually answer. When they do not, it shows nothing, because a cached or invented counter would be a simulation number the server did not send.
Why hold the line
Three reasons, in increasing order of importance.
Determinism depends on it. Every world replays byte-identically from its journal, which we covered in Every move is journaled. A client-derived figure sits outside that guarantee: it can drift from engine truth with a rounding choice, a stale cache, or a refactor, and no replay would ever catch it, because it was never real.
Fog of war depends on it. Rival internals are hidden server-side. A client that computed simulation values would need the inputs to compute them, and inputs shipped to the browser are inputs a player can read. Because our client only renders, the server can send exactly what a player is entitled to see and nothing else.
Trust depends on it most of all. PlaneSim asks players to make real decisions against deep systems: gravity-model demand, geometric cabins, a used market of individual tails. Those decisions are only worth making if the numbers on screen are the numbers in the world. The moment a player has to wonder whether a figure is engine truth or interface garnish, every screen in the game gets a little cheaper.
The price
The discipline costs us. Screens cannot be prototyped with quick client-side math; the server has to compute and ship exactly what each view displays, so a new panel is engine work before it is interface work. Payloads are designed, not accumulated. And an honest dash will always look less finished than a confident fake.
We take that trade every time. A player staring at a surprising number should get to assume the number is real and start asking why the world produced it. Usually the model knows something about their network that they do not, and the wiki's engine-accurate articles are where that investigation pays off.