in which you define the requirements and plan the flow of information for your software. • It’s really more than that, but we’re going to think of it this way for now. • It deals with higher level concepts — more about interfaces than implementations
one that takes solving it to come up with a better solution. • You won’t come up with the best design for something, until you’ve made a worse version of it.
• Your time is limited -> deadlines. • Every language has different strengths and weaknesses • Certain features may be more important • How you design interactions can either give or take away flexibility for your code to adapt to growing or changing needs.
all of your error handling of bad inputs in one place. • You can give yourself consistently formatted data. • You don’t have to worry about what you’re getting throughout the whole program, just in the facade.
to understand. • Less chance of missing error checks, since you’re cleaning the data at its point of entry. • When you’re writing a routine, you can worry about coding good solutions, and not tripping over your own feet.