Quantcast
Channel: DoorDash Newsroom
Viewing all 711 articles
Browse latest View live

An Update on Dasher Class Action

$
0
0

By Keith Yandell, General Counsel

Today we announced the tentative settlement of a lawsuit regarding classification of Dashers. We firmly believe that the autonomy and flexibility Dashers love is made possible by, and consistent only with, their status as independent contractors. That said, we feel that this settlement represents a fair compromise, addresses valuable Dasher feedback, and makes changes that will further cement Dashers’ status as independent contractors.

As part of the settlement, we have agreed to pay Dashers $3.5 million upon final court approval, plus an additional $1.5 million in 4 years, when we IPO, when we are profitable for a full year, or if we are acquired at double our current valuation, whichever comes first.

We’ve also agreed to several non-monetary components that will enhance Dashers’ autonomy and address feedback regarding the DoorDash platform. These components include:

  • An updated Dasher deactivation policy, that provides additional clarity around the circumstances in which DoorDash may deactivate a Dasher’s account.
  • An appeals process that allows Dashers to seek review of situations where they feel their account has been wrongly deactivated.
  • A forum for Dashers to share feedback with DoorDash executives.
  • Quarterly surveys sent to Dashers to offer them the opportunity to share feedback with DoorDash.
  • New systems to provide the highest rated Dashers with the ability to do more valuable deliveries.

We look forward to finalizing this settlement and moving forward, so we can continue to focus on offering the best possible experience for Dashers, customers and merchants.


An Update on Dasher Class Action was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.


It’s all Gouda On National Grilled Cheese Day

$
0
0

By Kristen Webster, Senior Communications Associate

Today is the day we celebrate all things good: bread, cheese and butter. These three perfectly paired ingredients come together to create a sandwich that is nothing short of “grate”. To celebrate this national holiday, we decided to dig into the DoorDash data to find out some interesting trends around grilled cheese.

Despite being our newest market it turns out, the Inland Empire area of California has the largest percent of grilled cheese orders, ranking them number one for their love of grilled cheese. They are followed by Manhattan, NY coming in second and Indianapolis, IN rounding out the top three, proving that the love of grilled cheese runs strong from coast to coast. (see the full list of top 10 markets below)

And though today marks the day we celebrate the grilling of heaps of cheese between two pieces of bread, we’ve found that in actuality, the day that most people are ordering in and eating grilled cheese is November 3rd. The cold weather and changing of the season most likely encourages people to put down the fork and salad and reach for the gooey comfort of cheesy goodness, causing the large spike of grilled cheese orders we see in November.

So, if you’re looking for a way to celebrate today — or any day throughout the year — here are a few highlights of the grilled cheese masterpieces you can find on DoorDash!

  1. The Jesse James, The Grilled Cheese Bandits — San Jose, CA
Grilled black forest ham and sharp cheddar basted with white truffle oil on batard and encrusted with sharp cheddar

2. The Mac and Cheese Melt, Cheddar Grilled Cheese Co. — Northridge, CA.

Homemade creamy mac and cheese, topped with cheddar and American cheese

3. The The Savoury Stuffed Waffle, Styo Dessert — Vancouver, Canada

Skip the white bread, this cheese is sandwiched between two homemade waffles and grilled to perfection

Now stop drooling and get to celebrating already!

Top Grilled Cheese Loving Cities of 2017:

1. Inland Empire, CA
2. Manhattan, NY
3. Indianapolis, IN
4. SF Bay Area, CA
5. LA Valley, CA
6. Las Vegas, NV
7. Chicago, IL
8. Denver, CO
9. Sacramento, CA
10. Phoenix, AZ


It’s all Gouda On National Grilled Cheese Day was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

Making Dashing Faster, Easier and Greener with Electric Bikes

$
0
0

By Usman Cheema, Business Development Manager

Ahead of this Earth Day, we are introducing a new green partnership with GenZe — the company behind the popular zero-emission electric bikes — to offer e-bikes as an alternative mode of transportation for Dashers in Los Angeles, San Francisco, Vancouver and Washington D.C.

Dashers today use a variety of vehicle types — from cars to trucks, and from scooters to bicycles — as a way to complete the many different types of deliveries with DoorDash. And though each method of transportation has its benefit, we’ve seen that scooters and bikes are incredibly efficient at navigating heavy traffic in urban areas to get an order to its destination on time. While scooters aren’t for everyone, and can sometimes require different licensing, we’ve found that bikes are an easy-to-use, accessible option for most. And since many people are already comfortable with riding a traditional bicycle, e-bikes are a great way to help reduce our carbon footprint and assist Dashers to navigate a city with ease.

That’s where GenZe comes in, their 100% electric e-bikes can travel 20–25 miles off of one charge. And with throttle and pedal-assist, you can breeze forward at up to 20 miles an hour without pedaling at all. Just add a burrito or a family order of Jack in the Box and you can picture your newly superhuman Dasher taking on the infamous hills of San Francisco, or the grid-locked and parking challenged Downtown L.A., en route with your order. Areas with high traffic or slow drive times don’t stand a chance against an e-bike’s power boost.

As we test deliveries during the pilot, we hope to expand to other urban cities in the future, likely deploying with a simple day rental model.

Are you interested becoming a Dasher? We’d love to hear from you! Find out more here.


Making Dashing Faster, Easier and Greener with Electric Bikes was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

DoorDash and Wendy’s Partner to Deliver the Nuggs… and Much, Much More!

$
0
0

By Prahar Shah, Head of Business Development

At DoorDash, we are always working to offer the very best selection on the platform, so you can relax and count on knowing your favorite foods are just minutes away with a simple tap or click of a button. With dozens of national partnerships already on the platform, DoorDash has already begun realizing this goal.

Today, we are excited to announce a partnership with Wendy’s®, one of the largest and most popular quick-service restaurant brands in the world. At launch, the pilot will cover 135 Wendy’s restaurants across the Columbus, OH and Dallas, TX areas, with plans to expand nationally within the year.

Known for their delicious Frosty® treat, and square beef patties, Wendy’s serves food with high quality ingredients including fresh, never-frozen beef. With this partnership, the complete Wendy’s menu will now be available for delivery on DoorDash. So, whether you’re looking for something to sink your teeth into like a Dave’s DoubleTM or something light like the Apple Pecan Chicken Salad, Wendy’s on DoorDash has something for everyone.

To celebrate the launch of this exciting new partnership, delivery from Wendy’s will be free for a limited-time. Wendy’s joins a long list of your favorite national restaurants available on DoorDash. Get started today and see why getting delivery with Wendy’s is deliciously different (TM).

(Fresh beef available only in the contiguous U.S., Alaska and Canada.)


DoorDash and Wendy’s Partner to Deliver the Nuggs… and Much, Much More! was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

DoorDash Expands to the Queen City of the Midwest

$
0
0

By Brent Seals, Head of Launch

Here at DoorDash, our goal is to make it as easy as possible for people all around the country to get their favorite foods on a dime. The Cincinnati area has loved the convenience of food carts at Fountain Square, and with the growing trend of delivery it’s even easier to get your favorite food, like skyline chili delivered right to your door. So today, we’re officially launching in Cincinnati to deliver the best of Cincy to our friends in the Queen City.

We’ve seen great success in the Midwest, and it’s time we take DoorDash further to the greater Cincinnati area. Place an order online or on the DoorDash app, and we’ll Dash everywhere from Mason to Sharonville, Blue Ash, West Chester, Madeira, Indian Hill, Montgomery, Reading, Evendale, Golf Manor, Kenwood, St. Bernard, Evanston, Hyde Park, and Madisonville.

Choose from hundreds of Cincinnati’s best restaurants including local spots like City Barbeque and Bamboo Kitchen and national favorites like The Cheesecake Factory, P.F. Chang’s, Red Robin, and Taco Bell.

“I’m excited to partner with an innovative company like DoorDash that will not only offer my loyal customers a new and convenient way to enjoy their favorite cuisine, but will also introduce Bamboo Kitchen to those who haven’t yet tried it” says Valerie Gemain, Owner of Bamboo Kitchen.

We’re lacing up our shoes and are ready to start Dashing in Cincy. To celebrate our launch, new customers can enjoy $5 off an order of $20 or more with the code “CINCY17”. Plus, enjoy free delivery on your very first order, because the only thing better than skyline chili is chili delivered straight to your home or office!


DoorDash Expands to the Queen City of the Midwest was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

Celebrating Mom

$
0
0

Ahead of Mother’s Day, we’re reflecting on all that our mothers bring to the table to help make our days a bit brighter. This weekend is a time to thank the wonderful mothers and mother figures in our lives for their unconditional love and support.

Mothers may indeed make this world go round, so we recognize that sometimes moms may need a little break. And even though we know one weekend is never enough to show Mom our appreciation, it’s a good reminder to spend some time focusing on the little things that make her smile.

Check out our scrapbook below as we celebrate some of the wonderful moms around the DoorDash community and how we’re delivering a helping hand:

Kavitha B. — Atlanta, GA

Marketing VP & mother of two

Kavitha is Vice President at a marketing research company and uses DoorDash about once a week.

“On days that I order food from DoorDash, we don’t have to worry about cooking and doing dishes, so we’re freed up to play for at least an hour outside before dinner time.”
“DoorDash is like my mom… because my mom always had food for me. But since I’m a full-time working mom, I need a little help once in awhile, because the truth is, you can’t do it all.”

Latoya C. — Boston, MA

Dasher since 2015 & mother of four

Latoya works as a payroll manager during the day, and dashes with DoorDash occasionally to make some extra money.

“Dashing has helped me and my family in so many ways. It has helped with extra bills, family trips, and even my daughter’s college tuition.”
“It also makes me feel good when I know I just helped someone who couldn’t get out of the house to get food because they have an injury, a new baby, or are working on a term paper that is due in the morning.”

Nikky P. — Dallas, TX

Owner of Asian Mint & mother of two

Nikky is the owner of Asian Mint, an extremely popular Asian fusion restaurant with two locations in the Dallas area.

“As restaurateurs, we value good food and go out to eat a lot. We live a very busy lifestyle, so ordering with DoorDash is a time saver while still allowing us to eat great restaurant food!”
“The convenience from DoorDash is a lifesaver and has turned into a lifestyle.”

Thank you to all our incredible DoorDash moms!


Celebrating Mom was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

Making deliveries more accurate with improved location information

$
0
0

By Xilin Liu, iOS Engineer

As a DoorDash customer, you should always know where your order is in the delivery journey. Whether the Dasher is on the way to the restaurant, waiting for your food, or nearing your location, the DoorDash app keeps you up to date every step of the way.

In the past, we’ve typically used GPS information from a Dasher’s phone, combined with manual prompts for Dashers to check in when they’ve arrived at a restaurant or picked up food, to trigger these updates along the way. However, we’ve been working to make this location information even more accurate with less manual interaction.

We recently rolled out an update to the Dasher and merchant apps that uses bluetooth signals to let us know when a Dasher has arrived at or departed from a restaurant (the technical term for this technology is “beacons”). Now, if a Dasher has bluetooth enabled on their phone, as soon as they are within 20 feet of the merchant app, the bluetooth signals in the two apps will communicate with one another and trigger a notification to DoorDash that the Dasher has arrived at the restaurant. A similar notification will trigger when the Dasher leaves communication range with the tablet, indicating that they have departed from the store.

