
Engineering Judgement Framework > System Thinking > Reliability Engineering

ENGINEERING JUDGEMENT FRAMEWORK
LEVEL 3
|
SYSTEM THINKING
Reliability Engineering
Reliability is built long before the first failure occurs.
Failure is inevitable, but being caught unprepared is optional.
Reliable systems are not those that never fail. They are those that fail predictably, recover quickly, and contain damage.
This chapter focuses on designing systems that handle failure deliberately, not reactively.
Prefer a video instead of reading? Here it is.
TABLE OF CONTENTS
Design for Failure
Assume things will go wrong, because they will.
- Dependencies will slow down.
- Databases will lock.
- Networks will congest.
- People will make mistakes.
The goal isn’t to eliminate all failures. It’s to fail intelligently and recover fast. Resilience comes from planning for failures, and not pretending they won’t happen.
Consider:
- What happens when a dependency goes down?
- Can the system retry, fall back, or degrade gracefully?
- Will failure in one part cascade into others?
- Can parts of the system fail without bringing everything down?
Reliable systems assume failure, and build containment, recovery, and isolation into their design.
Example
Your checkout system depends on a third-party payment provider. What if the provider becomes unavailable?
In a fragile system:
- Checkout blocks indefinitely.
- Threads pile up waiting for timeouts.
- Users repeatedly retry.
- Impact spreads to other components.
In a reliable system:
- Circuit breaker activates after threshold failures.
- System fails fast with clear error messages.
- Retry intervals increase.
- Checkout may temporarily disable non-essential features.
- Incident is contained to payment processing.
Failure happens in both cases. Only one system controls it.
What Happens When Things Go Wrong?
The difference between fragile and reliable systems is not whether they fail. It is:
- How quickly failures are detected
- How clearly they are understood
- How efficiently they are resolved
When things go wrong, what matters is:
- Who Knows?
- Who Acts?
- How Fast?
Example
Imagine a background job that processes financial transactions. A subtle logic bug causes incorrect rounding in rare edge cases.
If:
- No validation alerts exist
- No anomaly detection is in place
- No reconciliation monitoring runs
The error may continue unnoticed for weeks.
Contrast that with:
- Automated reconciliation checks
- Alerts triggered on threshold deviation
- Clear dashboards showing anomaly patterns
Early detection reduces impact dramatically.
Time-to-detection often matters more than time-to-fix.
How Will We Know Something is Broken?
The most dangerous failures are the ones that go unnoticed.
Ask:
- Do we have clear signals when things go wrong?
- Are alerts based on actual user impact
- Are they actionable or just noisy?
- Can we distinguish minor degradation from major outage?
Good observability ensures problems are detected early before users complain. They prioritize signal over noise.
Example
A system triggers alerts for:
- Minor latency fluctuations
- Background job delays
- Temporary dependency retries
Engineers receive dozens of alerts daily.
Over time:
- Alerts are muted.
- Noise is ignored.
- And so are real incidents.
In contrast:
- Alerts are tied to user-visible impact.
- Thresholds reflect meaningful degradation.
- Severity levels are clearly defined.
When a critical alert fires, it is trusted and acted upon immediately.
Too many alerts reduce reliability. The right ones improve it.
What Will Each Stakeholder See?
Failure looks different depending on perspective. Different people need different views of the same incident. Design systems so that each stakeholder sees what they need, and nothing more.
Consider:
- What do users see when the system degrades?
- What do support teams see when handling tickets?
- What do engineers see when diagnosing failures?
- What does leadership see when assessing risk and impact?
A well-designed system communicates the right information to the right people without overwhelming them.
Example
Suppose response time increases due to database load.
Users should see:
- Clear error messages or temporary retry prompts
- Not cryptic stack traces
Support teams should see:
- A simple status summary
- Known incident reference
- Clear explanation to communicate
Engineers should see:
- Detailed logs
- Query performance metrics
- Database health indicators
Leadership should see:
- Impact scope
- Duration
- Business risk exposure
Reliable systems tailor visibility to role. Information should reduce confusion, not multiply it.
What Should Each Stakeholder Do?
Visibility alone is not enough. Monitoring, logs, alerts, and dashboards matter only if they drive clear decisions and actions. People need to know what action to take next.
Ask:
- Is there a clear incident owner?
- Are there clear response playbooks?
- Can recurring issues be resolved without escalation?
- Are post-incident learnings documented?
Good systems reduce dependence on heroes. They enable calm, repeatable, and reliable responses.
Example
An incident occurs at 2 am.
In a fragile system:
- Only one senior engineer understands recovery steps.
- Documentation is outdated.
- Diagnosis requires trial and error.
- Recovery takes hours.
In a reliable system:
- The playbook clearly defines diagnostic steps.
- Dashboards guide investigation.
- Recovery commands are standardized.
- On-call engineer resolves issue confidently.
Reliability scales when knowledge is institutionalized.
Observability With a Purpose?
Observability is not about collecting more data. It’s about enabling faster understanding.
Strong systems provide:
- Logs that explain what happened and why
- Metrics that show trends and thresholds
- Traces that reveal flow across services
The goal is not more dashboards. It’s faster understanding and better decisions under pressure.
Example
Imagine an inventory system distributed across different services. Users report intermittent slowness.
Without tracing:
- Each service appears healthy individually.
- Logs are fragmented.
- Root cause is unclear.
With distributed tracing:
- End-to-end request path is visible.
- Latency spike traced to one dependency.
- Bottleneck isolated quickly.
Observability reduces guesswork. It shortens incident duration and improves understanding.
Failure is not a sign of weakness. Uncontrolled failure is. Reliable systems expect breakdowns, detect them early, contain impact, and recover deliberately.
System thinking means designing not just for growth — but for stress, uncertainty, and human response under pressure.
Reliability is not an afterthought. It is an architectural decision.
CONTINUE THE JOURNEY



