For many companies, pizza and bagels are the staple foods of office culture. Whether it’s “Bagel Fridays” or a company all-hands meeting, employees are served the same fare with little variation or dietary accommodation. But what if it were easy for companies to order healthy, delicious food carefully prepared by top local restaurants? Better meals foster healthier, happier employees and stronger office communities.
Since 2009, ZeroCater has been dedicated to bringing people together over customized, hand-crafted meals from local caterers. The company partners with independent restaurants, caterers, and food trucks, to bring family-style meals to offices and other events. ZeroCater provides an all-inclusive service, complete with personalized concierge assistance, menu curation, delivery, set-up, and supplies. Their catering partners benefit from increased exposure and opportunities to grow their business.
The demand for on-demand catering
The core of ZeroCater’s business has been their catering concierge service, where customers call for personal assistance with setting up menus and meal schedules. However, the company was seeing a growing interest in a self-service model, particularly with the on-demand side of their business which served single-order customers.
They decided to build the ZeroCater Marketplace to connect caterers with customers directly. This would help grow the company’s on-demand customer base, and provide more opportunities for their partners to scale. To realize this new vision, ZeroCater needed to transition their business model, operations, as well as their technology platform.
Building a marketplace for meals on Heroku
ZeroCater’s legacy platform was built in Python on an old code base that was unwieldy and difficult to modify without affecting the user experience for existing customers. In addition, it was running on custom AWS infrastructure which added extra work for the team to maintain servers and their database.
In 2015, the company decided to move towards the platform-as-a-service approach to reduce the time and effort spent on managing infrastructure. Due to past experience, they knew that the Heroku platform would give them the stability and flexibility that the engineers needed to focus on building out the new marketplace and evolving their technology platform. Heroku’s built-in Python and Django support was additional motivation to make the switch.
I’ve been a fan of Heroku for a long time. Heroku allows a development team to focus on building features that delight customers rather than spending time configuring infrastructure. Rob Adams, Engineering Manager, ZeroCater
After extensive evaluation, ZeroCater’s engineering team determined that it would be too cumbersome to migrate their entire monolithic legacy app and it’s build processes over to Heroku. So going forward, all new development happens on Heroku and the team has been transitioning their platform piece by piece to a microservices architecture.
ZeroCater’s Heroku stack
ZeroCater started with migrating their legacy app’s production database to Heroku Postgres, Heroku’s cloud database as a service. This was somewhat challenging due to the fact that their existing custom Postgres server was running several versions behind Heroku Postgres. However, after completing the process a year ago, their new database has been running smoothly ever since.
Heroku Postgres has been great every time I’ve ever used it. Since we migrated ZeroCater’s production database to Heroku Postgres, we haven’t had a single issue. Rob Adams, Engineering Manager, ZeroCater
Next, they re-built ZeroCater.com on Heroku using React with a Node.js host. It’s designed as a front-end only microservice that consumes APIs from the legacy app. Currently, ZeroCater is running approximately 12 services on Heroku to support their front-end, back-end, and API gateway.
When they wanted to test the marketplace concept, the team built a standalone MVP on Heroku, which allowed them to test and iterate quickly. In order to ensure that the test marketplace code was kept separate from their production code, the team used Ruby on Rails instead of their usual Python/Django preference.
As a parallel effort, the ZeroCater team leveraged Heroku to build a new backend infrastructure for their platform that would support their long-term objectives, including integrating the final marketplace code as well as migrating to a microservices architecture. ZeroCater’s development cycles slowly eat away at the AWS legacy app, carving out small pieces to re-build as microservices on Heroku. These new microservices, such as email sending or vendor availability display, then become shared resources for the legacy app and other parts of the platform.
ZeroCater engineers saved a lot of time by integrating Heroku Add-ons that give them additional functionality through cloud-based services. Their main data store is Heroku Postgres, and they use Heroku Redis for caching. Other add-ons include SSL and Expedited SSL for encryption and SSL certificate management, and CloudAMPQ for message queuing.
I love the vast array of Heroku Add-ons that let you quickly plug in a service and enhance your app. Everything is point and click and you don’t have to spend time figuring out infrastructure. Rob Adams, Engineering Manager, ZeroCater
The company uses Desk.com to manage customer service requests, Salesforce to manage vendor relationships, and Pardot for marketing automation. Chartio, a third-party tool, pulls data out of Salesforce and Desk.com into Postgres and builds reports. Stripe processes payments for the marketplace as well as the concierge side of the business.
Unifying people and processes
To streamline their testing and deployment processes, ZeroCater uses Heroku’s continuous delivery tools Heroku Pipelines and Review Apps. With Pipelines, a pull request triggers the automatic build of a review app within a pipeline—saving the engineers significant time and effort. Previously, the team had built a home grown solution using the Heroku Platform API. After switching to Pipelines, they’re now developing more and more features that take advantage of Pipelines.
We started using Heroku Pipelines as soon as it was released and now we use it for continuous delivery of all our microservices. Rob Adams, Engineering Manager, ZeroCater
To further support their processes, ZeroCater uses Heroku Teams to help them collaborate and manage access permissions. It had become cumbersome to manually add every team member as a collaborator to every app. Heroku Teams gives them one unified administration tool across all their engineers, apps, and billing.
Heroku Teams is great for managing a small team. It makes it easy for our developers to collaborate on building apps and lets us manage our billing from one simple interface. Rob Adams, Engineering Manager, ZeroCater
Towards a product-centric company
With their new online marketplace, ZeroCater is beginning to consider themselves a product company as well as a service company. Heroku has freed the development team to innovate the online experience for their partners and customers, and put the platform at the core of their business.