* Principles: https://www.amazon.com/Principles-Life-Work-Ray-Dalio/dp/150...
* The Effective Engineer: https://www.amazon.com/Effective-Engineer-Engineering-Dispro...
* High Output Management: https://www.amazon.com/High-Output-Management-Andrew-Grove/d...
The Effective Engineer: How to Leverage Your Efforts In Software Engineering to Make a Disproportionate and Meaningful Impact
Effective Engineer - Notes : https://gist.github.com/rondy/af1dee1d28c02e9a225ae55da2674a...
https://www.amazon.com/Effective-Engineer-Engineering-Dispro...
1-star commenters will say they learned nothing new, while 5-star commenters will be happy they found knowledge from experience enginners in (kinda compact) book form...
I frankly got a lot more pragmatic about asking for rewrites after reading it, and I feel it helped me to grow (mature?) as a developer.
Either way, I think there's a need to balance the need for employee self actualization needs which they often push as rewrite requests "Oh since we're rewriting this, we should (do it in)/use/etc X instead". I have often realized that a lot of requests to rewrite something are really tinkering desires camouflaged as a business related request, which is not to say that the code that does exist could have problems, it could, but having a period of debt repayment would improve it as well. So finding a way to allow your employees to tinker without letting their desires torpedo your products would be positive.
Either way, it's a complex subject, and I don't really think there's a single "right" response to it. Best of luck!
0: https://www.amazon.com/Effective-Engineer-Engineering-Dispro...
EDIT: I'm not a CTO, I'm a developer.
https://www.amazon.com/Effective-Engineer-Engineering-Dispro...
Edit: Here's why I like it: https://henrikwarne.com/2017/01/15/book-review-the-effective...
His premise - having a senior engineer spend an hour a day for the first month helping the new employee with explaining the existing abstractions being used, the underlying design of various systems, etc. - would still be only about 20 hours, which is still only 1% of the number of hours that employee will spend in their first year - about 2000 hours.
As a result, I believe that armed with that knowledge, the new employee is likely to be much more productive, failing which, at least cause less damage to the code base.
I would say that the first example you mention - leaky abstractions et. al. - are just as much (or maybe more) due to poor onboarding as they are due to the frustration of mediocre programmers. There is a lot to be said for good process, which software engineering as a discipline falls short of quite consistently.
[1] https://www.amazon.com/Effective-Engineer-Engineering-Dispro...
https://www.amazon.com/Effective-Engineer-Engineering-Dispro...
If you're experienced (senior or higher), it's still a good read, but fewer things will surprise you.