Irreversible decisions are a very small subset of all decisions you will make. If you don't do those at the beginning (or write your code to be agnostic to them, ie, by leaving out feature sets that would surface that decision), then you will be in pain. Experience will tell you which those are, and beginners often have to learn this the hard way. Some never do. Yes let's add localization and security on to the application after it's already 100kLOC and shipped to paying customers. That'll be fun.
Everything else is just annoyance, and lumping those in with the others ends up pulling attention away from the ones that really matter, meaning those solutions get compromised on quality.
Leaving space for a solution is not the same thing as creating an abstraction for a solution, and most people don't get that. Architectural astronauts elevate this blind spot to performance art, and none more profoundly than J2EE architects, as lampooned by Enterprise FizzBuzz: https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpris...
I wonder sometimes if some of my former coworkers' cognitive dissonance ends at the office door, or if at home they hang empty picture frames on their walls as placeholders for when they eventually find some art they like, put armchair-shaped boxes labeled "Chair" in their living rooms, dolls in empty cribs and stuffed animals in empty pet beds.