v0.1.22 (Early Access)
Fixed
Stability
- Quitting no longer raises a crash report. Shutdown ran correctly and your save was written, then the process reported a crash on its way out. Nothing was ever lost to it.
Performance
- Large sites run faster. Almost none of the work that lightens distant hardware was happening: racks, servers, switches, chassis detail and cables all drew at full quality across the whole site, and the cut-off for dropping distant machines was set wider than any site. Roughly halves the graphics work in a full site.
- Walking through a site no longer stutters. Models were read off disk mid-frame the first time they came into view. They now load in the background, and racks are prepared before you arrive.
- Racks in the middle distance no longer go missing. The detailed model stopped drawing before the distant stand-in started, leaving a band of racks invisible with their contents hanging in the air. The two now overlap.
Cabling
- Cables to expansion cards on distant machines now draw. Port positions were only worked out for nearby machines, so cables plugged into a distant add-in card had nothing to attach to. That calculation now runs for every machine.
- A network card fitted to a racked machine can be cabled straight away. Port markers were worked out when you walked up to a rack and never revisited, so a machine that grew ports while you stood there kept its old set. Walking out and back in was the only fix.
- A fitted network card shows up at once. The card was charged for immediately but the machine was not marked as changed, so the new hardware took up to fifteen seconds to appear.
- Port markers no longer linger after mounting a machine. Racking a machine left the other markers pointing at the old arrangement. They are now cleared and rebuilt when the rack changes.
Readouts
A pass over the numbers on screen, after reports of two panels disagreeing about the same thing. In almost every case the game already knew the right answer and displayed a rougher one beside it.
- A port's graph now agrees with the port's own reading. The reading showed the capped figure, 25 Gb on a 25 Gb port, while the graph above it drew uncapped demand climbing off the scale. The graph was plotting what machines wanted to send; it now plots what crossed the wire.
- The network map and the Internet panel now agree about the same line. The map drew every connection identically, falling back to an even split that only applies when lines cannot be told apart, while the real per-line figures sat unused.
- Bonded links no longer multiply their traffic. The map added a device's whole traffic once per cable in the bundle, so a pair read double and four read quadruple. Bundles now sum what each cable carries.
- Router and firewall load bars now agree with their own overload warning. Inspection add-ons cut into what a device can forward. Its own screen knew that and the network overview did not, so a device could show comfortable load while wearing a saturated badge.
- Monthly revenue no longer reads zero. The wallboard, ops console home and console header all read a value that does not exist.
- A rack's throughput no longer reads zero when it holds no switch. The summary counted traffic through switches only, so a rack of routers, firewalls or plain servers reported none.
- Very fast and very quiet links now display sensibly. Traffic past a terabit printed as 4,000-odd gigabits; anything under a megabit rounded to zero, so a trickle looked like a dead link.
- Small workloads no longer read as using nothing. Allocations rounded down to whole processors, so a load balancer showed 0 allocated while reporting "using 0.2 · 100%" on the same row. Load balancers, function containers and the platform agent all read that way.
- Functions now appear in a server's workload list. A function whose customer had no warm copy recorded was skipped entirely, so its processor time appeared nowhere and the server showed contention with nothing on it.
Network map
- The map no longer folds your equipment together as the site grows. Past thirty machines it replaced switches and servers with one tile per rack, past eighty with one per zone, with no way back out and no setting to stop it. It now draws every device. Folding is a control you operate yourself.
- The servers toggle now takes effect where you are standing. The request was marked satisfied by whichever update landed first, usually one built before the request was seen, so nothing changed until you left and came back.
- The isolation lens no longer needs servers on the map. It worked out a switch's tenants by tracing back from the servers drawn beneath it, so with servers hidden every switch came out blank. It now reads tenant carriage from the real forwarding path.
- The isolation lens no longer changes the servers toggle for you. Switching it on switched servers on too, without visibly moving the control, so your next press did the opposite of what you expected.
Machines
- Worn hardware's load is measured against what it can still do. Load was shown against the capacity printed on the box when new, so a worn machine could read calm directly beneath a red contention warning. Committed and sold figures still use original capacity, since ageing does not change what you promised.
Contention and spread
- Busy machines can borrow idle capacity from their server again. The headroom sum subtracted every tenant's request for spare capacity from the pool it is drawn from, so bursting stopped working at the load it exists for. Headroom is now measured against what residents are using. Borrowing stays provisional, and the throttle is reported as contention rather than the tenant's fault.
- A tenant is no longer told it needs one server per machine. The warning fired unless every machine sat alone, so 30 machines needed 30 servers, and 30 spread over 10 scored almost the same as 29 stacked on one. It now measures concentration and names figures: "8 of 30 sit on one machine, move 1 so no machine holds more than 7".
- An overloaded tenant is flagged when it starts queueing, not only once it is past its contract. A machine queues against its own contracted processors, so a tenant at 99% adds close to two seconds per request while the server reads calm. Queueing bites from 70%, but the card only marked trouble past 100%.
- A contended server no longer blames neighbours that are not there. Fixed advice claimed the tenants sharing the box were fighting, printed above a measurement reading "no other tenants on it". It now points at load balancers and functions, which use processor time without being customer machines.
- Incidents now offer to rebalance a tenant, instead of only describing the fix. Un-stacking a customer's machines existed only as a Diagnose outcome, so a contention incident could send you to "add a server" when one customer was stacked on one box.
Object storage
- Object storage no longer stops provisioning. Each piece of a split bucket was accounted as the whole bucket, so a 150 TB bucket claimed 150 TB on all five machines holding a slice, on every load. Those machines read as full, the bucket could not grow or move, and draining a host holding one failed.
- Copies now spread across machines, and the durability figure counts what would survive. Durability was measured across racks, so three copies on three machines in one rack counted as one while the readout reported a comfortable 3 of 3. Spread now means one copy per machine.
- Moving a copy now sticks. The hourly durability pass moved it straight back, usually to the machine it came from.
- Reserving machines for a tenant no longer confines their storage. Reservations are a promise about compute, and holding storage to them could starve a bucket of the spread it needs. Object storage now ignores segments entirely; every other service still respects them.
- Machines reserved for object storage are handed back. Storage ignored the reservation and spread anyway, while every other service stayed locked out, so the machine served nothing. Existing ones are cleared on load and the option is withdrawn.
Billing
A pass over what you are charged and what you are told you will be charged, after a customer's card quoted $62/month against a real bill of $2,000. The bill was right. The card read from a second, older copy of the price list. There were several. There is now one.
- Object storage bills stop wandering. Storage was charged per host the data spread across rather than per copy contracted, and the game re-spreads hourly, so the bill followed the spread. One 500 GB copy across five machines billed as 2.5 TB.
- Quotes for replicated customers no longer read half the real price. A replicated customer gets two machines per one asked for and was always billed for both. The quote counted one. Around 20 customer types ask for replication.
- Discounts on reserved contracts now apply. The lock-in worked. The discount reached exactly one of the seven services.
- Dead clusters stop invoicing. A Kubernetes cluster billed for its workers by counting them, without checking any were running.
- Peering agreements now cost what they say. The monthly fee was written on the purchase screen and never charged.
- Bandwidth was billed at five times what customers contracted for. A setting that lifts traffic to make the network line bind was only ever meant to affect the fabric, but once bandwidth billed on measured bytes it landed on every invoice. A busy colo tenant billed thirteen times what they should, and their quote was out by 296%. The setting is withdrawn. The demo scenario has been re-authored with genuinely demanding customers instead.
- A load balancer was billing for traffic that could not exist. The balancer's requests were billed as a separate stream from the machines behind it, which serve the same requests. A typical store customer billed 240 requests a second at the balancer against 150 served, around a quarter of their bill.
- Function bills were mostly a flat fee for turning up. The per-request and memory-time rates drifted apart, leaving the flat fee at 63% of a typical bill, so a 128 MB job billed within a whisker of a 1 GB one. Both now derive from the same markup over real pricing: the split lands at 17/83 and a heavy function costs roughly 39 times a trivial one. A customer running 180 ms jobs pays around 20% more per hour.
Customers
- Customers who are supposed to spike now spike. Any burst set to happen less than once a day rounded down to never, so five customer types ran flat forever and the agency lost half of its.
Services
- Functions now behave like functions. A function used to exist only for the instant it served a request. It now boots, stays warm, serves further requests without booting again, and shuts down after 15 minutes idle, holding real memory while alive. A new panel shows the queue, warm and starting copies, and how close the pool is to its ceilings. Functions were also billing on roughly a fifth of the contracted memory.
- Kubernetes and managed databases are now real services. Both could be bought and both charged, and neither did anything: no traffic ever flowed, so neither could saturate, slow, drop a request or miss its agreement. Both now carry real traffic and can fail.
- A function's warm copies no longer pile up and never come down. Requests were spread across every warm copy, so none ever went quiet long enough to shut down and any spike raised the count permanently. Requests now fill the busiest copy that has room. This never affected bills, only capacity.
- A failed machine no longer moves its work somewhere it should not go. The move skipped almost every placement check, so work could land somewhere unreachable, out for maintenance, in the wrong country, in a reserved pool, or with no graphics capacity. Moving graphics capacity also lost track of it at both ends.
Money screens
- A profitable business no longer reads as breaking even. The runway figure read "Break-even" whether you were comfortably ahead or about to run out. It now says which, and by how much.
- The monthly cost breakdown showed made-up numbers. Each category's rate was the total burn split by that category's share of everything you had ever spent, so figures drifted every few seconds and jumped on load. Facility rent, a fixed sum, visibly changed. Real rates are now shown, and the few that cannot be derived are marked as estimates.
- Hard mode was understating your costs by half. The multiplier was applied when charging you but not when showing the monthly figure.
- Buying hardware is no longer counted as a running cost. Purchases are tracked separately as equipment you own, which then wears down each month. The cost screen splits what the business spends to run from what it has spent to build.
- The finance summary now adds up to your bank balance. Four things were missing from the row and scattered across other tabs: opening balance, wear on equipment, hardware resale, and borrowing. The strip now spells out the whole line from opening balance to the bank.
- Hardware still in its box now wears down like everything else. On older saves, anything in transit or unracked was left off the asset register and never depreciated, and racking it later did not fix it. Those items are picked up on load.
- The wallboard no longer prints the same figure twice. The finance page carried MRR and "Revenue / mo" side by side, both reading the same value. The second card now shows gross margin.
- Latency now shows both what is happening and what you are judged on. The figure labelled "now" was the worst reading from the last quarter hour, so a recovered customer kept showing a high number. That window is right for judging an agreement and wrong for "how are they now", so both are shown.
Added
What each customer costs you to serve
- Every customer now shows what they cost you, not only what they pay you. The game has always worked out the electricity, wear, maintenance, rent, transit and network behind every tenant, and none of it reached the screen. There is now a margin per customer on the roster, a breakdown on their card, and a fleet total on the summary line.
- The customer card breaks the figure down. Revenue, cost and gross margin for the month, then the split between the machines they occupy and the transit bought for their bytes, then the same split per service. A tenant losing money shows in red.
- The cost is measured, not apportioned. A machine's cost is split by how much of it each tenant occupies, so two tenants split a box four to one when one reserved four times the compute. Rent and shared network are split by rack space. Both sides are a monthly rate, so they cover the same month.
- What cannot honestly be pinned on a customer sits beside the margin, not inside it. Wages and debt are not caused by any tenant, and dividing them by headcount or revenue would be making a number up. They have their own figure next to idle capacity. That is why it is labelled gross margin and not profit.
Reserved warm capacity for higher tiers
- Gold and Platinum function customers now keep copies warm, and pay for the privilege. Gold keeps one copy warm through idle, Platinum two, so their first request after a quiet spell is served immediately. That capacity bills continuously at a quarter of the ordinary rate, plus the normal rate for work done. Bronze and Silver are unchanged.
Changed
Network map controls
- A new "Group" control, and "Expand hosts" is now "Stack hosts". Group folds switches and appliances into one tile per rack and is off by default. Stack hosts piles a switch's servers into a stack. The two used to mean opposite things; both now mean fold when lit. Stack hosts previously did nothing on any switch with eight or fewer servers, which is most of them.
- The toggles along the top of the map are grouped by what they do. They were one row in which some were independent and some switched each other off, with nothing to say which. They now read as three runs: what is on the map, the tints (only one at a time), and how much it folds.
Campaign targets
- The three campaign milestones now line up with what they ask for. Leaving the garage wanted revenue worth roughly 34 grown customers while asking for 30. The later two were the reverse, firing on headcount well before their revenue targets meant anything. Revenue now sits just under what each rung's customer target earns. Leaving the garage is easier, the basement and the win ask more.
Dedicated hosts
- Customers no longer ask for dedicated hosts, and the premium for them is gone. No placement decision ever read the requirement, so those tenants sat on shared machines while you collected four times the rate, and their card showed a requirement with no way to satisfy it. They keep their private network, so expect their monthly figure to fall by roughly half.
Public IP addresses
- The cap on load-balancer customers is gone. Each site held a pool of public addresses and a balancer claimed one per customer: four in the garage, eight in the basement, sixteen in the data center. Past that, accepting the prospect failed on a requirement their card never mentioned. Withdrawn rather than raised, since a bigger number is still a wall you cannot see coming.
Service credits
- Credits for missed service targets now build up across the billing period and settle at its close, rather than paying out the moment they trip. The latency figure they judged you on covered the last 17 minutes, so a payout could fire for trouble that had been over for ten.
Failed requests become an availability credit against the tier's uptime promise. Time over the latency target accumulates as it happens, judged against the live figure, and becomes a penalty banded by how much of the period you spent over, always less than not serving at all. Bronze is exempt.
The customer's detail panel shows how the period is going. Incidents are untouched.