ReleaseEngineering/Development Best Practices
Jump to navigation
Jump to search
Language
- Python
- JS
Framework
- web:
- flask
- db api:
- sqlalchemy
- daemons:
- don't manage, use supervisord
- not async if you can help it
- shell out to celery
- tasks: ?
- general:
- requests
Resiliency
- retry everything, fail gently
- no in-memory state (including call stack)
- support multiple endpoints (db, redis, rabbitmq, etc) [e.g. no single-point-of-failure]
- sync + caching, you have slightly stale data but still keep running if the service you need to query is down
- run multiple copies of the app at once without conflicts
Deployment
- db:
- clustered mysql - innodb vs myisam.
- nosql - redis
- mq:
- rabbitmq
- logging:
- log to stdout (use python logging)
- use supervisord
- deploy python packages
- semantic versioning (semver.org)
Auth
Documentation
Security
- passwords
- secrets
Performance
- multi-threading
- scalability
- configuration