New!Schedule Threads!Threads scheduling has arrived!Threads scheduling has arrived on Buffer! Find your community now.Threads scheduling has arrived on Buffer! Find your community and keep the conversation going.Learn more


How we ship code, delight customers, and build a team where engineers flourish. The Overflow blog covers all the latest work and learnings from Buffer’s engineering team.

OverflowJul 12, 2024
How We're Preventing Breaking Changes in GraphQL APIs at Buffer — and Why It's Essential for Our Customers

As part of our commitment to transparency and building in public, Buffer engineer Joe Birch shares how we’re doing this for our own GraphQL API via the use of GitHub Actions.

OverflowDec 13, 2022
Highlighting Text Input with Jetpack Compose

We recently launched a new feature at Buffer, called Ideas. With Ideas, you can store all your best ideas, tweak them until they’re ready, and drop them straight into your Buffer queue. Now that Ideas has launched in our web and mobile apps, we have some time to share some learnings from the development of this feature. In this blog post, we’ll dive into how we added support for URL highlighting to the Ideas Composer on Android, using Jetpack Compose. We started adopting Jetpack Compose into ou

OverflowApr 18, 2022
Secure Access To Opensearch on AWS

With the surprising swap of Elasticsearch with Opensearch on AWS. Learn how the team at Buffer achieved secure access without AWS credentials.

OverflowDec 9, 2021
Load Fonts Fast

At Buffer, we’re constantly experimenting with ways we can improve our products and try out new ideas. We recently launched Start Page , a beautiful, flexible, mobile-friendly landing page that you can build in minutes and update in seconds. As a Software Engineer on Buffer’s team I’ve tackled a long list of fun projects, including Start Page. One thing I love about this project, is that as we foray deeper and deeper into user-generated content and customization, w

OverflowFeb 14, 2020
Migrating our component library to the Material Button

Header Photo byPearse O’Halloran onUnsplash For our Android clients we have a small component library which is used to shared common visual elements across the different Android applications that we work on. We recently updated our application

OverflowDec 20, 2019
Selectively running Android modularized unit tests on your CI server

Header Photo by Icons8 Team on Unsplash Modularizing your Android projects can bring a number of different advantages to your team. Some of these include reduced build times, a greater separation of concerns and t

OverflowDec 3, 2019
Tainting and Labeling Kubernetes Nodes to Run Special Workload — A quick guide that is finally NOT confusing

