3 Laws of Good Software Architecture

Law 1: Good architecture enables architects to have a minimum of irrevocable decisions.

Law 2: To make decisions revocable you need to design for flexibility.

Law 3: To make use of flexibility one needs to refactor mercilessly.

Article Link