Delivering High-Quality, Locally-Sourced Food to Tables with Plated

 | 

Post by Simon Horne (Senior Developer)
and Juliette Dupré (Senior Technical Recruiter)

image

Plated 101

The quality of what and how we eat impacts not just our bodies, but also our communities, economies, and ecosystems. By 2050, our planet will need to generate 70% more calories as usable farm space gets smaller. Plated is leveraging technology to make cooking at home delightful and more sustainable.

Our engineering environment ensures that you are solving big problems that impact everyone. Our tech stack makes it possible to get fresh, high-quality food from local sources to tables in a new, more efficient way – reducing the unacceptable food waste incumbent in today’s food supply chain.

Plated’s business model is complex including sourcing our own ingredients, curating chef-designed recipes, and sophisticated delivery logistics. But our mission is simple: to help people eat better and live better. Join us.

image

Tech Stack

Plated runs on several Ruby/Rails back-end applications serving both HTML and JSON APIs. Our APIs support the web front-end, internal services and our mobile iOS app. The web front-end is a mix of React and custom JavaScript. Our iOS app is entirely Swift-based.

Our primary transactional database is Postgres. Redis is used for caching and for handling background processing and message queues. Analytics data is pushed to RedShift for further processing by the data team.

We take testing and code quality seriously. CircleCI runs an automated Continuous Integration process with a comprehensive suite of feature tests in RSpec and Capybara.

Our applications are deployed on Heroku with a flexible Amazon ELB/Varnish/NGINX caching and proxy layer out in front. We are in the process of moving to a more granular micro-service architecture. We are starting to deploy internal services as Docker containers to a Deis (open-source PaaS) cluster running on AWS. We are beginning to leverage other AWS “native” services - RDS database hosting, ElastiCache Redis caching and SNS/SQS messaging as we transition away from the Heroku ecosystem.

image

Engineering Focus

As we scale the Engineering team we believe the best approach to maintaining productivity and reducing communication and coordination costs is through the creation of small, cross-functional, autonomous teams working in parallel. We aim to mirror the organizational structure in the code by breaking the existing “monolithic” apps into smaller, more granular micro-services with well-defined but loosely-coupled dependencies.

The goal is to have shared ownership across many small services allowing high-quality features and services to be built and maintained cheaply and easily and swapped out and replaced with minimal cost. As a team we were productive and familiar with the Heroku tools and workflow but beginning to identify limitations in what Heroku can do, particularly in a world of multiple internal services. This low-friction workflow was one of the main factors in investigating the Deis open-source PaaS allowing us to begin the transition to a more flexible containerized deployment strategy without sacrificing the ease of use, tooling and workflow that we are familiar with.

The ops team is tackling the technical challenges that lie at the heart of the business - supply chain, logistics, production, etc. Starting with the culinary team building recipes and specifying ingredients, through to sourcing, packaging, and finally sending completed meal kits to customers, ops is involved every step of the way. We’re not just building tools for multiple internal teams, we’re also connecting these tools in an integrated system in order to gain critical insights and optimize our processes.