BuzzFeed switches from Jenkins to Bitrise for fast and reliable stack updates
BuzzFeed, the American Internet media, news, and entertainment company was founded in 2006 to focus on tracking viral content. Originally known for online quizzes, "listicles", and pop culture articles, the company has grown into a global media and technology company, providing coverage on a variety of topics including politics, DIY, animals, and business.
Simply put: everybody has heard of BuzzFeed. Their web presence is huge. With a company size of 650+ employees, a technical team of 70+ and a 12-strong team of dedicated mobile developers - it’s time to start talking about BuzzFeed and their future with mobile.
“BuzzFeed has been historically social-first, with mobile-web being our big platform. This was largely driven due to traffic from social platforms but our future involves a lot more mobile. We recognize the shift in the digital world and the importance of apps to a company’s ROI.”, Josh Walker, Staff Software Engineer, Mobile at BuzzFeed
BuzzFeed’s Migration Journey
We sat down with Josh Walker, Staff Software Engineer, Mobile, at BuzzFeed to dig into why BuzzFeed chose Bitrise, how the mobile-first DevOps platform has improved their processes and enabled them to develop in an agile environment with native and React Native teams for Android and iOS development.
BuzzFeed builds three unique apps on Bitrise, each for Android and iOS. They run 30 to 50 builds per week, with each job triggering two app builds and a test build, and they go to rigorous lengths to ensure they measure the success of each release. Milestone goals are made for the quarter (and constantly reviewed and adjusted by leadership) then broken down into bi-weekly sprints.
Migrating from Jenkins + CircleCI to Bitrise
With a pitstop to GitHub Actions in between…
Before BuzzFeed decided to focus more of their efforts and resources on a mobile app strategy, they chose Jenkins, then CircleCI, and finally a brief time with GitHub Actions. They ended up migrating to Bitrise in 2020 for to the same reason as many other mobile development organizations – Jenkins, CircleCI, and GitHub Actions are slow to update to the most current stack versions, which results in constantly building on an out-of-date platform.
"When we were ramping up our team about 8 years ago, one of our early hires was a Build Specialist to administer Jenkins. This resulted in archaic scripts only they understood," explained Walker.
When the tribal knowledge and single point of failure became too much of a risk for the BuzzFeed team to bear, they committed to a switch to CircleCI. Unfortunately, before long, this introduced a new set of challenges for the growing BuzzFeed team.
"A new Xcode would be released and 3 months later, CircleCI still didn’t have it because it didn’t seem like that was their primary priority. It seemed like they were more of a general-purpose CI that wasn’t focused on iOS," shared Walker.
With Bitrise offering new stacks versions within 24 hours of release (and sometimes within 1 hour), BuzzFeed recognized that it was time to abandon Jenkins, CircleCI and GitHub Actions. Migrating between different CI vendors was easy using Fastlane so they were able to push the same configuration between different CI vendors by migrating secrets and other information.
“The migration to Bitrise went really well and we’ve been happy ever since,” said Walker.
BuzzFeed noticed instant improvements by moving to Bitrise. By having a platform with a focus on continuous integration and delivery for mobile apps, their distribution of builds was able to improve. They were also able to use an enterprise certificate for ad hoc distribution, whilst they previously had issues with storing files on the Jenkins server and “weird paths” to get to those files that only a few developers knew. They’re now able to host the file directly and provide nicely formatted build pages with Bitrise.
Testing BuzzFeed Could Count On
“One of the things we never really had, pre-Bitrise, was good testing of our continuous integration. We did continuous builds but our continuous testing never quite worked or we never relied on it. With Bitrise, it’s something that we’ve come to rely on much more. We have it hooked up to our GitHub builds so we’re getting statuses on each build and test reports. That’s one of the big things that’s helped and just being able to have less developers involved in a build because we can rely on our testing.” Josh Walker, Staff Software Engineer, Mobile at BuzzFeed
BuzzFeed release bi-weekly, they run 30 to 50 builds per week, and they execute a combination of UI tests, snapshot tests, and unit tests. Their unit tests, however, where taking a long time to run and were flaky. Bitrise’s CI/CD tooling enabled them to automate nearly 90% of their tests and Bitrise Insights ensured they could analyze test performance and identify flaky tests.
“It’s so easy to pop into Bitrise Insights and see that it failed 23% over the last week. So now we have data versus our developers saying ‘oh I’ve seen it fail a few times’ - now we can actually understand why tests fail and eliminate flaky tests.” Josh Walker, Staff Software Engineer, Mobile at BuzzFeed
Improving Builds with M1, Parallel Builds, and Dependency Caching
After their switch to Bitrise, BuzzFeed saw a huge improvement in their build times and build success rates. Caching improvements enabled them to go from half-hour builds to five-minute builds: an incredible decrease of up to 80%.
“We did a few things that decreased our build times and migrating to M1 played a huge part in that. We also made optimizations around check-outs and caching improvements like caching package managers. This led to a 40% or 50% improvement in build times, which was huge. Builds went from a half-hour to five minutes with Bitrise.” Josh Walker, Staff Software Engineer, Mobile at BuzzFeed
BuzzFeed is increasing its app presence in the mobile world which means they have multiple products building off the same code base. Bitrise’s parallel build functionality enabled them to ship releases quickly and confidently, whilst saving time.
“We use parallel builds because we have multiple products that we’re building off the same codebase. Being able to parallelize builds for the two products and test suites from the same branch really helped us.” Josh Walker, Staff Software Engineer, Mobile at BuzzFeed
The next big change BuzzFeed made was switching from CocoaPods for their dependencies to Bitrise’s key-based Dependency Caching features. They had issues with dependencies in the past and whilst using Cocopods made it easier to build, the whole process was inevitably slowed down. The key-based caching functionality subsequently sped up builds. Next, the mobile development team at BuzzFeed plans to explore remote build caching with Bitrise Build Cache.
"Before Bitrise, we never had a way to cache files locally even though we were setting up the exact versions on the packages. When Bitrise introduced key-based Dependency Caching, it immediately solved the issue so we could create caches based on any key." Josh Walker,Staff Software Engineer, Mobile at BuzzFeed