Companies large and small have been bitten by waterfall project management. From strong dependencies to long manual regression test periods, this process can often lead to significant delays. Due to this, companies which can endure the switch to continuous integration and continuous delivery/deployment are pushing out new features faster than ever because they make small, incremental changes.
The idea is that throughout each day, features are created and deployed – often behind a feature flag. Once a feature is ready, the flag is enabled and the feature is activated. By the time the flag is active in production, automated testing would occur on each code push. By using a feature flag and a service such as Launch Darkly or Rollout, you can gradually enable the feature based on any parameters you wish, such as a simple percentage, location, or based on user profile information.
There are two primary schools of thought when it comes to CI / CD. The continuous integration piece largely remains the same – code is merged into your master branch throughout the day, builds are run, and the code is self-testing. The CD part is where a decision is made: do you continuously "deliver" and push a button to deploy, or do you continuously "deploy", where everything is automated? We find that this is often a path, where our clients will be more comfortable pushing a button to deploy at first. Then, as their project becomes more well-tested, they will move to fully automated deployments with feature flags. Another reason we find companies will prefer continuous delivery over deployment is for regulatory reasons, where multi-level approvals are mandated.
New services and platforms pop up every day, so it's important not to become stagnant. If your releases are weekly, monthly, or even worse – yearly, it will be difficult to retain your users. CI / CD allows you to push new features every day, which are noticeable. These frequent changes will keep your users engaged, and many times encourages feedback. Users seeing their feedback integrated into your product is one of the best ways to maintain retention.
Engineers want to build. Long release cycles can be boring and painful and are driven by meetings on top of meetings. Focusing on smaller features and continuously rolling them out is more exciting, and will keep your engineers engaged. Rather than working on the same thing day in and day out, a wider variety of solutions will come across their plates, which will drive more creativity and better overall output.