COVID-19 virus is in its full power and it has been attacking the entire world. While the people defend themselves with strategies like social distancing, lock downs and contact tracing, it is inevitable that the side effects of COVID-19 are on their way. Crippled supply of essential goods, food and medicine are few immediate examples. Not to mention the economic crisis and depression that are yet to come. However, we’ll never know the full scale of the COVID-19 damage until it is fully contained.

However, I’m not going to talk about the pandemic situation in this post. I believe many qualified professionals are doing that already. Instead, I’ll throw some ideas to fix a problem that we are currently having in my country, Sri Lanka.

Keells is a well established Sri Lankan retail supermarket chain that has many number of outlets across the country. Most people including my family used to shop there on weekly basis to replenish our kitchen supplies. Before COVID-19, online shopping was there. But I would say it was not that popular among people or they just liked to be at the store physically and buy goods.

Problem raised when Sri Lanka went into a lock down mode. Curfew has been imposed island wide and delivery of essential goods had to be done online and unfortunately that was the only method available as of now.

Due to that, it was inevitable that people rushed to Keells website to place their orders as early as possible. But the traffic was soaring and Keells couldn’t handle the load so that they had to throttle out users out of their system to guarantee that the system will continue to operate as expected. As of today itself, they only allow first 1000 customers to place their orders.


There can be many reasons behind this. But I guess it is obvious that their supply chain must’ve been slowed down due to island wide curfew. Hence they accept only a limited number of orders. From business point of view, that is reasonable. But what if even the users who were lucky enough to be in first 1000 orders still experiencing problems?

I’ve seen number of users complained on Keells Facebook page about their orders being failed due to technical reasons. Apparently, most of them got timeouts when they attempted to pay through the Internet Payment Gateway (IPG) which is a dependency for Keells.

In this post, I’ll come up with few suggestions that Keells could potentially use to improve their overall customer experience. I should pass credit to Asanka Perera’s blog post that actually influenced me to come up with this post.

In summary, these are the main issues with Keells website as far as I understand.

They only allow 1000 orders per day - Can this be fixed? NO!!

They are already doing a tremendous job by accepting orders up to the limit they can fulfill for a single day and delivering them on time. They must be operating at their peak while crippled supply chain slowing them down. It’s a business decision that they could accommodate more than 1000 orders per day and technology has nothing to do with it.

Frequent timeouts/errors during the checkout process - Can be this be fixed? YES!!

Keells depends on third party payment providers to verify customer payments. This dependency is very common for any e commerce site. But if the payment provider is overloaded, that’ll be propagated to Keells back-end as well.

When checkout fails, users will keep retrying and it will build up a huge load on both systems leading either of systems to go offline.

With careful technical planning, this can be fixed. Let’s see how.

Encourage users to use prepaid store credit — Utilize the Nexus Card

Now it is clear that most of the failures happen when everyone tries to checkout at same time. Instead of paying at the checkout, what if users are given an option to use their store credits/loyalty points or prepaid voucher to pay at the checkout? Then that’ll take a huge load away from the payment provider. This can be easily done with minimal technical disruption at Keells by utilizing their existing loyalty program (Nexus as I remember)

1) Keells should encourage their customers to sign up with Nexus.

This is good for the business as every customer transaction will be tracked with their Nexus ID. Collected transaction data will become a goldmine for BI and Data Science nerds to plan their next marketing campaign.

2) Revamp the Nexus card program to allow customers to top up their Nexus points with credit card.

This is a must do item. Then only users will be able to pay with their Nexus points. The main benefit this provides is that credit card payment verification can be done at any given time when customers top up Nexus points. This will eliminate the need for mass payment verification at the rush hour, and effectively saving the payment provider from being overloaded.

Allow customers to place orders at any time

This frees users from waking up at 6am to place their orders (The real hunger game!!!). Simply allow all users to place order at anytime and pay with their Nexus points. When an order is placed, a reference number to the order should be issued to the user as a back reference.

Process Orders asynchronously

I’m pretty sure our friends at Keells are smart enough to use standard Enterprise Integration Patterns (EIP) like Store and forward and Guaranteed delivery reliably route orders to the backends. So I’m not going to talk about that here. But the key idea here is to accept orders as much possible from users, store them in a message broker or a database in a reliable manner and periodically process them to fulfill based on the availability of the stores.

But users should be informed within a day about the status of their order. Meaning that, whether it was successful or will be processed later. Sending a SMS would be sufficient at this level. Depending on the urgency, users might want to cancel their orders and go for other options. Issued order reference number comes in handy at this time as users can cancel their order after providing the order reference. Cancel order workflow should credit Nexus points back to respective accounts. This process prevents having orphaned orders in the system.

Backends are still overwhelmed? Consider cloud bursting

After introducing pre-paid payments and async order processing, Keells backends might still get a considerable traffic. How to tackle that? Consider cloud bursting. Cloud bursting is an application deployment model in which an application runs in a private cloud or data center and bursts into a public cloud when the demand for computing capacity spikes. If Keells backends get overwhelmed, they can route the traffic to an identical deployment located in cloud so that cloud’s elastic scaling can absorb more traffic. This is valid if Keells deploys their majority of the backends on-prem.

I’ve put together above points in the following Solution Architecture diagram.



Even they accept only 1000 orders daily, I think Keells is doing a better job delivering essential goods to their customers amidst the pandemic. During this situation, as customers we should understand that they are operating at their peak to provide us with fresh vegetables from Nuwara Eliya. But above mentioned technical points might help our friends at Keells to overcome the sudden hiccups they are experiencing these days. Not only this applies to Keells, but I think this is a valid case for any global retailer who operates an online store.

There goes my two cents and hope someone will find this useful.