Two people have now asked for this independently, most recently someone who taught cloud development:
you could have like 2 modes or "hey the client has this amount of users per second + needs 3 regions, design and deploy a system under these requirements"
That framing is better than what was in TODO.md, because it is a brief rather than a score. The sandbox teaches whoever already knows what to try. A brief teaches everyone else, which is the audience this tool is actually for.
What already exists
Most of the pieces are in place, which is why this is worth doing now rather than later.
region is a node kind with real failover, a failover window and a region-down failure reason, so "needs 3 regions" is a topology assertion rather than new engine work.
- The cost model in
src/content/vendors/cost.ts gives a design a dollar figure from cited vendor rates, so a budget constraint is readable today.
SystemStats carries goodputRps, errorRate, p50, p95 and p99, which covers every performance condition anyone has asked for.
- Traffic patterns (ramp, spike, diurnal) are in the engine, so a brief can say "survive the spike" and not only "hold steady load".
encodeTopology puts a design in the URL, so a challenge could be handed to a class as a link.
So a challenge is roughly: a starting topology, a brief in words, and a pass condition the engine can evaluate against a snapshot.
What needs deciding first
This is tagged discussion rather than good first issue because the design decisions matter more than the code, and getting them wrong makes the feature feel like a quiz rather than a lesson.
What counts as passing. Sustained p99 under the threshold for a whole run, or never exceeding it once? The second is stricter and closer to a real SLO, but a single unlucky spike failing an otherwise sound design teaches the wrong lesson.
Whether the budget is a gate or a score. "Under $200 a month" is pass or fail. "Cheapest passing design wins" turns it into something you replay, which is closer to what "make it a game" meant.
Whether a failed run explains itself. A challenge that says only "failed" is worse than no challenge. It should be able to say which condition broke and point at the component responsible, and the request tracer already knows enough to do that.
How many, and where they live. A handful of good ones beats twenty thin ones. They could be a new field on Preset rather than a separate concept, since a challenge is a preset plus a goal.
Not deciding here
Whether this is a separate mode or a layer over the existing examples. I lean towards the latter, since every one of the 23 examples already teaches a specific failure and most would make a reasonable brief with a sentence and a threshold added.
Comments welcome, particularly from anyone who has taught this material and knows which briefs actually land with students.
Two people have now asked for this independently, most recently someone who taught cloud development:
That framing is better than what was in TODO.md, because it is a brief rather than a score. The sandbox teaches whoever already knows what to try. A brief teaches everyone else, which is the audience this tool is actually for.
What already exists
Most of the pieces are in place, which is why this is worth doing now rather than later.
regionis a node kind with real failover, a failover window and aregion-downfailure reason, so "needs 3 regions" is a topology assertion rather than new engine work.src/content/vendors/cost.tsgives a design a dollar figure from cited vendor rates, so a budget constraint is readable today.SystemStatscarriesgoodputRps,errorRate,p50,p95andp99, which covers every performance condition anyone has asked for.encodeTopologyputs a design in the URL, so a challenge could be handed to a class as a link.So a challenge is roughly: a starting topology, a brief in words, and a pass condition the engine can evaluate against a snapshot.
What needs deciding first
This is tagged discussion rather than good first issue because the design decisions matter more than the code, and getting them wrong makes the feature feel like a quiz rather than a lesson.
What counts as passing. Sustained p99 under the threshold for a whole run, or never exceeding it once? The second is stricter and closer to a real SLO, but a single unlucky spike failing an otherwise sound design teaches the wrong lesson.
Whether the budget is a gate or a score. "Under $200 a month" is pass or fail. "Cheapest passing design wins" turns it into something you replay, which is closer to what "make it a game" meant.
Whether a failed run explains itself. A challenge that says only "failed" is worse than no challenge. It should be able to say which condition broke and point at the component responsible, and the request tracer already knows enough to do that.
How many, and where they live. A handful of good ones beats twenty thin ones. They could be a new field on
Presetrather than a separate concept, since a challenge is a preset plus a goal.Not deciding here
Whether this is a separate mode or a layer over the existing examples. I lean towards the latter, since every one of the 23 examples already teaches a specific failure and most would make a reasonable brief with a sentence and a threshold added.
Comments welcome, particularly from anyone who has taught this material and knows which briefs actually land with students.