1. 1. Try and understand the project
  2. 2.Come up with a high-level design
  3. 3.Test your design against good design principles.
    1. Do you have any assumptions that are really wide spread
    2. Are the components of your design loosely coupled?
    3. Is the system able to evolve over time?
    4. Can you upgrade it in place?
  4. 4.Work out what parts of the system are the most important
  5. 5.Decide in advance what and how you will react when
  6. 6. Make sure the tradeoffs that you do are worth it
  7. 7. Remember how the system should be loosely coupled?
  8. Build the most important things
  9. Finally – build a thin slice through the entire project ASAP