Pipedrive R&D Blog
Published in

Pipedrive R&D Blog

Welcome Aboard the Pipedrive iOS Release Train

*From https://wall.alphacoders.com/

Automation mindset

“Automation mindset” is one of our mobile tribe core values, which as a team, we have defined for ourselves.

Mobile tribe values

Jenkins

Pipedrive uses a vast Jenkins infrastructure that is maintained by our incredible Tooling team. This sounds really cool… until you realize that all of the countless jobs, scripts, pipelines, and daily routines that are tuned to making the Pipedrive web app happen, are not suited to the mobile world.

All jobs are up and running, and sun is shining!

Fastlane

Fastlane, initially created by Felix Krause and now owned by Google, is widely used and loved by iOS and other mobile teams. It’s hard to estimate the amount of time it has saved us for routine around-development tasks, from app builds and test executions, to dSYM upload and hotfix routines for live builds. Every iOS release usually requires a lot of manual work, like creating a new version, updating app metadata (for all languages), manually selecting the correct build to release, etc., and Fastlane allows to automate it easily. Each Jenkins job usually just executes the corresponding action that is stored in our repo.

A main branch that is always ready to be released

Stable weekly releases are only possible when the main branch is continuously kept in a releasable state. This is the state we try to maintain every time, and it yields the desired results. Each pull request triggers a set of jobs that check code style, run all the tests, and create adhoc build from the branch from new changes. We don’t merge it until all checks pass and a PR is reviewed by at least one team member. In case changes can potentially break something, a PR build has to be checked as part of the review. When merged, the new build is triggered from the main branch right away, running all tests again and also creating a new Alpha build.

Fast and clear reviews

Iterating speed over pull requests also required additional improvements to the process.

  • The changed line count is less than 500? The PR won’t be blocked if there are more, since sometimes it’s really not possible, but the overall target is to make each PR small and clean for easier understanding and review.
  • Are newly added files tested? It’s a non-blocking check, but seeing a notice that your new fancy class X is not covered by tests actually motivates you to remember to cover new code with tests. Also, you don’t want your colleagues to see this warning while reviewing your PR, right?
  • If a new feature flag is added, it helps remind you that it also has to be added to the feature flag board and Firebase, since it’s easy to forget.
  • Also some other small checks for fun and giggles
This how part of Danger output looks in our PRs

Translations

We use Crowdin for Pipedrive localization, and support more than 17 languages, adding new ones every year (you can read more about the overall process here). In this area, mobile apps are keeping up with the web app, so work with new translation strings is part of our weekly tasks.

Feature flagging

This section brings us to a very important part of our process, a process that allows us to sleep peacefully after each release — feature-flagging. We use Firebase for this and it suits our needs perfectly since it allows us to enable specific flags per language, per country, per build, or to a specific percentage of users, and also allows for creating custom criteria when needed.

Firebase allows creating different rules that can be shared between flags

Quality

As mentioned before, maintaining high quality is one of our core values, and every team member is responsible for keeping their solutions in maintainable and stable shape. In the iOS team, this is ensured by covering new code with tests, new views with snapshot tests , and running them whenever possible.

Slack workflow

While the biggest part of our process is automated, it still requires manual input from time to time— e.g. QA and developers’ call to decide if we proceed with the next release and pull the trigger. To make sure it’s all happening on time and that nothing is missed, we have Slack Workflow configured. This gives better visibility to what is finished or what is still pending, and ensures weekly pulse stability. Currently, our iOS team consists of only 5 people, but it may still be hard to coordinate and ensure that we are not working on the same processes at the same time.

Here, we see that Andrius committed to taking over the release process this week, and QA confirmed that it’s all good to proceed. Choo-choo!

Release notes

As a little treat for reading this article, let me tell you a short story.

Final stop

We’ve reached our final destination, I hope this was a fun ride and you were able to learn something interesting and valuable from the journey. Now it’s time to hop off since we have to prepare for the next ride.

Thomas The Train GIF By Bleed Gfx

--

--

Stories from Pipedrive’s product, engineering, design, marketing, localization, and many other teams

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store