Achieving faster and more reliable releases is the goal of all CTOs and Engineering Teams. We want to keep up with the pace of business and shorten time-to-market to offer more value to our users. Continuous Delivery, as promoted by Jez Humble and David Farley, is one of the paths to achieving that objective.
There are many obstacles to get there: technical, organizational, and cultural. But the rewards are great and the effort is clearly worth it.
In the past 2 years, the Engineering team at Dashlane has worked hard to improve our release pipeline so that we can be in a position to release more frequently while maintaining reliability of delivery.
This is a tremendous effort that has touched all parts of our development lifecycle.
We were far from our goal when we embarked on the journey. We suffered from an old and fragile Mercurial versioning system, had limited Continuous Integration capabilities, and were mostly doing manual testing with inconsistent test automation across teams.
Steps and Tools to Achieve a Faster, More Reliable Release Cycle with Continuous Delivery
- We started by migrating our source code repository to Git. We use Bitbucket from the Atlassian suite. This also provided us with the means to enforce better code reviews. We now have generalized and mandated code reviews with multiple reviewers.
- Increased Code Quality was another area of focus. We improved our usage of tools such as SonarQube and Linters.
- We consolidated our continuous integration platform on Bamboo so we could orchestrate efficiently the build phases alongside the automated tests.
- Test Automation was another big investment, improving and expanding for all platforms, with deep coverage of unit tests, but also automated functional regression tests. For functional testing here are the tools we use:
- iOS: Xcode
- Android: Espresso
- Windows: Ranorex
- Mac: Xcode
- Web: Watir
- Once in production, it is important to rely on a solid monitoring infrastructure to be in a position to react quickly to any issue. Our log and analytics pipeline is built upon AWS Redshift, ElasticSearch – Kibana and Tableau. We also set up team ceremonies called “Morning Gymnastics” to proactively check team metrics and monitoring every morning.
With all of those technical prerequisites in place, we were capable of accelerating. Each platform has its own rhythm and its own set of characteristics: iOS and Android maintain a release train of releases every 2 weeks, while our back-end team will ship several times a day. This wasn’t easy at first — we encountered various difficulties and some teams were not comfortable releasing too frequently. Soon after, though, the team became more satisfied with the release schedule and things have being going smoothly and efficiently since.
How Faster Release Cycles Make Teams Happier
The effect of releasing quickly is far-reaching. Here are some teams that have been materially impacted by our new schedule:
- Engineers: because more frequent but smaller releases minimize risks and make releases become a normal easy event and no longer a big dramatic moment,
- Product: because they can more quickly see the result of their work with our users. It also facilitates working in an MVP/MLP mode.
- Business Stakeholders: because it helped us reduce our time-to-market.
The next step for us is to keep accelerating by improving our delivery tools, such as our feature-flipping mechanism or our A/B Test Engine.
We shared our experience recently at the Continuous Delivery Meetup in Paris. See the slides below to learn more about the Dashlane efforts around Continuous Delivery.
As always, feel free to comment or provide feedback on your own experience.