Skip to content
About
Main content

Seven root causes: why trade-offs exist at all

Here is the one-sentence summary of this whole mechanism:

A hard drive, a flash chip, a memory cell and a magnetic tape all hold bits, and all face the same conflict: "I want writing to be easy, but I want the data to never be lost." These two wishes pull in opposite directions.

This is not an engineering failure, and there is no "universal memory" waiting to be invented. The conflicts are structural. They exist at seven different depths, from "physics forbids it" to "the market did not pay for it." The skill is knowing which depth a trade-off lives at. The deep ones are permanent. The shallow ones can change.

CauseComes fromPermanent?Derived in
0 Stability vs. mutabilityPhysics (energy barriers)YesStorage media
1 DistanceGeometry and the speed of lightYesCPU and memory, the network
2 Low cost forces Economics of shared machineryEssentially yesStorage media
3 Fixed cost per operationHow every mechanism worksEssentially yesStorage media
4 Order is expensive to maintainInformation theoryYesData structures
5 You must decide before you knowDecisions under uncertaintyYesStorage media
6 The marketIndustryNo — changes over a decadeStorage media

Cause 0 — Stability versus mutability

To store one bit you need a physical object with two stable states and a hill between them. Retention, write speed, write energy and are not four separate properties. They are one dial. Being non-volatile means resisting change. Being fast to write means being easy to change. (The derivation.)


Cause 1 — Distance: close or big, not both

Bits take up space. More capacity means more volume, so on average the bits are farther from whatever uses them, and signals travel about 15–20 cm per nanosecond. So the memory hierarchy (small and fast near the CPU, big and slow far away) is not a design pattern someone chose. It is a consequence of the fact that capacity needs space and space needs time. (Inside one machine; across a network.)


Cause 2 — Low cost forces coarse granularity

The mechanism is expensive and the medium is cheap, so a low price per bit means many bits share one mechanism, and bits that share a mechanism must be operated on together. The price ladder and the ladder are the same ladder. This cause produces every factor you will ever measure: write amplification in flash, zone rewrites in disks and the small-files problem in object storage are one problem at four price points. (The derivation.)


Cause 3 — Fixed cost per operation: latency versus throughput

Every mechanism has a setup cost that is paid for each operation, whatever its size. So every medium has a natural transfer size, and trades for . (The derivation.) Latency and throughput are connected by concurrency, not opposed: that is Little's Law.


Cause 4 — Order is expensive to maintain

This one is not physics. It is information.

Writing is easy if you do not care where data lands: add it at the end. Reading needs to know where things are, which needs structure (sorting, an index). And structure must be kept up to date when data changes. So the work of "knowing where things are" is paid at write time, at read time, or in space.

This three-way trade is the (Read, Update, Memory — you can optimize at most two). It explains why read-optimized and write-optimized designs are opposites, and why every physical layout is a bet on an access pattern: data sorted by user_id is not sorted by timestamp.


Cause 5 — You must decide before you know

Under the read/write tension there is a sharper problem: you place data before you know how it will be read.

With perfect knowledge of all future queries, most trade-offs would disappear. You would put each byte in the perfect place. The trade-off exists because you decide with incomplete information. The alternative is to delay the decision, and delay costs an that records what you decided later.

This is why one architecture appears again and again, at every scale:

Every medium that cannot update in place grew it: the on flash, zone mapping on SMR disks, manifests on object storage (the table).

Each buys the freedom to place data late, and pays with a lookup table plus a cleanup process. And in each case the eventually becomes the operational problem, because delayed decisions pile up.

What the collector costs

A copying collector reclaims a unit by moving the live records out of it. If a unit is a fraction u live, you move u bytes to free (1 − u) bytes. The cost per byte reclaimed is

u (live fraction of the unit)
— the fraction of its pages that are still valid
  • At u = 0.5: 0.5 ÷ 0.5 = 1 byte moved per byte freed.
  • At u = 0.9: 0.9 ÷ 0.1 = 9 bytes.
  • At u = 0.98: 0.98 ÷ 0.02 = 49 bytes.

(Another way to see it: to write one new byte you must also move u/(1−u) old bytes, so total write amplification is 1 + u/(1−u) = 1/(1−u). This is the same formula as SSD write amplification, 1/(1−v).)

The function is hyperbolic. It does not degrade smoothly. It detonates, and it does so near full , which is exactly where operational pressure pushes you.

This single expression is SSD write amplification, LSM space-amplification tuning and the survivor-copy cost of generational garbage collection. It also explains a design rule that looks like waste and is not:

SSD (hidden spare capacity), LSM space-amplification targets, JVM heap headroom and "keep your warehouse tables under X% full" are the same knob with four vocabularies.

So the pattern has a quantitative clause: every immutable substrate grows an indirection layer plus a collector, and that collector costs u/(1−u) per byte reclaimed, so utilization is a price and not a virtue.


Cause 6 — Economics

Chip factories cost tens of billions of dollars and only pay off at huge volume. A technology that is physically better but has no market dies anyway. Intel Optane was excellent, and Intel stopped it in 2022. Meanwhile 3D NAND got cheaper not by better physics but by stacking more layers, which is a manufacturing story.

So some trade-offs depend on today's industry and will change within a decade. Learn to separate them from Causes 0–2, which will not.


Costs are conserved, never removed

Every design that seems to remove a cost has moved it: across time, space, energy, money, complexity, or to someone else (writer vs. reader, device vs. host, build time vs. run time, your team vs. the on-call team).

  • LSM-trees do not remove write amplification. They move it from the device into background .
  • Compression does not remove space cost. It turns it into CPU cost.

When you hear "free win", do not ask "is it true?" Ask If nobody can answer, it is marketing.