Analysis and Design1. Well-designed software is easy to change and extend
2. Use basic OO principles like encapsulation and inheritance to make your software more flexible
3. If a design isn't flexible, then CHANGE IT! Never settle on bad design, even if it's your bad design that has to change
4. Make sure each of your classes is cohesive: each of your classes should focus on doing ONE THING really well
5. Always strive for higher cohesion as you move through your software's design life cycle
OO Principles1. Encapsulate what varies
2. Code to an interface rather than to an implementation
3. Each class in your application should have only one reason to change
4. Classes are about behaviour and functionality