Italy Turns to Online Groceries: Going Viral with COVID-19
Blog post created on 2020-04-13
Back in 2018 I got involved with a new venture called Spesati taking on all technical responsibilities. The idea was simple: online only grocery shopping. Little did I know this would have been an essential service during a pandemic only two years later.
The project started in Sardinia, an Italian island in the middle of the Mediterranean, where the concept is still novel. The plan was to model something akin to Ocado, the UK’s largest online only grocery delivery service. By not having any physical presence, we could cut costs. However, without funding, we could not build our own warehouses, so we had to seek a partnership agreement with a local food distributor. As a benefit we did not have to manage stock although integrating with legacy stock systems was (and still is) not easy.
The model is different from InstaCart, a similar concept in the US, or the Italian equivalent Supermecato24, as they leverage existing grocery chains. Both provide a marketplace for customers to place their grocery orders and connect them to folk seeking to fulfill their demands. InstaCart, in that sense, has many similarities to Uber.
After kicking off the project in Olbia, my hometown, we had the first version of our site up and running relatively quickly, offering about two thousand products (SKUs) to customers. Olbia tends to be very seasonal and business during the summer was promising with about 50 orders a day with an average order value of about €80. Winter time was hard with daily orders falling under 20. This was not enough to cover costs, given the minimum expenses required for this type of business with gross margins currently around 30-35%. Year on year we were just about breaking even.
We soon expanded to Cagliari, the main city in Sardinia, and during the winter months employed five full time team members. Four of these employees were dedicated to order prep and delivery, while one was dedicated to managing. Myself and the other founders helped in our own time.
The project was focused around the company's online shop, a custom application behind Cloudflare, integrating with several third party vendors, mainly:
- Revel Systems as the POS application. Orders online arrive on the iPads directly in the warehouse. Most of the work was focused around this integration;
- PayPal as payment provider;
- Fattura24 as electronic invoicing software. A requirement from the Italian government;
- Gsuite for outgoing emails (now replaced with Mandril);
Sardinia is not known for its tech scene so keeping the software stack simple was vital, especially as we wanted to hire local talent. We also went for a custom application since out of the box e-commerce platforms (Magento, PrestaShop, Woocommerce etc.) were not going to allow us, lacking the skill set, to have sufficient flexibility for our integrations. We knew this meant initially a lack of features deemed normal nowadays. The application is hosted on DigitalOcean and runs reasonably well. Or so we thought.
During the first week of March 2020 the news of the arrival of COVID-19 in Italy started spreading quickly. At first no one really appreciated the severity of the situation and, on the contrary, a slight uptick on the daily average orders was a welcome change to our winter season. Sundays were historically our quietest day and only a handful of customers would be using the website. However, we had a first warning signal on Sunday 8th March, when Italy started issuing its first stay at home orders as the situation in the region of Lombardy started spiraling out of control. On that day, we received nearly twice as many orders compared to Saturday, following an upward trend throughout the week.
On Monday 9th, we realised we were going to be out of our depth by the end of day. Sardinia was turning to online grocery shopping. In Olbia (a town of 50k people), we were one of very few players doing deliveries. Another concern was Cagliari, the capital of Sardinia with a population of 430k citizens, where we had just recently launched our service.
We were totally unprepared. To give one example: our ordering system did not have order limits. Who would have thought we needed to limit orders?! The feature was not even on the roadmap. By the time we managed to close all our delivery slots, we had reached 600 orders in less than 24 hours, totaling more than €50k. Given we were organised to handle between 20-40 daily orders, 10x our usual order count was the beginning of a logistical and PR nightmare. To make things worse, the local media started picking up on our efforts, sending us viral at a regional level.
We made a lot of mistakes in the following weeks. Even after implementing dynamic delivery time slots based on volume, we had to cancel more than 2.5k orders and delay thousands more. Nonetheless, we wanted to do our best to serve the local community and do our part to allow people to remain at home. Running a successful and sustainable business was no longer the primary goal and we decided to reinvest cash as soon as it was available to expand our team and improve logistics, even if that meant putting at risk the long term success of the project. We were essentially working off of our cash flow, but it was a risk worth taking.
The most difficult challenge was controlling incoming orders vs customer satisfaction, as this was key to making our efforts meaningful: if our deliveries were delayed, or we could not fulfill them properly, customers still had to go to the grocery stores in person, nullifying the value of our service.
Health and safety for our team was also a top concern. Making sure everyone was equipped with gloves and masks, knew what procedures to follow, and how to handle customer interactions and social distancing, made things so much more complex.
All Hands on Deck
Ultimately, being responsible for the technology and product feature development meant I could work from the comfort of my home. A core component of this business requires a team on the ground carrying out logistics and deliveries, talking to customers, and a lot of running up and down warehouse alleys. They all did the hardest parts and I will be forever grateful for how the team came together and tackled the challenge.
I’m based in San Francisco at the time of writing and which meant I was able to work on technical problems during local night hours in Italy in my evenings and weekends. Additionally, I’m supported by two developers in Sardinia who would cover issues during business hours.
The team had some experience in the field, and although our scale is miniscule, all things considered, I now have a new definition of what it means to scale fast. We hired more than 80 team members in less than a week and implemented a whole series of new backend processes and improvements. Focusing on the technology, here are a few things we learnt:
- Things don’t always break the way you expect them to: we were worried about the load on the website, but a PHP app running on an average DigitalOcean instance with a CDN in front can easily handle 200+ concurrent users. I can think of several substantial optimisations, but none of them were ever required. On the other hand, all of our integrations broke. This is something we could have easily avoided by simply sitting down and having a meeting to evaluate potential risks. Revel Systems* was the first to go, we had an API call cap at 2k per day. Luckily we had a fallback mechanism to email only. However, given the circumstances, not having the orders on the POS system was not ideal. GSuite started rejecting outgoing emails when we hit 2k per day. Still worse, PayPal locked our account… too many transactions flagging their fraud detection systems. The list keeps going;
- IT vendors are not as fast as you are: as we tried to scale quickly we needed new POS licences, access to new services (e.g. SMS messaging tools) and more. When you are in a rush you quickly notice that all service providers feel too slow. Your sense of urgency is rarely met. Planning for this is a must;
- Usability issues hurt us a lot: this was not a surprise as we knew that we lacked UX testing, but nonetheless the extent of the impact was a shock. As an example, we have a feature in the application that allows users to reload a previous order for a fast checkout experience on subsequent visits. However, a lot of our new users were not experienced e-commerce shoppers and started submitting order after order using the reload function, expecting it to modify the order initially submitted. Identifying these issues and cleaning up the mistakes that came from them wasted a lot of time. Similarly, this applies to internal users as well. We were quickly implementing new reports and enabling new features on the POS system to help the team on the ground. Misunderstandings on what each change meant and how to use the new features was a daily occurrence. Setting up and enforcing a daily sync between the tech team and the order fulfillment team would have saved us considerable time;
- Scaling rapidly will make you very inefficient (but don’t give up): optimising the application behaviour quickly became an easier problem than managing the logistics of a rapidly growing team. We had order limits implemented down to the hour and we were fully booked 10+ days in advance. However, we were still not able to keep up according to our expectations. We knew the business but the new hires were not familiar with our systems. Things always took longer than expected and we kept hitting new problems. Several times inefficiencies, both technical and non-technical, nearly caused us to collapse;
- When under load, focus on the quick wins only: we believe this is something we did well. Working on major feature updates was tempting but would have made matters worse. Rather, we focused on many small quick wins. This ranged from setting up Zendesk to writing a toolset of scripts to automate repetitive tasks;
- Having a custom application helped: knowing our platform inside out was a game changer. We could have had an off the shelf solution, but without the expertise it would have been nearly impossible to roll out features fast. We made the right decision here, even if it meant (and still means) more work in the short term;
*I do owe a big thank you to our London Revel Systems account team. They worked over the weekend to help enable licences and increased our API limit temporarily without going through contractual processes. Without their help we would have been unable to work.
After three weeks the efforts started to provide value and we are now successfully delivering 350+ daily orders and are offering upwards of 9k products. The team is starting to nail down processes, customer satisfaction has gone up and we feel we went through 2 years of growth in 6 weeks.
At the time of writing we are still receiving a substantial amount of orders compared to our norm, but we believe and hope that the situation is starting to normalise. The country is still on lockdown, but after the dust has settled, we will try to learn from the experience and focus on the positives from this terrible situation. As for Spesati, time will tell.