Smart-designed code is much easier to maintain, optimize, and extend. There are three high-level aspects to code design that are particularly important.
System architecture — the basic layout of the codebase. Rules that govern how various components, such as models, views, and controllers, interact with each other.
Maintainability — how code can be improved and extended
Reusability — how reusable are the application’s components and how easily can each implementation of a component be customized