- Use ADTs as much as possible
- Always annotate types
- Use explicit schema
- Prefer total functions
- Prefer pure functions
- Parse don't validate
get_blah()is for I/O. Name functions for the data they return.- Isolate logic from I/O.
- Immutability as much as possible
- Write tests without hitting the database as much as possible.
- Push functionality into functions based on domain data models
- Write small functions
- Parameterize tests to cover the input space
- Always confirm before committing