Steller, Apple’s Best of 2019 Mobile App, is Powered by Heroku

Steller stores millions of user stories with seamless scaling in Heroku Postgres.

Steller empowers people to explore the world by creating stories. Before Snapchat and Instagram, Steller was the first to let people share delicious meals, local color, and unforgettable experiences in a multi-page story format that could be viewed within the app as well as on the web. The groundswell of enthusiasm from people sharing their travels was the impetus for Steller to focus on complete experiences, rather than individual moments. To do that, they created connected stories which weave together different days, or locations, so people could share a more complete, 360-degree view of their adventures.

Started in 2014 by a small team of around eight developers, the company has grown significantly over the last few years. The Steller app allows anyone to create stories that look great, engage viewers, and paint a fuller picture of their experiences. Steller relies on Heroku to handle large traffic spikes without outages or slowdowns — the app, which has grown to over a million users in 2019, uses a seamless integration of an API on Heroku with resource storage on AWS.

A collection of phones showing the Steller interface

Mobile users have high standards

When it was released in 2014, Steller was selected as an Editor’s Pick in the iOS App Store. Since launch, the app has experienced continuous growth, with a massive surge of new users when they were awarded Apple’s “Best of 2019.”

As the app’s user base grew exponentially, to nearly one million users, the expectations of mobile users remained high, and Steller couldn’t afford to be complacent about performance. Users expected low latency and lightning fast response times in every experience with the app — on and off mobile.

Heroku was Steller's platform of choice from the beginning, offering an easy path from idea to product. One lead engineer on the team was impressed with how Heroku's deployment tools make it easy to spin up development code into a production service.

Using Heroku to take my application from development to production was really, really easy, even easier than I thought it would be. Ondřej Synek, Heroku Lead, Steller

A dinosaur in a museum, in front of a phone showing a map of the museum location and name

Hybrid data architecture with Heroku Postgres and AWS

When first building their service, Steller had complex requirements for their data services, like multi-user access and backups. These kinds of features would normally require a full-time database admin, but Heroku’s managed data services meant the Steller engineering team could just pick the features they needed and move on with engineering their own app.

In order to manage large numbers of user photos in stories, Steller stores user data as JSON in a Heroku Postgres database. The actual images are stored in AWS. Using the AWS Java SDK, integration between a Heroku app and an AWS S3 file store requires minimal configuration, and Steller's data services have run for years without needing any significant updates. This combination provides the best of both worlds: Steller neither has to manage large file storage, nor store images directly in a database, resulting in a  service layer that scales seamlessly.

A mobile app backend without the drama

The real benefits, however, became clear in a year of extreme growth, as the team handled scaling without any major hiccups. The team of eight developers managed to leave all the operations work of scaling to Heroku. Major spikes came and went without any of Steller’s engineers needing to be woken up late in the night, or any executives having to address customer-facing issues.

Steller’s fast-growing userbase (from 198 different countries) store their stories in a Heroku Postgres database, and the team has never experienced any issues with scaling their Postgres instance on Heroku.

Heroku's autoscaling feature handles their traffic spikes, as well as significant customer growth. Not only does their app scale up to meet increased demand, but it scales down to minimize costs --- entirely automatically.

Also, Heroku’s straightforward integration with AWS for file storage has led to a performative mobile experience for over a million users.

Autoscaling on Heroku means that we never have to worry about traffic spikes. The platform’s stability and scalability have allowed us to support millions of users around the world. Richard McAniff, Co-Founder & CEO, Steller

A series of interface images, showing text and imagery together in Steller

Future plans for creating new experiences

Steller has big plans for the future: with so many travelers using the app, Steller intends to let viewers book the amazing experiences they see. When it's time to add new features, the development process relies heavily on Heroku Review Apps, a key part of Heroku's CI/CD workflow, for review, testing, and approval.

As they grew, Steller moved to Heroku Enterprise when the cost benefits made sense. This gave them the added benefit of a closer relationship with an account rep and a sales team.

Steller has leveraged Heroku’s strengths: from the intuitiveness of the platform, to the ease of deploying code, to seamless horizontal scaling with autoscaling — all during a time of immense growth. With Heroku, Steller users can share their adventures with the world.

If we started over, we would make the exact same decision to build our app on Heroku. The platform has enabled us to seamlessly scale with the success of our app. Richard McAniff, Co-Founder & CEO, Steller

Inside Steller on Heroku

The app uses two critical Java applications, both connecting to a Heroku Postgres database, one to run the API, and a scheduler to run cron operations. Node.js wrappers complete the API. For cron operations, the Heroku Scheduler starts the app when needed. Steller also uses the Heroku Redis, for caching, Heroku SSL security, and the Hosted Graphite add-on to track custom metrics.