Project paradox
At the start of a new software project, our domain knowledge is minimal, yet the number of decisions we make is huge. We need to consider business processes, libraries, frameworks, and infrastructure. But due to our limited knowledge, many of these initial decisions will likely turn out to be suboptimal.
Over time, our understanding grows, but many of the decisions we made earlier would now be hard to change.
This is the project paradox: we need to make some of the most intractable design choices early on, when we have the least information to make the optimal decisions.
One way to address the project paradox is to delay critical decisions until as late as possible, when our knowledge has improved. This implies investing more in analysis and planning up front, so we can better understand the project requirements and constraints, and thus improve the quality of the technical decisions we will need to make once construction starts.
Another approach, commonly referred to as being consistent with agile ways of working, is to design systems with a strong bias toward support for changeability.