Hybrid development is how we give our teams of three superpowers


We just launched a major revamp of the schedule in Basecamp 3. New calendar grid, new day drill-down, new navigation across months. It’s a big change, and we rolled it out simultaneously across five platforms: Web, Windows Desktop, OS X Desktop, iOS, and Android.

Three people did the work in less than six weeks.

Not because they worked 120 hour weeks. Not because they’re polymath geniuses. Not because they outsourced the work to offshore programming farms.

Three people launched a major new feature across five platforms in six weeks because of their hybrid-development superpowers. Powers derived from using basic web technologies, Rails, Turbolinks, and the Majestic Monolith.

These six weeks included all sorts of experimentation, back-and-forth, and trade-offs. It was both research and development. A flexible, fluid spec that we honed as we went along.

Can you even imagine trying to do coordinate five different native teams covering all those platforms simultaneously? Or how many people it would take? Or how long the schedule would be?

This industry often speaks of the 10x developer, and not a lot about the 10x environment. I think the latter is much more reproducible. And in fact, most people who appear to be 10x developers were simply lucky enough to be working in a 10x environment.

Hell, one of the three people on this scheduling team was even our awesome intern, David Newell. And we just had one main designer on the crew as well. So that’s one intern programmer, one senior programmer, and one senior designer delivering this major upgrade in six weeks.

We don’t have any proprietary magic at Basecamp. We’re literally giving all these superpowers away for free. Turbolinks is open source. Rails is open source. The Majestic Monolith and Hybrid Development patterns are well publicized. It’s all right there for anyone who wants to be this productive.

And sure, you probably could eek out the last few percent of interface fidelity if you went all native everywhere on a feature like this. But the price of going from 95% Good Enough to 100% Verified Native is orders of magnitude. Some times those orders are worth it, but the vast majority of the time, they’re not.

Basecamp 3 currently carries a 4.5/5 rating in both the iOS App Store and the Google Play store. Both are hybrid apps powered by Turbolinks and backed by that Majestic Monolith of a Rails app. The results speak for themselves.

Going with hybrid development has been absolutely key to how Basecamp gets to stay small and still deliver an ace experience across all the major platforms. And you can do it too, if you dare to reject the dogma of All Native, Microservices, and the dark side of heavy client-side JavaScript MVCs.

To the Android open source community: Thank you!


While developing the Basecamp 3 Android app over the past year, we’ve leaned quite a bit on some really useful open source libraries.

These libraries did a bunch of heavy lifting for us. They helped shorten our development time, increase programmer happiness (since we didn’t have to write them from scratch!) and ultimately ship a better product.

Open source is such a deep-rooted part of Basecamp’s culture that I think it’s important to give credit where credit is due. I want to, in some small way, show our gratitude to a group of people who probably aren’t thanked all that often.

So, to all of you — the women and men who author and maintain Android open source projects everywhere — thank you very, very much for all your hard work!


The All-Stars

There are lots and lots of libraries out there, so I’d be remiss if I didn’t call out some all-stars that really helped us out.

Big thanks to the teams that build and maintain these libraries — you’ve made our work and lives better! (If you’re an Android programmer, it’d be a good idea to bookmark these if you’re not already using them.)

  • Facebook’s Stetho: A debug bridge that lets you use Chrome Developer Tools to inspect native UI, resources, and data. We use this quite a bit to debug layout issues and stored preference data.
  • Flipboard’s BottomSheet: An easy way to mimic Android’s bottom sheet interaction without writing it from scratch. We use this to power our share sheet, and have some ideas about future uses too.
  • Google’s GSON: Easily serializes JSON into Java objects. We use GSON a lot to serialize JSON data, which makes it a breeze to work with in Java.
  • greenrobot’s EventBus: An event bus that makes it super easy to implement a pub-sub model. We use events for all sorts of stuff, like updating the UI when a background data call finishes.
  • Path’s Android Priority Job Queue: A job manager that has simple defaults, but offers a lot of power too. It’s fantastic for running asynchronous jobs and a wonderful replacement for the dreaded Asynctask.
  • Square’s Retrofit and OkHttp: If you’re doing any kind of API or HTTP work, you need to use these, period. We use Retrofit exclusively for all of our API interfaces.

Giving Back — Turbolinks Android

Like any good citizen of an active developer community, we’re not just going to leech — we’re ready to give back!

In short order we’ll be releasing our first open source Android library — Turbolinks Android. It’s the same adapter framework that’s powered our Basecamp 3 Android app since November 2015, and it’s a crucial component in our native-web hybrid approach. It’s made specifically for Android, and will get your hybrid app hooked up to a Turbolinks 5 web app in a jiffy.

We’ve done our very best to make sure Turbolinks Android possesses all the qualities that we love about the all-stars libraries above: easy to get started, easy to use, fast, and reliable.

We’re thankful that we’ve been able to stand on the shoulders of awesome libraries ourselves, and can’t wait to get Turbolinks Android out to the open source community!


If you’re an Android open source developer and ever want to chat, feel free to contact myself or Jay. We’d love to talk and share ideas!

We’re hard at work making the Basecamp 3 and its companion Android app the best it can be. Check ’em out!