Two approaches to design
Preserve as much flexibility as possible
- When you find you did the wrong thing, it will be easy to change
- The program is likely to be complicated
Look for the simplest definitions
- If they're wrong, it will be easier to find what's right
- A simple program costs less to throw away