A mistake less experienced software engineers make when it comes to estimations:

They break out maintainability/quality. Eg “building the feature is 2 weeks, adding automated tests another 3 days”.

What follows by less technical stakeholders is a push to remove the latter.

Non-functional requirements like correctness, quality, maintainability, performance etc should be baked into estimates, and not made part of bargaining. That bargaining is how sw can become less maintainable over time.

@gergelyorosz I'm always having to balance a) giving my clients what they ask for, knowing that I don't always have the big picture; and b) pushing back on my clients, knowing that they aren't the experts in how good software gets made - otherwise they wouldn't need me.

Sometimes a hacky prototype is actually what the client needs right now.