> poorly defined, highly volatile, potentially short lifespan
This. This is the reality of software development, especially in a startup. You have to quickly adapt your code to the <not well defined> client's needs and to the business constraints, because if there is no cash, the company wouldn't exist anyway.
You can't do that with "perfect" code.