The summary.
WHAT SEPARATES ENGINEERING FROM PROGRAMMING IS TIME AND OTHER PEOPLE
Code written once and discarded needs none of this. Code maintained for years by a changing team needs all of it.
MOST PROJECT FAILURES ARE NOT TECHNICAL
Building the wrong thing is the commonest and most expensive cause.
What reduces nearly all of them is delivering something small, early, to real users, and repeating — it surfaces misunderstandings while correction is still cheap.
ASK OF ANY DECISION HOW EXPENSIVE IT IS TO CHANGE LATER
That determines how much thought it deserves now. Decide expensive-to-reverse things early; defer the rest.
ONLY ACCIDENTAL COMPLEXITY CAN BE REDUCED
It comes from abstraction nobody needed, generality added in anticipation, and patterns applied without a problem to solve.
Code that does not exist has no defects, needs no tests, and requires no maintenance.
STATE TRADE-OFFS EXPLICITLY, AND RECORD WHY YOU CHOSE
Unstated trade-offs become disputes about preference. And circumstances change decisions from right to wrong, not poor reasoning.
QUALITY ATTRIBUTES DRIVE ARCHITECTURE MORE THAN FEATURES DO
State them as figures, not adjectives, and accept that requiring the highest level of everything delivers nothing.