A change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior.
Prior to change (make the change easy).
After change (clean the kitchen).
You can only wear one hat at a time
But what if i am not allowed to?
premature optimization is the root of all evil
Premature decisions are accidental complication.
Choose an architecture that allows you to defer decisions.
Low level details
Low Level Details
DIP (Depdency Inversion Principle)