I'd even take this a bit further, and say this is basically an argument that the engineering manager, engineering/dept VP, and CTO all need to be engineers or past-engineers themselves, so they actually do have enough competency to know what to reward.
on the other hand, the recent skip-level I had that got me to quit in six months was an engineer himself, but had no real opinion on code quality or anything more than a superficial, process-oriented understanding of the dynamics on the team :(
moral of the story: taste is necessary; direct technical experience is mostly necessary, but nowhere near sufficient
I've worked for VPs who were former engineers, and they eventually lost their appreciation for the artistic side of the discipline and got obsessed with features, demoes, burn down charts, etc.
If you want to solve this problem, you need to keep the professional manager class out of your org. Because once they get a foothold, they fuck everything.
It's easy to obsess with the artistic side of the discipline when you're doing it on someone else's money and assume it's coming from an infinite bag.
Once you are a manager and given limited resources to get a job done by a certain date, art goes out the window and it's all about efficiency, you get paid to get the job done, not have pretty code.
I think people focusing on SW engineering being art have been spoiled by only working at companies with infinite money, like Google, who treat work as play in hopes that 1 in a million toys will be the next billion dollar idea. But open your own shop, get customers, hire people and let's see how much you'll care about their work being art VS efficient, when it's your dime on the line, then you'll embrace and understand the managerial mindset you've despised.
Furthermore, the art of the trade is not "pretty code"; it's a design and implementation that can last decades and not require a rewrite to accommodate new feature demands. There is a balance to be struck between business interests and legitimate engineering concerns around technical debt. And as we've gotten more of these MBA wunderkinds at software companies, the balance has swung very far toward the "Just get it out the door, engineers are just spoiled brats who are never happy with anything" end of the pendulum. Pretty much the entire attitude you espouse in your second paragraph.
You're not wrong that it's not the engineer's dime in terms of money. But it's also not the manager's dime on the technical debt credit card. Engineers have to make the trash solutions forced by their management work and scale for years. That doesn't show up on a quarterly report, but that doesn't mean it's free.
When you're a start-up starting out to build your product, nobody knows what your product or the market will look like in two years, let alone in 10. YTOu might not exist in 2 years if the product isn't a hit, so there' no point in investing in robust codebase if you'll be broke by then.
Very, VERY few companies starting out have the luxury of having secured the funding, customers and the knowledge of knowing upfront what the future will look like in order to plan well from the start.
>Pretty much the entire attitude you espouse in your second paragraph.
It's not my mentality, I'm just telling you what the real world mentality is of those who pony up the cash. Then again, I'm in Europe, where VCs don't throw billions of ZIRP money at SW engineers, so nobody here values your "code quality" but your ability to push something out the door fast and cheap to multiply their investment ASAP.
It's been a frustrating thing to talk about. The people who've seen high quality work in action just say "well, obviously it will be faster and more effective", and the people who haven't simply refuse to believe it. It's like there are two incommensurable paradigms around software, and we're just talking past each other :(
The best places get a ton done with very few people. Like, XTX has, what, ≈100 engineers? And they're operating a system trading across 35 countries using hundreds of petabytes of data. That's more logical complexity with higher robustness and performance requirements than tech companies with thousands of engineers. And they're not doing this by slinging crap code at the wall as fast as they can!
Who defines what "high quality code" is and who enforces it in a team? Because what's high quality to you might not scan to other members of the team, and if you want to your standards across the team then you have to spend time and effort educating the people and enforcing the standards. And now you're wasting time obsessing over standards and guidelines while your efficiency doesn't increase.
> you can just be better
Better how?
>The best places get a ton done with very few people.
Is it because the quality of their code, or because those people are better at what they do and better at working as a team?
>And they're not doing this by slinging crap code at the wall as fast as they can!
Because they're a highly specialized company making a highly niche product who's features must include high tolerance and availability ahead of new features. You can't in good faith compare trading firms to your average web dev shop. different projects, different customers, different budgets and profit margins.
That's like comparing an F1 car to a road car and telling the engineers working on the road cars to "just be better", that the reason their work is not matching the F1 car is the quality of their drafting and not the 100x difference in budget and requirements.
Edit to reply here to your child comment below:
>If you have a strong team, you don't have to "enforce" quality.
Obviously you can do a lot with fewer people when you have crazy money and therefore can afford very high hiring bar. That's not most companies and not most SW projects though.
Hence my original comment: "I think people focusing on SW engineering being art have been spoiled by only working at companies with infinite money, like Google"
Your point only works if you cherry-pick well funded big-tech like XTX, but once you step out of that bubble to non-tech companies who need SW products on smaller budgets things are way different. Those places don't have the hiring bar of XTS, so the quality will be different.
Artistic side of the discipline doesn't mean pretty code. It means good design, no rushed spaghetti code, expandable architecture, etc.
"Getting the job done", in manager speak, often means shipping features with awful code behind them, just to give the manager enough time to move up the ladder without suffering the consequences of their awful decisions. With engineers left behind to fix the mess.
There would be much less demand for jobs if there were no messes to fix.
Not necessarily. The problems rather are:
- Those who are mostly immune to this will hardly ever be put on a management track.
- Those who are resistent regarding this kind of infection won't make any further career in management (incentives matter).
I'd go further and say that even within engineering, people outside of a team can't give immediate rewards for work whose long-term value is internal to the team, for the same reason: they don't know if the work you're doing is actually valuable or is just superficially similar to the kind of work that often does have long-term value.
If you're confident enough in your long-term decisions, and how you spend slack time, then you should be fine with being rewarded for delivery, since you expect your long-term work to pay off in future delivery and future rewards.