We develop lots of software products and over time we’ve found that building around principles helps us reduce uncertainty in decision making.
- Know your product principles
- Simple is better than complex
- Complex is better than complicated
- Readability is better than conciseness
- Practicality is better than purity
- Repeating something twice is okay
- Repeating something ten times is not
- Special cases aren’t enough to break the rules
- Define requirements before architecture
- Draw out architecture before typing
- Write tests before code
- Write comments before code
- Do the simplest solution first
- If the implementation is easy to explain, it may be a good idea
- Build monoliths first, and break out microservices as needed
- All errors should be handled
- Dev setup should be one step
- Deployment should be one step
- Rolling back should be one step
- Everything should be backed up
- Prefer payment over responsibility
This is a work in progress- curious what principles other engineering teams use in their processes.