How to ship faster to production?
Tags: productivity, cicd, automation
Published: 2023-03-23 12:37:06

Speed is underrated.
I know we need the right direction, but after you know where do you want to go, you need to accelerate and speed up.
Startups and companies in general should move fast.
This is how we accelerate innovations in our world.
We can always optimize and go a bit faster.

I will list many things that can help you to ship faster to production with confidence, all these are used in Woovi and are being improved in a daily basis.

## Git Branching model
There are many ways to manage your source code and how your team will work on it.
Git Flow is slow, and it will block your team unnecessary.
Move to trunk based development, where you prefer to hide WIP features behind feature flags instead of waiting for a QA.
Every pull request should go against `main` branch, and each commit at `main` branch should update the staging environment.
You can control production release via special pull request workflow or git tag.

## CI/CD
Lint, Tests, Deployments. Everything that needs to be automated should be automated. Add conditional build to make sure your CI/CD is fast and provide a fast feedback loop for developers.
[Automate your dependencies updates](https://dev.to/daniloab/using-github-actions-to-improve-your-developer-experience-29n7) using `dependabot` and `automerge`

## Automated Tests
Automated tests make sure new code won't cause regressions.
You can use automated tests to guide your development, like TDD, to make sure your implementation is correct. I bet that you are going to reach the solution faster, iterating against an automated test.
Automated tests let you release a new version to production any time.
If you don't know how to test, you probably don't know what your coding is doing.

## Staging environment
The staging environment should be as close to production as possible.
Staging is your last chance to catch bugs before they reach your users.
The staging environment makes it easy for non-developers to validate if the UX and business logic is correct.
Link previews on pull request can help a lot for hard changes on design system or landing page that can affect the whole product.

## Documentation
Written documentation is the only way to scale knowledge in an asynchronous and remote workplace. Without documentation, every developer needs to relearn everything every time, and learning is very slow.
You can also add Request for Comments (RFC) for your documentation to review, plan and discuss new features and proposal before coding. This reduces uncertainty and makes sure you are building the right thing.

## Monitoring
You need real-time monitoring to be able to release many times in the same day. Real-time monitoring and alerts let you track regressions in performance and new bugs when a release happens.
When a regression goes to production, you have two choices: land a hotfix or rollback.
If the regression is not critical, just land a hotfix.
Otherwise, just land a rollback and work in a fix with more time.
You can also reduce the risk of deployment having a rollout approach for your release, or using feature flags.

## Decoupling services
Breaking your monolith in services can help you reduce the risk of a new release.
When you have separated and isolated services, you can release only the ones that changed since the last release, reducing the risk of the release.


## All in all
Every item listed above is about reducing the development cycle, making the feedback loop as fast as possible, reducing the diff, what new code will be pushed to production, and reducing the risk.
If we don't do a release in a given day at Woovi, we are going to release to production at least 100 commits with a lot of new code, so we prefer to do many releases per day to reduce the risk and burden of having to retest everything again.

What items of this list your company does not have set up yet? If you are struggling to set up this in your company, give me a ping and I can help you out.

---

## References

- [Branching Patterns](https://martinfowler.com/articles/branching-patterns.html)

---
Woovi
[Woovi](https://www.woovi.com) is a Startup that enables shoppers to pay as they like. To make this possible, Woovi provides instant payment solutions for merchants to accept orders.

If you want to work with us, we are [hiring](https://woovi.com/jobs/)!

---
Photo by <a href="https://unsplash.com/@isaacjenks?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Isaac Jenks</a> on <a href="https://unsplash.com/photos/j7lTi6MtYgk?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>