https://chriskiehl.com/article/thoughts-after-10-years [circle-ava] * About * Projects * Contact * Book * Halp! * RSS Software development topics I've changed my mind on after 10 years in the industry [800Pasted-] 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. Copyright (c) 2014-2025 Made by a human being. Not GPT