Local development environment SHOULD be as close as possible to the production environment
Every service MUST be containerized. Dockerfile should be stored in the service repository
Repositories
Every service SHOULD live in a separate repository
Every repository MUST have a README.md describing
Code purpose
Usage examples
Configuration options
For repositories containing services - installation steps
Every repository containing a service should have Dockerfile recreating the production environment for the service
Libraries should only be extracted to separate repositories if they are used by more than one service. Sidecar services should be preferred to shared libraries.
Migrations
Every significant refactoring that requires a whole-system migration MUST start with a design document shared with the team.
Every code migration should start by adding a rule/lint that forces all new code to be written in a new way
Artifacts
Vision document describes the desired state of the system. It includes
the goal of the system
intended customers and their needs
supported scenarios
non-functional requirements
Strategy document describes how the vision should be implemented