Programming
Table of Contents
Purpose
To help our team write better code together.
Scope
This folder is for topics related to programming and technical architecture.
Principles
“We have seen that computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty.”
This is how we build things.
- Build a prototype first to validate everything (market, feasibility, usefulness).
- It’s encouraged to take shortcuts as long as your project is just a prototype and not used in production.
- Get feedback on your work by shipping it to real users at least once a week, ideally every day.
- If you can’t ship to real users, ship as much as you can to internal stakeholders.
- When a prototype is validated, it transitions to a product and must be made maintainable.
- This means changing emphasis from testing the user experience as early as possible, to reducing technical debt for the long term.
- When working on existing projects (products), always leave things in a little better state than you found it.
- Take special care with error condition handling, as this a key to stability in the long run.
- For every error case, is it something we need to know about? If so, log it to Sentry.
- If the application is in an invalid state it’s better to crash and restart as early as possible (return 500 HTTP code).
- For validation problems (user error), return a 400 http code and refuse the operation. We don’t generally need to tell the team when this happens.
- Keep things as simple as you can. Blog post
- We have Coding Standards based on auto-formatters where possible, which include standards for structuring projects which are based upon what we’ve learned.
- We operate based on principles in 12factor.net, see implementation here
- We are intentional about what dependencies we include in our stack
- Refactor incrementally as part of your other work, instead of doing big rewrites.
Developer’s Guild Meetings
The developer’s guild exists to:
- Develop lightweight standards, style and conventions that reduce or avoid technical debt and continuously improve code quality across all projects
- Make it easier for Countable developers to switch projects, knowing what conventions should be used globally.
- Create a great learning environment where we can all help each other improve as devs.
- Help Countable deploy better quality work in front of real users more quickly.
We accomplish this via:
- Monthly meetings with workshops and presentations.
- Mob / pair coding sessions.
- Code reviews.
See Also
Table of contents
- Architecture
- UX For Devs
- Coding Standards and Style
- Code Project Structure
- Prototyping
- Git
- Information Security
- Dependencies
- Testing
- HTML/CSS
- Javascript
- Python
- Django
- Training
- The Shell