When it comes to data systems, there are three foundational things that I believe are important to look into: reliability, scalability, and maintainability. In this article, I want to take a deeper look at one of these concepts: reliability.

To some extent, everyone has an intuitive idea of what it means for a software system to be reliable. We expect the system to perform the function it was designed to perform, tolerate users making mistakes or using it in unexpected ways, provide acceptable performance for its intended use case, and prevent unauthorized access. If all of these things can be considered part of working correctly, then we can understand reliability as the ability of a system to continue working correctly even when things go wrong.

The things that can go wrong in a system are generally referred to as faults. A system that is designed to continue operating despite certain faults is known as a fault-tolerant system. However, the term fault tolerance can sometimes be misleading because it may suggest that a system can be made tolerant of every possible type of fault. In reality, this is not feasible. It makes more sense to identify the specific types of faults that a system is expected to tolerate and design around them.