Bluetooth signals are much more precise than geo-fencing using GPS and this improved location information has a number of benefits across the platform. For example, more accurate information about when a Dasher arrives and leaves a given restaurant helps us improve restaurant wait times, ultimately allowing us to make better delivery offers to Dashers. Similarly, better estimated wait times help us calculate more accurate ETAs for when the customer should expect her delivery. We also hope to use this information for other features in the future, like improving parking information or requiring fewer taps and swipes on the Dasher app.

It’s important to note that we launched this feature with Dasher privacy in mind from the beginning. While we already use location information from the GPS on the Dasher’s phone, the bluetooth signals are only used when Dashers are close to a merchant app and only while on an active delivery. If Dashers prefer not to provide this enhanced location information, they can simply turn off bluetooth on their cell phone.

We’re excited that this new improved location information will improve the experience for Dashers, customers and merchants alike. Order from DoorDash today and let us know if you were able to notice a more accurate ETA.


Making deliveries more accurate with improved location information was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

Tips for Building High-Quality Django Apps at Scale

$
0
0

By Alvin Chow and Bernard Liang, Software Engineers

At DoorDash, most of our backend is currently based in Django and Python. The scrappy Django codebase from our early days has evolved and matured over the years as our business has grown. To continue to scale, we’ve also started to migrate our monolithic app towards a microservices architecture. We’ve learned a lot about what works well and what doesn’t with Django, and hope we can share some useful tips on how to work with this popular web framework.

Be careful about “applications”

Django has this concept of “applications,” which are vaguely described in the documentation as “a Python package that provides some set of features.” While they do make sense as reusable libraries that can be plugged into different projects, their utility as far as organizing your main application code is less clear.

There are some implications from how you define your “apps” that you should be aware of. The biggest one is that Django tracks model migrations separately for each app. If you have ForeignKey’s linking models across different apps, Django’s migration system will try to infer a dependency graph so that migrations are run in the right order. Unfortunately, this calculation isn’t perfect and can lead to some errors or even complex circular dependencies, especially if you have a lot of apps.

We originally organized our code into a bunch of separate “apps” to organize different functionality, but had a lot of cross-app ForeignKey’s. The migrations we had checked in would occasionally wind up in a state where they would run okay in production, but not in development. In the worst case, they would not even play back on top of a blank database. Each system may have a different permutation of migration states for different apps, and running manage.py migrate may not work with all of them. Ultimately, we found that having all these separate apps led to unnecessary complexity and headaches.

We quickly discovered that if we had these ForeignKey’s crossing different apps, then perhaps they weren’t really separate apps to begin with. In fact, we really just had one “app” that could be organized into different packages. To better reflect this, we trashed our migrations and migrated everything to a single “app.” This process wasn’t the easiest task to accomplish (Django also uses app names to populate ContentType’s and in naming database tables — more on that later) but we were happy we did it. It also meant that our migrations all had to be linearized, and while that came with downsides, we found that they were outweighed by the benefit of having a predictable, stable migration system.

To summarize, here are our suggestions for any developers starting a Django project:

  • If you don’t really understand the point of apps, ignore them and stick with a single app for your backend. You can still organize a growing codebase without using separate apps.
  • If you do want to create separate applications, you will want to be very intentional about how you define them. Be very explicit about and minimize any dependencies between different apps. (If you are planning to migrate to microservices down the line, I can imagine that “apps” might be a useful construct to define precursors to a future microservice).

Organize your apps inside a package

While we’re on the topic of apps, let’s talk a little bit about package organization. If you follow Django’s “Getting started” tutorial, the manage.py startapp command will create an “app” at the top-level of the project directory. For instance, an app called foo would be accessible as import foo.models… . We would strongly advise you to actually put your apps (and any of your Python code) into a Python package, namely the package that is created with django-admin startproject.

In Django’s tutorial example, instead of:

mysite/ 
    mysite/
        __init__.py
polls/
    __init__.py

We’d suggest:

mysite/
    mysite/
        __init__.py
    polls/
        __init__.py

This is a small and subtle change, but it prevents namespace conflicts between your app and third party Python libraries. In Python, top-level modules go into a global namespace and need to be uniquely named. As an example, the Python library for a vendor we used, Segment, is actually named analytics. If we had an analytics app defined as a top-level module, there would be no way to distinguish between the two packages in your code.

Explicitly name your database tables

Your database is more important, more long-lived, and harder to change after the fact than your application. Knowing that, it makes sense that you should be very intentional about how you are designing your database schema, rather than allowing a web framework to make those decisions for you.

While you largely do control the database schema in Django, there are a few things it handles by default that you should know about. For example, Django automatically generates a table name for your models, with the pattern of <app_name>_<model_name_lowercased>. Instead of relying on these auto-generated names, you should consider defining your own naming convention and naming all of your tables manually, using Meta.db_table.

class Foo(Model):
    class Meta:
        db_table = 'foo'

The other thing to watch for is ManyToManyFields. Django makes it easy to generate many-to-many-relationships using this field and will create the join table with automatically-generated table and column names. Instead of doing that, we strongly suggest you always create and name the join tables manually (using the through keyword). It’ll make it a lot easier to access the table directly, and frankly, we found that it’s just annoying to have hidden tables.

These may seem like minor details, but decoupling your database naming from Django implementation details is a good idea because there are going to be other things that touch your data besides the Django ORM, such as data warehouses. This also allows you to rename your model classes later on if you change your mind. Finally, it’ll simplify things like breaking out tables into separate services or transitioning to a different web framework.

Avoid GenericForeignKey

If you can help it, avoid using GenericForeignKey’s. You lose database query features like joins (select_related) and data integrity features like foreign key constraints and cascaded deletes. Using separate tables is usually a better solution, and you can leverage abstract base models if you are looking for code-reuse.

That said, there are situations where it can still be helpful to have a table that can point to different tables. If so, you would be better off doing your own implementation and it isn’t that hard (you just need two columns, one for the object ID, the other to define the type). One think we dislike about GenericForeignKey is that they have a dependency on Django’s ContentTypes framework, which stores identifiers for tables in a mapping table named django_contenttypes.

That table is not a lot of fun to deal with. For starters, it uses the name of your app (app_label) and the Python model class (model) as columns to map a Django model to an integer id, which is then stored inside the table with the GFK. If you ever move models between apps or rename your apps, you’re going to have to do some manual patching on this table. More importantly, having a common table hold these GFK mapping will greatly complicate things if you ever want to move your tables into separate services and databases. Similar to the earlier section about explicitly naming your tables — you should own and define your own table identifiers as well. Whether you want to use an integer, string, or something else to do this, any of these is better than relying on an arbitrary ID defined in some random table.

Keep migrations safe

If you are using Django 1.7 or later and are using a relational database, you are probably using Django’s migration system to manage and migrate your schema. As you start running at scale, there are some important nuances to consider about using Django migrations.

First of all, you will need to make sure that your migrations are safe, meaning they will not cause downtime when they are applied. Let’s suppose that your deployment process involves calling manage.py migrate automatically before deploying the latest code on your application servers. An operation like adding a new column will be safe. But it shouldn’t be too surprising that deleting a column will break things, as existing code would still be referencing the nonexistent column. Even if there are no lines of code that reference the deleted field, when Django fetches an object (e.g. Model.objects.get(..), under the hood it performs a SELECT on every column that is defined in the model. As a result, pretty much any Django ORM access to that table will raise an exception.

You could avoid this issue by being sure to run the migrations after the code is deployed, but it does mean deployments have to be a bit more manual. It can get tricky if developers have committed multiple migrations ahead of a deploy. Another workaround is to make these and other dangerous migrations into “no-op” migrations, by making migrations purely “state” operations. You will then need to perform the DROP operations after the deploy.

class Migration(migrations.Migration):
    state_operations = [ORIGINAL_MIGRATIONS]
    operations = migrations.SeparateDatabaseAndState(
state_operations=state_operations
)

Of course, dropping columns and tables aren’t the only operation you will want to watch out for. If you have a large production database, there are many unsafe operations that may lock up your database or tables and lead to downtime. The specific types of operations will depend on what variant of SQL you are using. For example, with PostgreSQL, adding columns with an index or that are non-nullable to a large table can be dangerous. Here’s a pretty good article from BrainTree summarizing some of the dangerous migrations on PostgreSQL.

Squash your migrations

As your project evolves and accumulates more and more migrations, they will take longer and longer to run. By design, Django needs to incrementally play back every single migration starting from the first one in order to construct its internal state of the database schema. Not only will this slow down production deploys, developers will also have to wait when they initially set up their local development database. If you have multiple databases, this process will take even longer, because Django will play all migrations on every single database, regardless of whether the migration affects that database.

Short of avoiding Django migrations entirely, the best solution we’ve come up with is to just do some periodic spring cleaning and to “squash” your migrations. One option is to try Django’s built-in squashing feature. Another option, which has worked well for us, is to just do this manually. Drop everything in the django_migrations table, delete existing migration files, and run manage.py makemigrations to create fresh, consolidated migrations.

Reduce migration friction

If many dozens of developers are working on the same Django codebase, you may frequently run into race conditions with merging in database migrations. For example, consider a scenario where the current migration history on master looks like:

0001_a 
0002_b

Now suppose engineer A generates migration 0003_c on his local branch, but before he is able to merge it, engineer B gets there first and checks in migration 0003_d. If engineer A now merges his branch, anyone that tries to run migrations after pulling the latest code will run into the error “Conflicting migrations detected; multiple leaf nodes in the migration graph: (0003_c, 0003_d).”

At a minimum, this results in the migrations having to be manually linearized or creating a merge migration, causing friction in the team’s development process. The Zenefits engineering team discusses this problem in more detail in a blog post, from which we derived inspiration to improve upon this.

In less than a dozen lines of code, we were able to solve a more general form of this problem in the case where we have multiple Django applications. We did this by overriding the handle() method of our makemigrations command to generate a multiple-application migration manifest:

Applying this to the above example, the manifest file would have one entry doordash: 0002_b for our app. If we generate a new migration file 0003_c off HEAD, the diff on the manifest file will apply cleanly and can be merged as is:

- doordash: 0002_b
+ doordash: 0003_c

However, if the migrations are outdated, such as if an engineer only has 0001_a locally and generates a new migration 0002_d, the manifest file diff will not apply cleanly and thus Github would declare that there are merge conflicts:

- doordash: 0001_a
+ doordash: 0002_d

The engineer would then be responsible for resolving the conflict before Github will allow the pull request to be merged. If you have integration tests on which code merges are gated (which any company of that size should), this is also another motivation to keep the test suite fast!

Avoid Fat Models

Django’s promotes a “fat model” pattern where you put the bulk of your business logic inside model methods. While this is what we used initially, and it can even be pretty convenient, we realized that it does not scale very well. Over time, model classes become bloated with methods and get extremely long and difficult to read. Mixins are one way to mitigate the complexity a bit, but do not feel like an ideal solution.

This pattern can be kind of awkward if you have some logic that doesn’t really need to operate on a full model instance fetched from the database, but rather just needs the primary key or a simplified representation stored in the cache. Additionally, if you ever wish to move off the Django ORM, coupling your logic to models is going to complicate that effort.

That said, the real intention behind this pattern is to keep the API/view/controller lightweight and free of excessive logic, which is something we would strongly advocate. Having logic inside model methods is a lesser evil, but you may want to consider keeping models lightweight and focused on the data layer. To make this work, you will need to figure out a new pattern and put your business logic in some layer that is in between the data layer and the API/presentational layer.

Be careful with signals

Django’s signals framework can be useful to decouple events from actions, but one use case that can be troublesome are pre/post_save signals. They can be useful for small things (e.g. checking when to invalidate a cache) but putting too much logic in signals can make program flow difficult to trace and read. Passing custom arguments or information through a signal is not really possible. It is also very difficult, without the use of some hacks, to disable a signal from firing on certain conditions (e.g. if you want to bulk update some models without triggering expensive signals).

Our advice would be to limit your use of these signals, and if you do use them, avoid putting other than simple and cheap logic inside them. You should also keep these signals organized in a predictable and consistent place (e.g. close to where the models are defined), to make your code easy to read.

Avoid using the ORM as the main interface to your data

If you are directly creating and updating database objects from many parts of your codebase with calls to the Django ORM interface (Model.objects.create() or Model.save()), you may want to revisit this approach. We found that using the ORM as the primary interface to modify data has some drawbacks.

The main problem is that there isn’t a clean way to perform common actions when a model is created or updated. Suppose that every time ModelA is created, you really want to also create an instance of ModelB. Or you want to detect when a certain field has changed from its previous value. Apart from signals, your only workaround is to overload a lot of logic into Model.save(), which can get very unwieldy and awkward.

One solution for this is to establish a pattern in which you route all important database operations (create/update/delete) through some kind of simple interface that wraps the ORM layer. This gives you clean entry points to add additional logic before or after database events. Additionally, decoupling your application code a bit from the model interface will give you the flexibility to move off the Django ORM in the future.

Don’t cache Django models

If you are working on scaling your application, you are probably taking advantage of a caching solution like Memcached or Redis to reduce database queries. While it can tempting to cache Django model instances, or even the results of entire Querysets, there are some caveats you should be aware of.

If you migrate your schema (add/change/delete fields from your model), Django actually does not handle this very gracefully when dealing with cached instances. If Django tries to read a model instance that was written to the cache from an earlier version of the schema, it will pretty much die. Under the hood, it’s deserializing a pickled object from the cache backend, but that object will be incompatible with the latest code. This is more of an unfortunate Django implementation detail than anything else.

You could just accept that you’ll have some exceptions after a deploy with a model migration, and limit the damage by setting reasonably short cache TTL’s. Better yet, avoid caching model’s altogether as a rule. Instead, only cache the primary keys, and look up the objects from the database. (Typically, primary key lookups are pretty cheap. It’s the SELECT queries to find those IDs that are expensive).

Taking this a step further to avoid database hits entirely, you can still cache Django models safely if you only maintain one cached copy of a model instance. Then, it is pretty trivial to invalidate that cache upon changes to the model schema. Our solution was to just create a unique hash of the known fields and adding that to our cache key (e.g. Foo:96f8148eb2b7:123). Whenever a field is added, renamed or deleted, the hash changes effectively invalidate the cache.

Conclusion

Django is definitely a powerful and feature-filled framework for getting started on your backend service, but there are subtleties to watch out for that can save you headaches down the road. Defining Django apps carefully and implementing good code organization up front will help you avoid unnecessary refactoring work later. Meanwhile, by taking full control over your database schema and being deliberate about how you use Django features like GenericForeignKey’s and the ORM, you can ensure that you aren’t too coupled to the framework and and migrate to other technologies or architectures in the future.

By thinking about these things, you can maintain the flexibility to evolve and scale your backend in the future. We hope that some of the things we’ve learned about using Django will help you out in building your own apps!


Tips for Building High-Quality Django Apps at Scale was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.


Next Up: Milwaukee

$
0
0

By Brent Seals, Head of Launch

No matter where you are, it’s our job to make sure you get your favorite foods in a flash. After launching in Cincinnati earlier this month, we’re continuing to expanding throughout the Midwest — and now it’s time to make delivery more delightful than ever for our friends in the Milwaukee area.

The beer flows freely in Brew City, and we want to make sure Milwaukeeans have all the best foods to go with it! From pizza to burgers and chicken wings to burritos, we’re ready to have it dashed straight to your door.

Beginning today, we’re launching more than 10 cities in the Milwaukee area, offering delivery throughout West Milwaukee, Wauwatosa, West Allis, Brookfield, Glendale, New Berlin, Whitefish Bay, Fox Point, Elm Grove, Shorewood, and Bayside. And fear not, Downtown Milwaukee, we’re coming for you in the coming weeks!

With a few clicks on our app or online, choose from hundreds of restaurants in Milwaukee, including well-loved establishments like P.F. Chang’s, Cheesecake Factory, and Bravo! Cucina Italiana. Whether you’re in the mood for spaghetti from Maggiano’s Little Italy or craving a chicken and gyro platter from the experts, The Halal Guys, we have you covered.

“We’re excited to partner with DoorDash in the Milwaukee area to offer delivery of our tasty sandwiches and platters,” said Dustin LeFebvre, owner of The Halal Guys Milwaukee. “Taking advantage of their logistics technology means our customers will get their favorite Halal Guys dishes quickly and steaming hot — exactly what they’ve come to expect since we started as a food cart in New York.”

To celebrate our launch, new customers can enjoy $5 off an order of $20 or more with promo code “MILWAUKEE”. On top of that, enjoy free delivery for a limited time on your very first order. Cheers to that, Mil-town!


Next Up: Milwaukee was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

New features to better find, track, and rate your deliveries

$
0
0

By Jimmy Liu, Product Manager

Today we’re announcing a host of new features on the DoorDash Android and iOS apps to make browsing, choosing and ordering your favorite food easier than ever.

New Recommendation Engine: Suggested Items

At DoorDash we are fanatics for data. Over the past few months we’ve been hard at work building out a recommendations algorithm that uses machine learning to make suggestions more personalized and more relevant. As a first step, today we’re launching an improved “suggested items” feature. Now you can use the power of the crowd to see what items to order. Based on our tests, we expect to see the average DoorDash customer try 2–3 new items per month.

Most Popular Items

Part of making ordering as easy as possible is answering the question, “what should I order from this restaurant?” To make decision-making easier and to encourage menu exploration, we now highlight a restaurant’s most popular items so you’ll know what’s hot on the menu and feel confident in what you’re ordering. You’ll start seeing the “Popular Items” section at the top of menus across the DoorDash iOS app and on the web, with Android coming soon.

New ratings options

There’s a lot that goes into a great delivery: from the Dasher’s professionalism, to the taste of the food, to how early it arrives. To make our ratings more granular we’re now separating ratings into two: one for the Dasher and one for the food. This feedback will help us improve both Dasher quality as well as the types of restaurants we have on the platform.

New restaurant ratings

With the new ratings systems we’re revamping our restaurant ratings to make it even easier to know you’re ordering from a crowd favorite. According to our early tests, we’ve found that along with photos and logos, ratings is another key signal helps customers with their decision making. Keep an eye out for star ratings associated with restaurants coming soon.

Where’s my Dasher?

We’ve long offered detailed status updates on your order: from when it’s been accepted, to when a Dasher has arrived at the restaurant, to when the food is on its way. But we wanted to go even further with order tracking and today we’re introducing a new map to help you better see the status of your delivery. Now, when your Dasher is on the way to your delivery location, a map will appear on the order status tab with a real-time pin of the Dasher’s location. No need to text and ask where your Dasher is at: now you’ll always know. This feature will be rolling out across Android and iOS apps this week.

Update to the latest version of the iOS and Android apps to start seeing these new features, and stay tuned to the DoorDash blog for more news about product improvements, enhancements and redesigns in the months to come.


New features to better find, track, and rate your deliveries was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

Strategy & Ops Has Its Finger on the Pulse of DoorDash’s Three-Sided Marketplace

$
0
0
Strategy and Operations team members from across the U.S. gather at San Francisco headquarters to plan the next six months of growth.

(Cross-posted from Job Portraits)

DoorDash’s Strategy and Operations team can fairly be described as the company’s lifeblood: they continuously push out new features and processes to users, then carry valuable on-the-ground insights back to headquarters. Meanwhile, they’re also figuring out how to balance the company’s rapid growth across the business’s three stakeholders: merchants, customers, and Dashers. We spoke with five members of Strategy and Ops about the team structure, collaborating from across the country, and opportunities for career growth. Interested in joining the team? Check out open roles or get in touch with Katie Frank, katief@doordash.com, to learn more.

Casey North, Head of Strategy and Operations

First, give us a bird’s-eye view of what Strategy and Ops does at DoorDash.

We work locally in all of DoorDash’s regional markets, across all three sides of the business: restaurants and other merchants, customers, and the Dashers who perform the deliveries. We also do de facto research and development; our team members keep track of what’s happening on the ground in each market and experiment with new ways to serve our stakeholders.

Casey North

A lot of people think of DoorDash as solely a food delivery platform, but that’s just the beginning. We started with food because it’s the hardest product to deliver. Ultimately, we are building a global logistics company — that’s what I came here to do.

Tell us about how the team is organized.

The organization is divided into seven regions across the U.S. and Canada. Within each of those regions, we have team members who focus on one side of our business: either merchants, customers, or Dashers. By developing regional experts, we’re able to quickly learn what’s worked in one market and apply those practices to other cities. Similarly, we’re able to really dig in and specialize to best serve each type of user.

What are the opportunities for growth on this team?

People can chart their own course. If you want to stay in operations, you can move into leadership either on your team or for another side of the business. Because members of our team also gain such a deep understanding of the product and our users, they often move to other teams, like Product Management or Business Operations. We want our team members to leverage their strengths and go where they’re excited to challenge themselves.

“What I love about our team is the sense of humility.”

Which qualities tend to make someone successful on this team?

There’s no shortage of brilliant and relentless people at DoorDash, but what I love about our team is the sense of humility. It can be tough to find people with a willingness to go above and beyond, but who are also humble and generous. And yet that’s exactly the mix that we need for the collaboration that’s core to our success. Everyone here is on the same team. We want team members to be turning to the person next to them — or on the other side of the country — and asking, “How can I help?”

If we think of DoorDash as a character in a story, what moment is it in?

If this were a play, I would say we just finished act one this year. The opportunity within our core marketplace of restaurants is massive and there’s a lot of exciting activity there; the biggest national chains, like Cheesecake Factory and P.F. Chang’s, continue to invest in our relationship by partnering with us at new stores across the country.

We’re also testing services like alcohol delivery; we just signed a deal with a national retailer, BevMo. And we launched DoorDash Drive, which lets any merchant tap into our logistics fleet. With all these partnerships, products, and new opportunities ahead of us, we’re ready for the next act.

At the team’s all-hands meeting, Cody Aughney, far right, shares platform performance data from different times of day.

Mike Henry, Regional General Manager

Tell us about your role on the Strategy and Ops team.

I’m a Regional General Manager based out of our Midwest hub in Chicago. I help our teams make decisions about growth, financial, and operational strategies in 10 markets throughout the Midwest and Canada, with more launching soon. Ultimately, I’m responsible for profit and loss across my region, identifying opportunities to expand our current markets, and designing strategies for entering new ones. Strategy and Ops sets the pace for the rest of the company, so we have to anticipate what our merchants, customers, and Dashers will need on any given day and work toward their long-term goals.

Mike Henry

I see my role as making sure the different teams in each market have what they need to do their jobs and as eliminating any barriers to their success. I’m also teaching them to be leaders themselves. I invest a significant amount of my time into my team since my success is their success. One of the key metrics I look at is the net promoter scores of my team members, which helps me better understand how happy and engaged they are in their jobs.

What does your day to day look like?

It’s rarely the same. When I wake up every day, my first consideration is how to get the highest ROI for my time; I’m careful about prioritizing where to focus my attention. One day that might be recruiting new talent; the next it’s growth strategy; the day after that it’s working with top Dashers or merchants, making sure they feel valued.

“Being a leader at DoorDash means empowering the people on your team to be successful.”

Whatever I’m doing, I have to understand what’s happening on the ground. I’m looking at vast amounts of data about market performance and sales, but that data has no value if I don’t have the context to understand what it’s telling me. Organization is key, and I need to be able to focus on a specific issue rather than getting dizzy from the whole picture. A lot of what I do relies on other people’s hard work; being a leader at DoorDash means empowering the people on your team to be successful.

Left: From the office window, the Windy Cityscape. Right: DoorDash’s own Vanna White shows off the signature red bag.

Can you speak to the challenges your team is facing?

Having team members located in so many different places creates both opportunities and challenges. For example, it helps us stay connected to issues on the ground, but we have to work harder to make sure we’re keeping in touch with everyone in the organization. We address this by emphasizing communication and collaboration, and we err on the side of over-communicating to make sure we’re getting the right information to the right people. Each of our seven regions has its own weekly standup, as do the customer, merchant, and Dasher teams within the regions. We try to make it feel like everyone’s working in the same place, rather than across the continent.

Another big challenge is scaling all three sides of our marketplace — merchants, customers, and Dashers — at the same rate. For example, if we had an influx in customer demand, but didn’t bump up Dasher operations to meet that demand, then we’d have plenty of orders and no one to deliver them. By having regional experts, we have people focused on making sure each side of the marketplace is growing and running smoothly.

What were you doing before DoorDash, and what’s your trajectory been like?

I like to tell people I’m a recovering consultant and banker. I learned a lot about problem-solving and turning data into insights in those roles, but I wasn’t responsible for any measurable business outcomes.

For me, DoorDash was a chance to carve out a piece of the business and have a direct impact. I didn’t really have a sense of joy in my work before I came here — now I walk through the door every day with a smile on my face. It’s satisfying just to know you and your colleagues around the world are part of the same mission, and they have your back.

“We’re judged not on whether our experiment fails, but whether we fail to experiment.”

Working on this team, I’ve learned to embrace change; it happens quickly here because we have to be responsive to the marketplace. DoorDash also values experimentation. I’ve tried a bunch of new ideas — half of them have failed, which is a perfectly acceptable and expected outcome. The other half were put into our products and scaled across the company. Ultimately, we’re judged not on whether our experiment fails, but whether we fail to experiment.

What’s the culture like on your team?

I would describe everyone as tenacious. “Act like an owner” is a core value at DoorDash, and we definitely live that. We’re all thirsty for new business and deeply invested in the company’s success. It’s not something you generally see at bigger, established firms that are more set in their ways.

Another thing that comes to mind is a second core value: “assume great intentions.” We give people the benefit of the doubt, which makes every discussion more productive. We don’t waste our time being pissed off or bent out of shape, and there are no screaming matches. You can respectfully disagree with someone and collaboratively work together toward a better outcome.

What are you looking forward to in the next year at DoorDash?

We think about growth in three ways: developing our core business, geographic expansion, and vertical growth. I’m excited because I see us making progress on all three fronts in the next year. We’re launching new markets, we’re announcing new partners, we’re experimenting with things like catering and alcohol — I love coming in every day thinking about the next big thing.

In San Francisco, Michael Bloch (Regional General Manager), AJ Jain (Senior Strategy & Ops Manager) and Matt Flynn (Strategy & Ops Manager) talk about the merchant side of the business for NorCal.

Darshini Patel, Launcher

Let’s start with the basics: What do you do at DoorDash?

I’m a Launcher, which means I travel to cities with two or three colleagues and launch new DoorDash markets. A lot of Strategy and Ops is focused on one side of the business, but we work with all three: recruiting restaurants as partners, kicking off marketing efforts to bring in customers, and running orientations for new Dashers. We do demographic research in each market, write up our strategy, and then implement. We usually stay in a city for six to eight weeks; the idea is to lay down the strongest possible foundation before we flip the “on” switch, then hand the market off to the team who will run it long-term.

Left to right: DoorDash swag, Darshini, and her sweet digs.

Can you walk us through the steps you take in a new market?

Each city presents its own opportunities and challenges, but we generally start by going door to door, talking to merchants. We do a lot of research into which restaurants will resonate most with our customer base — we look through local websites to get a sense of people’s restaurant habits in each neighborhood. Then we do our best to bring desirable merchants on board.

As we get closer to launch, our work is more operations-heavy. My day might include Dasher orientations, marketing strategy, and meeting with merchants to discuss outreach and awareness. Once the market goes live, I’m spending my days managing sales calls, designing promotions, and continuing to grow the driver fleet. I’m also tracking growth and making sure we hit our numbers. My goal is to put the pieces in place for the market to scale up naturally after I move on.

And this all happens in under eight weeks?

Well, we don’t always hit that timeline. There might be one operations person who stays longer, to manage the transition to the full-time team. But generally, we try to stick to our six- to eight-week plan.

What kind of support do you have as you launch new markets?

We’re definitely not going in blind. We have a solid playbook of best practices. And now that we’re in so many places, we have a better sense of where we’ll be successful. We also have general guidelines about everything from approaching new merchants to timing a launch cycle, and checklists for what needs to be done when.

At the same time, there’s a lot of room to be creative. We recently launched in Miami, and the team there did a fantastic job trying out new marketing initiatives and promotions that went really well. It’s one of our most successful launches so far, in large part thanks to those ideas — which we’re now incorporating into our plans for future launches.

“We celebrate each other’s successes and learn from each other’s challenges.”

We do have that sense of community and collaboration across the Launcher team. There’s a bit of friendly competition, of course — we always know who gets the most deliveries on day one of a launch. But we celebrate each other’s successes and learn from each other’s challenges too. Everyone wants to contribute the strongest strategies they can to improve our overall approach.

Crestal Haynes and Brent Seals find quiet space at the New York office. Right: Appropriately, this DoorDash office sports two dashing doors.

How have you adjusted to the travel schedule?

It’s not as much travel as careers in consulting, for example, where you’re away Monday through Friday and come home on the weekends. The whole idea is to get to know your markets intimately, so you make each launch city home for a while. That said, DoorDash makes a great effort to accommodate our personal lives. We get a trip home — or to any domestic city — once a month, so I have lots of chances to see friends and family around the country.

“Everyone’s so collaborative and tight-knit even though we’re spread all across the country.”

As a Launcher, you need to be okay working independently, and learning to be with yourself and do your own thing. But you definitely form bonds with your teammates. We socialize after work a lot. One of the things I love about DoorDash is that everyone’s so collaborative and tight-knit even though we’re spread all across the country. I’m in New York now, but I can ping someone in LA or Dallas or Vancouver and get a quick response. You always have that sounding board, so you’re never really alone.

What qualities make someone successful in the Launcher role?

People do well when they’ve cultivated a strong ownership mentality, especially because we are so heavily invested in all three sides of our market. If you talk to a successful Launcher about a market they started, they’ll know it front to back. They can name all the rock star Dashers and bestselling merchants.

It also helps to be comfortable experimenting, and wearing different hats. For example, you need to understand how Dashers and merchants can best work together in a certain region, and you also need to understand how a specific merchant can best market DoorDash to their customers. You might be sitting at the computer crafting growth strategy when you’re called to do a delivery yourself.

How do you know when you’re successful?

We have a lot of metrics we can track. One is delivery volume: Are we getting more orders and growing every day? Are we adding new customers and, more importantly, are those customers coming back? Continued growth is key, because it means you’ve set your team up for success and they’ll be equipped to scale up all three sides. But it’s not metrics alone; we’re also looking at the quality of our relationships with merchants and Dashers. Are deliveries being made on time? How efficient is a given Dasher, and are we paying them accordingly?

“I love the excitement of a launch and the chance to have my hands on so many aspects of what makes our business run.”

Our leadership also understands that you don’t always hit your targets. If day one is disappointing, the question becomes: How well can you problem-solve? How quickly can you pivot to make day two a different story? Our managers understand we’re not going to make our money back in a day. Launching is an investment.

What are the opportunities for growth on the Launch team?

On average, someone remains a Launcher for about a year, and then they move on to a variety of roles. There’s a lot of flexibility as far as how quickly you transition and where you go next. Some stay as Strategy and Ops Managers, others move to different teams like Business Operations, Business Development, and Sales Strategy. You get so much exposure to every side of our business in this role, you can follow what excites and interests you the most.

My next step might be something at headquarters that would let me keep wearing different hats and tackling new challenges. Right now, though, I’m happy to stay where I am. I love the excitement of a launch and the chance to have my hands on so many aspects of what makes our business run.

The Strategy and Ops team in San Francisco, about 20 people strong, builds many of the tools used by the regional teams.

David Emanuel, Senior Strategy and Operations Manager

First, give us a quick overview of your role.

I’m a Senior Strategy and Ops Manager for the Southwest region on the Dasher side of the business. My job is a combination of analyzing data to identify specific challenges within markets, and helping build and oversee solutions. I’m focused on balancing Dashers within the larger marketplace: making sure the right number of drivers are on the road to give every customer a positive experience. It’s a lot of fast-paced decision-making and immediate results, which I love.

Tell us a bit about your background, and how your job has changed since you joined DoorDash.

I studied mechanical engineering at Brown University. I really just wanted to build things from scratch. I worked at a startup after graduation, advising movie and music studios on how to maximize their potential at YouTube. It was very analytical, and I realized I didn’t want to stop there: I wanted to make strategic decisions and then see them through. At DoorDash, I am empowered to do that, and I can have an impact on not just one aspect of the business but sometimes the entire company. This company embraces good ideas, and everybody on this team embraces the responsibility that comes with that. We’re determined to leave our mark.

David Emanuel

I joined the company two years ago as an Operations Manager. I was promoted to Associate General Manager, then General Manager for Los Angeles, and transitioned to my current role when we began building our specialized teams. Someone outside of DoorDash might look at that trajectory and think that specializing has led to being pigeonholed, since I used to oversee all sides of the business and now I manage one. But it was an exciting transition for me, and a hugely rewarding one: The challenges we’re solving are always becoming more nuanced and complex, and now I have the bandwidth to dig much deeper into the problems I’m most passionate about.

What does collaboration look like within Strategy and Ops, and at DoorDash generally?

Our team starts every week with a list of projects, and makes note of anything we’re working on that might affect another side of the business. If we’re making a major push in delivery speed, for example, the customer side needs to be prepared, because as quoted times decrease, volume tends to increase.

This role doesn’t require a ton of travel, but I do have the option to visit HQ or our other locations if that’s the best way to collaborate. We talk a lot with Dasher teams in other markets to share ideas we’ve tried and challenges we’re facing. We also pick the brains of any Launchers who visit our office. There’s tremendous value in having fresh eyes on a problem.

“I’ve heard this repeated often: ‘Speak as if you’re right. Listen as if you’re wrong.’”

We also work with Business Operations to look at the bigger-picture data beyond our own team, and with Engineering to help them improve the product. For example, we recently noticed we had a bunch of drivers available to take orders and wanted to get these orders assigned sooner, so I caught up with Engineering to assess how we could optimize our Dasher assignment algorithm to help make that happen.

David listens to a presentation during the Strategy and Ops all-hand meeting.
Left: Team members gather for an impromptu presentation. Right: As a new city is being set up, team members often get creative with office space and furniture.

How do DoorDash’s values play out on the Strategy and Ops team?

I’ve heard this repeated often: “Speak as if you’re right. Listen as if you’re wrong.” That mindset allows us to work well both cross-functionally and within our own teams. You can’t be afraid to speak up when you have strong beliefs and the data to back them up, but at the same time, it’s essential that we listen to other perspectives and work together. We’re curious too. Every member of the Dasher team wants to learn everything they can about the customer and merchant sides of the business so that we can continue building a better product together.

Can you talk about how your team handles challenges?

Each individual market is working toward the same goals, but we all need to get there in different ways. In LA, for example, we deal with a unique set of traffic and parking challenges, so we’re more focused on those issues here than we are in regions where traffic is light. But the cool thing is, there may come a time when other regions are trying to address similar problems, and they won’t have to reinvent the wheel. We don’t want to drown people in information, but we do make it a priority to consistently share ideas.

What have you learned in your time at DoorDash?

I’ve learned to love being wrong. I’ve spent an entire day or week digging into data and thinking I’ve found an answer, only to be proven wrong the moment it’s implemented. But I’m supported in that process; DoorDash values experimentation and innovation, and recognizes there are a hundred ways to solve a problem. Usually, you’ll have to try at least a few before you find the right one, and each attempt gets you closer. I love that process.

I’ve also learned to look at every conversation from the other side. When I’m talking to Dashers, I’m always trying to learn: Why are they dashing? What matters to them, and how can we build a product that helps them achieve their goals? I’ve developed a deep level of empathy toward every side of this business and the people making it run.

Conversations over lunch at DoorDash’s San Francisco headquarters.

Kyra Huntington, Strategy and Operations Manager

Tell us what you do on the Strategy and Ops team.

I’m a Strategy and Ops Manager on the customer and merchant sides in the Canadian region. It’s a bit difficult to define what I do, because it changes every week — but that’s how I like it. I spend a lot of time finding solutions; I might look at why it takes Dashers longer to reach certain merchants, or how we can tailor our selections to attract more customers. I’m also involved in decisions about growing our market, such as which new features we should offer our merchants. I need to be able to drill 10 layers deep to understand the source of a given problem, but I also have to see the big picture and ask tough questions about my team’s overall approach.

Kyra holds down the fort for the Canadian market.

Who do you work with most closely?

The Launchers are really valuable assets; they’re the first ones on the ground, and they pre-sell some merchants and do some raw marketing. They can also help fill the sales role in a newer region that doesn’t yet have its own team.

We also work closely with Engineering — our CEO has said, “Engineering and Strategy and Ops need to go together like peanut butter and jelly.” Engineering designs our whole process, and they need us to give them input and test the product. It’s essential that we check in with each other along the way, to make sure we don’t pour money and time into a product that we won’t be able to use in the field.

What characteristics help someone excel in your role?

It’s important to take initiative. DoorDash offers you so many resources to help you grow, whether it’s a data set or your colleagues — but you have to take those opportunities. You also need to think creatively and be willing to experiment. Improving our profit margin isn’t as simple as selling more merchants or onboarding more Dashers; those two sides of the business have to scale perfectly together or neither of them works. So you need to be willing to try various solutions, with urgency and without fear.

“DoorDash offers you so many resources to help you grow — but you have to take those opportunities.”

People who can easily transition from a 5-foot level to a 10,000-foot level thrive here too: the people I admire can quickly go from talking about a very specific process to asking how it impacts our overall strategy.

Left: The view of Vancouver’s skyline from Kyra’s office. Right: Cutest Dasher ever?

Tell us about what you were doing before DoorDash, and what brought you here.

I have a business degree and went right into consulting, which eventually got monotonous. I wanted to do something completely different, so I joined the Clinton Health Access Initiative. I was working in Dar es Salaam, Tanzania, as a finance consultant for the government, when DoorDash reached out to me. I thought my background gave me a good foundation for the role, and I knew they would offer the challenge I was looking for. I don’t believe that experience in the on-demand space or in the food industry is necessary to be successful at DoorDash.

What are the opportunities for growth in your role?

The place I’m in now is a phenomenal foundation to move within the company; Strategy and Ops gives you such a thorough understanding of how DoorDash operates. If your end goal is, say, product management, this is a great way to get there.

We’re evaluated every six months, and if you’re a manager but you’re acting at a higher level, you’ll be moved to senior manager at that point. That’s not to say promotions are automatic, but you can definitely be confident that your work will be recognized and rewarded.

Can you speak to any challenges your team is facing, and how you’re addressing them?

Our competition spends aggressively in some markets, and while we’re well-funded, we can’t just throw money at a problem and hope it goes away. We need to address it strategically. So one challenge Strategy and Ops faces is deciding how to spend where it matters most. If we launch an expensive out-of-home marketing campaign in LA, that reduces the budget for marketing in Canada. That’s a natural part of our business, so it’s important to communicate and make sure everyone plans for those events.

“Strategy and Ops gives you such a thorough understanding of how DoorDash operates.”

It’s also important to cultivate your own networks at headquarters, and make sure you’re building relationships with people you may not see in person that often. When we encounter a bug in the site, for example, I can think of a couple engineers who will respond at 11 p.m. on a Friday night if I need them. That’s invaluable.

What have you learned in your time at DoorDash?

I’ve learned to push back a little bit. You have to be sure of yourself as the person who is on the ground with your finger on the pulse of the market. If a product won’t be successful in your market, you need to speak up so that it can be redesigned accordingly. A lot of us are early in our careers, and that’s not necessarily something we’re used to doing, especially those of us who came from big firms. But here, it’s welcomed.

I’ve also learned a lot about tech. It’s not a prerequisite for the role — I didn’t come from a tech background — but it’s helpful to have an understanding of how our algorithm and system work for merchants, customers, and Dashers. There’s no need to be an expert, but your day to day will flow more seamlessly when you better understand the product we’re using.

What’s coming up that you’re excited about?

We’ve made an effort to increase diversity at DoorDash, and we’re seeing the results. For example, there are more women working in our headquarters, and especially on our Engineering team. I’m really excited to see that growth, and it’s been amazing to add such diverse viewpoints to the mix.

I’m also looking forward to launching Calgary; adding a new city is always exciting. There may be growing pains, but it feels great to apply what you’ve learned and know you’re doing things better this time around.

Interested in joining the team?

Check out open roles or email Katie Frank at katief@doordash.com.

Big ideas, tiny tree.

Strategy & Ops Has Its Finger on the Pulse of DoorDash’s Three-Sided Marketplace was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

Next up in Canada: Calgary

$
0
0

Nearly two years ago, DoorDash made its Canadian debut in Toronto, and we expanded to Vancouver shortly thereafter. Since then, we’ve been eager to extend our international footprint further and today, we’re excited to announce we’ll be expanding to Calgary.

Our friends in Vancouver and Toronto have loved the convenience of fast and fresh delivery, and now we want to share the huge range of cuisines available on our platform with Calgarians. On-demand delivery is now available across numerous Calgary neighborhoods from Silver Springs to Deer Ridge, and from Aspen Woods to Inglewood.

Choose from hundreds of Calgary’s finest restaurants, including local gems like Holy Grill, Kona Poke, Burger 320, Ikemen Ramen Bar, Pure Contemporary Vietnamese, Cibo and many more.

“Creative Restaurants is excited to partner with DoorDash as they bring their innovative service to Calgary. We’re looking forward to offering our loyal customers a new and convenient way to enjoy our restaurants, as well as give new customers an easy and delightful way to try them for the first time. Look for Cibo, Bonterra Trattoria, Posto Pizzeria & Bar, Scopa Neighbourhood Italian and Mill Street Brewpub now available for delivery through DoorDash,” said Megan Sereda, Marketing Director at Creative Restaurants.

To celebrate our third market launch in Canada, we’re offering something sweet! If you’re in Calgary, be sure to order in Fiasco Gelato on Wednesday, June 21st. We’ll be serving up a free pint of their famous gelato! So be ready to order through us to get your free pint from 2–5 pm, while supplies last. Because there’s nothing like a chocolate or raspberry gelato to kick summer off right!

Plus, in celebration of our newest Canadian venture, new DoorDash customers can enjoy $10 off an order of $20 or more with the code “DASHYYC”. Even better — enjoy free delivery on your very first order!


Next up in Canada: Calgary was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

A DoorDash Birthday Giveaway

$
0
0

By Ryan Ochsner, Community Manager

June is an exciting month here at DoorDash — it’s the month that we celebrate our birthday! This year we’re turning 4 and to share the excitement, we’re giving away $400 in DoorDash credits to 5 lucky winners.

Click below to enter for a chance to win, and stay tuned for more exciting birthday news all month long. Winners will be announced between 6/21 and 7/3.


A DoorDash Birthday Giveaway was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

Thanks, Dad.

$
0
0

By Becky Salman, Senior Communications Manager

At DoorDash, we’re proud to partner with family-owned restaurants and we especially love sharing their stories. With Father’s Day around the corner, we’re excited to highlight a very special partner of ours, Manny’s Deli, in Chicago, which is currently operating under its fourth generation father, Dan Raskin.

Manny’s Coffee Shop & Deli opened its doors shortly after World War II. The Russian-Jewish born Raskin brothers started the restaurant as a shoestring operation, with Manny serving as the cook and taking notes from his chef uncle. A traditional Jewish Deli with a twist, Manny’s signatures include “The Chazzer”; corned beef and pastrami piled high on rye with coleslaw and muenster cheese, the “Not So Skinny Reuben” and “My Four Kinder”; corned beef, pastrami, brisket and turkey pastrami. The address changed a few times, and in 1964 Manny’s moved to its current spot on Jefferson Street. This year, the restaurant celebrates 75 years of operation.

We asked Raskin what inspired him most about his father. “His commitment, both to our family and to the business.”

“I enjoy taking my father’s knowledge and experience and pairing it with my creative ideas,” said Raskin. “Our family’s experience is unique.”

With two boys of his own, Raskin hopes to carry on the family-owned tradition.

The restaurant has since evolved from picking up customers and dropping off orders in the famous Manny’s van to being one of DoorDash’s first Chicago partners. Manny’s has been able to wow new customers with their the home style, family-run eatery, and with the help of DoorDash spread orders evenly throughout the day (breaking up that lunch rush!).

We are honored to be a part of their multi-generational story. Happy Father’s Day to the Raskin family and to all the fathers and father-figures celebrating today!

If you’re in the Chicago area, order here.


Thanks, Dad. was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

Four years in and just getting started

$
0
0

By Tony Xu, CEO and Co-Founder

Four years ago today we officially launched DoorDash. As we have in the past, we wanted to reflect on the past few years and where we’re headed in the future.

It probably goes without saying that the DoorDash leading up to June 2013 was very different from the DoorDash of today. Our original name was Palo Alto Delivery. The only Dashers were the co-founders. We didn’t have much in the ways of a logistics operation, so we relied on Google Voice, the “Find my Friends” app, and our cars to fulfill orders. Our office was Stanford student housing. Our marketing was fliers on dorm bulletin boards.

Four years later and DoorDash has touched the lives of millions of families, whether by offering convenience during a busy day, providing flexible work, or bringing new customers to their business. Today, people in more than 500 cities can order deliveries from more than 59,000 restaurants listed on DoorDash. More than 100,000 Dashers across the US and Canada fulfill millions of deliveries per month and our full-time headcount has grown to 400 people.

Over the past few years DoorDash has also grown to become the industry standard in on-demand delivery, with dozens of the biggest restaurants in the US choosing DoorDash as their delivery partner of choice. Wendy’s. Taco Bell. Dunkin’ Donuts. Buffalo Wild Wings. Jack in the Box, The Cheesecake Factory. Carl’s Jr. Red Robin. Household names from near and far now call the DoorDash app their home for delivery. And while we’ve delivered in large cities like Los Angeles, New York, and San Francisco for years, we’ve recently expanded into smaller metro areas as well, bringing on cities around Milwaukee, Cincinnati, the Inland Empire, and Boulder, in the past few months alone.

But what’s even more exciting to us is not how much we’ve accomplished; it’s what we have left to do. As we look to the years ahead, we’re working to further our goal of transforming local commerce by offering a wider range of delivery options, by innovating in the tools for last-mile delivery, and by building out our platform to serve an even broader set of use cases.

Today, DoorDash has become the world’s largest food court. But for us, food is only the first piece of the puzzle. With delivery from partners like BevMo and 7-Eleven we’ve already taken our first steps toward expanding DoorDash to deliver from additional categories. In the future we’ll be partnering with merchants large and small to enable online ordering with delivery in under an hour rather than two days, while supporting the local businesses in your neighborhood.

Today, Dashers on the DoorDash platform use their cars, bikes, or scooters to complete deliveries. While those work for the majority of use cases, we’re pushing the envelope to develop new and innovative ways to get your orders to you as quickly, easily, and efficiently as possible. That includes testing new technologies like robots, drones and autonomous vehicles. It also means helping superhero Dashers develop bionic powers, like arming them with electric bikes for their deliveries. And when restaurants are too far away to deliver from, we’re going to explore ways to bring those restaurants physically closer to customers.

Today, the most common way customers use DoorDash is through the app or website, placing orders for family dinners or an office snack. In the coming months we’ll announce updates to DoorDash Drive to more seamlessly integrate with restaurant operations so they can offer more of their menu to more customers. We’ll also be rolling out new products for large restaurant chains and offering new ways to place big catering orders for offices or parties.

Building the last mile for commerce has always been about solving trade-offs. You can either deliver things faster or you can offer a larger selection. You can either grow quickly or you can build a company with compassion. At DoorDash we don’t think about “either/or” — we believe in “and.” Over the past four years we’ve brought together the best selection of restaurants and offered an incredible service that customers love. As we celebrate our birthday, we will build on that strong foundation and innovate on all three sides of the marketplace, so that in the years to come we will be the best platform for merchants, Dashers and customers.

And finally, I want to say a big thank you to the DoorDash team. Watching everyone grow and stretch to become the best version of themselves is inspiring. The tenacity, authenticity, and culture of excellence we stand for and uphold is what has turned a dorm room project into a movement that is bigger than all of us.


Four years in and just getting started was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.


Integrating GitHub with Jenkins for Continuous Integration and Deployment

$
0
0

By Jonathan Block, Software Engineer

When an engineer at DoorDash opens a GitHub pull request, our goal is to quickly and automatically provide information about code health. GitHub’s status API compliments GitHub webhooks, which allow you to trigger custom routines as events fire in your GitHub account.

When developers push to our largest repo, they see something like this at the bottom of their pull request page:

We initially used a third party CI hosting company to implement our checks. This worked well when the amount of tasks we wanted to trigger was relatively low. However, as the number of checks grew, developers were waiting longer and longer for their CI results. In early 2017, we were waiting more than 20 minutes for an average pull request to complete all checks, despite our use of parallelization features.

Instead of using third parties, we used Jenkins on AWS to build a CI/CD system integrated with GitHub. Our custom solution produces test results within 5 minutes and we’ve also gained an ability to deploy our code continuously — features we will integrate into all new DoorDash microservices.

Jenkins Overview

Jenkins is an open source CI server that’s been around almost as long as WordPress. It’s used by big companies like Netflix and small two person startups alike.

Jenkins has a handful of core concepts:

  • Job — A unit of work such as linting, running a test, or doing an owners check.
  • Pipeline — A sequencing system where one action occurs typically if and only if the previous action successfully took place. Options for parallelizing your work are also available.
  • Queue — Jenkins automatically maintains a queue of jobs that should happen once sufficient capacity is available.
  • Plugin — Like Wordpress, Jenkins has many plugins you can install to supplement the default features.
  • Master/Slave — A Jenkins “master” server powers the website and coordinates the work performed in your Jenkins installation. It communicates to “slave” machines responsible for actually performing your work. This means you can scale up/down the number of Jenkins workers you are running in your cluster to control capacity.

Integrating GitHub and Jenkins

To make our GitHub integration work, we created Python scripts that receive 100% of the webhooks from our GitHub account. (There’s an option in the GitHub account settings for where to send webhooks, no matter which specific repository generated the event.) Our Python scripts examine each webhook and conditionally start jobs in Jenkins via the Jenkins API. We refer to this component as our DoorDash GitHub “callback gateway.”

Only certain GitHub events (such as “push”) on a specific list of GitHub repositories (such as our main/monolith repo) actually trigger jobs in Jenkins. For example, when a commit is pushed to our main monolith repository, we immediately begin running tests in Jenkins.

I should note that by default, Jenkins has an ability to poll GitHub repositories and start work when commits are detected to certain branches. Our callback gateway approach allows us to more precisely trigger custom logic against each event rather than polling every 60 seconds. More details on our custom logic in the “Callback Gateway Custom Logic” section below.

Jenkins Pipelines

Rather than starting a handful of Jenkins jobs individually from the callback gateway, the callback gateway instead starts a single Jenkins “Pipeline.

The Jenkins Pipeline for our feature branches has two steps:

  1. Build Docker images.
  2. Kick off many tests, linters, and checks all at the same time which use the Docker images produced in Step 1.

As each test or linter job runs, the first thing it does is send a curl request back to GitHub to notify the developer that the job has started. We emit the local time with a message like, “Javascript Linter started at 9:08am.” This makes it easy to understand how long things have been running while a developer waits.

At the conclusion of a job, we send another curl request to GitHub to update the status check with the results of the job, with a message like, “Linting completed after 30 seconds,” and a GitHub status flag that makes the label either green or red.

Continuous Deployment

When someone pushes code to a feature branch, we trigger a pipeline oriented to testing the code on the branch. However, when someone pushes to the master line, we are interested in starting a pipeline oriented to ultimately deploying the code to production.

DoorDash runs two Jenkins pools: a “general” pool and a “deployment” pool. The general pool runs our tests, docker builds, linters, etc. The deployment pool is reserved for deploying code. The theory is if we need to push an emergency hotfix, it should not be delayed by queueing in the general pool.

When we commit to the “master” line of our GitHub repo, the Deployment Jenkins server notices that the master line received the commit. It will automatically execute instructions found in the Jenkinsfile, located in the master line of the project root. This file uses Jenkins’ pipeline syntax to perform a sequence of events roughly covering these steps:

  1. Build Docker images
  2. Run tests
  3. Build front end artifacts which are uploaded to S3
  4. Confirm with the Pipeline UI someone’s intent to deploy to canary and enable it
  5. Deploy to the canary server
  6. Confirm with the Pipeline UI someone’s intent to disable the canary server
  7. Disable the canary server
  8. Confirm with the Pipeline UI someone’s intent to perform the full deploy
  9. Full production deploy

Jenkinsfile gives you the flexibility to implement a sequence of events that you think is a good idea. For example, you can see that we are gating the deploy sequence at certain points and requiring manual approval before we continue to subsequent steps. You could also easily implement a pipeline which only continues if certain things are true. For example, instead of requiring programmer approval, you might automatically deploy to canary and then automatically check that there is no increase in error levels, and then automatically proceed to deploy to production, etc.

Jenkins has options to depict your pipeline sequences, allowing you to more easily understand what’s going on. The following is an example pipeline I’m currently working on. It is rendered with the Jenkins “Blue Ocean” plugin:

Below is yet another example of how a different, simpler deploy pipeline looks like at DoorDash once it completed:

Callback Gateway Custom Logic

Since our callback gateway is listening to all GitHub events, we have an ability to implement custom features into our GitHub account. For example, sometimes we see a unit test flap and we want to have the tests run again. We have an ability to “fire a blank commit” at the pull request. To do it, you comment the :gun: emoji like this:

it will appear as a normal comment as you would expect in the pull request…

however, after a few seconds, you’ll see the blank commit appear into the branch linage…

as a result of the new commit, all of the test jobs implicitly restart:

Jenkins Setup

The easiest way to get started with Jenkins is to run a Jenkins master using Docker. Just type:

docker run -p 8080:8080 jenkins

In just one command, you have a locally running Jenkins master on your computer.

Jenkins doesn’t use a database like MySQL in order to function. Instead, it stores everything in files under /var/jenkins_home. Therefore, you should set a Docker bind mount on the jenkins_home directory. For example:

docker run -v /your/home:/var/jenkins_home -p 8080:8080 jenkins

Additionally, if you host Jenkins in AWS, I recommend that you mount an EBS volume at that host location and set up recurring snapshots of the volume.

Slave Configuration

The Jenkins master server only exists to run the Jenkins core and its website interface. You run as many slaves as you want, though in my experience, you usually do not want to exceed more than 200 slaves per master server.

Jenkins has a concept of “executor” which describes the number of jobs a node will ever run at once. Though you can technically set the number of executors on your master to any number, you should probably set your master to have zero executors and only give executors to your slaves.

Since DoorDash is on AWS, our strategy is to use EC2 reserved instances to run a low baseline number of Jenkins servers that are always running. In the morning, we use EC2 Spot Instances to scale up. If we are outbid, we scale up on demand instances.

Service Discovery

The Jenkins master must have each slave registered in order to be able to dispatch work. When a slave server launches, the slave’s bootstrap script (Amazon’s EC2 “user_data” property) registers a minutely cron job, which upserts the instance’s internal hostname and the current unix timestamp into a t2.micro MySQL RDS database. The master server polls this table each minute for the list of servers that have upserted within the last 2 minutes. Instances failing to upsert are unregistered from the Jenkins master and new ones are idempotently added.

Scaling Jenkins

Each weekday morning, we scale up the number of slave Jenkins servers. Each evening, we initiate a scheduled scale down. If you terminate a Jenkins slave while it’s doing work, the Jenkins jobs it was running will, by default, fail. In order to avoid failing developers’ builds during a scheduled scale-down, we have split all of our slaves into two groups A and B.

At 7:45pm, we mark all slaves in group A offline and then we wait 15 minutes. This allows for a graceful drain down of in-flight jobs because Jenkins will not assign new work to slaves marked as offline. At 8pm, we trigger a scheduled AWS scale-down of group A. At 8:15, we mark all remaining slaves in group A as online. We then repeat this sequenced process for group B, and then finally for our spot instances.

Monitoring Jenkins

We trigger an AWS Lambda function each minute that queries the Jenkins APIs and instruments certain metrics into Wavefront via statsd. The main metric that I watch is what we call “Human wait time” representing the amount of time a real person waited from the moment a pull request was pushed to the moment that all of the CI checks were completed. Wavefront allows us to fire PagerDuty alerts to the infrastructure team if any of the metrics fall to unacceptable levels.

Summary

There are numerous options for setting up CI & CD. Depending on your situation, you may find a 3rd party hosted tools to be perfect for your use case like CircleCI and TravisCI. If you like customizing an open source project and running it yourself, Jenkins might be for you. Still, if you have highly specialized needs or need to customize everything imaginable, you might decide to write something entirely from scratch.

So far, Jenkins has offered us a way to quickly setup CI & CD and scale it using the tools we’re already using like AWS and Terraform.

Amazon has a great white-paper outlining their recommendations and considerations for setting up Jenkins on AWS, found here.

Come back to our blog for more updates on DoorDash’s engineering efforts. If you’d like to help build our our systems which are growing at 250% per year, navigate to our open infrastructure engineering jobs page.


Integrating GitHub with Jenkins for Continuous Integration and Deployment was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

Baskin-Robbins and DoorDash Team Up to Deliver Something to Scream About

$
0
0

By Erin Butler, National Account Manager

DoorDash offers an incredible selection of restaurants where you can order breakfast, lunch, dinner and even alcohol right to your door. And since July is National Ice Cream Month, we’re making things a little sweeter with a new dessert delivery option. Today we are excited to announce our first ever national ice cream partnership with none other than, Baskin-Robbins.

After a successful pilot in Chicago and Los Angeles, we are thrilled to expand the partnership across the U.S. Now, delivery of your favorite Baskin-Robbins ice cream treats is available from more than 600 Baskin-Robbins locations across 22 cities. Whether you’re craving something sweet in Sacramento or Seattle, or dreaming about desserts in Dallas or DC, you can satisfy that sweet tooth with delivery from Baskin-Robbins via DoorDash!

To further celebrate the launch, DoorDash and Baskin-Robbins will be delivering Polar Pizza® Ice Cream Treats to children’s hospitals in select cities across the country on July 14, ahead of National Ice Cream Day. The hospitals are partners of the Joy in Childhood Foundation whose mission is to bring joy to sick and hungry kids, and we’re proud to be joining Baskin-Robbins to support this great cause.

So what are you waiting for? Choose from their wide array of ice cream flavors and order in your most-loved Baskin Robbins treats today.


Baskin-Robbins and DoorDash Team Up to Deliver Something to Scream About was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

Powering Search & Recommendations at DoorDash

$
0
0

By Aamir Manasawala and Mitchell Koch, Software Engineers

Customers across North America come to DoorDash to discover and order from a vast selection of their favorite stores. Our mission is to surface the best stores for our consumers based on their personal preferences. However, the notion of “best stores” for a consumer varies widely based on their diet, taste, budget, and other preferences.

To achieve this mission, we are building search products that provide a personalized discovery and search experience based on a consumer’s past search and order history with DoorDash. This article details our approach for personalization in our search ecosystem, which has provided a significant lift in conversion from search to checkout.

Search and Recommendation Challenges

The three-sided nature of DoorDash platform (involving consumers, dashers and merchants) presents a lot of interesting and unique search challenges in addition to the general search and recommendation related problems. Some challenges include:

  • Sparsity: not every consumer can see every store, making this different from a typical e-commerce recommendations problem
  • Cold-start problem: cases when new stores or consumers enter the system
  • Tradeoff between relevance versus diversity
  • Including accurate driving distance in search selection

Search Overview at DoorDash

We use Elasticsearch to power the consumer search for our website and apps. Elasticsearch is an open source, distributed, Lucene-based inverted index that provides search engine capabilities without reinventing the wheel.

For our search engine there are two primary components:

The first is the indexing module (offline). This component reads the store object from the database (Postgres in our case) and writes it to Elasticsearch for bootstrapping, as well as for partial asynchronous updates on the database store object.

Second is the search module (online). Web and mobile clients call the backend search API with the specified consumer location. A JSON-based Elasticsearch query is constructed at the Django backend to call Elasticsearch. The query is executed inside Elasticsearch to retrieve relevant results, which are deserialized and returned to the client. The Elasticsearch query is primarily designed to achieve two purposes:

  • Selection: Out of all the available stores, only select those that are orderable from the consumer’s address. This is primarily achieved by the geoshape features of Elasticsearch. How we compute a geoshape to get an accurate driving distance for each address and store pair is a discussion for a separate blog post.
  • Ranking or scoring: Out of the selected subset of stores, we need to rank them according to relevance. Before the personalized ranking we ran a number of sorting experiments including ranking by popularity, price, delivery, estimated time of arrival, ratings, and more. The main learning from the experiments was that there was no global best ranking for every user, but rather the notion of “best” varied across each user, which led us to use personalization.

ML Modeling for Recommendations

Now let’s talk about the ML model training and testing for personalization. For including personalization in Elasticsearch, we define a knowledge-based recommender system over consumer / store pairs. For every consumer we are evaluating how good the recommendation is for each specific store based on the consumer’s order history and page views.

To help us out, let’s define some basic terms (note that Medium doesn’t handle equations well, so apologies in advance for the janky formatting):

  • c_i: consumer with unique id i
  • s_j: store with unique id j
  • d(c_i): data profile of consumer c_i
  • d(s_j): data profile of store s_j
  • f^k: kth feature in the ML model
  • f^k_ij: value of kth feature for (c_i, s_j) pair

The data profile of consumer c_i mainly refers to all the data that we need as a signal for the recommendation model. We store and update d(c_i) for each c_i in the database for it to be consumed in the online pipeline.

The data profile of store s_j is stored in Elasticsearch by the indexing pipeline.

f^k is a feature in the machine learning model and f^k_ij is the specific value for the (c_i, s_j) pair. For example, one feature we include is how much overlap there is between the cuisines the consumer c_i had ordered from in the past and the cuisine of the store s_j. We would include similar features based on viewing store pages, price range, etc. For training, we generate f^k_ij for each i, j such that c_i, s_j are visible to each other from the selection criteria described earlier along with a 0/1 flag, which generates the data in the following format:

[0/1 flag, f^0_ij , f^1_ij , f^2_ij , … f^k_ij …] for each i, j such that s_j falls in selectable range of c_i.

Positive examples (marked as 1 in the data model) are the ones where the consumer c_i ordered from that store and the negatives are the ones where, despite the store being exposed to the consumer, the consumer did not order.

We use this data to compute the probability of consumer c_i ordering from s_j given by:

Probability(c_i orders from store s_j) = 1/(1+e^(-1* ( w_k * f^k_ij)) ) where w_k is the weight of kth feature.

We trained the data using the logistic regression model to estimate w_k for our dataset.

Personalization in Elasticsearch

Now let’s discuss how we integrate the personalization piece into the Elasticsearch ecosystem, which serves our app and website in real time. To achieve scoring we have to implement the above mentioned logistic regression scoring function inside Elasticsearch. We accomplished that through the script scoring feature of Elasticsearch, which is used for customized ranking use cases such as ours. This script has access to documents inside Elasticsearch and parameters that can be passed as run time arguments in the Elasticsearch query. The score generated by the script is then used for ranking a script based sorting feature to get the desired ranking.

The following diagram describes the overall architecture depicting offline and online components.

Personalization Search Architecture

Offline components:

  1. The indexing pipeline indexes d(s_j) for all stores in the Elasticsearch index.
  2. ML data pipeline writes d(c_i) for all consumers in the database. The database is updated offline to reflect changes in d(c_i) based on c_i activity.

Online components:

  1. DoorDash clients call the search backend API for c_i
  2. Search module calls database to fetch d(c_i) for c_i which the offline ML data pipeline has populated
  3. Search Module on fetching d(c_i) generates the Elasticsearch query
  4. Search Module hits Elasticsearch with the generated query where d(c_i) is passed as arguments to the script
  5. Elasticsearch ranking script, which is an implementation of the logistic regression scoring function described in the ML modeling section above, is executed as part of the Elasticsearch JVM process. This script is essentially a function of d(c_i) and d(s_j). The script gets d(c_i) as arguments from step 4 and gets d(s_j) as part of the index data, which was stored from offline step a. The script generates the score and Elasticsearch ranks them by script score.
  6. Personalized results are deserialized and returned to the clients

Advantages of this design:

  • Minimal Latency impact: Since search is a latency sensitive product, the personalized version should not contribute to latency. There is only 1 extra database read per search call (which can also be cached). The script ranking function is executed inside Elasticsearch, which is distributed and cache optimized. We have already rolled out the feature to 100% of customers with no impact on Elasticsearch latency.
  • Horizontally scalable: Higher search volume results in more heap usage, which can be addressed by adding more nodes to the Elasticsearch cluster or increasing head size per node.
  • ML model change friendly: The overall architecture works with any ML model. We can experiment with different ML models by implementing the corresponding ranking script and invoking it based on experimentations from backend search modules without changing any other piece.
  • Fault Tolerant: In cases of failure to get d(c_i) in any step we can fall back to the default option and use the baseline non-personalized feed.

Future work

We’ve only scratched the surface with the work we’ve done. Here are some areas that we are working on to make our search engine even better:

  • Machine Learning models: We are testing more sophisticated ML models on top of logistic regression model and experimenting with personalized models for how much variety to include for users.
  • Real time features: We are improving our data pipeline to have real time features and to better incorporate feedback from activity.

If you are passionate about solving challenging problems in this space, we are hiring for the search & relevance team and data infrastructure team. If you are interested in working on other areas at DoorDash check out our careers page. Let us know for any comments or suggestions.


Powering Search & Recommendations at DoorDash was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

The DoorDash Outside Sales Team Builds Partnerships — and Empathy — with Business Owners Across the…

$
0
0

The DoorDash Outside Sales Team Builds Partnerships — and Empathy — with Business Owners Across the Country

(Cross posted from the Job Portraits blog.)

When you’re part of the DoorDash Outside Sales team, you don’t just close deals — you create long-term partnerships. We talked to Chase Gardner (Mid-Market Account Executive), Danny Polanco (Senior Regional Account Executive), Jack Momeyer (Senior Outside Sales Manager), and Cassidy Sanders (Regional Account Executive) about how they adapt to the constant evolution of a fast-growing company, how they keep in touch with colleagues across the U.S. and Canada, and why their roles at DoorDash are different from any job they’ve had before. Interested in joining the team? Get in touch with recruiting manager Ashley Dowling to learn more: adowling@doordash.com.

First, tell us about DoorDash and how the Outside Sales team contributes to the business.

Cassidy: Imagine you’re home in your pajamas, committed to staying in — but you also want your favorite food for dinner. DoorDash brings it to you. That’s the customer side. We’re also connecting merchants with those people that are staying in for the night, to help bring them new business. And for the drivers, who we call Dashers, it’s a chance to make some extra money and work on their own schedule.

Chase: One of my favorite things about the Outside Sales team is that we don’t actually sell anything. Instead, we’re creating partnerships. Our merchants gain exposure on our platform, and we help them build their brand and business. Then we take a commission on each order we generate for our restaurants. We also give our partners operational support; they get a customized merchant portal, and in some cases we provide tablets, integrate with their email system, or even help them implement fax-based ordering. The goal is to get an organized, seamless system in place, which helps both DoorDash and our merchants scale up.

Can you talk about your responsibilities, and what your day to day looks like?

Jack: Broadly, I’m responsible for getting obstacles out of my team’s way, so they can do their jobs as well as possible. But each day is different. Today, for instance, Cassidy and I gave a presentation to a local operations team on negotiation strategy. Then I had a quick sync with a manager about how to help a new team member be successful. I just wrapped up an interview with a candidate, and later I’ll put a call in to a former partner we’re hoping to bring back on the platform.

Cassidy: That daily variety is common for us all, I think. My primary goal every day is to speak directly with decision-makers and build partnerships from there. For partnerships we’ve already closed, we’re promoting and marketing our new partners. And then, of course, we’re researching leads and making new contacts. We’re free to set our own priorities; DoorDash gives us total flexibility in terms of how we schedule our day.

My favorite part of the job is listening to our partners’ stories. One restaurant owner told me revenue from DoorDash was helping pay his medical bills. Another merchant previously sold cars but always wanted to run a restaurant; now, with our help, he’s be able to open a second location. Being part of those successes — a small part of someone’s dream — is amazing.

“With our help, one of our merchants has been able to open a second location.” — Cassidy

Danny: Chase’s and my responsibilities largely align with Cassidy’s, in that we’re connecting with those decision-makers and spending a lot of time with our leads. She has a much larger lead list, though; many of the merchants on my list have multiple locations so it’s more of a strategic sale.

As far as finding that main point of contact, there are lots of ways to approach that; we can jump in our cars if we want, to visit the merchants in person. Or we can cold-call or create an email campaign. Once we get a meeting with the right person, that’s where we need to shine in terms of our knowledge and passion. We want to educate them about DoorDash, and to help them see us as part of the larger trend toward third-party delivery. That conversation is the start of our relationship; it’s our chance to demonstrate that we want to help them grow.

Left: Cassidy Sanders rocks all the DoorDash swag. Right and below: Team members discuss a new product rollout.
DoorDash’s San Francisco office, at Mission and 2nd St., is in the fastest-growing nook of the city.

How is this job different from roles you’ve had before?

Chase: I have far more autonomy here than I’ve had anywhere else, which I think shows the trust our leaders have in us. People here are also more self-motivated and driven than anywhere else I’ve been. No one is telling us to call 100 leads per day, but we are passionate about the business and because we take pride in our work.

I’d also say that DoorDash values us as people, not just earners. They give us a gym stipend; they provide lunch and dinner. They recognize that having happy, healthy, well-fed team members is important to everyone’s success.

“DoorDash values us as people, not just earners.” –Chase

Danny: I come from a different background than most; this is my first sales job. I was kind of intimidated entering this world, but this is such a supportive environment. Everyone is more than willing to offer advice, or to pick you up when you need it. And the whole company — from Engineeringto management to Sales leads and product managers — works hard to make the service you’re selling the best it can be. That’s extra motivation to make deals, because you know you’re not just doing it for yourself. We’re all working toward the same goal.

What’s the number one pushback you hear from potential partners?

Danny: No matter what you’re selling, the decision-maker is always going to ask for a lower price. But the best salespeople are prepared to face that; we’re equipped with the product knowledge we need to tailor our conversations and offerings in a way that highlights the value, not just the cost. It does take persistence; you have to build trust.

Cassidy: Absolutely — trust is always the most important factor in closing a deal. It helps that what we’re offering is mutually beneficial. We try to communicate that if they sign with us, we’re committed. It might take several conversations to gain a given prospect’s trust; other times, they’re ready to go after one meeting. The variety keeps us on our toes.

“The whole company works hard to make the service you’re selling the best it can be.” –Danny

Chase: I try to frame it to help merchants understand that we’re offering them an otherwise-inaccessible revenue stream. We get other questions, too, like about food quality. Decision-makers want to know what their product will look like by the time it gets to their customers. So we come armed with examples of past success as well as data on the speed of our deliveries.

What else is challenging about Outside Sales?

Chase: We sometimes have to split our focus between driving leads toward a sale and making sure our existing partners are happy and getting what they need. That can be a challenge, but those long-term relationships with merchants also lead to some really positive experiences and good feedback. And it’s laying a solid foundation for our Account Management team.

Jack: Learning how to build trust with people from very different cultures is also a fun challenge. I actually went to the United Nations International School for high school, so I had friends from Armenia, Turkey, Senegal, and Germany. I feel like that experience has helped me in this role.

Cassidy: Yeah, I like figuring out how to tailor a message that can resonate with anyone. That can mean choosing words carefully to build trust, or meeting in person where you can lean more on body language.

Left: Chase Gardner enjoys a sunset in the countryside. Right: Chase and his team members keep warm by the fire.
Calling on potential partners often takes Chase into downtown Dallas.
The Dallas office decor: Scrappy yet functional.

Can you talk more about the autonomy in your roles? What are the pros and cons?

Jack: The plus side is setting your own schedule, deciding for yourself where you need to be and when. On the other hand, a lot of us in Sales are social creatures, and we hear “no” a lot. That’s where supporting each other comes in; your teammates help you take a step back, remember what’s great about what we are offering to merchants, and go back out there with confidence.

“Your teammates help you take a step back, remember what’s great about what we are offering, and go back out there with confidence.” –Jack

For people like Cassidy and Chase, who are based in offices with other Sales colleagues, that sense of teamwork is more immediate. We’re now in more than 500 cities in the U.S. alone, so some people are taking on a territory by themselves. For those sales people, we try to go the extra mile to maintain their connection to the sales team. We have different Slack channels where we celebrate wins; everybody chimes in with kudos there. Our mentorship program is a big help too. We match new hires with more experienced team members, to make sure they don’t feel like they’re alone even if they’re the only one selling in their territory.

How does compensation work within Sales?

Jack: Our sales reps receive a percentage commission based on the revenue a merchant generates. Since all our cities vary in size, we standardize the revenue across markets to make sure pay is balanced. And since we’re a fast-growing company, the specifics of our commission structure for the Sales team do change as we evolve. But our priority is always giving control of the sale to our salespeople, so they can determine their own destinies.

Danny Polanco (left) at the DoorDash offices overlooking downtown L.A. (right).
There definitely isn’t a granola bar in this bag.
Left: Team members Andrew Susanto and Joseph Oh. Right: tea time.

What are the opportunities for growth like on in Outside Sales?

Jack: There are lots of paths. You can build up to larger accounts, like Chase; he’s gone from selling local to selling mid-market, and now he’s focused on accounts with a regional and even cross-regional reach. Or you might go the management route. We’re all getting experience as mentors, and you can move from that to a team lead role, and eventually be a full-time sales manager.

“We want someone’s role to reflect what they care about most.” –Jack

Those are two traditional options, but we also have folks moving between departments, or into a role that didn’t exist before. The first sales rep DoorDash hired, Brian Sommers, is actually an example of that. He started selling locally, and as he helped build partnerships as well as the Sales team, he discovered that his passion was in training and mentorship. Now he’s a full-time sales trainer. We encourage that kind of movement; we want someone’s role to reflect what they care about most.

How do you measure success?

Jack: Beyond the numbers, we look for people willing to take on more responsibility. Chase, Cassidy, and Danny are all great examples — they’re helping out with recruiting, which is one of our biggest needs right now. Cassidy is also working with Brian in sales training. Essentially, we’re looking for people to raise their hand. That shows they’re confident in their role, they know they’re doing it well, and are ready for more. That indicates success to me.

Left: Jack Momeyer leads the Outside Sales team, despite his questionable beverage choices. Right: Cassidy and Jack prep for an afternoon meeting.
In the alley next to the San Francisco office, cofounders Stanley and Tony celebrate DoorDash’s 4th anniversary with a foot race.
Left: Jack and team member Christina Zhang talk shop. Right: After the race, Stanley, Jack, AJ Jain, and Andy Casey (left to right) celebrate with a toast.

What have you learned in your role?

Danny: We’re a data-driven company, and that’s been a valuable adjustment for me. If you’re dedicated to understanding it, data is an invaluable asset to boost your pitch beyond the typical sales psychology. Before DoorDash, I might have had the natural confidence required for a conversation with a merchant, but here, I’ve learned to be much more analytical. It’s transformed my approach.

“If you’re dedicated to understanding it, data is an invaluable asset to boost your pitch.” –Danny

Cassidy: I’ve improved as a salesperson in several ways since joining DoorDash. I feel like I’ve developed more empathy from interacting with restaurant owners and employees. After seeing them grind so hard every day to run a good business, I will never be rude to a waiter! Another skill I’ve learned is adaptability. First because my job is different from one day to the next, and second, because DoorDash itself is constantly growing and changing.

Jack: Being inspired by and internalizing DoorDash’s core values has taught me a lot. One of our values is to assume good intentions. We won’t always agree, but we debate from a collaborative, cooperative place. I’ve learned that you can’t move forward without listening to the other side, and finding a solution that makes sense to everyone.

Do you feel you’ve been able to have an impact on DoorDash as a company?

Danny: For sure. I take a lot of pride in my role helping make the office a place people want to come to work everyday. I’ve been around since the Orange County office opened in March 2015, and I feel a sense of responsibility in maintaining its positive energy and upbeat work ethic.

Cassidy: Because I’m out in the field, I appreciate the way I can help be an extra set of eyes and ears for the company. I might see a new restaurant pop up, or a line out the door at a merchant we’re debating whether to pitch. I can also bring information back to our Product and Engineering teams, which helps them plan new features.

Chase: Yeah, and the cool thing is that we’re able to see our contributions and impact firsthand. If I exceed my goals, that has a tangible result — our market grows because of that work. It’s an incredible feeling to know that a merchant I brought on is now generating revenue for the company, not to mention themselves.

Interested in joining DoorDash’s Outside Sales team?

Get in touch with recruiting manager Ashley Dowling to learn more: adowling@doordash.com.

Your moment of Zen: Stanley (left, who rarely exercises) seals victory against Tony (right, who is an avid runner). Oh, the injustice!

The DoorDash Outside Sales Team Builds Partnerships — and Empathy — with Business Owners Across the… was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

Bringing you Pizza, Pizookie, and more with BJ’s Restaurant Delivery

$
0
0

By Erin Butler, National Account Manager

Pizza has long been synonymous with delivery, and today, DoorDash’s pizza delivery options just got a little bit tastier.

Today we are announcing our partnership with BJ’s Restaurants, Inc. The initial launch will cover 61 BJ’s Restaurant & Brewhouse® restaurants across Northern California, Southern California, Las Vegas, Dallas/ Ft. Worth, Houston, San Antonio, Denver, Indianapolis, Washington D.C., Miami, Columbus, and Seattle.

But BJ’s is much more than pizza. Their wide selection of high quality and innovative food including salads, ribs, burgers, and the signature Pizookie® dessert means BJ’s on DoorDash has something for everyone.

Check out doordash.com/bjs to find the store nearest you, and get your BJ’s meal delivered today.


Bringing you Pizza, Pizookie, and more with BJ’s Restaurant Delivery was originally published in The DoorDash Dispatch on Medium, where people are continuing the conversation by highlighting and responding to this story.

Viewing all 711 articles
Browse latest View live