# What Does It Really Mean for Software to Be Reliable?

We throw the word "reliable" around a lot in tech. But what does it actually mean when we're talking about software?

Simply put, a reliable system is one that keeps doing what it's supposed to do, even when things go wrong. Hardware breaks, users make mistakes, bugs slip through. A reliable system handles all of that without falling apart.

Here's a quick way to think about it. A reliable app should:

*   Do what the user actually expects it to do
    
*   Handle mistakes without crashing, users will always do unexpected things
    
*   Perform well enough for the job it's built for
    
*   Keep unauthorized people out
    

So reliability basically means, as the book *Designing Data-Intensive Applications* puts it: *"continuing to work correctly, even when things go wrong."*

Now, the things that can go wrong are called **faults**. And systems that can handle faults without breaking are called **fault-tolerant** or **resilient**.

Here's something interesting though, a fault is not the same as a failure. A fault is when one part of your system misbehaves. A failure is when the whole system stops working for your users. The goal is to stop faults from turning into failures.

And here's the counterintuitive part: one of the best ways to build fault tolerance is to actually *trigger faults on purpose* — deliberately breaking things in a controlled environment so your system learns to handle them. Netflix actually built a tool called **Chaos Monkey** that does exactly this — it randomly kills processes in their system to make sure everything still holds up.

The takeaway? Don't just hope nothing goes wrong. Build for when it does.
