Os bastidores do seu pedido no iFood

Thiago Capeleiro
iFood Tech
Published in
8 min readFeb 21, 2020

O percurso de um pedido da nossa porta de entrada (digital) até a porta da sua casa.

Bateu aquela fome, então você resolveu abrir o app do iFood para pedir algo. Só nessa abertura do aplicativo, a gente já teve que colocar nosso time de engenharia para trabalhar.

Primeiro checamos as coisas básicas: seu usuário/login, seu último endereço usado (que fica lá no topo) e sua posição GPS atual — pois se endereço e GPS são diferentes, a gente vai sugerir que você dê uma olhadinha no endereço.

Depois, também checamos todas as listas e categorias que estão ativas no iFood naquele dado instante, como mercados, listas de restaurantes com entrega grátis, listas promocionais, lista de agendamento, lista de Super-Restaurantes (os melhores do iFood), entre outras.

Várias destas listas estão ativas somente para determinadas cidades, momentos do dia ou grupo de clientes. Sim, eventualmente você pode estar em um teste A/B, seja em listas promocionais ou em alguma funcionalidade específica que a gente esteja testando.

Estes experimentos ajudam muito a andar rápido e entender se o que está sendo testado de fato tem o valor que estávamos imaginando. Além disso, também ajudar a entender se deveríamos escalar a solução testada para o restante da base de clientes.

Algoritmo em ação

Seguindo em frente, um algoritmo de machine learning é responsável por entender os comportamentos e padrões dos hábitos alimentares dos grupos de pessoas que pedem no iFood e, a partir daí, sugerir os restaurantes que fazem mais sentido pra você, colocando-os na sua home.

O modelo leva em consideração uma série de variáveis e as traduz relacionando os hábitos alimentares dos clientes e às ofertas dos restaurantes que têm mais fit com esse seu momento de abertura do app.

Com algum grau de certeza, a gente poderia dizer quem está bastante predisposto a pedir pizza na próxima abertura do app em determinado horário, dado a quantidade de dados que temos. Irado, né?

Para montar a lista de restaurantes da home, nós também checamos coisas básicas dos restaurantes, como o horário de funcionamento e se o restaurante está online na plataforma. Afinal, não faz sentido sugerir um restaurante que está fechado!

Essa lista também já mostra a distância entre você e o restaurante, o tempo de entrega previsto e a taxa de entrega. Mais a frente eu vou explorar isso um pouco mais.

Escolhi meu restaurante. O que acontece agora?

Quando escolhe um restaurante, você entra na experiência do cardápio. Nela, a gente mostra para você todos os pratos e categorias ativos naquele restaurante, para aquele dado dia e horário de funcionamento.

O restaurante é capaz de ofertar cardápios distintos por dia e horário, e isso fica a critério dele.

No cardápio você pode montar todo o seu pedido selecionando os pratos/itens, adicionando complementos e, eventualmente, colocando uma observação para o restaurante sobre determinado item (tipo pedir para tirar aliche da pizza de aliche 😅).

Tudo certo com a escolha e você vai agora para o check-out — que no iFood chamamos de sacola.

A sacola do aplicativo para o consumidor final

A experiência da sacola, assim como a de qualquer fechamento de carrinho de compras em e-commerce, é super-crítica. O time que cuida disso por aqui não brinca em serviço. Tudo é pensado para garantir toda a informação necessária para não travar o seu fechamento de pedido.

Coisas complexas também acontecem neste passo. Verificamos e exibimos os meios de pagamento disponíveis, os cupons disponibilizados para você (se a gente te mandou a notificação a gente precisa ter o cupom ali), se você tem saldo disponível na Carteira do iFood e sua opção para pagar com ela, e por aí vai.

Não pretendo entrar em muitos detalhes nas questões de pagamentos pois daria um post só disso, mas o importante é: fechei meu pedido. Já tá chegando?

O papel do nosso parceiro, o restaurante

