Reducing build times with M1 and a mission to reduce flaky tests with Bitrise Insights
About Fetch
Fetch is the number one rewards app and a leading consumer-engagement platform that lets shoppers snap receipts to earn rewards. On a mission to reimagine what shopping looks like, Fetch is leading the charge for both consumers and the world’s biggest CPG, retail and restaurant brands.
With a team of 700+, an engineering team of 25 iOS and 20 Android engineers, over 18 million monthly active users, with 6 million using the app daily, it’s no surprise that Fetch needed a DevOps platform that focused on mobile-first and metrics.
“Our success has come from being at the intersection of fun and savings. [At its core], Fetch helps users save money, but there are also these little moments of delight that keep users coming back time and time again. From fun animations that let you change points into gift cards, to charity donations, to a daily reward mini-game, it’s all about the user. We focus on building and then keeping their trust to return to the app, hopefully every day. Our method for development is guided by the principle that even if it’s difficult for us, if it’s the right thing for our users, then we’ll do it.” Brandon Hawker, Software Engineering Lead
Exponential growth with Bitrise
Fetch needed a platform that could handle huge amounts of monthly users, so in 2019, they moved their iOS app to the Bitrise platform. At that juncture they had 250,000 monthly users but knew they were on the precipice of exponential growth. Fast forward to 2023, Fetch now has a phenomenal 18 million monthly users, with 6 million using the app every day. Consistent delivery and repeatability are crucial. Manual, error prone tasks like uploading a build from your device needed to be automated to ensure mistakes weren’t being made.
Earlier this year Fetch cut build times for the main unit test workflow on Bitrise by 10 minutes – a 45% decrease in build time – after applying suggestions from an impact session with Bitrise.
“Our engineers would much rather spend time up front automating so that things run consistently on a server somewhere in the cloud before it becomes a pain point.” Brandon Hawker, Software Engineering Lead
Packs & Guilds
Every mobile engineer at Fetch is on a pack: a cross-functional team aligned around a specific business objective. There are packs for everything: one for the new user onboarding experience, one for the rewards and receipts areas etc. The Fetch app is multi-faceted, with many moving parts. Forming packs ensures that Fetch handles complexity as simply as possible whilst also ensuring someone is dedicated to every stage of the app delivery process. It also gives each engineer a core focus and full autonomy. Engineer culture and DevX (Developer Experience) is key at Fetch. Their iOS engineers chose Bitrise, not senior management.
“We give our engineers autonomy to solve problems and, we as leadership, try not to be too prescriptive”, said Brandon Hawker, Software Engineering Lead
iOS engineers on the Fetch team are chiefly focused on their individual packs, but are also members of ‘guilds’ which are larger collectives where they can hone their craft and collaborate on the app’s wider initiatives. These guilds are the true nuclei of innovation at Fetch.
“Hire great people and then get them invested in building things the right way. If you skimp on what and how you deliver, your team will sense that and won’t rise to the level that is needed. We hire smart engineers and give them the autonomy to find the tools and services that they need to succeed – they chose Bitrise,” said Brandon Hawker, Software Engineering Lead when asked “what’s one piece of advice you would give other mobile DevOps teams?”
Releasing weekly to get it to users as fast as possible
The Fetch app is popular! It’s a Top 10 App Store app with a valuation north of $2.5 billion. Early on, they recognised the correlation between delivering updates to customers as quickly as possible and remaining at the top of the App Store, so ensuring users get the latest features as quickly as possible is key to their success.
In 2019, 250,000 people actively used the Fetch app each month – now that number has ballooned to 18 million. They execute 3,500 iOS CI builds a month with 4,500 unit test runs – one of their most significant achievements since switching to Bitrise in 2019 has been reducing their release cadence from 2+ weeks to 1 week.
“It couldn’t be more important to get the Fetch app into our users hands, quickly,” Brandon Hawker, Software Engineering Lead
Insights does the heavy lifting
Each pack is responsible for weekly reports to pinpoint failures and track build success/failure rates for specific workflows. This is where Bitrise Insights was crucial as it enabled each pack to easily generate a report on the projects they were working on.
“Bitrise Insights does a lot of the heavy lifting for us. One of the things that the team loves about Insights is the flaky test measure. We struggled with flaky tests, as they’re really hard to pin down, especially determining the gravity of the problem. Insights was instrumental in finding those issues so we could resolve them,which we did. Our teams were blown away by the functionality in Insights.” Brandon Hawker, Software Engineering Lead
Moving to M1
In late 2022 Fetch conducted performance testing on their local machines using M1’s for compile times. The result? M1 was dramatically faster. Following this, they made the decision to migrate to Mac M1 machines in CI, May 2023. Subsequently, their builds dramatically decreased from 50+ minutes to 26 minutes: an exponential drop of 50% and their test times reduced by 50%. This migration across the board has ensured they have a superior compile time versus Intel Max.
“When Bitrise was beta testing M1, our team was chomping at the bit to switch over because we knew M1 had such a superior compile time.” Brandon Hawker, Software Engineering Lead
Mobile-first from the very beginning
Fetch’s development focus has been mobile-first from the start. Their primary aim? To be the everyday carry app that users keep coming back to, again and again. On average, users keep 20 apps on their home screen which they launch every, or most days. Fetch strives to be one of those 20 apps.
“I have always evangelized continuous delivery and already was a fan of Bitrise. Some of our engineers have experience with Bitrise as well so [choosing Bitrise] happened very organically. We hire smart engineers and give them the autonomy to go find the tools and services that they need, like Bitrise.” Brandon Hawker, Software Engineering Lead