Skip to content

Production Data Systems Handbook / Chapter 2

Workload Fingerprints: Requirements Before Products

Turn vague scale and reliability language into a workload fingerprint that can drive database and architecture decisions.

Two Fast Systems

Two teams enter an architecture review asking for the same thing: low-latency reads at launch scale.

The first owns checkout. Its important read assembles an account and cart before payment. At the promotional peak, the page should meet a 50 ms p99 target and reflect the item the customer just added. A retry must not create a second order. Confirmed inventory cannot fall below zero. Payment callbacks can arrive late or twice. Order records remain for years, while search and finance need derived copies.

The second owns a product analytics dashboard. Its important read aggregates events by time range, tenant, plan, feature, and country. A one-second p95 is acceptable for common interactions, and the data may be five minutes old if the interface shows that clearly. Ingest is append-heavy. Late events are allowed within a bounded window. Raw events expire sooner than rollups. Scan volume, repeated queries, and retention dominate cost.

Both systems need fast reads. That fact barely helps.

Checkout is constrained by tail latency, read-your-writes behavior, contention, idempotency, and cross-system reconciliation. The dashboard is constrained by aggregation shape, freshness, ingest backpressure, late data, retention, and query cost. A product benchmark cannot resolve the difference because the benchmark does not know what either system is trying to preserve.

A workload fingerprint supplies the missing shape. It describes the facts, operations, time windows, failure tolerance, and operating constraints that a design must satisfy. Products come later, when there is something concrete for them to answer.

A workload fingerprint matrix lists dimensions such as data shape, read path, write path, latency, consistency, durability, availability, retention, compliance, cost, operations, and migration, then maps filled requirements to trade-off comparison and technology choice.
A workload fingerprint makes database choice inspectable: requirements are filled first, trade-offs are compared second, and products are named last.

Begin With the Claim

Start with the business fact the system is responsible for preserving. An order service may claim that an order was accepted, payment was captured, inventory was reserved, and a refund was issued. The analytics system may claim that an event came from a particular tenant at a particular time and that a published total includes all events through a named watermark.

This question disciplines the rest of the fingerprint. It separates authoritative state from copies and clarifies which errors are merely inconvenient and which break money, access, safety, compliance, or trust.

Then describe the data that carries those facts. Production systems rarely have one shape. The order service may combine mutable order entities, append-only payment events, searchable support documents, analytical facts, and invoice blobs. For each important shape, record its identity and lifecycle:

  • Is it mutable state, an immutable event, a document, relationship, measurement, blob, log, vector, or derived aggregate?
  • Is correction an update, a compensating fact, or a new version?
  • How long is it hot, retained, archived, or legally held?
  • Which copies can be rebuilt, and which have become evidence?
  • How does deletion reach indexes, caches, exports, analytics, and backups?

A system that accepts inserts beautifully can still fail its workload through historical backfills, archive restores, index rebuilds, tenant exports, or deletion proof. Lifecycle is part of the design, not cleanup after launch.

Describe Operations, Not Capabilities

“Reads must be fast” becomes useful only when it names a read.

For each consequential path, identify the caller and the operation: point lookup, range scan, join, feed page, search, aggregation, traversal, similarity search, export, or stream subscription. Add the expected result size, concurrency, freshness, authorization boundary, and behavior under pressure. A support query used by ten agents is different from the same query placed on every customer page.

Latency and freshness must be written together. A cache may meet a 30 ms target by serving state five minutes old. A replica may absorb traffic while failing a customer’s expectation that the next screen reflects the write they just made. Neither design is right or wrong until the operation says how much staleness it permits.

Write paths need the same treatment. Name the commands—create, update, append, import, upsert, delete, backfill, or manual correction—then record peak rate, burst duration, contention, transaction boundary, retry behavior, ordering, and side effects. A modest write rate can be difficult when every command touches one hot account. Millions of independent measurements can be simpler when they append to separate partitions and late arrival is acceptable.

Pay particular attention to paths that normal traffic diagrams omit. A migration, webhook, support tool, replay, or bulk correction can violate the same facts as the application. If it writes production state, it belongs in the workload.

Make Failure Tolerance Explicit

Broad consistency labels hide the decisions the fingerprint needs to expose. Write what may actually happen:

  • Can two writers overwrite one another, or must a conflict be rejected or merged?
  • Can a command or event arrive twice without creating a duplicate business effect?
  • Who may observe stale state, for how long, and how will freshness be shown?
  • May a user see a new value and later see an older one?
  • Does ordering matter globally, per tenant, per entity, or only before a deadline?
  • What closes the gap if a database commit succeeds but publication, indexing, caching, or an external side effect fails?
  • Which data loss and recovery time can the business tolerate, and who has demonstrated the restore?

These answers do not yet choose transactions, conditional writes, queues, or reconciliation. They identify the facts that those mechanisms must protect. The next chapter turns the most consequential facts into explicit invariants.

Availability also belongs at the operation level. During a provider outage, perhaps catalog browsing may use a bounded-stale copy while checkout writes stop. During a regional failure, perhaps ingestion may queue for an hour while entitlement checks must continue. “Highly available” does not say which promise survives or what degraded behavior is safe.

The Constraints That Change the Answer

Many decisive requirements live outside the query plan.

