We're an e-commerce platform designed to empower hairstylists and salon professionals to sell beauty products to their customers.
Not familiar with the beauty industry? Here's a quick primer: Beauty products are a multi-billion dollar industry in the US that is done primarily in brick-and-mortar beauty supply stores. Typically a customer purchases hair products from these stores and then goes to a stylist for service. Customers pays for the hair products (supply store) and the service to achieve the desired final look (hair stylist).
Mayvenn is the Apple of beauty products starting with our first line of products, hair extensions. We provide the highest quality products for our partner stylists to sell to their customers. For every sale that a stylist makes, the stylist earns a commission paid by Mayvenn. We handle all the inventory, shipping, customer support, and refunds so that stylists don't put upfront capital to sell products on top of their existing services.
Our mission is to help hair stylists to grow their business.
We've experienced tremendous growth since our founding in 2013: our platform has grown into a nationwide movement of over 100,000+ stylists, hundreds of thousands of customers, and millions of dollars invested back into salons across the country.
We are funded by top tier investors including Andreesen Horowitz, Serena Williams, Jimmy Iovine, and Andre Iguodala.
We're helping an underserved demographic succeed. Our mission is to help our stylists make better businesses. Our business is aligned to their success.
We're a small team of full stack developers. That means frontend, backend, and devops. Any given day we may:
- Style a page with HTML & CSS
- Build a backend service
- Deploy a new service or scale out an existing service
We're generalists that work on all the technology that powers Mayvenn. We've mostly refactored away from a legacy rails application into microservices, so we're careful with how we handle the complexity:
We pair program. Two engineers work together with a MacBook Pro, dual displays and keyboards. Communication is key to working efficiently and effectively. Code context is important to remain productive.
We blackbox test. We write tests with every feature or bug. Our preferred testing style is black-box, to ensure correct behavior while allowing free reign on refactoring without changing tests.
We're polyglots. Although most of our code is in Clojure, the we aren't afraid of using other programming languages where they fit. Our deployments are done in Ruby. We have a consul service registration app that's in Go. Our team has plenty of previous experience in a wide variety of programming languages.
We're striving for continuous improvement. Besides pairing and testing, we have time set aside every Friday afternoon to contribute to open source projects. There's bi-weekly retrospectives to identify and resolve any problems we have (and celebrate wins). Our engineers also selectively curate interesting technical reading for those interested.
- Work on a wide variety of projects ranging from front end CSS to shipping notifications on the back end (mostly in Clojure).
- Learn and teach your fellow engineers new technologies and architectures.
- Work on projects that support customers, stylist, and other teams in Mayvenn.
- Collaborate with other parts of the business to ensure we're working on high value features.
- Pair program majority of the time.
We're looking for engineers that are curious. You should be willing to learn and teach new things. This means coming in knowing Clojure is not a requirement since that can be taught (but it definitely doesn't hurt if you know it). Instead, familiarity with the underlying concepts of the technologies that we use on a day-to-day and being open to learn new concepts is what we look for.
Every Friday afternoon, we have open source time. It's a great time to contribute back to the open source community or spend time on self-improvement.
As an engineering team, we come from a variety of backgrounds with a shared interest to go beyond typical mutation-by-default systems into more immutable and functional style. Functional programming styles are becoming more popular every day, but we're more interested in the software design implications of being functional. So building event-sourced and CQRS systems is a great way to understand the nuances and tradeoffs in comparison to typical restful systems. We're definitely enjoying the increased observability and audibility while tackling the concurrency concerns related to this approach while making it more approachable, replayable.
Besides the purely-technical side, our technical challenges overlap with being an e-commerce platform (high-spike traffic) and a unique demographic that has historically been unsupported by technology.
For example, many of our stylists don't have bank accounts, which makes payment disbursements difficult (especially if a credit union will take +50% of the check's value as the cost of cashing a check).
A Recent Project: Promotions
We were working on a smaller project to provide a starting point for rewriting our promotions implementation, which previously was a Clojure port of some ruby code (in an effort to minimize the effort when rewriting the order processing system a couple years ago).
The order processing service currently uses elasticsearch to help compute promotions, and this new service would attempt to remove that load problem. It mostly comes from our need to then have
refresh=truefor a consistent view onto orders to query against for promotions rules like:
- This promotion can only be used once per customer
- This promotion can only be used
nnumber of times globally.
Unfortunately, elasticsearch was the bottleneck during last Black Friday because of
The new service initial goals is to help handle load during high-traffic days (eg - Black Friday) that is built on dynamo that is a primarily a counter system: it listens to our order event stream and counts when orders have been placed and which promotions were use. It uses atomic add operations in dynamo to be up to date without having an expensive read query through elasticsearch.
Currently, we could build out more, but we'll address that if we had a need to build more complex promotions.
In one sentence:
Work hard and have fun together. Let's break that down:
We have regular 9:30am - 6pm, so we definitely put in our hours of hard work. Our philosophy is that if we can do great work during the day, we don't pay for it in the odd hours of night being paged. Therefore, if we all work together, then we all can have our evenings to dates, kids, hobbies, etc.
We do rotate on pager duty, but we rarely get paged. Typically, we get paged during the day (usually because of a botched deploy that we quickly roll-back). The most common late-night page we've gotten is when AWS removes a node from our elasticsearch/kafka/zookeeper cluster that is simply fixed by provisioning a new one (around 1 once a year).
Yes we work hard, but we should have fun along the way. These include little things like playing fantasy movie league to team events like trying to escape the room (it's a lot of fun btw). Currently there's a feverous discussion about a murder mystery at book club.
We typically eat lunch together (some take out, some bring from home), or go for drinks on Thursday.
In our opinion, teamwork makes the dream work. No late-night coding rockstars. We're in it together and not to step on each other to the finish line.
This also means we don't expect any single person to be an expert at everything. Instead, learning is part of the job. It's common for pairs to have different experiences (eg - frontend vs ops) that each can bring to the problem.
Not only together as a company, but we work hard to make sure our KPIs are aligned with our stylists' goals. In fact, our metrics are around make sure stylists do well which will indirectly will help our bottom line.
We provide medical, dental, vision, and life insurance.
Our team is still small, so we like to all go to a conference as a team. In the past we've gone to Clojure/West the past couple of years, but we're interested in attending other conferences. The conference is all paid for by Mayvenn.
We offer a matching 401(k) plan of up to 4%.
We have drinks at a local bar every Thursday. There's a weekly reading club. We do team outings once a quarter.
Every day we take a
tea break at around 3pm. Purchasing and drink of tea or coffee is not mandatory, but is mostly an excuse for us to walk around in downtown Oakland.
If you commute to work, we offer pre-tax commuter benefits for public transportation or parking.
Interested in this company?
Skip straight to final-round interviews by applying through Triplebyte.