Software development topics I've changed my mind on after 10 years in the industry

Published 2025-02-03
Four years ago I posted about the same topic.
A kind email reminded me its time for another check in.
Things I've changed my mind on:
Things I now believe, which past me would've squabbled with:
- Simple is not given. It takes constant work
 - There is no pride in managing or understanding complexity
 - Typed languages are essential on teams with mixed experience levels
 - Java is a great language because it's boring
 - REPLs are not useful design tools (though, they are useful exploratory tools)
 - Most programming should be done long before a single line of code is written
 - Frontend development is a nightmare world of Kafkaesque awfulness I no longer enjoy
 - Elegance is not a real metric
 - Good management is invaluable. (I went most of my career before seeing it done well)
 - DynamoDB is a good database (IFF your workload lines up with what it's offering)
 - Objects are extremely good at what they're good at. Blind devotion to functional is dumb.
 
Opinions I've picked up along the way
- Engineering is mostly about communication
 - Never go full monad in Java.
 - The query planner is a cruel mistress
 - If I think something is easy, that's a sure sign I don't understand it.
 - You have to give younger devs room to explore and make mistakes
 - You have to actively invest in improving your soft skills (and investments pay back immediately)
 - Very few abstractions exist in general application development. Just write the code you need
 - Contrarily, library development is about abstractions. Spend time hunting for an algebra
 - ORMs are the devil in all languages and all implementations. Just write the damn SQL
 - The trouble with functional programming is functional programmers
 - Given a long enough time horizon, you'll deeply regret building on Serverless Functions
 - Types are assertions we make about the world
 - Distributed locking is still really hard for some reason
 - Formal modeling and analysis is an essential skill set
 - Isolation is the most important property of a good integration suite.
 - DynamoDB is the worst possible choice for general application development
 - Most won't care about the craft. Cherish the ones that do, meet the rest where they are
 - Gradual, dependently typed languages are the future
 - You literally cannot add too many comments to test code (I challenge anyone to try)
 
Things I have not changed my opinion on:
- People who stress over code style, linting rules, or other minutia remain insane weirdos to me. Focus on more important things.
 - Code coverage has absolutely nothing to do with code quality (in many cases, it's inversely proportional)
 - Monoliths remain pretty good
 - It's very hard to beat decades of RDBMS research and improvements
 - Micro-services require justification (they've increasingly just become assumed)
 - Most projects (even inside of AWS!) don't need to "scale" and are damaged by pretending so
 - 93%, maybe 95.2%, of project managers, could disappear tomorrow to either no effect or a net gain in efficiency. (this estimate is up from 4 years ago)
 
We'll see which of these have flipped at year 15.