All right folks, I intend to keep this one short and that’s what I will do. I mean, it’s supposed to be easy but the official documentation(1 , 2 ) makes it unnecessarily confusing. So I think maybe I can help to fill in the gap. I will be using one of our business requirements at Buffer in this [

How to Set Kubernetes Resource Requests and Limits - A Saga to Improve Cluster Stability and Efficiency

A mystery So, it all started on September 1st, right after our cluster upgrade from 1.11 to 1.12. Almost on the next day, we began to see alerts on kubelet reported by Datadog. On some days we would get a few (3 – 5) of them, other days we would get more than 10 in a single day. The alert monitor is based on a Datadog check – kubernetes.kubelet.check, and it’s triggered whenever the kubelet process is down in a node. We know kubelet [

Announcing The Buffer Overflow Podcast

Today we’re happy to announce our new engineering podcast, The Buffer Overflow Podcast. And, our first episode is now available for streaming! How to Listen The Buffer Overflow Podcast is now available on all major platforms today, so if you open your podcast player of choice and search for us, we should be there! Here are some direct links: * Google Podcasts * Spotify [

OverflowSep 11, 2019
Getting Buffer Publish ready for Android 10

Android 10 is officially here! On 3rd September it began rolling out for pixel devices, so we wanted to be sure that our app was ready to serve our users who would have Android 10 installed on their device. When these OS updates come around, as developers we sometimes don’t know how many changes we’re going to need to make to our applications. When Android Marshmallow was released, permissions changes were quite a big thing for many applications. As we move our way through versions up to Android

OverflowJul 30, 2019
Library module navigation in Android Applications

Header Photo byAlexander Andrews onUnsplash When it comes to building android applications, there’s no doubt that we’ll need to include some form of navigation to move between the different parts of our app. With modularisation becoming more and more popular when it comes to andr

Video: Getting started with Go [Bufferdevs Snackchat]

At Buffer we regularly hold what we call ‘Snackchats’. These are short & informal presentations of something that we want to share with our team which help to build on our engineering culture and help each other to grow as engineers. Anyone on the team has the opportunity to give these talks Once a discussion has been proposed, a day / time can be picked ready for people to grab a drink (and snack!) to take some time out of their day to learn something new. These have been happening at Buffer

OverflowFeb 8, 2019
Creating a custom video SeekBar on Android

Header Photo by Jakob Owens on Unsplash A new feature we’ve been building out required the use of a thumbnail picker for video files. After looking around for open-source implementations, it was clear that there wasn’t something that already existed which would fit in with our app – for this reason we needed to build our own video thumbnail picker component. This component, Thumby, can be found over on GitHub [ht

Video: Automate Everything – From Review to Release [Bufferdevs Snackchat]

At Buffer we regularly hold what we call ‘Snackchats’. These are short & informal presentations of something that we want to share with our team which help to build on our engineering culture and help each other to grow as engineers. Anyone on the team has the opportunity to give these talks ? Once a discussion has been proposed, a day/time can be picked ready for people to grab a drink (and snack!) to take some time out of their day to learn something new. These have been happening at Buffer f

ProductivityJan 14, 2019
Effective Communication on Technical Topics

Photo by Nik MacMillan from Unsplash . At Buffer we’ve always been interested in how to communicate in concise and clear ways. In fact, it’s been part of our company values from the beginning. Every organization values communication, and I’d submit to you that it’s doubly important for remote companies such as ourselves. It occurred to me recently how critical, and equally difficult, it can be to talk about technical topics as an engineer. It’s hard enough to s

OverflowJan 8, 2019
Digging into failed redirects within Android Webviews

Header Photo byThe Nigmatic onUnsplash Discovering the issue It was the 14th December and we were winding down ready for the Christmas break. Our code freeze had kicked in several days previously and we had shipped an update at that time to get a couple of priority bug fixes before

OverflowJan 3, 2019
Using Live Templates to Write Tests

At Buffer we strive to have at least all new code tested, and to add tests for legacy code when we can. This helps us catch bugs before they’re released, and watch out for regressions. This also leads to a notable amount of time spent writing tests. And let’s face it, that can get repetitive.There are some things that can help, like helper functions, factories, and test robots. Still, there’s a number of things you find yourself repeating. Is there a way to improve this? I’ve saved some time by

OverflowDec 20, 2018
Getting started with feature modularization in Android Apps

Modularization in android applications is nothing new – I previously outlined the different types of modularization and the advantages they bring over in this post , and in this article we’re going to be focusing on feature modularization. When thinking about about modularization, at first it may appear as a case of moving a collection of files over. But what about the Dependency Injection setup? Referen

OverflowNov 29, 2018
Fully Automated Continuous Deployment on Android with Bitrise

Deploying mobile applications tends to be a fairly different process than when it comes to web applications. On the web we can push updates and fixes regularly without the concern of versioning, and at the same time our users can access these changes almost instantly from within their browser. When it comes to mobile applications, things work a little bit differently. First of all, we don’t have the luxury of instant changes — for example, if we need to push a change to our android application

OverflowOct 26, 2018
Keeping check on your Android Libraries with Danger & Bitrise

When you’re working on large projects, sometimes it can be difficult to ensure that all of your libraries are kept up-to-date. Whilst we can periodically jump into our build.gradle file, this is a manual task and let’s face it, us humans can sometimes slip a little when it comes to this. We recently had a notice from a third-party SDK about a performance issue in the version of their SDK we were using – whilst this wasn’t a breaking change, it’s something that would have saved them (and us) time

OverflowSep 13, 2018
A brief look at Koin on Android

In my projects both at work and outside, I’ve always used Dagger for Dependency Injection. Not only am I familiar with it, but it’s a powerful tool that not only does everything I need it to but there is also a great community around it if I’ve ever got stuck or needed some help on something. I’ve been seeing Koin quite a bit online recently, and like any new libraries and frameworks I was curious to see what it was all about. For this reason I decided to take our existing boilerplate project an

OverflowSep 5, 2018
Announce Your Actions: Making gesture actions accessible

We’re working towards better accessibility for our Android apps here at Buffer. That’s why when we recently added a new feature to Reply , we took a little extra time to make sure it was accessible. This feature includes some swipe gestures: a user can swipe left or right on a item in a list of conversations to perform some action on that conversation.This is great for quick management of the list, but leaves out people using TalkBack [

OverflowAug 17, 2018
Exposing Notification Settings to the Android System

Have you ever looked at the Android System settings page for a specific application and wondered about the option to view “Additional settings in the app”? If you haven’t seen this before in your settings, or aren’t aware of it, this is what it looks like This option allows developers to essentially provide a link to a push notification settings screen in their application – this allows users to quickly and easily continue altering their notification settings for the chosen app directly from th

OverflowAug 13, 2018
Churn Prediction: First Contact

There’s a lot written about churn. A quick google search returns several blog posts with various definitions and types of churn. That said, not a lot of what’s written is in form of code. At least not open source code. Since the definition of churn depends on the domain and company, a few companies share how they predict churn. At Buffer , we decided to spend a few weeks trying to predict when our customers are going to stop paying for a specific subscription. We called that