When we find tools we like, we tend to stick with them. This was the case for video social network Dubsmash at a crucial time for the business. The young company was undergoing a major pivot and needed to rebuild their platform from the ground up. They'd had a successful experience on Heroku with their first product, so the team chose Heroku a second time.
Dubsmash initially launched in 2014 as a video messaging service that made conversations with friends more creative and fun. Despite its popularity and a high adoption rate, the service failed to retain enough users to drive sustainable growth. Dubsmash responded to this challenge by rebuilding their entire business from scratch. Targeting the U.S. market, the company moved from Berlin to New York, hired a new team, and completely re-envisioned their product.
In October 2018, Dubsmash re-launched as a short-form video network focused on music and dance. Users create short videos with their favorite sounds to show off their dance or lipsync skills with friends and followers. The new Dubsmash drives greater retention by giving users a place to engage with their passions, connect with others, and discover or set new trends.
Dubsmash chooses to launch on Heroku—twice
The first incarnation of the Dubsmash service launched and operated on Heroku throughout its lifecycle. When it came time to design an architecture for their new platform, the Dubsmash team decided to stay with Heroku for a number of reasons. One of their favorite aspects of the platform has always been its simplicity and ease of use. With a brand new team and an entirely new product to build, the company needed a solution that could help them move quickly and stay focused. The Heroku developer experience was both familiar and trusted.
“We made a conscious decision to rebuild our service on Heroku. The platform allowed our new team to onboard quickly and focus on developing cool new features without having to worry about hardware or infrastructure.” Tim Specht, Co-Founder & CTO
Heroku Postgres remains a core data service
With Heroku at the heart of the new Dubsmash stack, the team spun up over eight new microservices and deprovisioned many resources from their legacy app. One of the few add-on services that they chose again to use in their new app was Heroku Postgres. During their first experience with Postgres, rapid business growth was straining the Dubsmash platform's ability to scale. To solve this, the team had wanted to increase connections to their Postgres instance, however the Heroku support team suggested using the PgBouncer buildpack instead for more efficient use of database resources. The result was not only easier scalability, but also increased database performance because Postgres was less busy creating connections.
“On many occasions, the Heroku support team has steered us towards tools and best practices that have helped us focus on shipping software instead of worrying about databases or a fleet management system.” Tim Specht, Co-Founder & CTO
The new platform uses Heroku Postgres as its main relational database for storing records that can be easily modelled, like user data and video files. Heroku also enables Dubsmash to integrate other data services with Postgres and create a hybrid data architecture. They use Amazon DynamoDB for other data, such as “Likes,” due to its simple schema and easy scalability.
Deploying to Heroku with speed and confidence
Running their apps on Heroku has helped the Dubsmash team stay agile and highly productive. Heroku provides lightweight tools to manage deployment and releases, unlike other platforms where the overhead needed for each release is significantly higher. In particular, Heroku’s rollback feature allows Dubsmash developers to avoid spending days at a time working on a feature before deploying to production. Instead, they can roll it out easily in multiple steps with the assurance that if something breaks, they can easily roll it back. This has given them the confidence to try new things and increase development speed without worrying about the worst case scenario.
When it comes to deployment, the Dubsmash team automates much of its CI/CD workflow using Heroku's built-in tools, such as GitHub integration and Heroku Pipelines. Review apps have been a favorite feature for collaborating on front-end-related changes, such as to the website, and the team uses it regularly.
“I love Heroku’s review apps feature. It’s amazing to quickly see changes to the app right next to the code. This deep integration between the technical and product side of an app is something that can benefit every product team.” Tim Specht, Co-Founder & CTO
Dubsmash handles scale easily—without a DevOps team
Most of Dubsmash’s users are high school and college students. The platform gets roughly six times the amount of traffic at 4pm as it does at 12pm or late at night. Heroku helps Dubsmash keep everything running smoothly at peak times, while keeping costs under control. As the team’s preference is to automate whenever possible, they use HireFire to automate scaling for web and worker dynos based on load. All of that happens without dedicated DevOps engineers.
“If we weren’t on Heroku, I’d have to hire at least four full-time DevOps people to run a service like Dubsmash at scale. Instead, Heroku makes it easy for our lean team to manage operations and maintain a high standard of quality for our users.” Tim Specht, Co-Founder & CTO
As the new Dubsmash service hits its stride, the team is looking for new ways to help make their platform even more scalable in the future. They've already implemented an event streaming component to their architecture with RabbitMQ. Going forward, they intend to explore Apache Kafka on Heroku and see how it may help set the platform up to better handle an exponentially growing load from millions of new—and ongoing—users.
Inside Dubsmash on Heroku
The Dubsmash platform is built in Python, with Heroku Postgres as its primary relational data store along with the NoSQL database service AWS DynamoDB. The platform integrates a number of Heroku Add-ons, including Librato and New Relic APM for tracking app performance, and MemCashier for memcache management. The team uses HireFire to automate dyno scaling based on load and RabbitMQ for event streaming.