> A _distributed system_ is a system whose components are located on different networked computers, which communicate and coordinate their actions by passing messages to one another from any system. --- ## References - [Notes on Distributed Systems for Young Bloods](https://www.somethingsimilar.com/2013/01/14/notes-on-distributed-systems-for-young-bloods/) (2013) by Jeff Hodges. Great primer on the concerns you need to think about when building distributed systems. Especially useful for developers used to building monolithic synchronous apps. Covers many concepts including partial failures, availability, robustness, latency, backpressure, monitoring, feature flags, ID partitioning, SOA and more. - [Computers can be understood](https://blog.nelhage.com/post/computers-can-be-understood/) (2020) by Nelson Elhage. An essay on a mindset to help you succeed when working with complex software systems. > Computers are complex, but need not be mysteries. Any question we care to ask can, in principle and usually even in practice, be answered. Unknown systems can be approached with curiosity and determination, not fear. - [Testing Microservices, the sane way (Medium.com)](https://copyconstruct.medium.com/testing-microservices-the-sane-way-9bb31d158c16) (2017) by Cindy Sridharan. Long piece on the many considerations when testing distributed systems — what, when and how to test. The author defines testing as "a best effort verification of the system" and states: > four axes — the goal, scope, tradeoffs and payoffs — can prove to be a good proxy for being able to assess how effective any form of testing might be. - https://en.wikipedia.org/wiki/Distributed_computing - [How complex systems fail](https://how.complexsystems.fail)