Repeat after me:
- I write small methods, small classes and use simple objects with a single purpose.
- I try to take advantage of map, flatmap, reduce, filter and friends.
- I write pure code wrapped in a thin layer of state management / state passing.
- I restrict the number of places where side-effects take place.
- I rely on libs and their test suites.
- I test properties, not just happy paths.
- I cherry-pick the interesting randomly generated test-cases to highlight bugfixes.