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.