Poshmark is a social app that allows women to shop in each other’s closets. The company was started in 2011 by Manish Chandra, who came up with the idea after looking through his wife’s closet and seeing clothes that were seldom worn, if ever. According to Poshmark, it’s not an uncommon problem; women in the United States collectively purchase over 350 billion dollars’ worth of clothing each year.
Today customers can use Poshmark on their mobile devices to shop, share, and sell fashion online. The company, located in Menlo Park, California, makes shopping a social event by offering “Posh Parties” — real-time events where users can share listings themed by a specific brand, season, or category. Every day, users across the country upload tens of thousands of listings equal to about $1 million in inventory on Poshmark.
Co-founder Gautam Golwala joined Poshmark to help build and launch the application. The founders wanted to implement core features such as personalized feeds with pictures and have the ability to iterate the application quickly. Because Poshmark is a community-based application, they wanted to enable social interaction among customers and be able to scale to support large real-time in-app events.
“I have a lot of experience with data centers,” says Golwala. “We wanted to avoid the time and effort involved in provisioning hardware and everything else associated with an on-premises environment. We needed to be able to move fast and release something quickly to the market, so we decided to use the cloud from day one.”
Why Amazon Web Services
After evaluating a number of cloud service providers, Poshmark chose Amazon Web Services (AWS) because of the number of services that AWS offers, its extensive developer community, and AWS libraries that include sample code, SDKs, sample applications, and other tools to help developers get started quickly.
“We found that a lot of cloud providers were still thinking in terms of a data center and hosting,” says Golwala. “We think of the cloud as a service — API access to infrastructure. AWS has the same approach, and that’s why we preferred it over the others.”
To build the application, Poshmark used JRuby to develop a set of APIs with support for native iOS, Android clients and the Web. The company runs its staging environment in US East (Northern Virginia) and production environment in the US West (Northern California) Region and uses multiple Availability Zones for backup and redundancy of its servers. “We use one AWS account for production and another for development and staging,” Golwala says. “It helps us clearly identify and manage production and operation costs.”
This separation also helps Poshmark experiment with new features quickly in an isolated environment. “We can A/B test at the infrastructure level to validate new designs and changes,” he explains. “We can quickly deploy a new technology to see if it works. If it doesn’t, we can throw it away.” Poshmark uses AWS Support, Developer-level for questions about a problem or service, such as Amazon Simple Notification Service (Amazon SNS) for mobile push and raising limits.
Building on the AWS Cloud
When a customer uploads a picture of an item, Poshmark creates multiple versions of the image (e.g., thumbnail and mobile views) and uploads them to Amazon Simple Storage Service (Amazon S3). Amazon CloudFront integrates with Amazon S3 to deliver the images to customers along with user-generated listings. The company uses Amazon CloudWatch in conjunction with its own internal metric system to monitor resources, collect, and track metrics.
Poshmark uses Amazon Elastic Compute Cloud (Amazon EC2) instances with Elastic Load Balancing to distribute incoming client requests across Apache Tomcat app servers. The company built a data pipeline using Redis for the data structure server and RabbitMQ to manage event data streams and process them asynchronously. Elasticsearch, an open source search and analytics engine, is a key component of the stack for distributed, multi-tenant, full-text search. “We’re using Amazon Route 53 for routing,” says Golwala. “The ease of management for DNS services has been a real benefit.”
Using AWS to Manage Customer Traffic
Poshmark hosts virtual Posh Parties three times daily, with the largest party occurring at 7 p.m. PST. The company uses Amazon SNS extensively for push notifications to customers. Traffic spikes occur as customers turn on the application in response to the notifications. Traffic typically doubles right at the start of the party, with some social interactions quadrupling at the same time. Up to 50,000 users may join the party in its two-hour window.
“We grow and shrink our app servers based on daily traffic patterns, adding about 50% more servers during peak traffic,” says Golwala. Poshmark uses EventMachine for efficient asynchronous processing with highly scalable job workers that can grow elastically as needed. Figure 1 demonstrates Poshmark on the AWS Cloud.
Figure 1. Poshmark Environment on AWS
By using AWS, Poshmark developed a working application within three months for user testing. Altogether, the company was able to take the app to market in eight months and roll it out nationally two months later. “AWS has really helped us decrease time to market,” says Golwala. “We have the ability to experiment, develop and deploy new features fast and scale rapidly.”
Poshmark employs an engineering team of twelve and credits AWS for enabling a DevOps strategy for development. “Our developers know how to manage the AWS environment,” Golwala comments. “We don’t employ an operations staff. My recommendation for anyone new to the AWS Cloud is to think in terms of growing the architecture through APIs instead of buying more boxes. Using AWS, we can move as fast as we want, and as fast as we can.”