Here is a frame for thinking about infrastructure that, once you have it, is hard to put down: every durable primitive you can name was someone’s answer to a cost being paid over and over. The primitive didn’t make the work faster. It made some recurring cost go away, or made it payable once instead of many times, and the savings were large enough that nobody wanted to go back. This frame is useful for two reasons. It explains why certain primitives stuck and others didn’t. And it predicts, roughly, where the next ones are coming from — because it tells you what to look for.Documentation Index
Fetch the complete documentation index at: https://docs.vers.sh/llms.txt
Use this file to discover all available pages before exploring further.
The pattern
Pick any primitive that became part of the standard infrastructure toolkit. Ask: what cost was being paid before this primitive existed? The answer is always concrete, always something programmers were doing by hand, and always something the primitive made go away or made marginal. Indexes. Before indexes, every query against a table scanned the table. The cost was linear in the table size, paid per query. An index pays a bounded cost at write time to amortize scans at read time. The recurring cost — the scan — goes away. What’s left is a small, predictable lookup. Caches. Before caches, every derived value was recomputed each time it was needed. The cost was in the recomputation, paid per read. A cache pays a one-time cost to store the result and makes every subsequent read cheap. The primitive didn’t make the computation faster; it made the repeated computation go away. CDNs. Before CDNs, every request for a static asset made a round trip to the origin server. The cost was in the latency and bandwidth of that round trip, paid per request. A CDN pays a one-time replication cost and turns every subsequent request into a short local hop. The work didn’t get faster; the recurring cost of doing it far away got paid once, per edge location, forever. Virtual memory. Before virtual memory, programs had to manage physical RAM directly, paging things in and out with explicit system calls. The cost was in the programmer’s time to reason about memory locations and in the bugs that arose when they got it wrong. Virtual memory pays a modest per-access tax (a TLB lookup) and in exchange makes the entire class of “manage your own physical memory” work go away. Garbage collection. Before GC, every program had to track every allocation and free it by hand. The cost was in programmer attention and in the bugs that arose from forgetting. GC pays runtime overhead and sporadic pause time to make the tracking go away. Connection pools. Before connection pools, every database query opened a new TCP connection and negotiated a new TLS handshake. The cost was tens of milliseconds of handshake per query, paid per query. A pool pays a one-time handshake cost and reuses the connection. Queries went from “network round-trip plus handshake plus result” to “result,” and databases suddenly seemed dramatically faster. Package managers. Before package managers, every programmer installing a dependency had to find the source, download it, build it, resolve its transitive dependencies by reading its README. The cost was in each installation, paid per dependency per project. A package manager pays a one-time cost to index the world’s code and turns installation into a single command. DNS. Before DNS, every networked program had to know the IP addresses of the machines it talked to. The cost was in human memory and in the changes needed every time an address changed. DNS pays a small query tax per lookup to make the human-readable name work, and the cost of maintaining a mental map of IP addresses goes away. JIT compilation. Before JIT, interpreted languages paid the cost of interpretation on every instruction. JIT pays a compile-time cost (both in wall-time and in memory) to amortize the per-instruction cost of interpretation. The work the CPU does isn’t faster; the number of times you do that work per program execution drops by orders of magnitude.fork(). Before fork(), creating a new process meant specifying a program and getting a fresh process built around it. The cost was in re-establishing all the state the new process wanted — file descriptors, environment, memory. fork() makes the new process start with all the state the parent had, paying a (with copy-on-write, near-zero) duplication cost in exchange for the entire class of “set up the child’s context from scratch” work going away.
git. Before git, collaboration meant mailing patches, dealing with merge tooling that lost history, working in lockstep with centralized servers. The cost was in coordination, paid per contribution. Git pays a per-object content-addressing cost and in exchange makes offline work, untrusted replication, and cheap branching all free. The actual code didn’t get better; the cost of working on it with other people collapsed.
Container images. Before container images, dev/prod drift was endless and every new deployment re-derived the environment from a mix of scripts, configuration management, and apology emails. Container images pay a build-time cost and turn “recreate this environment” into “pull and run this hash.” The deployment isn’t faster; the reconstruction is amortized.
Kubernetes. Before orchestration, running a service at scale meant hand-rolled scripts to schedule containers across nodes, detect failures, restart crashed workers, balance load. The cost was in operational labor, paid continuously. Orchestrators pay with configuration complexity and a control-plane overhead to make the per-deployment labor go away.
Pick any of them. Ask what cost they eliminated. The story is always the same shape: a recurring cost you were paying turned into a one-time cost you pay at a different moment, and the difference is the savings compounded over every use of the primitive forever.
Why this frame is useful
The frame is useful in two directions. Looking backward, it explains why certain primitives stuck and others didn’t. Primitives that successfully eliminated recurring costs became indispensable; primitives that just made existing work slightly more convenient faded. The infrastructure graveyard is full of ideas that were clever but didn’t make a cost go away. The winners all have the same shape. Looking forward, it predicts where the next primitive is likely to come from. The recipe is:- Identify a cost being paid over and over in the current era of infrastructure.
- Check whether someone has named it yet — if the cost is unnamed, it’s easier to not see.
- Ask what it would take to pay that cost once instead of every time.
- That answer, made cheap enough to be a hot-path primitive, is the next thing.
The tell
One tell of an about-to-emerge primitive: you can find developers who have built custom, fragile, per-project workarounds for the same cost.- Before package managers: every project had a
./install.shthat downloaded the world. - Before CI/CD: every team had a developer who was the “build person.”
- Before container images: every company had a runbook for re-provisioning servers.
- Before version control: every programmer had a
code-backup-2004-11-13/directory.
The Vers-shaped cost
Here’s the cost this essay is, if you’re being honest, designed to make you notice: rebuilding state. Nobody logs the time they spent re-provisioning a test environment, reseeding a database, re-warming a cache, re-navigating an app to the page where a bug reproduces. It’s not on the calendar. It’s in the cracks between the scheduled work. For most engineers, it’s thirty to sixty percent of the week. For debugging-heavy work, it’s more. For teams building agent systems, where every worker accumulates filesystem state, running processes, loaded models, and session tokens, it’s the dominant cost and nobody has named it yet. The workaround, today, is ad hoc: custom scripts to spin up dev environments, seed scripts to populate databases, golden AMIs baked by hand, careful runbooks to recreate production state. Every sophisticated team has some version of this, built for themselves, maintained at a cost nobody wants to talk about. The pattern is identical to “before package managers, every project had its own install script.” A primitive that lets you branch state in microseconds, commit it as a content-addressable snapshot, and restore it anywhere is the thing that consolidates all those workarounds. It’s the “of course” that will be obvious in retrospect. The state isn’t something you rebuild; it’s a value you branch from, like a git commit. The recurring cost of reconstruction goes away. That’s what Vers is. Not because Vers is an especially clever VM hypervisor — there are many good VM hypervisors — but because the primitive it exposes eliminates a cost that infrastructure has been quietly accumulating for twenty years. Once you have it, the shape of the work changes. You stop budgeting for the setup tax. You stop choosing workflows around the fact that reproduction is expensive. You do the things you wouldn’t have done before, because the cost was too high to justify. That’s how primitives work. That’s the whole pattern. The interesting question isn’t whether branchable state is useful — it obviously is — it’s what else you’ll be able to do with it once it’s cheap enough to use without thinking.What’s next
The frame gives you a way to evaluate new infrastructure proposals. When you see one, ask:- What recurring cost does this eliminate?
- Is the cost being paid frequently enough that eliminating it matters?
- Is the primitive cheap enough that it can live in the hot path, not just in occasional batch jobs?
Further reading
A short history of fork()
The canonical example: a primitive that killed the “rebuild the process state from scratch” cost and became the shape of Unix.
The cost of rebuilding state
The other side of this essay: the concrete, per-engineer cost that branchable state kills.
Content-addressable everything
Git as the consolidation of per-project version-control hacks into a general primitive.
Core concepts
The user-facing model of the primitive discussed here.