Engineering in general is the art of selecting the right trade-offs: we choose to optimize one set of design characteristics at the expense of others. For a design to be demonstrably good, it's important to make those trade-off decisions explicit.
Otherwise, it's very easy to end up with a compromise design. Like flying cars - there are some prototypes in existence today, but very clearly they're neither very good cars, nor very good planes. The only thing they're good at is combining (some) driving ability with (some) flying ability.
Even software engineering is ultimately limited by physics and so, since we can't have it all, we should choose wisely. Some design decisions are hard to change later on.
Otherwise, it's very easy to end up with a compromise design. Like flying cars - there are some prototypes in existence today, but very clearly they're neither very good cars, nor very good planes. The only thing they're good at is combining (some) driving ability with (some) flying ability.
Even software engineering is ultimately limited by physics and so, since we can't have it all, we should choose wisely. Some design decisions are hard to change later on.