- Favor design that makes it easy to extend code.
- Adhere to the Open-Closed-Principle (OCP) to keep code open for extension but closed for modification.
- Design for code additions by means of base classes, templates, function overloading or template specialization.
- Avoid premature abstraction if you are not sure about the next addition.