Seven Things to Check Before Choosing Technology Fundamentals 3
Observability: A design that cannot be rolled back is a design that cannot be changed safely. Observability: Latency budgets are easier to defend when every hop has a stated ceiling. Observability: Caching helps only until the invalidation rules become the bottleneck.
Consider observability specifically. The interesting number is not the average, it is the 99th percentile. Observability: Adding a cache in front of a slow query is a fix; fixing the query is a cure. Every abstraction you add is a place where behaviour can differ from intent. That applies to observability as well.
Rate Limiting: 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 rate limiting as well. In practice, rate limiting behaves differently: Aggregating at write time trades flexibility for predictable read cost.
Configurations should be reviewable in a diff, not only in a console. This is most visible in edge caching. Consider edge caching specifically. The best time to add an index is before the table gets large. Edge Caching: Failures are usually correlated, so plan for the shared dependency.
For queue design, the constraint matters more than the feature list. A queue smooths spikes but also hides how far behind you are. Teams working on queue design usually discover this the hard way. Retries without jitter turn a small outage into a large one. Separating the reads from the writes buys room to change either side. This is most visible in queue design.
Before providing samples, ask how results will be delivered, how long they usually take and how the service protects your privacy. Confidentiality rules and access to records vary by country and age; confirm who can see the information, especially if you use shared devices, email or a patient portal. If a result needs follow-up, the service can explain what it means and direct you to appropriate care. This article cannot interpret an individual result or recommend treatment.
Consider monitoring alerts specifically. The interesting number is not the average, it is the 99th percentile. Monitoring Alerts: Adding a cache in front of a slow query is a fix; fixing the query is a cure. Every abstraction you add is a place where behaviour can differ from intent. That applies to monitoring alerts as well.
Search Indexing: 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 search indexing as well. In practice, search indexing behaves differently: Aggregating at write time trades flexibility for predictable read cost.
Data Pipelines: If the rollback plan needs a meeting, it is not a rollback plan. Data Pipelines: Small pages that stay small are easier to keep fast than large ones made fast. Data Pipelines: Write the invariant down; otherwise it lives only in someone's memory.
Cloud Infrastructure: 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 cloud infrastructure as well. In practice, cloud infrastructure behaves differently: Costs usually concentrate in a small number of operations, so find those first.
Content Delivery: 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 content delivery as well. In practice, content delivery behaves differently: Costs usually concentrate in a small number of operations, so find those first.
Crawl Budget: If the rollback plan needs a meeting, it is not a rollback plan. Crawl Budget: Small pages that stay small are easier to keep fast than large ones made fast. Crawl Budget: Write the invariant down; otherwise it lives only in someone's memory.
Monitoring Alerts: Periodic jobs should be safe to run twice, because they will be. You rarely need a new component to fix a boundary problem. That applies to monitoring alerts as well. In practice, monitoring alerts behaves differently: The signal you want is often already logged, just not aggregated.
Teams working on api design usually discover this the hard way. Serving static bytes is the cheapest thing you can do at the edge. A schema is an interface; changing it is a migration, not an edit. This is most visible in api design. Consider api design specifically. Track the denominator as carefully as the numerator.
Release Process: Serving static bytes is the cheapest thing you can do at the edge. Release Process: A schema is an interface; changing it is a migration, not an edit. Release Process: Track the denominator as carefully as the numerator.
API Design: You can often replace a coordination problem with an idempotency key. API Design: Anything that grows without a bound will eventually hit one. API Design: Documentation that is not tested tends to describe the previous version.
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.
Cloud Infrastructure: Periodic jobs should be safe to run twice, because they will be. You rarely need a new component to fix a boundary problem. That applies to cloud infrastructure as well. In practice, cloud infrastructure behaves differently: The signal you want is often already logged, just not aggregated.
Access Control: If a metric has no owner, it will drift until it causes an incident. Access Control: The cheapest optimisation is usually removing work nobody asked for. Access Control: Aggregating at write time trades flexibility for predictable read cost.
For monitoring alerts, the constraint matters more than the feature list. A queue smooths spikes but also hides how far behind you are. Teams working on monitoring alerts usually discover this the hard way. Retries without jitter turn a small outage into a large one. Separating the reads from the writes buys room to change either side. This is most visible in monitoring alerts.
Consider edge caching specifically. Serving static bytes is the cheapest thing you can do at the edge. Edge Caching: A schema is an interface; changing it is a migration, not an edit. Track the denominator as carefully as the numerator. That applies to edge caching as well.
Serving static bytes is the cheapest thing you can do at the edge. The same reasoning holds for observability. For observability, the constraint matters more than the feature list. A schema is an interface; changing it is a migration, not an edit. Teams working on observability usually discover this the hard way. Track the denominator as carefully as the numerator.
Consent is not a one-time permission that applies to everything that follows. Agreement to one activity does not automatically mean agreement to another, and consent on one occasion does not establish consent on a later occasion. People can set limits, ask to pause or change their minds at any point. The other person needs to respect that change without argument or pressure.
API Design: If a metric has no owner, it will drift until it causes an incident. API Design: The cheapest optimisation is usually removing work nobody asked for. API Design: Aggregating at write time trades flexibility for predictable read cost.