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.
During a recent hack day we added a bunch of small but impactful features into our application, one of these being integration with the GIF input provided by the Google keyboard. This involved us making use of the Image Keyboard Support (IKS) functionality that was introduced in Android 7.1 (API level 25), this allows us to hook into the media functionality of keyboards and make use of the data that our application retrieves from t
Recently I managed to get my hands on a Pixelbook. If you haven’t got one, or even read to much into them, then you’ll be excited to know that they have the ability to run Android applications on them. That means that if you have an application in the Play Store, anyone on Chrome OS can download that app, install it and run it on their device. Whilst in most cases the applications will work out of the box, there are a bunch of things which you can do to improve the experience of your applicatio
At Google IO this year there was a great session on some new Google Play features to make subscriptions and billing operations easier for both users and developers. The announcements here were also followed up by a blog post here on the Android Developers Blog. Whilst not everyone will be able to make use of all these new features, if you’re providing subs
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 Buff
This post is co-written by David Gasquez . All the way back in late 2014, we wrote short little blog post about our first big redesign of our data architecture at Buffer. Back then, the data team consisted of 2 people, handling everything from data infrastructure to analysis and business intelligence (with some part time help from our CTO) within a company of just 25 people. We built out the initial
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
Last week we were lucky enough to be able to attend Google I/O in Mountain View, California. Between the two of us we managed to see a good handful of sessions – so we thought we’d both put together this short post about some of the things we discovered and where you can learn more about them. Android App Bundles App bundles are a new type of upload format for your applications that allows you to deliver a more optimized build to your users. Rather than uploading a generated APK to the Google P
At Buffer we invest heavily on Kubernetes. Since we use AWS as our cloud provider, getting services the right permission usually means having AWS keys/secrets in Kubernetes manifest files. In this SnackChat Steven walks through the steps of using kube2iam to eliminate the exposure of AWS keys/secrets. kube2iam: https://github.com/jtblin/kube2iam
Last week the Buffer team descended on Singapore for our 9th Buffer Retreat. Ever since the first retreat back in San Francisco, I’ve tried to figure out ways to capture the special moments we share together as a team. Since we’re fully remote, these yearly get-togethers can be the only moments we share with others for another year. At our previous retreat in Madrid last year, I added a GIF Booth to the ever growing arsenal of ways to capture
I recently happened across this Tweet from Mike Kearney about his new R package called botornot. It’s core function is to classify Twitter profiles into two categories: “bot” or “not”. Having seen the tweet, I couldn’t not take the package for a spin. In this post we’ll use try to determine which of the Buffer team’s Twitter accounts are most bot-like. We’ll also test the botornot model on accounts that we know to be bots. Data Collecti
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
Ever since iBeacons were introduced by Apple in 2013, I’ve been interested in using them in an app. So much so, I ordered some of the very first beacons in the form of an Estimote developer kit . I got them in hand and unfortunately didn’t come up with a project to use them on. However, recently I’ve been working on a side project that would benefit from the enter/exit features of beacons and geofences. Playpal and Beacons PlayPal
Lately, every engineer at Buffer has been keeping a closer eye on accessibility. Regardless of the platform Buffer is housed on, be it iOS, Android or the web – we consider it part of our craft to ensure that anyone can use the things we make. Aside from the fact that it opens up Buffer to more users, we also subscribe to the belief that it’s simply the right thing to do. For iOS, that means it’s on Andy and I to recognize
When your application content reflects the state of data stored on a server, making sure you’re always displaying the most up-to-date state ensures a better experience for the user. Now, this can be achieved by the user themselves but it involves the manual refreshing of content. For example, the user may be required to pull-to-refresh in order to show the latest content in some form of content feed. In any app, this is probably the simpler method to implement, but it’s not the best experience f
As you may have heard recently, BuddyBuild ended support for the Android platform as of March 1st. When we heard this news there was a lot to think about – after all, we were very happy with what BuddyBuild had been doing for us up until now. What CI will we go for? Does it handle UI testing for us? Will it handle automatic deploys for us? How difficult is it to setup for mobile projects? Does it cater for both Android and iOS? We narrowed our trials down to two platforms CircleCi and Bitrise.
Over the last year my role at Buffer has changed from an individual contributor to a technical leadership role. While the amount of time I spend coding and doing architecture hasn’t changed much, the way I go about the tasks has changed significantly. Instead of being focused on a project from start to finish, I move around projects as needed. Sometimes a team will get blocked on a tricky problem or need to make a decision that could impact other teams or request technical mentor-ship to level u
After the release of our boilerplate projects over on GitHub , one of the main discussions that I’ve noticed taking place and had with others is around the mapping of data models between layers. Now, this conversation hasn’t just occurred around our boilerplates – I’ve noticed that it is one that often comes up when talking about Clean Architecture or Android apps in general. And to be honest, it can be sometimes hard to kn
In case you haven’t used App Shortcuts in Android yet, it’s an awesome feature that allows us to provide our users with a way to quickly access parts of our apps from the home screen of their device. As developers, we can make these shortcuts either static (meaning they’re statically defined in an XML file) or dynamic [https://developer.android.com/guide/topics/ui/
A while ago we published this article on how we were trying to tidy up the Android project for the Buffer for Android app: /2016/09/26/android-rethinking-package-structure/ . However, our project is now moving towards a modularised approach – so our package structure is changing (but also staying slightly the same). We wanted to keep the package-by-feature approach in place so we can continue to benefit from its advantages suc
Two weeks ago I was fortunate to make my 3rd Above & Beyond Group Therapy milestone show at the magnificent Gorge Amphitheater in Washington State. Set over two days the celebration bought people from all over the world to the Gorge to celebrate the 250th Group Therapy Radio Show. Having attended both 100 in New York and 200 in Amsterdam I was blown away with how friendly the crowds were and wondered how I could get people even more connected. Inspired by the numerous apps for WWDC to show atte
History and Background Ever since Buffer started its journey with Kubernetes (k8s) almost 1 year ago we have embarked on a mission to streamline the deployment experience. The inherent nature of microservices differs significantly from a monolith application in many ways. For each deploy, a monolith application requires merging the changes and deploying to an environment that’s well defined, tested and proven p
Header image source: Émile Perron on Unsplash Over the last year on the Android team at Buffer, we’ve talked a lot about cleaning up our project and increasing its stability. One of the factors here was the introduction
This year at WWDC 17, several promising new technologies, frameworks and APIs were revealed to eager developers. Each year Andy and I try to focus on not only the keynote, but the Platforms State of the Union session to get a sense for what we should prioritize for the upcoming iOS release among all the new things introduced. For iOS 9, Apple pushed multitasking. Last year, Message Extensions were quite prominent. This year, there was no doubt about what we really wanted to hone in on: The new
Over at Android on Buffer, we recently hit 1 Million downloads – so we’d like to take this opportunity to say a big thank you to all of our users for making this happen! This also came with great timing, as we’ve just launched a brand new version of our Android app (something we’ve been calling v6 internally for a short while) ? We made a bunch of changes to the app (both visually and behind the scenes) with the aim to make it easier to use, easier to maintain and also more stable for our users.