We prefer asynchronous work and automation over having tons of meetings and blocking sequential steps. Taking this approach makes us heavily rely on CI/CD, but also allows us to have a deployment frequency of over 50 deployments to production every working day.
Deployment frequency to production is the most important metric for us, as it allows us to know how often we’re adding value to our clients.
By having processes completely aligned with this metric, we ensure that developers are constantly shipping small changes to the environment where they will actually add value. That is production.
Constantly shipping small changes to production also offers other advantages, like:
- changes are easy to understand and debug;
- peer reviewing becomes simple and fun;
- developers feel empowered as they see how their work has a real impact;
- reverting a bug or a failed deployment becomes much easier;
- deploying is a lot less scary.
Test everything, fail, improve constantly
We think CI/CD is an integral component of the organization. Everything we do should be both tested and deployed by the CI/CD.
We also think of failure as the best way of finding what needs to be improved. This is why every time something fails, we look for ways of adding a new test to our CI/CD so it does not happen again.
This approach makes us have very big CI/CD pipelines and spend considerable amounts of time optimizing our CI/CD times and costs, but it also allows us to constantly improve our software, reduce risk without blocking deployments, and keep the knowledge we acquire throughout the path within the organization.
Everything as code
By making the repository the point where everything happens, we get benefits like:
- a single point of work for everyone;
- complete traceability with git as any change must be made via a Merge Request;
- having the capacity to test anything using CI/CD;
- complete reproducibility by constantly deploying changes using CI/CD.