Quando seu pedido é efetuado, nós repassamos todas as informações para o restaurante. Inclusive a sua observação para tirar o aliche da pizza.

Nesse ponto, o restaurante pode ou não aceitar o seu pedido. A gente faz isso porque, às vezes, o restaurante pode estar super ocupado, já produzindo mais pratos do que aguenta expedir e sem a possibilidade de atender mais um.

Muitos dos restaurantes também têm espaço físico/salão e a demanda do iFood é apenas parte da demanda total que estão recebendo.

No geral, o restaurante tem por volta de 8 minutos para confirmar se pode produzir o seu pedido. Caso ele não faça isso, cancelamos automaticamente para que você, cliente, não fique com a falsa expectativa de que as coisas estão dando certo.

A tela de confirmação de pedido no Gestor de Pedidos (mobile)

Quando o restaurante confirma o seu pedido, a gente te avisa que está tudo certo através de uma push notification que diz que "o pedido já está sendo preparado".

Daqui pra frente, vou considerar que este hipotético restaurante é do tipo Entrega iFood, em que a gente opera toda a logística de entrega dos pedidos dele, sendo que ele pode focar exclusivamente em produzir o seu prato com todo carinho.

É importante dizer que essa parte seguinte é a que eu mais gosto, pois é onde os squads em que eu trabalho como Product Manager atuam!

Onde começa o trabalho da logística iFood

Antes de você abrir o app! De verdade.

Antes mesmo que você abra o iFood, o nosso time de live-monitoring está acompanhando cada uma das cidades em que temos Entrega iFood. Verificamos se temos um número suficiente de entregadores para a quantidade de pedidos, se determinada região tem alguma espécie de desbalanço e acompanhamos os pedidos com atraso — quando o seu pedido atrasa, a gente abre uma ocorrência automática internamente e, inclusive, passamos a priorizar sua entrega.

Antes de você abrir o app, um outro modelo de machine learning trabalha para construir as predições de tempo de entrega para um determinado restaurante, num determinado raio de entrega e num determinado dia e horário da semana. O modelo também prevê o “tempo de cozinha” dos pedidos, uma informação crucial para a tomada de decisão sobre quando mandaremos o(a) entregador(a) ao restaurante.

Salvo em ocasiões em que temos uma estratégia mais contundente, focada em marketing e cupons (consequentemente com uma demanda maior do que o normal), é bastante possível prever o tempo de entrega dos restaurantes Entrega iFood com boa acurácia, de modo que os horários prometidos sejam cumpridos. Mas "bastante possível" não quer dizer que o trabalho seja trivial.

A logística é bastante complexa, pois os pedidos "nascem" o tempo todo, espalhados pela cidade, e os entregadores também estão se locomovendo o tempo todo, ora com um pedido carregado e indo para a entrega, ora aguardando a gente dar um novo pedido para ele.

Esse modelo entende o padrão de comportamento desses tempos, levando em consideração outro set de variáveis (bem diferente do primeiro modelo que descrevi no texto) e, a partir destes inputs que aprendeu e da situação do momento, é capaz de predizer os tempos de entrega e de cozinha. É desta forma que estes tempos variam ao longo dos horários e dos dias — tudo depende dos dados.

Enxergar e controlar tudo isso são imensos desafios de escala e complexidade.

E a gente precisa falar um pouco sobre como tomamos as decisões nesse contexto de otimização. Buscamos encontrar o melhor entregador(a) para um dado pedido, de modo que ele(a) chegue no horário correto no restaurante para pegar o pedido e depois levar até sua casa.

Como a magia acontece

Imagine-se no desafio de roteirizar um entregador(a) para entregar as pizzas de uma determinada pizzaria, em uma sequência que faça sentido, em uma rota que otimize o número de paradas e quilometragem, que seja eficiente e que respeite os tempos de entrega que fizemos para o cliente na hora que coletamos o pedido, num fluxo contínuo de “nascimento” de novos pedidos. Complexo, uma certa loucurinha até, mas possível, não é?

