Notes on Distributed Systems for Young Bloods (2013)
You may think you understand your specification but unless you used a model checker or proof assistant there will be bugs in your implementation. Unit tests are not a specification (or are, at best, incomplete). Get used to predicate calculus, temporal logic, and writing proofs. If you cannot express a design with a model or proof that can be verified you&#x27;re purposefully leaving bugs in your system.<p>They may be buried &gt; 40 steps deep in some code path where the stars have to align just right to trigger it. At the scale where Gustafson&#x27;s law makes the trade-offs acceptable you will find that such errors are no longer, &quot;highly improbable.&quot;<p>Don&#x27;t accept, &quot;battle-tested,&quot; as the hallmark of a reliable system or algorithm -- all that means is that people willing to tolerate the risk did so and paid for it for a few years. There are still bugs in that system and they will affect you or your users (and often both).