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.