Hello. In the previous lesson, you defined user-centered SLIs and SLOs for an ML service: not just whether an endpoint returns HTTP success, but whether it responds on time, uses fresh features and the primary path, and continues to make effective decisions once labels mature.
Those commitments now give failure analysis its purpose. A failure-mode table asks: what could prevent this user journey from meeting its SLOs; how will we detect it; and what will we do before or during the incident? For this lesson, we will construct such a table across the data, model, infrastructure, and application layers of a production prediction service.
Failure-mode analysis starts with a user flow
A failure mode is not simply a component that can break. It is a specific way in which a component or dependency can degrade the critical user flow.
For example, “feature store” is a component. “Feature store returns a cached customer-status feature that is six hours old” is a failure mode. The latter is actionable because it tells you what to measure, what harm may occur, and whether a fallback is acceptable.
A useful failure-mode analysis (FMA) is grounded in four ideas:
- Failure mode: the specific condition that degrades or prevents a workload component from functioning.
- Effect: the consequence for the user flow, business decision, and relevant SLOs.
- Detection: the telemetry, validation, or alert that makes the condition visible.
- Mitigation: a preventive control, an immediate containment action, or a recovery procedure.
Architecture strategies for performing failure mode analysis
Read Microsoft Learn's guide for a concise FMA vocabulary and a practical way to connect dependencies, blast radius, detection, and mitigation.
Start with the opening explanation and the Definitions table. Read the FMA framing to establish why analysis must consider the whole workload rather than isolated services. Then read the section “Evaluate failure points”, beginning with the paragraph on internal and external dependencies. Follow the failure inventory, paying attention to strong versus weak dependencies and to the distinction between likely failures and merely imaginable ones. Finish with “Mitigation” and “Detection.” Read the response planning. Notice that a degraded experience can be a deliberate design outcome when full availability is not worth the cost or risk.
The right unit of analysis is therefore a critical flow. Continue using the support-ticket triage service from the preceding lesson:
- An agent submits a ticket for classification.
- The application validates the request and obtains required online features.
- A production-approved model bundle generates a priority and routing prediction.
- The application applies policy, renders a schema-valid response, and records an inference trace.
- The agent receives a usable result quickly enough to decide what to do next.
For this flow, a failure-mode table should expose threats to at least these commitments:
- availability: did the agent receive a valid response?
- latency: did it arrive in time?
- non-degraded coverage: did the intended model and feature path run?
- data freshness: were dynamic signals current enough for the decision?
- model effectiveness: does the system still identify genuinely high-priority tickets?
A table that lists “GPU failure” but never says what happens to these commitments is an infrastructure inventory, not an FMA.
Use layers to make responsibility and diagnosis clearer
The four-layer view is not a claim that components are independent. A feature-store timeout can manifest as an application error; a bad feature value can cause a model-quality problem. The point is to assign each failure mode one primary home, while retaining links to affected dependencies and owners.

