"the most important high level things are in Hamilton’s opinion:
- Expect failures to happen regularly and handle them gracefully
- Keep things as simple as possible
- Automate everything"
See also Internet Scale Services Checklist
State is when everything gets complicated. For [Camille] Fournier, one of the important aspects to think about when building distributed systems is where you care about coherent and consistent state, parts where you don’t want to lose data or have people seeing different state. For these parts she generally favours using transactions and a traditional relational database. One example is order handling, in which you want to make sure that you will be able to fulfil all orders. In other parts you may care less about consistency and it’s not a problem if people see slightly stale data, or you can lose data, because it can easily be recreated. Here Fournier thinks NoSQL-databases are perfectly usable.