Whuahaaaha ... If only that was so easy. Once you get it working, it will in most cases be torn from your hands and you will not get to touch it again any time soon. So what one does to find even a little bit of joy is to try to get some sense into that code right away, because you don't usually get a second chance.
If I knew, that at a later point in time I will only have to ask and sure enough I will get the opportunity to make things well-made, then I would be much more willing to not spend any additional time into making things well in the first run.
Making things well requires knowledge and craftsmanship, while making things merely as shoddy as possible but according to spec will requite a bunch of interns making a pile of unmaintainable crap. Code only written with the next goal in mind, not looking out for the casualties along the way.
Many try do it all at once and then end up with… nothing.
In my professional experience, the only spec you get is a wishlist, never quantified, always vague. Half the work is figuring out what the customer wants.
The only metric that anyone cares about is speed. You need to go fast, but to where? There is no consensus.
The PoC becomes a pilot becomes production becomes an exit becomes someone else’s problem. That’s the SLDC that has gotten us to a place with endless amounts of terrible software everywhere you look.
Though, I’m optimistic that at some point, the software industry will be so saturated, all the products have all the features, and the only place left to differentiate or disrupt will be quality.
That’s basically the only important context. If you can’t deliver that, it doesn’t matter how well thought through, extensible, or scalable it is.
And a substantial portion of the rest is telling them why they might be better off asking for something a little different.
So it's a conflict of names, a matter of proper identification.
If that's not for you, you need at least a requirement engineer between you and the customer. That's also okay.
From my experience, getting things done quick is almost never relevant. Getting things done “cheap” is.
I also tend to find that folks who write quick and dirty code “to spec” leave it riddled with bugs and unhandled corner cases.
1. Get it working.
2. Get it working well.
3. Get it working fast.
Your last sentence reminded me of that.
Maybe the people who care about business value should be the engineering managers not the people who equate their personal aesthetic preferences with the only right way to write code?
On the other hand, my employer advertises clean code as a service, and this attracts the kind of developers you describe.
What's "clean code"?
Capital-C Clean Code? Hell no. This is code that looks clean only on the surface, but in practice it only works on toy projects. Anything big enough is impenetrable for debugging and a performance catastrophe.
Lowercase "clean code" from people who heard the above but never even read the book? What's that anyway? Nine out of ten times, this is just developers putting aesthetic preferences in front of correctness, simplicity and performance.
“Clean” is a horrible qualifier for code. It is either too subjective/broad, or too loaded.
[0]: https://www.computerenhance.com/p/clean-code-horrible-perfor...
This cartoon remains the best visual representation of an industry that seems incapable of doing requirements, testing, documentation, and security.
https://i.kym-cdn.com/photos/images/original/000/475/749/fd8...
IF there is budget for that very often. Otherwise they'll expect you to move on.
However
> The corporate world doesn’t give a shit about finesse, abstractions, witty or beautiful code.
Guess I’m the corporate world then! Listen here, dear colleagues: Before attempting any finesse, abstraction, wit or beauty, maybe first try to make it work to spec. Because otherwise it is entirely worthless.
If you are reasonably good at making it work, you can then make it right and maybe even fast.