- Your first working code should be considered a "rough draft"
- You then clean/refine this rough draft, possibly multiple times,
to get a clean version.
- When you have different types with similar methods inside of a class,
its a sign to break out into a new class.
- Instead of making one large change to the code which then breaks it,
make smaller changes and test as you go as they're easier to fix
- "Much of good software design is simply about partitioning - creating
appropriate places to put different kinds of code. This separation of concerns
makes the code much simpler to understand and maintain."