Checklist for faster more accurate programming
This is part of the
Semicolon&Sons Code Diary
- consisting of lessons learned on the job. You're in the
workflows category.
Last Updated: 2024-11-21
- Check on GitHub for code you can use or reference beforehand
- Know your version number constraints
- Separate development, test, and production environments
- System in place for unit testing in every language used
- System in place for end-to-end integration tests exercising the full stack
- Database migrations (exclusively) used
- Production system is configured with code (e.g. ansible/chef/docker etc.) — the goal is that it should be 100% reproducible
- System in place for debugging every programming language used (e.g. debugging libraries included and entries in README for how to insert breakpoint)
- Linters in place for every programming language used
- Beautifiers in place for every programming language used (prevent git merge conflicts)
- Code reviews mandatory before merging any risky branch
- One command (almost) risk-free deploy, stage, build
- Process for rapid rollback documented and test-run
- Naming conventions for variables in place and adhered to. Special attention is given to language boundaries
- There should be stable tool re-use from project to project and a common API for getting shit to run.
- Concepts have the same name across programming language boundaries (e.g. if in database it is
postcode
it should not be postalcode
in JavaScript/HTML)
- Automated hourly backups in place
- System in place (and documented) on how to get logs of every component (both in production and development)
- System in place for easily knowing if an email was sent (checking your inbox is not good enough — the email should pop up or show in a log)
- Seed data provided for the development environment
- Zero extraneous files under source control in Git (good use of
gitignore
)
- Work in progress should be ideally less than 1 branch per developer, and no more than a week old. Otherwise the features are too big.
- Development machine should not require any particular versions of XYZ... they should just be set up with a virtual machine
- Agree on what human language will be used beforehand
- Separate out labels from presentation