A guide to open-ended engineering puzzles
How to design a Zachlike
A Zachlike asks you to build an executable artifact, prove it against an exact behavioural specification, then find out how much better you can make it.
Version 1.1.0 ·
The loop is simple to describe: you build something, run it, inspect what happened, and revise it. The hard part is choosing rules that keep making this loop interesting.
The goal is a small set of understandable rules whose interactions produce a large space of solutions. A precise test then separates correctness from quality. Passing ends the required puzzle. Speed, size, cost, robustness, elegance, and other qualities create voluntary second puzzles after it.
I find it useful to hold the whole guide as one dependency:
Core · Domain → Mechanics → Systems → Puzzles
Product · Presentation · Teaching · Optimization · Story
Practice · Prototype → Evidence → Revision ↺
Domain supplies the process, verbs, and natural constraints. Mechanics define the operations you can use. Systems are what those rules do together. Puzzles select and pressure the resulting possibility space.
Read the first four chapters in order because each gives the next its raw material. The arrows show where design decisions come from, not a one-way production schedule. Once you start prototyping, the chain becomes a loop. Evidence from one puzzle can force you back into the system, the mechanic set, or even the domain.
Around the core
Four more concerns turn a sound puzzle system into a complete game:
- Presentation makes rules, state, causality, failure, and cost inspectable and makes revision cheap.
- Teaching turns the campaign into a curriculum without turning the tutorial into the puzzle.
- Optimization gives a correct machine a second life through conflicting measures, comparison, and sharing.
- Story gives the work a purpose and helps choose which artifacts and briefs belong.
These concerns do not wait politely until the core is finished. They surround it, reveal it, and change it. Bring them into the prototype early enough to see those changes. The final chapter closes the loop by turning the whole structure into a prototyping and playtesting practice.
What remains outside the scope
This guide stays on the player-facing side of the game. It does not prescribe engine architecture, art direction, audio production, platform strategy, budgets, publishing, or marketing. It asks what the system must make possible, not how you should implement it.
The design-element catalog is vocabulary, not a specification. Do not mistake its size for a shopping list. A coherent game is defined as much by what it leaves out as by what it includes.
1 · Domain
The domain is the process the game simulates: the slice of reality, engineering, or invented physics that the player learns to manipulate. It isn't the setting, and it isn't the art style.
I find one question useful here: what kind of work should the player feel they are doing? A good domain creates that work fantasy. It gives you verbs, pressures, representations, and natural briefs, and it helps you reject mechanics that don't fit. Realism still can't make every decision for you.
Start from a process
Start with something a person could actually do, not a broad subject. “Electronics” is too broad. Designing a cheap consumer device, as in SHENZHEN I/O, immediately gives you more to work with: a product, components, signals, a board, a budget, and operating requirements.
A promising process has four properties:
- It produces an artifact. The player can name what they are making, what it receives, and what it must do.
- It supplies verbs. The player can route, join, split, schedule, store, transform, or test something.
- Its relevant state fits in one view. The player can inspect the causes that matter.
- It contains pressure. Capacity, timing, reach, scarcity, or irreversibility can force decisions.
Four shipped Zachlikes show the pattern:
| Game and process | Verbs | Pressure derived from the process |
|---|---|---|
| SpaceChem · molecular production | route, grab, bond, unbond, synchronize | two waldos share a small reactor and must coordinate the molecules they hold |
| Infinifactory · assembly-line engineering | route, push, rotate, weld, destroy | products must align in three-dimensional space while moving |
| SHENZHEN I/O · product electronics | wire, program, sense, signal | components, pins, power, and code are scarce |
| EXAPUNKS · network intrusion | move, copy, read, write, message | programs travel through a constrained host topology |
Notice how aggressively these games simplify their domains. Each one keeps the part that protects the work fantasy and the decisions it needs. Before you depend on a metaphor, observe or research the real process behind it.
Test its yield and cost
Before you commit, walk the domain through six questions:
| Question | Evidence to seek |
|---|---|
| What is the process? | You can name it briefly and list its objects and transformations |
| What does the player make? | The artifact has inputs, outputs, operating conditions, and a reason to exist |
| What does it generate? | Several mechanics and constraints arise without arbitrary exceptions |
| What can the player see? | Important state, paths, and limits have concrete representations |
| What intuition transfers? | The metaphor helps the player predict a rule before running it |
| What must be taught? | Every required fact can be supplied clearly inside the game |
Specialist vocabulary has a real onboarding cost. Invented physics avoids assumed expertise, but it doesn't avoid explanation. It still needs consistent rules and representations the player can read.
So where should realism give way? Wherever accuracy would hide state, add labour, or create an exception the player can't predict. Keep the fiction coherent enough that every simplification feels deliberate.
The domain is ready when you can name the process and its artifacts, derive several verbs and pressures from it, teach everything the player needs, and use the metaphor to reject rules that don't belong.
Next: §2 turns those verbs into a small rule set.
2 · Mechanics
A mechanic is a rule, not a themed object. A conveyor, wire, pipe, and queue may look completely different, but if they create the same decisions, they may be the same mechanic.
So when do you count a second mechanic? When its rule changes what players decide or predict, how they fail, or what they can optimize.
Start with as few rules as the system needs. A new exception isn't depth. If the documentation grows faster than the possibility space, take that as a warning.
Build a construction language
You are designing a language for making systems, not a bag of themed parts. Before you expand the palette, define three things:
| Layer | Question | Examples |
|---|---|---|
| State | What exists, persists, and can change? | SpaceChem's atoms and bonds; Infinifactory's blocks and orientation; SHENZHEN I/O's signals and registers |
| Operations | Which small actions transform that state? | Opus Magnum's grab, rotate, bond, and transmute; EXAPUNKS' move, copy, read, and write |
| Coordination | How do operations interact across time and space? | TIS-100's lockstep nodes, SpaceChem's waldo paths, EXAPUNKS' host topology |
A finished solution usually has an architecture, which says where work happens, and a schedule, which says when it happens. Geometry may embody either one, but the rules have to make both predictable.
Now step back and ask what mental model this language makes the player learn. A conventional programming or construction model with new nouns may still be useful, but it gives up one of the form's strongest pleasures: discovering a genuinely different way to organize work. Originality isn't an excuse for obscurity. Whatever language you invent still has to survive the tests below.
Test every mechanic
The test I keep coming back to is not “does this mechanic sound interesting?” It is “does this mechanic deepen the whole system?”
| Criterion | Question |
|---|---|
| Domain fit | Does it feel like a consequence of the simulated process? |
| Interaction density | Which other rules does it change in a strategically meaningful way? |
| Tension | What must the player give up to use it? |
| Local predictability | Can an experienced player predict its next effect? |
| Expressiveness | Does it enable new architectures rather than more arrangements? |
Cut a mechanic when one use dominates, when it touches only one narrow subsystem, or when it duplicates another rule without changing any decisions.
Cut it too when explaining the rule takes more work than exploring it, or when it needs an incoherent exception to the core system.
Choose a central pressure
What is the player short of? One or two scarce things can organize an otherwise loose collection of rules.
| Pressure | The scarce thing | Solving means |
|---|---|---|
| Space | room, layers, instruction memory | compressing |
| Time | phases, collision windows, latency | scheduling |
| Language | instructions, registers, states | expressing more with less |
| Flow | capacity, ports, bandwidth | routing and balancing |
| Certainty | known cases, reliable components | building for robustness |
| Stability | rules that may alter other rules | reasoning about semantics |
If the honest answer is “nothing in particular,” pause. Construction may have become work without a decision.
Keep four related terms distinct:
| Term | Scope | Function |
|---|---|---|
| Pressure | the whole construction system | A recurring scarcity that organizes decisions across puzzles |
| Constraint | a rule or one puzzle | A hard boundary on what the player may build or what counts as valid |
| Bottleneck | one puzzle | The facet of the central pressure that dominates that specification |
| Metric | valid solutions | A measure that compares quality after correctness |
Take a cramped board. The board is a constraint, packing may be the bottleneck, space can be the game's pressure, and footprint can be one metric. The words describe different jobs even when they all point at the same scarce thing.
The design-element catalog is a list of rules and related design ideas. Open it after you've chosen the domain and central pressure. Look for elements that reinforce each other. You are not trying to include everything.
The mechanic set is coherent when it fits on one hand, survives the five questions, and creates a pressure you can name in a single sentence.
Next: §3 asks what those rules do together.
3 · Systems
A system is what happens when mechanics meet. TIS-100 makes this concrete. Its nodes execute tiny programs in parallel, talk only to their four neighbours, and block until a matching read and write meet. None of those rules says “routing protocol,” “pipeline,” “starvation,” or “deadlock.” Put them together, and all four appear.
You write the local rules. The system is what they do together. That is where useful complexity comes from: many small, unambiguous rules interacting, not one complicated part nobody can predict. The machine also has to be repeatable. Give it the same input, rules, starting state, and seed, and you should see the same visible sequence again.
Freeze the system contract
Start with the rules every later mechanic will depend on. The system must answer each of these questions the same way, every time:
- Object identity and transformation. In SpaceChem, which atom does a waldo hold, and exactly when does a bond form or break?
- Connections, capacity, and transfer. In TIS-100, which ports may communicate, and when does a read or write wait?
- Time, update phases, and arbitration. In Opus Magnum, when do simultaneous arms act, and which collisions invalidate the cycle?
- Failure, completion, and editing. In Infinifactory, what counts as a malformed product or a finished run, and what state resets before the next test?
Together, these rules form the system contract. Determinism rests on it. The same machine, input, rules, and seed must produce the same visible sequence. Seeded variation still meets that standard if replaying a seed reproduces every failure exactly. A mature machine may loop forever or stop at a quota, but running it again can't quietly change what its rules mean.
Revise unfinished rules as freely as you need. Once players have saved solutions against a released rule, change it only deliberately, visibly, and with compatibility in mind.
Design interactions, not inventories
Take every pair of core mechanics and ask whether one changes the value, cost, timing, or failure modes of the other. Being connected isn't enough. An arm can load a belt, but if the belt treats every item alike, arm × belt has created no new decision.
Put the mechanics on both axes of a matrix, with one cell for every unordered pair. For n mechanics, that gives you n(n−1)/2 cells. Four mechanics produce six; seven produce twenty-one. Answer three questions in every cell:
| Pair | New decision | Visible consequence | Dependency |
|---|---|---|---|
| A × B | What becomes possible, costly, or preferable only together? | How can the player predict and inspect it? | Does either rule earn its place only through this pair? |
| TIS-100 port rendezvous × fixed topology | A short route may block a node needed by another stream | The active port and waiting instruction expose the stall | No. Each also interacts with program length and local memory |
Do this. Fill the matrix, then read it in two directions. A weak row means one mechanic changes little no matter what you pair it with, which makes it a cut candidate. A dominant cell means one pair carries most of the system's interest. Test that pair in several puzzles to find out whether it creates more than one recipe.
Specify observable state
Now decide which facts any presentation must expose. Objects, values, and control need traceable paths. Transformations need inspectable inputs, conditions, and outputs. The player has to see both the architecture and the schedule, even when distance or layout is doing the work of time.
What is the earliest meaningful divergence the simulator can report? Define that too. A collision, wrong value, missed deadline, overflow, or illegal state should preserve the failing moment and the causal state around it. §5 turns this requirement into debugging tools.
Turn important limits into visible properties:
| Constraint | Representation |
|---|---|
| capacity | slots or lanes |
| reach | geometry |
| time | a tick, phase, or trace |
| collision | occupied space |
| cost | an explicit counter tied to the action that spends it |
Local rules can create global complexity and still remain locally predictable. Seven mechanisms do most of that work:
| Mechanism | Local rule | Global consequence |
|---|---|---|
| Shared capacity | a SHENZHEN I/O microcontroller serves several signals | servicing one input delays another |
| Synchronization | SpaceChem's two waldos act on the same cycle | paths must agree about timing and collision |
| Feedback | a TIS-100 value returns to an earlier node | local state becomes a repeating control loop |
| Alternate routes | a TIS-100 value can cross different nodes | congestion moves to another part of the grid |
| Irreversibility | an Opus Magnum glyph changes an atom | operation order becomes a commitment |
| Limited state | a TIS-100 node has ACC and BAK | history must be distributed or encoded in timing |
| Topology | EXAPUNKS behaviour follows host links | changing routes changes coordination without new instructions |
You can see backpressure directly in TIS-100. A node writing to a port waits until its neighbour reads, which can leave every earlier node waiting behind it. Close those waits into a cycle and you have a deadlock. If your system permits either one, show the player where the chain or cycle begins.
Step back and notice what isn't on this list: hidden state, inconsistent exceptions, visual ambiguity, and sheer scale. Those usually add confusion rather than useful depth.
The system is coherent when its core rules are explicit, several interactions create real decisions, and an experienced player can predict a tie, a collision, and a full container.
Next: §4 selects those interactions with puzzle specifications.
4 · Puzzles
A puzzle combines three things: a specification, a board, and a palette. Together they tell the player what must happen, where they may build, and which parts they can use.
Author the specification first
Before you explore layouts, decide which observable behaviour passes. The engine checks the player's output against this puzzle specification. It does not compare their machine with your reference build.
Write the specification in one sentence:
Given [inputs and conditions], produce [outputs and behaviour], while never [invalid state].
Then make every boundary explicit: the legal input range, required outputs, quota or duration, available workspace and tools, hard limits, failure conditions, and exact pass condition. The specification must not prescribe construction steps or depend on rules outside the published system contract.
Build a small test set:
- a simple case that proves basic understanding;
- a boundary case;
- a case that breaks the most obvious shortcut;
- a case that exercises the puzzle's central pressure; and
- enough variation to require a general design.
Unseen cases may vary values, but they can't introduce new semantics. When a run fails, show the smallest useful counterexample.
The verifier does more than check the answer. It shapes the work. A repeated quota rewards throughput; an input-output stream rewards generalization; a test suite rewards branching and state; a final-state target rewards construction and emergence.
Keep internal reference builds to prove solvability and expose accidental restrictions. These builds are evidence about the specification, never the definition of the answer. Writing the specification first doesn't remove your responsibility to verify that somebody can actually solve it.
Choose the floor and the ceiling
I find it useful to give every puzzle two difficulty targets:
- Solution floor: the effort needed to make anything correct.
- Optimization ceiling: the depth available after it works.
Let the obvious, clumsy solution pass. Don't require an optimized score to continue unless satisfying that bound is the puzzle itself. This is the trick: lower the floor without flattening the ceiling.
Pressure one facet
Before you build the puzzle, name its bottleneck: routing, synchronization, storage, geometry, state, collision, transformation order, or topology. This bottleneck selects one facet of the central pressure from §2. If the game's scarce thing is flow, for example, routing and storage should matter before geometry. The board and palette then decide how directly the player has to confront it.
| Board | Effect | Where difficulty lives |
|---|---|---|
| Cramped | Few layouts fit | decomposition and packing |
| Open | Honest solutions fit | optimization and self-imposed goals |
| Graph | Nodes constrain connection | communication topology and protocol |
Use the palette as a balance lever. Make it too loose and the bottleneck disappears. Make it too tight and you funnel the player toward one architecture.
Separate reasoning from labour. Raise a quota only until startup, steady state, or a timing interaction becomes visible. If the insight arrives quickly but the player then spends ten minutes placing, retiming, or waiting, shrink or reframe the puzzle.
Do this. Change the bottleneck before changing the numbers. Difficulty should come from a new decision, not a larger quota or smaller board by default.
Distinguish novelty from openness
Two kinds of variety are easy to blur together. Puzzle distinctiveness compares puzzles across a campaign: can the player reuse the same process with trivial edits? Solution diversity compares answers to one puzzle: can valid builds differ in decomposition, topology, scheduling, use of state, or metric priority?
These are separate tests. A campaign can contain wildly different puzzles that each funnel toward one answer. It can also contain an intentionally familiar puzzle that revisits a known process but remains rich to optimize. Label reinforcement honestly. Don't present repetition as a new idea.
For every open puzzle, construct two plausible same-palette references from different solution families. Two references prove possibility, not prevalence, but they quickly expose a specification that permits only one recipe by accident. Scores can't prove diversity on their own. Unrelated machines may share a score, while one architecture may span many scores.
Use antagonistic metrics
A metric earns its place when it changes which architectures look attractive. Two or three measures are usually enough. Speed, space, resources, program size, power, and robustness only become interesting together when improving one can make another worse.
The solutions where no measure can improve without another getting worse form a Pareto frontier. You want that frontier to contain several specialists that look structurally different. If one solution wins every metric, change the cost model, palette, or specification. Show the measures separately because a weighted total hides the trade-off.
A hard limit defines validity. A metric compares valid solutions. Leave some valued qualities unscored: symmetry, readability, choreography, and audacity. The graphs should not exhaust taste.
A puzzle is structurally sound when its specification is explicit, its tests are fair, its bottleneck is named, a crude build proves the floor, and an open puzzle admits a plausible contrasting solution family with room above it.
Next: §5 makes the system editable, inspectable, and debuggable.
5 · Presentation and debugging
You can build a deep system and still make a bad puzzle game if the player can't see what it is doing. Presentation includes visual design, sound, animation, interface, editing, feedback, documentation, and terminology. It cannot create mechanical depth, but it determines whether the player can perceive, predict, and work with the depth that already exists.
A decorative skin is presentation. A visible port, capacity slot, timing trace, or collision boundary goes further. It becomes part of play because it changes what the player can reason about.
Don't postpone this as polish. An illegible prototype can't tell you whether a playtest exposed a system problem or merely hid a sound rule.
Make causality visible
Pause the machine, then run it. In both states, the game should answer six questions:
| Question | Required evidence |
|---|---|
| What does this part do? | Shape, ports, labels, and animation share a stable visual grammar |
| Where can things go? | Direction, connection, crossing, reach, and capacity are visible before execution |
| What is happening now? | Active, waiting, blocked, full, empty, and faulted appear on or beside the part |
| What caused this state? | Material, data, and control can be traced from source to consequence |
| Why did the run fail? | The earliest divergence is preserved and expected state is aligned with actual state |
| What made this score? | Expensive operations, idle capacity, long paths, and waste are tied to the metric they change |
Preserve object identity while things move and transform. If an item disappears into a process and an apparently unrelated result pops out elsewhere, the player can't connect architecture to behaviour.
Look at TIS-100. It prints values on ports and highlights the instruction each node is executing, so you can trace a blocked transfer across the grid. Opus Magnum puts an arm's program, swept space, held atom, and collision in the same view. Both games remain difficult without making their current state a secret.
Use colour, sound, and motion redundantly. Required information has to survive grayscale, silence, pausing, and reduced motion. At overview scale, preserve identity, direction, state, and faults. Reveal the detail as the player zooms in.
Make revision cheap
Open-ended construction is repeated refactoring. The player has an idea, changes the machine, runs it, and looks for the consequence. Keep the time between those steps short.
- Make place, delete, rotate, connect, and edit-instruction actions immediate.
- Support region selection, move, copy, paste, rotate or mirror, and deep undo and redo.
- Preserve camera, selection, partial edits, and simulation state when switching between the workspace, specification, documentation, tests, and scores.
- Show reach, collision, occupancy, and illegal connections before the player commits an edit.
- Allow several named solution variants so experimentation never requires destroying the known-good build.
Let partial and incorrect machines run whenever they can produce meaningful behaviour. Missing output is an unmet specification, not a reason to disable the simulator. Broken machines are often where the player learns the most.
Treat the simulator as the main interface
Treat the simulator as the centre of the interface. Keep run, pause, reset, single-step, and useful speeds reachable at all times. One step must advance one defined unit of simulated time. Show the current cycle, case, and phase.
When an instruction or controller acts, highlight both it and the object it affects. Waiting and blocking are states, not generic errors. Show what the part needs, what holds the resource, and whether the machine is merely slow or actually deadlocked.
Stop automatically at the first meaningful failure and preserve that state. Then show a readable trace around it. A cascade of later faults must not bury the first place where the player's mental model diverged from the simulator.
Failure can be pleasurable to watch. It still has to remain fast, local, informative, and costless to retry.
Be a trustworthy development environment
Use one term for every part, state, port, and operation across the editor, specification, manual, tutorial, and error messages. Pair unfamiliar icons with words until the player has had a fair chance to learn them.
The same machine, input, rules, and seed must replay identically. Ordering, limits, tests, and scoring can't contain hidden preferences or unexplained exceptions. A strict simulator feels fair when it exposes three things: the rule, the relevant state, and the exact reason the run stopped.
Presentation works when a new observer can inspect a paused machine and describe its broad strategy, a failed run points to the first real fault, and testing a changed idea costs less than rebuilding it.
Next: §6 arranges these rules and tools into a curriculum.
6 · Teaching and campaign
What is the player actually learning? Not a collection of puzzles. They are learning one system, and the puzzles are the vehicle. Progress means fluency: predicting behaviour before running, recognizing reusable structures, diagnosing failures, and choosing an architecture on purpose.
That makes every campaign a curriculum, whether you designed it as one or not.
Teach purpose before syntax
Teach the job before you teach the gestures: given these inputs, produce these outputs. A perfect placement walkthrough can still leave the player unable to explain what the machine is for.
Start in the real editor, with the real rules. Pre-place enough context that the minimum correct solution needs one meaningful action, then remove the scaffolding. If that first solution requires five unfamiliar actions at once, simplify the solution. Don't answer complexity with another paragraph of explanation.
SpaceChem exposed this failure mode. Its first complete loop required the player to understand input, grab, path arrows, drop, and output all at once. Later Zachlikes lowered the floor by asking for a first useful artifact with fewer simultaneous concepts.
For each mechanic:
- show its purpose;
- demonstrate the smallest useful action;
- let the player reproduce it;
- ask for a simple independent use;
- reinforce it in a changed context; and
- combine it with earlier mechanics later.
Use counterexamples to correct the false rules players are likely to invent. If you can choose between a clearer representation, a simpler rule, and another paragraph of instructions, choose one of the first two.
Alternate novelty and reinforcement
Give every puzzle a job in the curriculum:
| Role | Work it does |
|---|---|
| Introduce | One new idea is the only unknown |
| Reinforce | A known process becomes fluent and leaves room to optimize |
| Vary | Familiar rules appear under a different board, input, or pressure |
| Combine | Two established ideas interact for the first time |
| Capstone | The player chooses and coordinates several ideas independently |
Constant novelty turns the campaign into a series of exams. Constant repetition turns it into labour. Alternate the two deliberately, and don't pretend a reinforcement puzzle is a new idea.
Kaizen: A Factory Story deliberately used easier reinforcement puzzles. Players could apply a process they had just learned, then explore its optimization surface. That is not the same thing as padding a campaign with a larger quota.
Teach collision order, simultaneous action, blocking, overflow, capacity, and test timing before any of them can cause an expensive failure. Let players discover strategies. Don't make them discover undocumented semantics.
Curate the order after playtesting
Author more specifications than you need, then watch people play them. Remove accidental logical duplicates, fill genuine conceptual gaps, and reorder what remains. Difficulty order is an evidence problem, not an intuition problem.
When a puzzle becomes a wall, ask why before you tune it. Did it introduce several burdens at once? Did it depend on an edge case you never demonstrated? Or did the player understand the idea and then face too much construction?
For a broad campaign, open small batches and require only some puzzles to advance. Put the hardest material after the narrative ending or mark it clearly optional. One mandatory puzzle should not end both play and story for an otherwise capable player.
Use documentation as reference and fiction
Manuals, datasheets, zines, diagrams, and reference cards can make looking up a rule part of the work fantasy. Keep them searchable or well indexed. Use the same terminology as the interface, make them available without losing work, and state edge cases explicitly.
Documentation can support a good first-use path, but it can't repair an unreadable mechanic. §8 shows how the same artifact can also carry voice and world-building.
Teaching works when the player understands the job before following syntax, each new burden arrives in isolation, established ideas receive time for reinforcement, punishing semantics were demonstrated harmlessly first, and a stuck player has another route forward.
Next: §7 gives a solved puzzle its second life.
7 · Optimization and sharing
The first valid machine isn't the end. It is where a second game begins. Correctness and quality are separate, and §4 defined the conflicting measures that reshape the solution space after correctness.
Optimization should feel voluntary. You don't need to withhold progress, currency, or story to make improvement meaningful. The machine, the cost model, and visible evidence of better approaches can supply the challenge on their own.
Reveal the distribution after success
Show per-puzzle histograms only after the first correct solution. The order matters. First the player owns an answer. Then the distribution asks a new question: how else could this machine work?
A global leaderboard makes nearly everyone a distant loser and rewards cheating at the extreme. A histogram makes the middle legible. It shows how far away an improvement might be, exposes clusters that may represent different solution families, and lets an ordinary player choose a reachable target.
SpaceChem established the pattern with separate histograms for cycles, symbols, and reactors. The graphs include first-pass and optimized solutions together, so beating the middle remains a plausible personal challenge rather than a bid for a world record.
Show each antagonistic metric separately, with the current result and personal best marked. Don't collapse the measures into one total, and don't reveal another player's architecture without an explicit spoiler action.
Make cost causal
Connect every score to behaviour the player can inspect. Which operation spends power? What adds latency? Where does the footprint grow? Which component creates waste, and where does capacity sit idle? The machine should answer these questions.
An opaque total supports trial and error. A causal cost model supports engineering. That difference is the whole point.
Leave some qualities unscored. Symmetry, readability, robustness beyond the tests, elegant motion, and audacious excess give communities room to develop tastes the official graphs do not define.
Protect experiments
Never make improvement require overwriting the machine that worked. Support named solutions, duplication and branching, a known-good baseline, metric-specific variants, thumbnails, and recorded scores. Experiments become easier when failure can't destroy the proof you already have.
Comparison should make specialists visible. When the fastest, cheapest, smallest, and most legible solutions are different artifacts, the player has several meaningful reasons to come back.
Design the export with the system
A shared number says much less than a shared machine. The export may be a looping animation, short video, schematic, code listing, or importable solution. Whatever form it takes, it has to reveal the intelligence of the answer rather than only its final effect.
Opus Magnum's stable two-dimensional view, repeating machines, and visible arm choreography make its GIFs readable without editing a camera. EXAPUNKS exposes the opposite risk: agent movement alone reveals less when the important reasoning lives in code off-screen.
Include the puzzle identity, relevant execution, metrics, and enough program or structure to understand the trick. Keep the frame stable, make the result easy to produce in one action, and mark spoilers. If importing and modifying shared work suits the community, preserve authorship and make the remix explicit.
Now step back and notice the loop. The export format feeds back into the mechanic and presentation. A beautiful motion that hides its control logic is a weak explanation. A complete code dump that hides the machine's choreography is equally incomplete.
The second game works when every score has an inspectable cause, the distributions appear only after ownership, experiments preserve the working baseline, and a shared artifact makes the clever part visible.
Next: §8 gives the work, the metrics, and the campaign a reason to exist.
8 · Story and work
Story gives the puzzles something to be about. It helps you select artifacts, constraints, clients, failures, and reasons to optimize. Paste it on after those decisions and it can't do that work anymore.
Start with the core activity and the core story, then grow them together. A puzzle may begin with a mechanical need or a story beat. It earns its place when both sides agree.
Let the world choose the briefs
The domain supplies all kinds of possible products. The story chooses which one matters now. A client, incident, research question, production order, or institutional demand turns an abstract specification into a job.
Ask of every brief:
- Why does this artifact exist?
- Who needs it and under which conditions?
- Which functions or constraints follow from that situation?
- What does completing it reveal about the world or relationship?
Try replacing the setting. If the artifact, functions, constraints, and documents all survive unchanged, the setting is wallpaper. Revise the brief or admit that the fiction is decorative.
Look at SHENZHEN I/O. Consumer products such as signs, controllers, and novelty devices generate their own ports, signals, budgets, and test conditions. The briefs also reveal who commissioned the work. One specification is now carrying both character and system design.
Put story in the interface
Put the story in media that belong to the work: emails, requests, manuals, logs, specifications, invoices, zines, test reports, and the products themselves. One artifact can carry rules, voice, and world-building as long as each role remains clear.
TIS-100's printable computer manual presents the instruction set and the mystery of the machine as one object. EXAPUNKS' Trash World News pulls off the same trick with a hacker zine. Neither format excuses hidden semantics. Both make necessary reference material feel native to the role.
Keep the mandatory channel short and place it at the edge of the build-run-inspect-revise loop. Put deeper material in an optional, re-readable tier. Don't trigger irreplaceable dialogue during execution, and don't make the player leave the workspace to recover a missed requirement.
The player must always be able to extract the requirements from the voice. Flavour may complicate motive, but it can't hide inputs, outputs, limits, or failure conditions.
Give optimization a meaning
Metrics can express production economics, scarce material, limited power, urgency, secrecy, professional pride, or the standards of a demanding institution. The fiction doesn't need to reward every improvement, but it should make the measured qualities feel native to the work.
The same goes for sharing. A shareable artifact should look like something this world or profession might value: a demonstration, report, schematic, listing, recording, or proof of craft.
Use tone to widen the door honestly
A realistic-looking discipline may trigger assumed expertise before the player even meets the rules. Story and art can make the role inviting, but they must not promise a different activity from the one the system delivers. Translate specialist knowledge into rules the player can learn. Don't disguise unexplained complexity as authenticity.
Story is integrated when it helps choose the work, each brief changes because of who requested it, required information stays clear, deeper fiction remains optional and re-readable, and the reasons to build and improve belong to the same world.
Next: §9 turns the whole guide into a working method.
9 · Prototype, test, and revise
Now the guide has to survive contact with a game. Don't begin with a full campaign. Build the smallest version that can prove the system, the editor, the curriculum, and the post-solve loop actually belong together.
Make a six-puzzle vertical slice
| Puzzle | Purpose |
|---|---|
| Orientation | One input, one output, one primitive, and the real editor |
| Second verb | A new operation in isolation |
| Reinforcement | Familiar actions in a changed context |
| Coordination | Two established operations interact |
| Divergence | The first specification that reliably produces distinct architectures |
| Capstone | A forgiving first pass with strong optimization tension |
Build the actual runner and debugging controls. Add a representative test harness, at least two conflicting score axes, provisional histograms, named solution variants, and one real export format. All of these features change how you author puzzles. Postpone them and you are testing a different game.
Write the one-page definition
Before you expand the campaign, record the decisions every later puzzle will depend on:
| Field | Decision to record |
|---|---|
| Experience promise | What the player should feel by repeatedly doing which work |
| Domain and artifact | The process, products, verbs, and natural constraints |
| Construction language | State, operations, and coordination model |
| System contract | Identity, transfer, time, arbitration, failure, completion, editing |
| Central pressure | What the player is short of and why |
| Metrics | Which axes conflict and how their specialists differ |
| Curriculum | What is introduced, reinforced, varied, combined, and optional |
| Story channel | Which in-world medium carries briefs, reference, and voice |
| Audience floor | How crude a correct solution the intended audience can reach |
| Non-goals | What the project will deliberately omit |
Treat this page as a decision record, not a prophecy. When a prototype or player disproves it, change the record and revisit every puzzle that depends on the old decision.
Use three evidence streams
| Evidence | What it reveals |
|---|---|
| Fresh-player sessions | Goal comprehension, control discovery, mental models, tutorial walls, avoidable complexity |
| Long-form expert testing | Broken tests, duplicate puzzles, dominant strategies, weak metrics, late spikes, ceiling depth |
| Live telemetry | Where problems cluster across many players and whether post-solve systems change behaviour |
In fresh sessions, give players only the information the shipped game provides. Don't coach. Watch for hesitation, false assumptions, ignored controls, and the first moment when a player can no longer explain what happened.
For telemetry, record only what you can use, and collect it with consent and privacy safeguards. Useful events include puzzle starts and completions, time to first run and first correct run, resets, exits, returns after solving, score improvements after seeing a distribution, exports, and a short post-solve difficulty rating.
Metrics show you where a problem is. Observation and interviews tell you why. You need both.
Diagnose the layer that failed
| Symptom | Likely cause | First response |
|---|---|---|
| Every player rebuilds the same machine | Specification or palette is prescriptive | Widen the specification and test another solution family |
| Players guess at failures | State or causality is hidden | Preserve the first divergence and expose its dependencies |
| Tutorials require constant explanation | Minimum solution or representation is too complex | Reduce the first task before adding prose |
| Every puzzle feels like a new exam | No reinforcement | Reuse known ideas under a changed context |
| One architecture wins every score | Metrics or costs move together | Create pairwise trade-offs and retest the frontier |
| One puzzle ends the campaign | Several burdens or too much labour arrived together | Split, bridge, branch, or move it after the ending |
| The story could be swapped without effect | Fiction is wallpaper | Derive the artifact and constraints from the world |
| Shared results hide the clever part | Export omits program, structure, or timing | Redesign the view or include an importable artifact |
Use release gates
Before you author more content, stop at these release gates:
- System: Can a few primitives express surprising behaviour without special-case parts?
- Specification: Can the player state exactly why a failed run failed?
- Diversity: Do several correct solutions differ structurally?
- Floor: Can the intended audience make a crude correct artifact?
- Ceiling: Can experts keep finding meaningful improvements?
- Trade-off: Does improving one score sometimes worsen another?
- Curriculum: Are purpose, reinforcement, combination, and optional mastery ordered cleanly?
- World: Does each brief reveal something about the setting or work?
- Artifact: Does the share format reveal what is clever?
- Evidence: Have fresh players, experts, and observed behaviour all changed the design?
If several gates fail, don't write more levels. More content will only bury the problem. Change the system or the product layer that is hiding it.
The working rule. Build the smallest game that delivers the complete loop, then improve it by watching people use it. A puzzle sheet can prove an intention. Only a running machine and another person's reasoning can test it.
References
Go deeper
The design-element catalog, a play list, and the original sources behind the guide.
| Reference | Use it when |
|---|---|
| A · Design-element catalog | You need ideas for rules and the effects they can create together |
| B · Games | You want examples to play or inspect |
| C · Sources | You want the original talks, books, and postmortems behind the guide |
The catalog includes rules the player can build with, effects those rules may create together, and tools for testing, explaining, or scoring a machine.
If you open the catalog looking for ideas, start with the combines with column. It points to elements that may become more interesting together.
A · Design-element catalog 100 rows · M001–M135
This catalog is an idea source, not a checklist. You will find three kinds of entries:
- Rules the player uses to build.
- Effects that can emerge when rules interact.
- Tools for specifying, explaining, testing, or scoring a machine.
One mechanic in §2 may use several rows here. Choose only the entries that strengthen the game's central pressure and one another.
IDs never change. When a row is removed, its number stays unused, so gaps such as those in M011–M029 are intentional.
Ratings and game examples are prompts, not measurements. Some examples come from open factory games rather than specification-driven puzzles, so their ideas may not transfer directly. Inspect a game before you borrow from it, then test the rule against the five questions in §2.
Start with the combines with column. It suggests pairs worth testing, although a pair may appear in only one of its two rows.
Emergence scale. Low: results follow directly from an action. Medium: several rules must be considered together. High: local rules can create surprising system-wide behaviour or failures.
A · Specification & verification M001–M010
Can the player infer a fair spec and test against it? M103 and M113 belong here by subject; they sit in G and H by number.
| Element | Description | Player action | Constraints | Optimization axes | Emerg. (editorial) | Examples to inspect | Combines with |
|---|---|---|---|---|---|---|---|
| M001 Specification-driven I/O target | A level defines valid input-output behavior rather than a prescribed construction. | Infer the transformation and build any system that satisfies it. | Exact semantics; hidden or generated cases may apply | Correctness; robustness; simplicity | Low | SpaceChem, TIS-100, SHENZHEN I/O, EXAPUNKS, Manufactoria, HRM | M002, M003, M008, M105 |
| M002 Multiple or adversarial test cases | A solution is replayed against varied inputs to prevent hard-coded answers. | Generalize logic and test edge cases. | Unknown future cases; one failure invalidates the program | Robustness; cycles across worst case; code size | Medium | TIS-100, SHENZHEN I/O, EXAPUNKS, Manufactoria, HRM | M001, M009, M113, M126 |
| M003 Exact structural output matching | The produced object must match a target topology, orientation, ordering, or constrained graph. | Assemble, transform, and orient components precisely. | No extra parts; orientation and connectivity matter | Parts; area; cycles; damage | Low | Opus Magnum, SpaceChem, Infinifactory, shapez | M035, M036, M045, M060 |
| M005 Open-ended construction grammar | A small component set permits many topologically different valid solutions. | Invent a system rather than select a canned answer. | Only component semantics and level specification constrain design | Elegance; cost; speed; area; originality | Medium | Factorio, Opus Magnum, SpaceChem, shapez | M001, M105, M114, M126 |
| M006 Bounded workspace | Construction must fit inside a fixed board, reactor, circuit, dome, or node grid. | Pack components and route around obstacles. | Fixed dimensions; blocked cells; edge ports | Area; wire length; component count | Medium | SpaceChem, Opus Magnum, TIS-100, SHENZHEN I/O | M047, M051, M108, M127 |
| M007 Restricted component palette | Each puzzle offers only selected parts, commands, or system types. | Compose a solution from the permitted vocabulary. | Missing conveniences; limited counts; locked technologies | Part count; workaround complexity | Low | SHENZHEN I/O, Opus Magnum, The Incredible Machine, HRM | M005, M059, M119, M117 |
| M008 Edit–run–reset loop | Construction alternates rapidly between editing and deterministic simulation. | Run, pause, inspect, rewind or reset, then modify. | Simulation usually starts from a clean state | Iteration time; cognitive load | Low | SpaceChem, Opus Magnum, TIS-100, HRM (and every Zachtronics title) | M009, M010, M126, M129 |
| M009 Step-through execution trace | The game exposes state changes one tick, instruction, or object movement at a time. | Pause and inspect registers, paths, signals, queues, or actors. | May require selecting one actor or node among many | Debug time; observability | Low | TIS-100, SHENZHEN I/O, EXAPUNKS, HRM, Turing Complete | M065, M072, M073, M113 |
| M010 Explicit failure predicates | The simulation detects invalid states such as collisions, deadlocks, malformed outputs, forbidden transitions, or unmet goals. | Diagnose which invariant was violated. | Some games reveal only the first failure | Reliability; avoidance margin | Low | Opus Magnum, SpaceChem, Infinifactory, Factorio | M003, M051, M073 |
B · Flow & capacity networks M011–M029
How do topology, capacity, and timing make movement a design problem?
| Element | Description | Player action | Constraints | Optimization axes | Emerg. (editorial) | Examples to inspect | Combines with |
|---|---|---|---|---|---|---|---|
| M011 Directed channel transport | Discrete entities move automatically along player-defined directed channels. | Place and orient channels between sources, processors, buffers, and sinks. | Direction, speed, occupancy, corners | Length; throughput; area; crossings | Medium | Factorio, shapez, Satisfactory, Infinifactory, Mindustry | M013, M017 |
| M013 Split, merge, and balance flows | Junctions divide or combine streams, often with ratios or priority. | Place splitters, mergers, balancers, or junction logic. | Finite throughput; fairness or priority semantics | Balance; throughput; footprint | High | Factorio, shapez, Satisfactory | M018 |
| M014 Filtering and sorting | A junction routes entities by type, value, attribute, destination, or signal. | Configure filters or build a classifier. | Filter slots; unknown types; timing and capacity | Accuracy; throughput; filter count | Medium | Factorio, shapez, Manufactoria, Cosmic Express | M070, M089, M103 |
| M016 Buffering and storage | Inventory absorbs timing mismatch between producers and consumers. | Insert chests, tanks, registers, queues, or waiting bays. | Finite capacity; access rules; spoilage in some games | Buffer size; latency; resilience | Medium | Factorio, Satisfactory, ONI | M017, M018, M072 |
| M017 Backpressure, starvation, and jamming | Downstream blockage propagates upstream; empty inputs idle consumers. | Identify and remove the limiting constraint. | Finite buffers and transfer rates | Uptime; buffer occupancy; bottleneck rate | High | Factorio, shapez, Satisfactory | M016, M018, M073 |
| M018 Throughput ratio matching | Processing stages have rates that must be proportioned for steady state. | Calculate or empirically tune system counts and channel capacity. | Discrete system counts; speed modifiers; channel caps | Throughput; system count; power; buffer size | High | Factorio, Satisfactory, shapez 2, Mindustry | M013 |
| M026 Tunnels, portals, and nonlocal links | A path disappears and reappears elsewhere, bypassing surface conflicts. | Pair endpoints and reason about hidden connectivity. | Endpoint pairing; direction; capacity; hidden segment | Space; crossings; latency | Low | Factorio, shapez, Cosmic Express | M027, M091, M101 |
| M027 Crossing and grade-separation constraints | Routes may not cross freely, or crossings require special pieces, timing, or layers. | Reroute, bridge, tunnel, or schedule conflicts. | Limited crossings, bridge inventory, collision rules | Area; piece count; delay | Medium | Factorio, shapez, Manufactoria, Cosmic Express | M026 |
| M029 Hierarchical long-distance transport | Local systems connect through slower or higher-capacity transport layers. | Build hubs and routes between regions or scales. | Travel time, fuel/energy, schedules, launch cost | Latency; payload; energy; hub count | High | Factorio, Satisfactory, Mindustry | M011, M016, M018 |
C · Transformation grammars M030–M044
Can a small vocabulary of operations compose into several routes from input to output?
| Element | Description | Player action | Constraints | Optimization axes | Emerg. (editorial) | Examples to inspect | Combines with |
|---|---|---|---|---|---|---|---|
| M030 Multi-input transformation process | A process consumes a defined combination of inputs over time and produces one or more outputs. | Select transformation rules and supply inputs at compatible rates. | Transformation rule stoichiometry, craft time, system compatibility | Components; time; energy; yield | High | Factorio, Satisfactory, Mindustry, shapez | M018, M118 |
| M031 Cutting or partitioning | An object is divided into pieces or quadrants that retain identity or position. | Orient the object and route desired fragments. | Cut axis; fragment order; waste behavior | Cutter count; waste; throughput | Low | shapez, Infinifactory | M032, M033, M039 |
| M032 Rotation and orientation | Components or outputs are rotated to align interfaces or target orientation. | Place rotators, program manipulator turns, or manually orient parts. | Discrete angles; handedness; collision envelope | Rotator count; cycles; space | Low | shapez, Opus Magnum, Factorio, Infinifactory | M003, M047, M049, M060 |
| M033 Layer stacking and composition | Separate pieces are superimposed or stacked into a composite object. | Align layers and feed them to a stacker or assembly step. | Layer order, maximum depth, support/collapse rules | Stacker count; layers per second; waste | Medium | shapez, Infinifactory | M031, M045, M060 |
| M035 Permanent joining | Separate entities become one connected structure or logical unit. | Align compatible interfaces and trigger a permanent join. | Adjacency, orientation, material compatibility | Join count; time; error rate | Medium | Opus Magnum, SpaceChem, Infinifactory | M003, M036, M040, M051 |
| M036 Constrained graph construction | Nodes and edges are transformed until their topology and labels match a target graph. | Create, remove, redirect, or relabel edges and nodes. | Degree limits, allowed edge types, topology, and workspace | Operations; area; node count; edge count | Medium | SpaceChem, Opus Magnum, MOLEK-SYNTEZ | M035, M038, M075 |
| M038 Type or state conversion | An operation changes an entity’s type or state while preserving selected structure or identity. | Route entities through converters or apply state-transition operators. | Allowed conversion graph; cost; position requirements | Conversion count; resource cost; cycle time | Low | Opus Magnum, shapez, Factorio | M030, M036, M118 |
| M039 Irreversible subtraction | Material, structure, or state is irreversibly removed to reach a target. | Position subtractive operators and remove only unwanted parts. | Tool reach, irreversible removal, collision | Waste; tool moves; time | Medium | shapez, Infinifactory | M031, M049, M060 |
| M040 Ordered construction dependency | A final structure can be produced only if operations occur in an order that preserves access and prerequisites. | Plan a feasible sequence around occlusion and tool reach. | Access, collision, irreversibility, support | Steps; repositioning; tool count | Medium | Opus Magnum, Infinifactory | M035, M045, M051, M063 |
| M044 Auto-replenishing sources | Puzzle inputs respawn automatically so design focuses on transformation rather than extraction. | Connect source ports and manage cadence. | Spawn rate, orientation, port position | Cycles; throughput; buffer need | Low | SpaceChem, Opus Magnum, Manufactoria | M017, M118 |
D · Spatial construction M045–M060
Does geometry create real access, routing, and timing decisions?
| Element | Description | Player action | Constraints | Optimization axes | Emerg. (editorial) | Examples to inspect | Combines with |
|---|---|---|---|---|---|---|---|
| M045 Structural support and stability | Assemblies may fall, collapse, detach, or depend on support topology. | Sequence construction and add supports or exploit gravity. | Gravity, connection strength, platform rules | Support count; mass; stability margin | High | Poly Bridge, Besiege, The Incredible Machine, Infinifactory | M033, M035 |
| M046 Discrete grid placement | Components snap to cells, making topology and distance countable. | Place, rotate, and connect pieces on a grid. | One component per cell; adjacency rules | Area; path length; symmetry | Low | SpaceChem, Opus Magnum, Factorio, shapez, TIS-100 (near-universal) | M006, M047, M108, M127 |
| M047 Hexagonal geometry | Six-neighbor geometry changes reach, rotation, packing, and collision patterns. | Plan around 60-degree directions and radial reach. | Six axes; different parity and ring distances | Area; manipulator count; rotational symmetry | Medium | Opus Magnum, MOLEK-SYNTEZ | M032, M049, M051, M108 |
| M048 3D cell construction and removal | The environment and constructed objects are composed of addressable three-dimensional cells. | Build in volume and manipulate block structures. | Grid adjacency; gravity or welding; tool reach | Volume; operations; travel distance | Medium | Infinifactory | M035, M039, M127 |
| M049 Reach-constrained programmable manipulators | A manipulator grasps, rotates, translates, and releases entities within a geometric reach. | Place manipulators and program timed manipulations. | Reach, pivot, holding state, collision | Manipulators; cycles; area; cost | High | Opus Magnum, MOLEK-SYNTEZ | M050, M051, M061, M063 |
| M050 Mobile and extensible manipulators | Manipulators extend, retract, or translate along guide paths, increasing reach at temporal or spatial cost. | Program translation and coordinate it with rotation and grabbing. | Track path, extension limit, collision envelope | Cost; cycles; reach; track length | Medium | Opus Magnum | M049, M051, M067, M108 |
| M051 Collision exclusion | Moving bodies cannot occupy the same space or intersect forbidden geometry. | Phase motions, reroute paths, or compact safely. | Body envelopes, simultaneous ticks, static obstacles | Area; cycles; clearance | High | Opus Magnum, SpaceChem, Infinifactory | M040, M049, M061, M072 |
| M059 Finite part inventory | Only a limited number of each component may be used. | Budget scarce pieces and substitute alternatives. | Hard component limits | Parts used; leftovers; area | Low | The Incredible Machine, Contraption Maker | M007, M108, M117 |
| M060 Target pose and orientation | An object must reach a specific position, orientation, or docking relation. | Manipulate pose through rotations, pushes, and constrained paths. | Collision, reach, discrete rotations | Moves; tools; clearance | Low | Opus Magnum, Infinifactory | M003, M032, M040, M051 |
E · Time & concurrency M061–M073
Can the player understand how local schedules produce global behaviour?
| Element | Description | Player action | Constraints | Optimization axes | Emerg. (editorial) | Examples to inspect | Combines with |
|---|---|---|---|---|---|---|---|
| M061 Global discrete ticks | All active components advance in synchronized time steps. | Align actions across devices and reason cycle by cycle. | Simultaneous update semantics | Cycles; latency; idle time | Medium | SpaceChem, TIS-100, Opus Magnum, Manufactoria, HRM (and every Zachtronics title) | M063, M064, M066, M072 |
| M062 Per-device timelines | Each system or manipulator receives a sequenced row of commands aligned to time. | Place commands on timelines and synchronize rows. | One command per slot; repeating program; collision | Cycles; command count; parallelism | Medium | Opus Magnum, MOLEK-SYNTEZ | M049, M061, M063, M066 |
| M063 Automatic looping programs | A finite instruction sequence repeats to create continuous behavior. | Design a loop with a stable return state. | Program counter wraps; state persists unless reset | Loop length; throughput; state complexity | Medium | SpaceChem, Opus Magnum, TIS-100 | M061, M068, M113 |
| M064 Synchronous parallel execution | Multiple actors or nodes execute concurrently under a shared clock. | Partition work and coordinate simultaneous operations. | Lockstep ticks; communication or collision constraints | Cycles; actor count; utilization | High | TIS-100, SHENZHEN I/O, 7 Billion Humans, SpaceChem | M061, M065, M066, M083 |
| M065 Blocking communication | A send or receive waits until the counterpart is ready, coupling execution timing. | Pair communication operations and avoid circular waits. | Synchronous rendezvous; port direction or locality | Cycles; communication count; deadlock risk | High | TIS-100, SHENZHEN I/O, EXAPUNKS | M064, M073, M078 |
| M066 Explicit synchronization primitives | Signals, sync points, waits, or barriers coordinate independent processes. | Insert synchronization at phase boundaries. | All required participants or conditions must align | Cycles; wait time; sync count | Medium | SpaceChem, SHENZHEN I/O, TIS-100 | M061, M064, M065, M072 |
| M067 Delay, sleep, and timer control | An actor deliberately waits or a device activates after a fixed interval. | Insert waits, tune phases, or build timers. | Discrete durations; power-state semantics | Latency; power; cycle alignment | Low | SHENZHEN I/O, TIS-100, Factorio | M062, M066, M071, M110 |
| M068 Counters and finite-state control | Stored state tracks quantities, phases, or modes across cycles. | Increment, reset, compare, and branch on state. | Finite storage; overflow; initialization | Memory; instructions; response time | Medium | SHENZHEN I/O, TIS-100, Manufactoria, Factorio | M070, M071, M074 |
| M069 Sensors and actuators | Sensors convert world state into signals; actuators convert signals into physical actions. | Place, connect, configure, and test a control loop. | Sensor range; update rate; actuator delay | Response time; sensor count; power | Medium | Factorio, SHENZHEN I/O, ONI | M070, M071 |
| M070 Conditional execution and gates | Actions occur only when a comparison or predicate is true. | Write branches or configure gates and filters. | Limited predicates; evaluation timing | Instructions; gates; latency | Low | TIS-100, SHENZHEN I/O, HRM, Manufactoria, Factorio | M014, M068, M086, M100 |
| M071 Event-triggered activation | A discrete event starts a device or chain rather than continuous polling. | Wire triggers, switches, sensors, or one-shot events. | Trigger polarity, one-shot/reset behavior, propagation delay | Latency; trigger count; reliability | Medium | Factorio, The Incredible Machine, Mindustry | M067, M069 |
| M072 Race conditions and timing hazards | Correctness depends on relative arrival or execution order among independent processes. | Eliminate nondeterminism or engineer safe timing margins. | Scheduling semantics; variable latency; shared access | Worst-case latency; margin; determinism | High | TIS-100, SHENZHEN I/O, EXAPUNKS, Factorio | M009, M065, M073 |
| M073 Deadlock and livelock | Processes wait cyclically or keep moving without making progress. | Detect wait cycles and redesign resource acquisition or routing. | Blocking channels, finite buffers, exclusive blocks | Liveness; buffer count; protocol simplicity | High | TIS-100, SHENZHEN I/O, Factorio (rail deadlocks) | M017, M065, M113 |
F · Programming & information M074–M093
How much behaviour can the player express with a deliberately poor language?
| Element | Description | Player action | Constraints | Optimization axes | Emerg. (editorial) | Examples to inspect | Combines with |
|---|---|---|---|---|---|---|---|
| M074 Minimal instruction vocabulary | Programs use a compact set of moves, arithmetic, jumps, and I/O operations. | Write or drag instructions and manage low-level state. | Few instructions; explicit state; no high-level data structures | Instruction count; cycles; nodes | Low | TIS-100, SHENZHEN I/O, EXAPUNKS, HRM, 7 Billion Humans | M076, M085, M086, M109 |
| M075 Spatially encoded control flow | An execution token moves through placed commands, so geometry encodes control flow. | Lay command paths, loops, branches, and crossings. | Grid space; path continuity; simultaneous tokens | Area; path length; cycles | High | SpaceChem, Manufactoria, Opus Magnum | M011, M046, M063, M088 |
| M076 Limited local state | Programs have only a few registers, cells, or local storage slots. | Reuse state, encode values compactly, and spill to the environment. | Fixed registers, destructive reads, address limits | Memory cells; instructions; cycles | Medium | TIS-100, SHENZHEN I/O, EXAPUNKS, HRM | M074, M077, M080, M109 |
| M077 Environment as persistent state | Values are stored in floor tiles, objects, channels, queues, or spatial positions. | Write, retrieve, and organize data physically. | Addressability, travel time, occupancy | Space; movement; access latency | Medium | HRM, 7 Billion Humans, EXAPUNKS | M016, M076, M083, M088 |
| M078 Neighbor-to-neighbor message passing | Nodes communicate only through local ports to adjacent nodes. | Route values across a network of processors. | Topology, blocking semantics, no global memory | Cycles; hops; nodes; congestion | High | TIS-100, SHENZHEN I/O | M065, M079, M090 |
| M079 Local versus global communication channels | Different channels have different scope, addressing, or contention rules. | Choose where to communicate and isolate protocols. | Scope, collision/contention, endpoint count | Traffic; latency; channel count | Medium | SHENZHEN I/O, TIS-100 | M065, M078, M081 |
| M080 Sequential data objects and cursors | Data exists as objects with sequences, cursors, ownership, or host location. | Open, read, write, seek, move, copy, or delete data. | Capacity, access rights, location, cursor semantics | Instructions; movement; file size | Low | EXAPUNKS, TIS-100 | M076, M081, M082, M103 |
| M081 Mobile agents in a network | Programs inhabit hosts and move between them to act on local data or devices. | Program movement, coordination, and local operations. | Host capacity, link topology, local visibility | Cycles; movement; agents; code size | High | EXAPUNKS | M079, M080, M082 |
| M082 Agent replication or spawning | A running process creates a copy that continues independently from a defined state. | Fork workers and assign parallel roles. | Spawn limits, shared resources, termination, inherited instruction pointer | Cycles; agent count; code size | High | EXAPUNKS | M064, M081, M083 |
| M083 Shared policy across many agents | A homogeneous program controls many agents, each branching from local state. | Write a universal policy instead of scripting individuals. | No per-agent code; collisions; limited communication | Seconds/cycles; instructions; workers used | High | 7 Billion Humans, EXAPUNKS | M064, M077, M084, M100 |
| M084 Local perception and neighborhood queries | Actors sense nearby tiles, values, obstacles, or peers rather than a global map. | Branch on local surroundings and navigate. | Range, orientation, partial observability | Instructions; sensing steps; robustness | Medium | 7 Billion Humans | M069, M083, M101, M113 |
| M085 Jumps, loops, and control flow | Program-counter changes implement repetition and branching. | Create labels, jumps, loops, and termination paths. | Label limits; no structured syntax; fall-through | Instructions; cycles; branch count | Low | HRM, TIS-100, EXAPUNKS, 7 Billion Humans | M063, M070, M074, M087 |
| M086 Arithmetic, comparison, and data transformation | Operations transform numeric or symbolic values and test relations. | Compute, normalize, compare, encode, or decode values. | Token size, instruction set, overflow, destructive operations | Cycles; instruction count; range | Low | TIS-100, SHENZHEN I/O, EXAPUNKS, HRM | M068, M070, M074, M103 |
| M087 Subroutines, modules, and reusable macros | A solved transformation is encapsulated and reused as a component. | Define interfaces, call modules, or stamp blueprints. | Port count, call semantics, blueprint cost, hidden internals | Reuse; area; code duplication; scalability | Medium | HRM, EXAPUNKS, Factorio (blueprints) | M001, M126 |
| M088 Routing graph as finite-state machine | An entity’s path through readers, branches, and loops encodes automaton state. | Build a routing graph that accepts, rejects, or transforms sequences. | Reader semantics; path geometry; finite routing states | Area; parts; steps | Medium | Manufactoria, EXAPUNKS | M075, M089, M103, M104 |
| M089 Sequential symbol read/consume/write | A sequence carried by an entity can be inspected, consumed, and appended. | Route through readers and printers to manipulate the sequence. | Reader may consume; writer appends; queue order | Steps; components; string robustness | Medium | Manufactoria, TIS-100, EXAPUNKS | M014, M080, M088, M103 |
| M090 Primitive logic-network construction | Primitive logical operators, memory elements, and links are arranged into a functioning network. | Place primitives and route connections. | Port compatibility, connection topology, propagation, and component limits | Area; gates; delay; power | High | Turing Complete, Silicon Zeroes, Factorio (combinators), MHRD | M006, M078, M091, M109 |
| M091 Heterogeneous signal interfaces | Signals differ in width, encoding, direction, timing, or electrical behavior. | Select ports, convert formats, and coordinate sender/receiver roles. | Range, direction, blocking, pin count | Pins; conversion parts; latency | Low | SHENZHEN I/O, Turing Complete | M065, M079, M090 |
| M093 User-authored scripting or programmable devices | The game exposes a language or editor for custom logic beyond fixed puzzle pieces. | Write scripts, define chips, or author control programs. | Sandbox security, instruction limits, API scope | Code size; performance; reuse | Medium | Factorio (mods), EXAPUNKS (Redshift) | M087, M090, M126, M128 |
G · Rule manipulation & deduction M094–M104
Is the player manipulating objects, or the rules themselves? This can be powerful, but it attacks the stable core the player relies on. Make it foundational or leave it out.
| Element | Description | Player action | Constraints | Optimization axes | Emerg. (editorial) | Examples to inspect | Combines with |
|---|---|---|---|---|---|---|---|
| M094 Movable rule tokens | Rule tokens are spatial objects that can be moved to alter active rules. | Rearrange rule tokens while navigating the same space. | Rule tokens may be movable; grammar must remain valid | Moves; rule count; accessibility | High | Baba Is You | M095, M097, M101, M104 |
| M095 Grammar-driven rule activation | Only grammatically valid arrangements of rule tokens become active rules. | Construct or break clauses using entity, relation, property, connector, and condition tokens. | Grammar, reading direction, connectors, overlap | Moves; clauses; rule economy | High | Baba Is You | M094, M096, M100, M101 |
| M096 Dynamic property assignment | Rules assign behaviors or interaction properties to entity classes. | Assign or remove properties by editing rules. | Conflicting properties, rule precedence, object existence | Moves; number of active properties | High | Baba Is You | M095, M098, M099, M100 |
| M097 Rule-driven entity transformation | A rule transforms all matching entities or classes, possibly recursively. | Create, sequence, or prevent transformations. | Simultaneous replacement; cycles; object spawning/destruction | Moves; object count; stability | High | Baba Is You | M038, M094, M101 |
| M098 Reassignable control identity | The set of directly controlled entities is determined by rules rather than fixed identity. | Assign control to one or more entity classes. | At least one controllable object needed; simultaneous movement | Moves; controllable count | Medium | Baba Is You | M096, M099, M101, M113 |
| M099 Reassignable objective and failure semantics | Objective, failure, blocking, removal, or interaction semantics can be reassigned among entities. | Redefine which states or interactions count as success, failure, or hazard. | Rules must be spatially reachable and remain valid | Moves; rule edits | High | Baba Is You | M095, M096, M100, M101 |
| M100 Rule conjunction, negation, and conditions | Rules combine classes and properties or apply only under relational conditions. | Build compound clauses and reason about exceptions. | Grammar and precedence; potentially global scope | Moves; clause count; generality | High | Baba Is You | M070, M095, M101, M104 |
| M101 Self-reference and meta-level manipulation | Rules or objects can refer to the level, text, groups, or themselves, changing the puzzle’s representational layer. | Exploit self-reference, nesting, or world-as-object operations. | Paradox prevention; recursion semantics; level boundaries | Moves; rule depth; representation layers | High | Baba Is You | M026, M094, M097, M127 |
| M102 Numeric-clue spatial deduction | Row, column, region, or adjacency clues constrain which cells contain objects. | Mark cells and propagate forced consequences. | Global consistency; limited object counts; local rules | Mistakes; hints; deduction depth | Medium | Last Call BBS | M103, M104, M117, M119 |
| M103 Accept/reject classifier | Inputs are routed to success or failure outputs according to a predicate. | Build a recognizer or classifier that handles all examples. | No false positives/negatives; finite system resources | Accuracy; steps; area; generality | Medium | Manufactoria, TIS-100, EXAPUNKS | M002, M014, M088, M104 |
| M104 Constraint propagation and search | Local restrictions interact until choices become forced or a branch must be explored. | Derive consequences, backtrack, and preserve invariants. | Finite domains; global consistency; irreversible moves in some games | Moves; guesses; deduction depth | High | Cosmic Express, Baba Is You | M008, M102, M113 |
H · Optimization & architecture M105–M117
Do different priorities produce visibly different machines?
| Element | Description | Player action | Constraints | Optimization axes | Emerg. (editorial) | Examples to inspect | Combines with |
|---|---|---|---|---|---|---|---|
| M105 Multi-objective benchmark distributions | Solutions are plotted against community or benchmark distributions on several axes. | Compare, redesign, and choose which metric to optimize. | Metrics often conflict; no single total score | Cost; cycles; area; instructions; power | Low | Opus Magnum, TIS-100, SHENZHEN I/O, SpaceChem, EXAPUNKS | M106, M107, M108, M114 |
| M106 Speed, latency, or cycle minimization | Players reduce time from input to completion or increase rate. | Parallelize work, shorten paths, remove waits, pipeline stages. | Correctness must remain; resource budget may increase | Cycles; latency; rate | Low | Opus Magnum, SpaceChem, TIS-100 | M061, M064, M113 |
| M107 Component cost minimization | Parts, components, manipulators, chips, or materials have explicit or implicit costs. | Replace expensive components and share resources. | Cost table; fixed infrastructure; trade-off with speed | Currency; parts; system tiers | Low | SHENZHEN I/O, Opus Magnum | M059, M108, M110 |
| M108 Area, volume, and footprint minimization | The occupied bounding box or build area is scored or constrained. | Pack components, share paths, and exploit geometry. | Collision, wire routing, access, bounded board | Area; volume; width/height | Low | Opus Magnum, TIS-100, SpaceChem | M006, M027, M047 |
| M109 Instruction-count minimization | Programs are scored by source instructions or programmed slots. | Factor repeated logic, exploit semantics, and remove redundancy. | Limited instruction set; labels may count differently | Instructions; symbols; nodes | Low | TIS-100, SHENZHEN I/O, EXAPUNKS, HRM | M074, M085, M087, M114 |
| M110 Energy and power optimization | Devices consume energy during operation, sleep, movement, or idle time. | Choose efficient devices, schedule sleep, and balance generation. | Generation capacity, peak load, battery/storage, heat | Energy per item; peak power; generation footprint | Medium | SHENZHEN I/O, Factorio, ONI | M067 |
| M113 Robustness and correctness margin | A solution is valued for handling varied timing, inputs, or disturbances without failure. | Add buffering, synchronization, redundancy, and generalized logic. | Worst-case timing, hidden cases, finite resources | Worst-case cycles; buffer margin; success rate | Medium | TIS-100, SHENZHEN I/O, EXAPUNKS | M002, M016, M072 |
| M114 Elegance, legibility, and aesthetic optimization | Players pursue symmetry, choreography, simplicity, or shareable visual appeal beyond formal score. | Polish layout, timing, and presentation. | Subjective audience norms; sometimes GIF export | Symmetry; clarity; choreography; originality | Low | Opus Magnum, Factorio, Poly Bridge | M005, M105, M126 |
| M117 Optional optimization challenges | A level can be completed for correctness, with extra thresholds for size, speed, or elegance. | Return to refine a working solution. | Thresholds may be mutually incompatible | Any selected metric | Low | HRM, 7 Billion Humans, EXAPUNKS | M105, M106, M109, M120 |
I · Progression, pressure & meta M118–M135
Does this deepen construction, or compete with it? These rows pace, frame, and contextualize construction rather than extend it. Several sit at the presentation boundary the guide draws up front, so include them deliberately.
| Element | Description | Player action | Constraints | Optimization axes | Emerg. (editorial) | Examples to inspect | Combines with |
|---|---|---|---|---|---|---|---|
| M118 Capability unlock graph | New components, operations, interfaces, or scale layers unlock through milestones. | Meet prerequisites, choose unlock paths, and integrate new capabilities. | Prerequisites, research cost, branch choices | Unlock order; research throughput; opportunity cost | Low | Factorio, Satisfactory, Mindustry | M030, M119 |
| M119 Mechanic-isolating curriculum | Levels introduce one concept, then combine it with earlier mechanics. | Solve scaffolded tasks of increasing composition depth. | Ordered progression; gated content | Learning efficiency; hint use | Low | SpaceChem, HRM, Baba Is You, Manufactoria (and every Zachtronics title) | M007, M102, M117, M120 |
| M120 Branching and optional puzzle progression | Players choose among problems or skip advanced challenges while still advancing. | Select a route through the campaign. | Prerequisites; optional nodes; narrative gates | Completion; optional mastery | Low | Opus Magnum, Cosmic Express, Baba Is You | M117, M118, M119, M129 |
| M126 Sandbox, editor, and community sharing | Players author levels, export solutions, share blueprints, or build without campaign constraints. | Create, publish, import, remix, and compare. | Editor limits, version compatibility, moderation | Originality; clarity; adoption | Low | Factorio, Opus Magnum, shapez, Baba Is You | M005, M087, M114 |
| M127 Embodied inspection and construction | The player occupies a position in the simulated space and must move to inspect, construct, or repair systems. | Navigate, place tools, inspect local state, and access components. | Travel time, line of sight, reach, hazards | Build time; travel; accessibility; aesthetics | Low | Satisfactory, Infinifactory | M048, M114 |
| M128 Embedded reference documentation | Rules and interfaces are learned through embedded reference material rather than exhaustive tutorialization. | Read documentation and translate it into experiments. | Incomplete examples; terminology; cross-referencing | Lookup time; retained understanding | Low | SHENZHEN I/O, TIS-100, EXAPUNKS | M009, M093, M119, M129 |
| M129 Context-framed progression and delayed access | Capabilities are presented through a contextual interface and may become available gradually. | Explore the interface, inspect messages or status, and progress toward access. | Time gates, story sequence, framed interface | Discovery; completion | Low | EXAPUNKS, Last Call BBS, SHENZHEN I/O | M120, M128, M126 |
| M131 Continuous ambient dataflow animation | Entities and values are rendered continuously moving through the system, so a running system explains itself without stepping. | Watch the system run and spot anomalies visually. | Rendering fidelity; visual density at scale | Legibility; observability | Low | Factorio, shapez, Opus Magnum, SpaceChem, Manufactoria | M008, M009, M011 |
| M133 In-world diversion / minigame pacing | Built-in secondary minigames (card, solitaire, idle) sit beside the main puzzles as in-fiction rest. | Take an in-world break at a self-contained minigame. | The minigame's own rules | Streaks (soft) | Low | SHENZHEN I/O, Opus Magnum, Last Call BBS, EXAPUNKS | M129, M134 |
| M134 Diegetic multi-game shell | The product is a fictional device or OS containing several distinct sub-games the player moves between. | Switch context between toys within a framed console/OS. | Each sub-game's own rules | Per-sub-game | Low | Last Call BBS, EXAPUNKS (Redshift) | M128, M129, M133 |
| M135 Assembly-into-world narrative payoff | The player’s solved machines and products visibly feed the game world or story, answering “why am I building this?” | Solve, then watch products appear in the world or cutscenes. | Authoring cost | Not applicable | Low | Infinifactory, shapez, Factorio, Opus Magnum | M118, M129 |
B · Games
This is a selected play list, not a complete studio catalogue or an attempt to settle the genre boundary.
Zachtronics lineage
Precursors
- The Bureau of Steam Engineering · 2009
- The Codex of Alchemical Engineering · 2009
- The Magnum Opus Challenge · 2009
- KOHCTPYKTOP: Engineer of the People · 2009
Commercial games
- SpaceChem · 2011
- Infinifactory · 2015
- TIS-100 · 2015
- SHENZHEN I/O · 2016
- Opus Magnum · 2017
- EXAPUNKS · 2018
- MOLEK-SYNTEZ · 2019
Open-ended games in Last Call BBS
- 20th Century Food Court · 2022
- ChipWizard Professional · 2022
- X'BPGH: The Forbidden Path · 2022
Direct continuation
- Kaizen: A Factory Story · 2025
- U.V.S. Nirmana · 2026
Selected Zachlikes
- Manufactoria · 2010
- Human Resource Machine · 2015
- Prime Mover · 2018
- 7 Billion Humans · 2018
- Comet 64 · 2021
- Turing Complete · 2021 · Early Access
- The Signal State · 2021
- Alan's Automaton Workshop · 2022
- Manufactoria 2022 · 2022
- SIC-1 · 2022
- SOKOBOT · 2022
- Stack Machines · 2023
- SokoCode · 2023
- Neon Noodles · 2023
- Word Factori · 2023
- Hexahedra · 2024
- ABI-DOS · 2024
- 1000-BIT · 2025
C · Sources
This guide makes a design argument. It isn't a literature review. These primary sources let you inspect how shipped puzzle systems were designed and discussed, but none of them establishes a universal recipe.
| Source | What to inspect | Relevant chapter |
|---|---|---|
| ZACH-LIKE (2019) | Design documents, rules, puzzles, interfaces, and production artifacts across Zachtronics games | all chapters |
| Open-Ended Puzzle Design at Zachtronics, GDC 2019 | Authoring from a specification and working foundations without prescribing one construction | §4 |
| SpaceChem postmortem | Specification-first authoring, logical uniqueness, antagonistic metrics, histograms, tutorial failures, and campaign length | §4, §6, §7, §9 |
| SpaceChem's Zach Barth on educational games and tutorial design | MDA, original programming paradigms, minimum solution complexity, and verifying puzzles not solved by their author | §2, §4, §6 |
| Road to the IGF: Infinifactory | Inventing and cutting mechanics according to whether they improve open-ended puzzles | §2, §3 |
| Building an Infinifactory | Crude-to-elegant solution spectra, score distributions, story cohesion, and Early Access feedback | §4, §7, §8, §9 |
| Designing TIS-100 | A tiny distributed language, printable manual, and story embedded in a technical artifact | §2, §3, §5, §8 |
| Designing SHENZHEN I/O | Work fantasy, product-derived briefs, constrained electronics, manuals, and niche audience choices | §1, §2, §8 |
| Building personality into Opus Magnum | Story-mechanic collaboration and the origin and design of the looping GIF exporter | §7, §8 |
| Draknek & Friends, Episode 35: Zach Barth, 2025 | Kaizen's approachability work, reinforcement puzzles, tutorial testing, and story-led puzzle briefs | §4, §6, §8, §9 |
| Reading the Rules of Baba Is You, GDC 2020 | Implementing and iterating a system whose rules are manipulable objects | §2, §3 |
| Truth in Game Design, GDC Europe 2011 | An argument for discovering consequences in algorithmic systems | §3 |
| Factorio Friday Facts | Design notes on belts, splitters, and rail signals as capacity and arbitration problems in a shipped system | §3 |
I have linked talks and interviews in full rather than reducing them to isolated quotations. Treat the game examples in the guide and catalog as concrete cases to inspect, not as proof that an element began in one title or that one implementation is universal.