| Layer | Primary question | Typical components and artifacts |
|---|---|---|
| Data | Are the inputs available, valid, complete, timely, and semantically correct? | source systems, ingestion, transformations, online feature store, feature contracts, labels |
| Model | Is the approved prediction bundle compatible, behaving as intended, and still decision-effective? | weights, tokenizer or preprocessing assets, thresholds, calibration, model metadata, evaluation baselines |
| Infrastructure | Can the underlying platform execute the workload within its reliability and capacity envelope? | network, compute, GPU nodes, storage, Kubernetes, managed dependencies, autoscaling |
| Application | Does the product orchestrate the flow correctly and communicate an honest, useful result to the caller? | gateway, authentication, business rules, fallback logic, response schema, retries, client integration |
This split resolves several common ambiguities:
- A feature schema incompatibility is primarily a data-layer failure, even if the application returns a 500 response.
- A bad decision threshold bundled with a new model release is primarily a model-layer failure.
- A GPU-node outage or a queueing collapse under traffic is primarily infrastructure.
- A response that returns HTTP 200 while omitting the required priority field is an application-layer semantic failure.
This categorization helps on-call engineers find the right evidence first. It also prevents a misleading narrative in which every user-visible issue is attributed to “the model.”
Construct rows that can drive action
A compact failure-mode table needs more than a risk description. Each row should be capable of driving an alert, an operational decision, a runbook entry, or a design change.
Use these columns:
| Column | What to record |
|---|---|
| Layer and component | The primary ownership boundary for the failure mode. |
| Failure mode and trigger | The failure condition and its plausible initiating event. |
| User and SLO effect | What users experience and which SLOs or release guarantees are threatened. |
| Detection evidence | The signal, validation, trace field, or alert that identifies it. |
| Containment and recovery | The immediate action that limits harm, followed by restoration or prevention work. |
| Priority | A severity-and-likelihood judgment that determines how much engineering investment is justified. |
| Owner | The team or role accountable for the response and long-term corrective action. |
Two distinctions keep this table operationally honest.
Detection is not mitigation
“Monitor the feature store” is not a mitigation. It is at most an incomplete detection plan.
For a stale-feature mode, an actionable row instead states:
- Detection: feature-age distribution exceeds the policy threshold; the percentage of predictions using fresh dynamic features declines.
- Containment: mark affected responses as degraded and route high-risk tickets to human review.
- Recovery: repair ingestion or replication, then validate watermark progress and backfill required feature values.
- Prevention: enforce feature freshness contracts before the model is invoked.
Similarly, “add retries” is not automatically a mitigation. Retries can worsen overload, duplicate requests, or consume a latency budget. They are appropriate only when the dependency is idempotent, the timeout leaves meaningful time remaining, and the failure is plausibly transient.
Not every anomaly is a production failure
A shift in an input distribution is an observation. It becomes a failure mode only when it creates a meaningful risk of violating a quality, fairness, safety, or business-decision expectation.
For instance, a sudden increase in multilingual tickets may be normal after a product launch. It should trigger investigation if the new language mix is underrepresented in training and high-priority recall drops for that slice. The table should avoid declaring every statistical deviation an incident while still making emerging risk visible.
6. Continuous monitoring - AWS Prescriptive Guidance
Read AWS Prescriptive Guidance's monitoring checklist to connect each FMA row to concrete data, model, resource, latency, traffic, and semantic-error signals.
In the table covering “6.1 Model monitoring: data quality detection” through “6.7 System captures: anomalies,” read data and model signals. Focus on the different evidence available for schema violations, distribution shifts, concept drift, and delayed ground-truth evaluation. Then read “6.8 Logging: saturation and resources” through “6.12 Notifications and alerting.” Study system and application signals, especially the distinction among explicit failures, implicit semantic failures, and policy failures such as latency-target violations.
The AWS guidance highlights an important point for ML systems: an HTTP status code cannot capture every failure. A response may be technically successful while still being stale, malformed, produced by an unintended fallback, or unusable for the agent’s workflow. These are implicit or semantic failures, and their detection often requires application events and inference traces rather than gateway metrics alone.
Worked failure-mode table: ticket triage service
Assume the following operating policy:
- The triage response must be schema-valid and available to an agent within the latency objective.
- Some classifications require dynamic incident-health features no more than 15 minutes old.
- If the primary model path cannot meet its prediction contract, the application may return a clearly marked degraded result or route the ticket to human review.
- Missing a truly high-priority ticket is more harmful than over-escalating a lower-priority ticket.
The first portion of the table focuses on data and model modes. The priority labels are intentionally qualitative:
- Critical: credible risk of widespread outage or high-severity incorrect automated action.
- High: material user or business harm, requiring strong controls and a rehearsed response.
- Medium: bounded impact, detectable and recoverable without broad service failure.
Data and model layers
| Layer / component | Failure mode and plausible trigger | User and SLO effect | Detection evidence | Containment and recovery | Priority / owner |
|---|---|---|---|---|---|
| Data: online dynamic features | Incident-health feed is delayed after upstream ingestion failure; features exceed the 15-minute freshness policy. | Tickets can be triaged without recent operational context. Non-degraded coverage and feature-freshness SLOs burn; high-priority recall may later decline. | Per-feature age at inference; watermark lag; percentage of predictions with stale required features; trace field recording fallback reason. | Block primary-path classification for ticket types that require the feature. Route high-risk tickets to human review or return a clearly labeled degraded result. Restore the feed, verify watermark catch-up, and backfill if required. | High / data-platform owner |
| Data: feature contract | Upstream deploy renames a field, changes a categorical encoding, or changes null semantics. | Input values can be missing or misinterpreted. The API may fail fast, or worse, return incorrect predictions while remaining available. | Schema and value-domain validation; null-rate and cardinality checks; feature-contract version in the inference trace; semantic canary requests. | Reject or quarantine incompatible records rather than silently impute unknown values. Roll back the producer or pin the last compatible transformation. Repair the contract and replay validation before re-enabling. | Critical / data producer and ML platform |
| Data: source population | Product change creates a new language or ticket category that is poorly represented in training data. | No immediate outage, but decisions may become unreliable for a slice. Delayed model-effectiveness objective is at risk. | Input-distribution and slice-volume shifts; unknown-category rate; agent overrides; later labels segmented by language, product, and ticket type. | Reduce automation for unsupported slices and route them to a conservative rules path or review queue. Add representative labeled data and evaluate the revised model by slice before promotion. | Medium to high / model owner with product owner |
| Model: production bundle | A deployment serves weights with an incompatible tokenizer, preprocessing asset, threshold file, or feature-contract version. | This is training-serving skew in production. Responses may be fast and syntactically valid but materially wrong. | Immutable bundle manifest; model, preprocessing, and feature-contract versions in every trace; replay and semantic canaries at promotion time. | Stop promotion and roll back the complete immutable bundle, not just weights. Investigate registry or deployment validation failure; add a compatibility gate. | Critical / ML platform and model owner |
| Model: predictive behavior | Candidate model improves global offline F1 but reduces recall for urgent multilingual tickets. | Vulnerable slice receives insufficient escalation. Aggregate metrics can conceal the harm; delayed quality objective is missed. | Slice-level offline release gates; canary comparison; override rate; joined labels and predictions once labels mature. | Pause or roll back the candidate for the affected route. Add an explicit slice constraint to promotion criteria; collect labels and retrain or recalibrate. | High / model owner |
| Model: concept drift | The relationship between ticket text or features and final priority changes after policy or product changes. | The model may retain stable latency and availability while decision quality degrades over time. | Delayed-label recall and calibration metrics; feature-importance shifts; disagreement with trained rules or agent overrides. | Limit automation where uncertainty rises; use review queues for high-impact cases. Update labels and training data, validate temporal splits, then promote only after evaluation. | High / model owner |
The feature-contract row deserves special emphasis. A fast failure is often safer than silent degradation. If the service receives an unknown categorical encoding, substituting an arbitrary default may preserve availability but create an unobservable semantic error. Whether a controlled fallback is acceptable should be explicit in the product decision policy.
Likewise, the model-bundle row extends the previous lesson’s prediction contract. A “model version” is not enough provenance for a production decision. For reproducibility and rapid rollback, the trace should identify the model artifact, preprocessing assets, thresholds, feature-contract version, and route that actually produced the prediction.
Infrastructure and application layers
| Layer / component | Failure mode and plausible trigger | User and SLO effect | Detection evidence | Containment and recovery | Priority / owner |
|---|---|---|---|---|---|
| Infrastructure: serving capacity | Traffic burst, inefficient deployment, or lost replicas causes GPU or CPU saturation and request queues to grow. | Latency SLO burns first; timeouts and availability failures follow if queues are unbounded. | Gateway queue time; request concurrency; p50, p95, and p99 latency; GPU, CPU, and memory saturation; timeout rate. | Apply admission control and protect high-priority traffic. Scale capacity within validated limits, reduce nonessential work, and shed low-value requests if necessary. Correct capacity planning or autoscaling configuration afterward. | High / serving-platform owner |
| Infrastructure: feature-store dependency | Feature store, cache, network path, or DNS resolution becomes unavailable. | Primary path cannot obtain required features. Depending on policy, the result is a controlled degraded response or an availability failure. | Dependency success rate and latency; connection errors; cache health; primary-path versus fallback-path rate. | Use a bounded, explicitly approved fallback only for feature classes where staleness is safe. Otherwise fail closed for automated action and route to review. Restore dependency and validate data freshness before resuming normal routing. | High / data platform and infrastructure owner |
| Infrastructure: regional or zone disruption | Cloud region, availability zone, managed serving service, or critical network path fails. | Potential broad service outage, degraded latency during failover, or loss of a dependent data path. | Multi-region synthetic probes; regional error and latency segmentation; health checks independent of the workload’s main path. | Fail over only if replicas, artifacts, configuration, and required data are available in the recovery environment. Validate recovery time and recovery point objectives through exercises, not assumptions. | Critical / reliability and infrastructure owner |
| Application: response construction | A deployment returns HTTP 200 but omits priority, violates the response schema, or serializes a fallback result as a primary result. | The agent sees a broken or misleading result. HTTP availability may look healthy while the semantic availability SLI fails. | Schema validation at the gateway; contract tests; application event containing result type and degradation status; client-side parsing failures. | Reject invalid server responses before returning them when possible. Roll back the application release; prevent recurrence with end-to-end contract tests and typed response validation. | High / application owner |
| Application: fallback policy | Feature failure causes automatic use of a generic classifier, but the response does not disclose degraded status or restrict automation. | Nominal availability remains high while user value and decision safety degrade. Non-degraded coverage falls invisibly. | Inference trace has route, fallback reason, and degraded fields; monitor fallback rate by dependency and ticket type. | Make the fallback explicit in the response and policy engine. Restrict it to low-risk cases; send high-risk tickets to human review. Repair the dependency and reassess whether the fallback remains acceptable. | Critical / application and product owner |
| Application: request handling | Retry logic duplicates requests, retries non-idempotent side effects, or keeps retrying an overloaded dependency. | Increased load amplifies the incident; agents may see conflicting classifications or duplicate downstream actions. | Retry count; request correlation identifier; duplicate side-effect events; queue growth after dependency errors. | Enforce idempotency keys and bounded retry budgets. Disable aggressive retries during overload; use circuit breaking or a controlled degraded path. Test failure behavior before release. | High / application owner |
A well-designed row does not promise that every failure will be invisible to users. Some failures should result in a deliberate, safe limitation of functionality. For example, a feature-store outage might make automated high-priority routing unsafe. Routing those tickets to a human queue can be a successful mitigation even though it consumes non-degraded coverage budget.
Prioritize the table rather than treating all rows equally
An FMA should guide investment. A rare regional outage and a routine schema-breaking producer deployment do not warrant the same prevention effort, even if both are theoretically severe.
Use a lightweight prioritization discussion for each row:
- Severity: What is the worst credible user, business, or safety impact?
- Likelihood: How often can this realistically occur, considering history and planned change frequency?
- Detectability: Will the system detect the issue before widespread user harm?
- Blast radius: Does it affect one tenant, one request class, a region, or all users?
- Recovery difficulty: Can an on-call engineer contain it in minutes, or does it require delayed labels, data repair, or a retraining cycle?
Avoid manufacturing precise-looking risk scores when evidence does not justify them. “High severity, medium likelihood, poor detectability” is often more useful than a dubious numerical ranking. The key outcome is a decision: invest now, accept the risk with documented rationale, or collect evidence before deciding.
For the triage service, two rows should usually rise quickly to the top:
- Silent feature-contract incompatibility, because it can produce widespread incorrect predictions with no obvious HTTP error.
- Undisclosed degraded fallback, because it can make reliability dashboards look excellent while agents receive systematically weaker decisions.
Both are examples of why ML operational maturity depends on tracing how a result was produced, not merely whether a result was returned.
Turn the table into a living engineering artifact
A failure-mode table is valuable only if it connects to actual system behavior. After drafting it, turn each important row into concrete engineering work.
1. Bind detection to telemetry
For every high- or critical-priority row, identify:
- a metric, trace attribute, log event, or validation job;
- the measurement boundary;
- an alert threshold or investigation trigger;
- the dashboard slice needed for diagnosis;
- the owner who receives and acts on the signal.
For example, “monitor stale features” is insufficient. Record the age at prediction time, compute the fraction of required dynamic features within their policy, and preserve the feature-contract version and fallback decision in the inference trace.
2. Separate immediate containment from permanent correction
An incident response should not wait for the ideal fix.
| Failure class | Immediate containment | Long-term correction |
|---|---|---|
| Broken schema contract | Reject incompatible inputs or revert producer deployment | Versioned contracts, compatibility tests, promotion gate |
| Model slice regression | Reduce automation or roll back model bundle | New labeled data, slice-specific evaluation requirement, retraining |
| Serving saturation | Admission control, load shedding, scaling | Capacity plan, autoscaling revision, workload optimization |
| Incorrect fallback semantics | Disable unsafe route or require review | Explicit policy design, response contract, end-to-end tests |
This is especially relevant for model-quality failures. You often cannot retrain safely within the duration of an incident. A good design has an available control, such as selective human review, route restriction, or rollback to a known-good bundle.
3. Validate rows with controlled failure tests
The most dangerous rows are those that appear complete but have never been exercised. Validate selected high-priority modes through:
- replaying old and malformed feature payloads against a pre-production environment;
- simulating missing or stale online features;
- testing model-bundle incompatibility at deployment time;
- injecting dependency latency to verify queueing and timeout behavior;
- forcing fallback paths and checking that user-facing and trace-level degradation markers agree.
The objective is not to create chaos in production. It is to test the specific assumptions the table depends on: detection works, ownership is clear, mitigation is bounded, and the system returns to a verified normal state.
4. Review the table when the architecture changes
Update the table when you introduce:
- a new feature source or online store;
- a new model versioning or registry mechanism;
- a fallback model or route;
- a managed inference dependency;
- a new request class, tenant, region, or automated action.
The table should also be revised after incidents. A post-incident review may reveal that a presumed weak dependency was actually strong, that an alert detected the issue too late, or that a fallback preserved technical availability while violating user expectations.
Key takeaways
A failure-mode table is a flow-centered operational artifact. It identifies a specific failure condition, its effect on users and SLOs, the evidence that detects it, and both immediate and durable responses.
For an ML prediction service, construct rows across four primary layers:
- Data: availability, freshness, schema compatibility, semantic validity, and population shifts.
- Model: complete-bundle compatibility, threshold or calibration errors, slice regressions, and concept drift.
- Infrastructure: dependency outages, resource saturation, queueing, network failures, and regional disruption.
- Application: response semantics, fallback policy, retries, orchestration, and user-visible contract failures.
The key senior-level habit is to treat a successful HTTP response as insufficient evidence of success. A safe production ML system must also reveal whether it used valid and timely data, an approved model bundle, and an appropriate decision path.
Next, you will turn these failure modes and SLOs into quantitative engineering constraints by estimating the latency, throughput, availability, and cost requirements of an ML workload.
Can't find a good explanation? Sign up and we'll make it for you
Sign up