The Story of Tonight

Hamilton is one of the most loved Broadway shows of all time. It’s won many honors and awards and has a fan following that is unprecedented on Broadway.

When the producers decided to create a Hamilton app, they had very high expectations. Hamilton is an incredible work of art and its app needed to be worthy of what Lin-Manuel Miranda and all of the talented people behind the show created.

The stakes were high. The app experience had to be exceptional. It had to provide features fans would love and provide better access to the show for all. It had to be beautiful, usable, and brand-driven in its design. It had to be snappy and polished. We could not afford compromises in the user experience.

My Shot

After reaching out to a variety of potential development partners, the Hamilton and Posse teams found kindred spirits in each other and started defining the best ways to create an exciting app experience.

Posse presented two approaches:

Build two apps: a native iOS app and a native Android app Build a single multi-platform app using Flutter, a new Google technology

Option 1 is what we’ve always done — and probably what most people would recommend today. It’s the closest to the metal and least limiting long-run. But you have to do everything twice, so you can only do half as much. It takes more time. It’s more expensive. It’s harder to manage over time.

Option 2, on the other hard, is something bold, something risky, something exciting and something potentially game-changing — Flutter, a new framework from Google for creating apps on both iOS and Android that could be indistinguishable from native apps. Flutter addressed the problems we saw in other frameworks like React Native and Xamarin that typically had prevented us from recommending multi-platform solutions.

99% of companies would probably go with Option 1 — the safe option. But as members of the Google Developer Agency Program, Posse had an inside relationship with the Flutter team. We had been working with Flutter for months and were blown away by how much it improved our team and our work.

Flutter was an option to do more faster. Flutter created a foundation for the Hamilton team to focus more on new user benefits they could deliver than on building and managing two different app teams. The opportunity to be the first major commercial brand to embrace Flutter and show the world a new future was a fit for Hamilton’s ethos.

We weren’t going to throw away our shot — we decided to build the Hamilton app with Flutter.

So collectively, we decided we weren’t going to throw away our shot — we decided to build the Hamilton app with Flutter.

What’d I Miss

But, what exactly is Flutter and why does it matter? If you’re familiar with Flutter, then please skip ahead. If not, it’s important to understand the context of modern mobile development and why Flutter exists.

Flutter is Google’s mobile UI framework for crafting high-quality native interfaces on iOS and Android in record time. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source.

In mobile development, we have two major mobile platforms Apple/iOS and Google/Android. Apps must be on both platforms to be available to everyone.

But creating apps for iOS and Android are two very different animals. iOS apps are built with Objective-C or Swift. Android apps are built with Java or Kotlin. iOS apps are created in XCode and deployed via iTunesConnect and the App Store. Android apps are created in Android Studio and deployed via the Play Store.

The solution to this divergence for most companies is to simply have two different teams — one for iOS and one for Android. The problem is obvious. Two apps. Two teams. Two different platforms. 2x the cost. 2x the time. 2x the overhead.

Everything must be done twice, and that assumes both teams implement a feature consistently the first time. If you’re Facebook, then this is irrelevant because you have all the money and talent in the world to solve this problem. If you’re a start-up or budget constrained, this is a big deal.

Why isn’t there a better way?

Wait For It

Cross-platform frameworks have long been touted as the solution to the “build it twice” problem.

Solutions like PhoneGap and Appcelerator Titanium emerged first to solve this problem. Next came Xamarin and React Native with their unique approaches and solutions to bring multi-platform development closer to the promised land.

And now, Google has given us Flutter. Wm Leler from Google has an excellent article called “What’s Revolutionary about Flutter”, that does a great job of explaining why Flutter is different and good in its own way. Martin Aguinis from Google also launched this Introducing Flutter Video which describes Flutter at a high level in under 2 minutes.

Prior to Flutter, Posse had never once recommended a multi-platform framework to our clients. We simply didn’t trust them.

So, why did Posse recommend Flutter for Hamilton?

Feel — Flutter apps feel native with less work. Scroll views bounce or glow. The theme-able interface makes it easy to adjust to fit styles and norms of both iOS and Android.

— Flutter apps feel native with less work. Scroll views bounce or glow. The theme-able interface makes it easy to adjust to fit styles and norms of both iOS and Android. Performance — Flutter does not have a “bridge” as Wm explains. Flutter’s performance is better than any other framework we’ve tried.

— Flutter does not have a “bridge” as Wm explains. Flutter’s performance is better than any other framework we’ve tried. Dart — Yes, Dart. It’s high performance, easy-to-learn, and we trust code written in Dart more than we do in JavaScript.

— Yes, Dart. It’s high performance, easy-to-learn, and we trust code written in Dart more than we do in JavaScript. Tooling & Hot Reload — Flutter has a lot of nice things that make developing easier and faster, including a fast hot reload, CLI tools, and IDE support.

— Flutter has a lot of nice things that make developing easier and faster, including a fast hot reload, CLI tools, and IDE support. Great Team — The Flutter team is active, responsive, and helpful.

— The Flutter team is active, responsive, and helpful. Layouts & Widgets — The widget system and the way you create layouts is just so much more enjoyable, not to mention faster, than native code.

— The widget system and the way you create layouts is just so much more enjoyable, not to mention faster, than native code. Plug-in System — A novel, scalable solution to make sure Flutter never becomes a huge obstacle to something we want to do.

— A novel, scalable solution to make sure Flutter never becomes a huge obstacle to something we want to do. It’s not JavaScript — We write a lot of JavaScript at Posse. JavaScript is incredibly powerful and popular, but we’ve always felt it’s relaxed approach makes it dangerous.

For the first time, with Flutter, we confidently believed a solution existed that met our needs. This is not to say that React Native, Xamarin, and the others are not also good solutions. But for us, Flutter finally checked all our boxes.

The Room Where It Happens

We started the Hamilton app in May 2017, and had a firm launch date in August — only 3 months. We needed to build sign-up / login flows, the home screen, ticket lottery entry and purchase, a dynamic content newsfeed, a complete e-commerce merchandise experience, a HamCam selfie camera, a shareable sticker experience, user profile management, and more.

Flutter improved our process in a variety of crucial and important ways: