← All posts

22 Things From 22 Years of Writing Code

· 3 min read

I wrote my first real program in 2000. Since then: an army unit, a university degree, a big startup, my own startup, a dev shop that built software for about seventy organizations, and lots of freelance work in between. Twenty-two years. Here are twenty-two things I believe, in no particular order.

1. Boring technology is a competitive advantage. The new thing costs you learning time, missing documentation, and bugs nobody has hit yet. The old thing just works.

2. Most code is read far more than it’s written. Optimize for the reader. The reader is usually you, six months from now, at night, during an outage.

3. The best code is no code. The second-best code is deleted code. Every line is a liability you have to maintain forever.

4. Every dependency is some dude’s code. Sometimes it’s worth it. Know when you’re making that trade.

5. A monolith is fine. It’s more than fine. Split it when the pain is real and specific, not when a conference talk tells you to.

6. Naming is design. If you can’t name it clearly, you don’t understand it yet.

7. Simple is not easy. Making something simple is the hardest work in software. Making something complicated is what happens by default.

8. Data outlives code. Your schema will still be around long after the framework you chose is forgotten. Design it carefully.

9. Store money as integers. I’ll keep saying it until I die.

10. Most performance problems are a missing index or a query in a loop. Check those before you add a cache, a queue, or a new database.

11. Ship small, ship often. A small deploy that breaks is easy to fix. A big deploy that breaks is a weekend.

12. Logs and backups are boring until the one day they’re everything. Test your restore. Seriously, actually do it.

13. Estimates are guesses. Give ranges, say what you don’t know, and update them when you learn more. Nobody minds an honest “this is taking longer”. Everyone minds a surprise.

14. Write things down. Decisions, agreements, the reason you did the weird thing. Memory is a terrible database.

15. Senior developers are expensive per hour and cheap per feature.

16. Users don’t care about your stack. They care whether it works, whether it’s fast, and whether it respects their time.

17. Talk to users. One conversation with a real user is worth a week of internal debate.

18. Saying “no” is a technical skill. Every feature you don’t build is time you can spend making the rest better.

19. Being right is not the goal. Shipping something good, together, is the goal. I learned that one late, and I’m still learning it.

20. Take care of your body. Your brain is attached to it. Sleep, walk, stretch. No one ever wrote better code exhausted.

21. Find your people. The developers you meet, help, and learn from over the years will be the best thing your career gives you. (That’s a big part of why I started indydevs.)

22. It’s still magic. After twenty-two years, I still get a thrill when I type some words into a file and a thing appears on a screen across the world. If you ever stop feeling that, take a break until you do.

And a bonus one

23. Lists like this are always incomplete. Ask me again in another twenty-two years.