20 principles I learned from 10 years of developing software

It's been 10 years since I started my first job in the software industry. Here are 20 principles that I have learned and try to follow in my day-to-day life.

  1. Be humble - No engineer in the world knows everything, the same applies to you.
  2. Make it work, make it right (and sometimes make it fast).
  3. Optimize for change - Prefer duplication over the wrong abstraction.
  4. Always write tests - If you're not writing tests, you're testing manually.
  5. Solve 80% of use cases - You never gonna solve everyone’s problem.
  6. Prefer functional programming - It's easier to understand. If your code requires a Ph.D. to understand, you’re most likely doing it wrong.
  7. Delete as much code as you can
  8. Good Enough is Better than Perfect - Don't discard meaningful improvement just because it's not perfect.
  9. Criticize in private, praise in public
  10. Make notes - If you think you will remember it, you're lying to yourself.
  11. Talk to your users - The best software is built by engineers who have empathy for their users.
  12. Learn with intention - Practice with a clear and specific goal in mind - what you want to improve and exactly how (deliberate practice).
  13. Do not generalize early - Wait until you have at least 3 duplicates of code before you make an abstraction (aka. Rule Of Three).
  14. Fix broken windows - One hack in code leads to another hack. Soon your code will become unmanageable.
  15. Fix the problem - doesn't matter whose fault it is, it is your problem.
  16. Do what works, not what's fashionable - Try it first with a small team. If it works, expand. If not, abort.
  17. The best work requires a good rest - Regular time off is essential for top performance. You also don’t expect professional sprinters to sprint all the time.
  18. Take small steps - Big rewrites don't work. You will lose motivation and focus along the way. Aim to release daily. It gives you the freedom to change focus when necessary.
  19. Praise for good work - Something we've observed in animals, but works for people too. You will get better results when you praise people for good work rather than punishing them for a bad one.
  20. Perfect code doesn't exist - It's better to accept this as a fact rather than wasting time and chasing the impossible.