Imagine-se agora tentando fazer isso com 100 entregadores(as) e não mais com 1, criando rotas que façam sentido, atendendo os pedidos no prazo, garantindo um bom SLA de entrega. Impossível sem tecnologia, certo?

Essas decisões no iFood são tomadas minuto a minuto, em uma escala 1.000 vezes maior (literalmente) que o último exemplo.

Recebemos um fluxo de dados constantes de todos os entregadores conectados no app iFood para Entregadores com suas posições e estado de conectividade, nível de bateria e outras informações.

Precisamos conhecer toda a frota de entregadores(as), suas posições e quem pode ou não pegar um pedido neste momento. Se ele(a) estiver com a bateria muito baixa, por exemplo, a gente pode concluir que ele(a) não vai conseguir entregar o pedido até o fim, pois o celular pode "morrer" no meio do caminho. Algumas coisas meio óbvias, mas que, se não são pensadas, geram um problemão.

Também precisamos conhecer toda a coletânea de pedidos disponíveis que prometemos entregar, sendo que as promessas de entrega são um dos fatores mais importantes para toda configuração temporal da rota que se formará em instantes.

Dado estes dois domínios de informação, os pedidos e os entregadores, o algoritmo de otimização começa a testar diversas hipóteses de criação de rotas entre eles, de acordo com o cenário que esteja enxergando naquele instante. O objetivo é minimizar qualquer atraso e criar rotas mais curtas, e assim conseguimos ser mais eficientes e livram o entregador mais rapidamente para uma próxima entrega.

Há uma série de restrições que também precisam ser atendidas, como a de não escolher um(a) entregador(a) cuja a distância até o restaurante seja tão grande a ponto de tornar infactível a entrega on-time do pedido.

Também criamos algumas rotas de pedidos agrupados, como quando na bag do entregador há 5 pizzas a serem entregues em locais distintos. Mas a gente faz isso de uma forma mais esperta e escalável, respeitando todas as configurações temporais dos pedidos que estarão na bag. Só faremos isso se nenhum dos pedidos atrasar frente ao que prometemos para você, consumidor.

Ah! E tudo isso em escala global, pois já operamos no México e Colômbia também. Ao mesmo tempo em que você pedia seu hambúrguer no sábado à noite, alguém no México pedia tacos e quesadillas. Todos estes sistemas e pessoas precisam operar em escala global com a mesma garantia de nível de serviço.

Gente e propósito

Dava pra entrar em bem mais detalhes, mas isso já virou um textão e, quem sabe, não fica pra uma próxima.

Tudo, exatamente tudo que eu mencionei aqui de forma bastante simplificada, só é possível por causa de gente. Gente e propósito é o que faz o iFood se mover tão rápido quanto uma start-up, e é por isso que sou apaixonado por fazer o que faço onde faço.

Hoje são mais de 40 squads de produto e tecnologia olhando as mais distintas facetas desse grande negócio, lidando com a profundidade e complexidade de cada contexto, organizados em 3 tribos distintas, Clientes, Restaurantes e Logística, e cortados por chapters de Design, Machine Learning, Back-end, Front-end, Data e Produto. Fazer isso tudo funcionar de forma integrada é maravilhoso!

Estamos contratando em várias frentes, inclusive no meu próprio time de produto e de engenharia, que cuida da eficiência logística e todo este contexto de otimização da entrega do seu pedido.

Se de alguma forma este desafio de escala e complexidade te fariam levantar da cama com tesão, talvez exista uma vaga pra você. É só entrar em: https://boards.greenhouse.io/ifood

Quer receber conteúdos exclusivos criados pelos nossos times de tecnologia? Inscreva-se.

--

--

Thiago Capeleiro
iFood Tech

Group Product Manager @ iFood. Helping to improve logistics efficiency with technology and drive business towards a new and better place.