Security follows data beyond the primary store. Sensitive fields may appear in logs, caches, search indexes, exports, backups, notebooks, and operator tools. Record the tenant and field boundaries, residency rules, audit evidence, encryption expectations, access-review needs, retention, and deletion propagation. A fast store can be a poor fit when the team cannot prove who read the data or remove governed copies.

Operations are equally concrete. Who understands the storage and indexing model? Who can diagnose replica delay, compaction debt, lock contention, queue lag, or runaway scans? Who patches the system and restores it at 03:00? A design that depends on expertise the team does not possess has placed an operational bet; the fingerprint should name it.

Cost needs drivers rather than a single adjective. Storage, indexes, write amplification, replicas, hot partitions, scans, streams, egress, backups, licenses, and staff time grow differently. State what must remain predictable, what may scale with usage, and what the system may delay, sample, tier, or reject when a budget threshold is crossed.

Growth needs a curve. Record current volume, expected peak, peak-to-average ratio, retention horizon, cardinality growth, and tenant skew. Ten evenly sized tenants do not behave like one dominant tenant and nine small ones, even when the totals match.

Finally, price the exit. Existing data volume, consumer compatibility, downtime allowance, backfill duration, dual-write risk, validation, rollback, and decommissioning determine whether a choice is reversible. “We can migrate later” is only credible when the later work has a shape.

A Fingerprint That Fits in a Review

For an ordinary design review, one page is enough if every line can influence the decision. Copy this short form and replace adjectives with numbers, ranges, named operations, and explicit unknowns:

Critical claims
  What facts must the system preserve, and who depends on them?

Data and lifecycle
  What shapes exist? Which are authoritative, derived, mutable, retained,
  rebuildable, exportable, or subject to deletion?

Reads
  Name the main operations, callers, result sizes, concurrency, latency
  percentiles, freshness, authorization, and safe degradation.

Writes
  Name the commands, peaks and bursts, contention, atomic boundaries,
  retries, ordering, side effects, deletes, imports, and backfills.

Correctness and failure
  What may be stale, duplicated, reordered, partially applied, lost,
  unavailable, or repaired? What must never happen?

Recovery and availability
  What are the data-loss and recovery-time tolerances? Who restores,
  reconciles, and proves the result? Which operations survive an outage?

Security and governance
  Which fields and tenants are restricted? What audit, residency,
  access-review, retention, export, and deletion obligations apply?

Operations and cost
  What can this team operate on call? Which signals and runbooks exist?
  Which workload drivers dominate cost, and where is the budget boundary?

Growth and migration
  What are today's volume, peaks, skew, growth, and retention horizon?
  What downtime, compatibility, backfill, validation, rollback, and exit
  constraints already exist?

Revisit triggers
  Which measured change or disproved assumption would reopen the decision?

Use estimates when exact numbers are unavailable, label them, and attach a review trigger. “Estimated launch peak: 1,000 checkout writes per second for 20 minutes; revisit after the first load test” can be challenged. “Must scale” cannot.

For a system that moves money, controls access, carries regulated data, operates at unusual scale, introduces a new database class, or requires a migration, expand the short form into catalogs and models. List the top user and operator journeys; significant entities and events; important queries and commands; volume and tenant distributions; failure scenarios; restore and reconciliation procedures; cost components; and cutover and rollback steps. Depth should follow risk. A longer fingerprint that does not alter a decision is paperwork.

Let the Workload Reject Something

A fingerprint has done useful work when it creates pressure against an option.

Return to checkout. Suppose the team is considering a design whose reads are fast from a replica but can lag accepted writes unpredictably. The fingerprint forces a question about the cart summary: can that operation use the replica, or must it read from the write authority after mutation? Suppose the proposed write path publishes fulfillment only after committing the order, with no durable handoff. The retry and partial-write requirements expose a missing recovery path. Suppose support search is rebuilt from order state but takes twelve hours. The retention and operational sections reveal the degraded support plan the architecture must include.

For the analytics dashboard, a different set of options comes under pressure. A system optimized for point lookups may make multi-dimensional scans costly. Immediate consistency may buy nothing when five-minute freshness is acceptable. An attractive ingest benchmark says little about late events, deletion propagation, tenant isolation, or the cost of retaining raw data. The fingerprint does not automatically name the winner; it makes each proposal argue with the real workload.

This also guards against copied benchmarks. Benchmarks become useful after the fingerprint identifies a risky operation and representative data distribution. A p99 test with the expected concurrency, tenant skew, index set, and result size can answer a design question. A vendor chart cannot supply the question.

Practice: Break One Adjective Apart

Take one requirement from a real or imagined proposal: scalable, real time, reliable, low latency, cheap, flexible, or easy to migrate. Write the short fingerprint for it. Include one critical claim, the top read and write paths, a latency and freshness target, a correctness rule, a restore expectation, a deletion rule, a cost driver, a growth assumption, and an operating owner.

Then choose a second workload that uses the same adjective. Try checkout and analytics for “fast,” or telemetry ingest and collaborative editing for “write-heavy.” Find the first constraint that would cause the two designs to diverge.

If the same product still appears automatically correct for both, the exercise is unfinished. Look for the missing pressure: contention, tail latency, staleness, ordering, deletion, restore time, tenant skew, operator skill, or migration. The purpose of the fingerprint is not to decorate a preferred answer. It is to make a wrong answer disagree with something the system must actually do.

Once that disagreement is visible, the next question becomes precise: which facts must remain true despite concurrency, retries, partial failure, and stale copies? Those facts are the system’s invariants.