Technology Fundamentals 4 in Practice: Lessons From Real Deployments
Cost Controls: Configurations should be reviewable in a diff, not only in a console. Cost Controls: The best time to add an index is before the table gets large. Cost Controls: Failures are usually correlated, so plan for the shared dependency.
Schema Migration: A queue smooths spikes but also hides how far behind you are. Retries without jitter turn a small outage into a large one. That applies to schema migration as well. In practice, schema migration behaves differently: Separating the reads from the writes buys room to change either side.
Edge Caching: If the rollback plan needs a meeting, it is not a rollback plan. Edge Caching: Small pages that stay small are easier to keep fast than large ones made fast. Edge Caching: Write the invariant down; otherwise it lives only in someone's memory.
API Design: If a metric has no owner, it will drift until it causes an incident. The cheapest optimisation is usually removing work nobody asked for. That applies to api design as well. In practice, api design behaves differently: Aggregating at write time trades flexibility for predictable read cost.
Consider schema migration specifically. Serving static bytes is the cheapest thing you can do at the edge. Schema Migration: A schema is an interface; changing it is a migration, not an edit. Track the denominator as carefully as the numerator. That applies to schema migration as well.
Rate Limiting: A queue smooths spikes but also hides how far behind you are. Rate Limiting: Retries without jitter turn a small outage into a large one. Rate Limiting: Separating the reads from the writes buys room to change either side.
The interesting number is not the average, it is the 99th percentile. The same reasoning holds for access control. For access control, the constraint matters more than the feature list. Adding a cache in front of a slow query is a fix; fixing the query is a cure. Teams working on access control usually discover this the hard way. Every abstraction you add is a place where behaviour can differ from intent.
A routine sexual-health screening is not one fixed set of tests. A clinician or sexual-health service usually asks about your health and possible exposures, then recommends tests based on your circumstances, local guidance and preferences. Screening can identify some infections before symptoms appear, but no single appointment checks for every sexually transmitted infection (STI).
In practice, search indexing behaves differently: The first thing to settle is the failure mode, not the happy path. Measurements taken once are anecdotes; you need a baseline that repeats. The same reasoning holds for search indexing. For search indexing, the constraint matters more than the feature list. Costs usually concentrate in a small number of operations, so find those first.
For load balancing, the constraint matters more than the feature list. The first thing to settle is the failure mode, not the happy path. Teams working on load balancing usually discover this the hard way. Measurements taken once are anecdotes; you need a baseline that repeats. Costs usually concentrate in a small number of operations, so find those first. This is most visible in load balancing.
For backup strategy, the constraint matters more than the feature list. If a metric has no owner, it will drift until it causes an incident. Teams working on backup strategy usually discover this the hard way. The cheapest optimisation is usually removing work nobody asked for. Aggregating at write time trades flexibility for predictable read cost. This is most visible in backup strategy.
Schema Migration: Configurations should be reviewable in a diff, not only in a console. Schema Migration: The best time to add an index is before the table gets large. Schema Migration: Failures are usually correlated, so plan for the shared dependency.
Serving static bytes is the cheapest thing you can do at the edge. That applies to schema markup as well. In practice, schema markup behaves differently: A schema is an interface; changing it is a migration, not an edit. Track the denominator as carefully as the numerator. The same reasoning holds for schema markup.
You can often replace a coordination problem with an idempotency key. The same reasoning holds for search indexing. For search indexing, the constraint matters more than the feature list. Anything that grows without a bound will eventually hit one. Teams working on search indexing usually discover this the hard way. Documentation that is not tested tends to describe the previous version.
The first thing to settle is the failure mode, not the happy path. This is most visible in schema markup. Consider schema markup specifically. Measurements taken once are anecdotes; you need a baseline that repeats. Schema Markup: Costs usually concentrate in a small number of operations, so find those first.
Schema Markup: The interesting number is not the average, it is the 99th percentile. Schema Markup: Adding a cache in front of a slow query is a fix; fixing the query is a cure. Schema Markup: Every abstraction you add is a place where behaviour can differ from intent.
Load Balancing: The first thing to settle is the failure mode, not the happy path. Load Balancing: Measurements taken once are anecdotes; you need a baseline that repeats. Load Balancing: Costs usually concentrate in a small number of operations, so find those first.
Consider cost controls specifically. You can often replace a coordination problem with an idempotency key. Cost Controls: Anything that grows without a bound will eventually hit one. Documentation that is not tested tends to describe the previous version. That applies to cost controls as well.
Schema Markup: Serving static bytes is the cheapest thing you can do at the edge. Schema Markup: A schema is an interface; changing it is a migration, not an edit. Schema Markup: Track the denominator as carefully as the numerator.
Monitoring Alerts: The first thing to settle is the failure mode, not the happy path. Measurements taken once are anecdotes; you need a baseline that repeats. That applies to monitoring alerts as well. In practice, monitoring alerts behaves differently: Costs usually concentrate in a small number of operations, so find those first.
In practice, log analysis behaves differently: Periodic jobs should be safe to run twice, because they will be. You rarely need a new component to fix a boundary problem. The same reasoning holds for log analysis. For log analysis, the constraint matters more than the feature list. The signal you want is often already logged, just not aggregated.
API Design: A design that cannot be rolled back is a design that cannot be changed safely. API Design: Latency budgets are easier to defend when every hop has a stated ceiling. API Design: Caching helps only until the invalidation rules become the bottleneck.
A design that cannot be rolled back is a design that cannot be changed safely. That applies to backup strategy as well. In practice, backup strategy behaves differently: Latency budgets are easier to defend when every hop has a stated ceiling. Caching helps only until the invalidation rules become the bottleneck. The same reasoning holds for backup strategy.
For data pipelines, the constraint matters more than the feature list. If a metric has no owner, it will drift until it causes an incident. Teams working on data pipelines usually discover this the hard way. The cheapest optimisation is usually removing work nobody asked for. Aggregating at write time trades flexibility for predictable read cost. This is most visible in data pipelines.