Philosophical

  1. Thou shalt not build what thou canst avoid
  2. Remember, the people in the team hold the key to success or failure, so choose thy team wisely
  3. Thou shalt manage complexity, not create it
  4. Thou shalt not write code for the sake of writing code; the best code is the code that is not written
  5. If thou must build, build small and reversible
  6. Or at least very simple, as simplicity is next to godliness
  7. Thou shalt encapsulate and decompose to achieve modularity with simple interfaces
  8. Thou shalt fight complexity at the root, for complexity begets complexity
  9. Do not be dogmatic in thy approach, for every scenario is unique
  10. Question patterns and their tradeoffs, for when should they not be used?

Practical

  1. Avoid Project bloat
  2. Keep it simple: Don’t make “building a distributed system” your first choice
  3. Avoid premature optimization (especially for “scaling up”)
  4. Avoid & reduce accidental complexity. Especially caused by state
  5. Be wary of the Cloud: It may not be as simple, cheap or secure as you think. Avoid Lock-In.
  6. Improve delivery: Look at DORA Metrics
  7. Speed up the process: Avoid hand-offs and queues
  8. Distribute knowledge: Driver & Navigator
  9. Get on the same page: Do architecture Katas