title: Two ways to design complex system: Top-down vs Bottom-up
body: <p>I have a complex system to design.
  I have two ways:</p>
  
  <ol>
  <li><p><strong>Top-down</strong>: I will design many interfaces and contracts. Afterwords, I will implement these interfaces, and write a prototype to verify the design.</p></li>
  <li><p><strong>Bottom-up</strong>: I will write code to make the system run. Afterwords, I will extract interfaces and contracts from solid code. The distilled interfaces and contracts is my design. It's rule "<em>make it run, make it right</em>".</p></li>
  </ol>
  
  <p>What is better way? From my opinion, I will choose Bottom-up. Because Top-down is very difficult, no one can design many interfaces at high abstract level,at least it's hard for me. When I write solid implementation to verify the initial design, there are many unreasonable things which force me to re-design from scratch. While I use Bottom-up, I feel quite "safe", it can run at least.</p>