How I would have built Malaysia’s AstraZeneca Vaccine website

It has caused a lot of frustrations among Malaysians to book their vaccine appointment

Mohamad Fadhil
7 min readMay 27, 2021

--

This story is originally published here.

This article is inspired by Jonathan Lin’s post on the same topic and how Nike handles their Sneaker Drop sale.

Background

On 26th May 2021, the Malaysian government opens up vaccination slots to everyone in Kuala Lumpur and major cities in Malaysia. The registration form opens at 12 pm local time. Due to that, thousands (or perhaps millions) of Malaysians are getting ready in front of their computer to fight for the vaccination slot. Only ~1M slots are available to grab among 30M unvaccinated Malaysians.

At the end of the session, everyone was frustrated with the experience. There were a lot of issues but the most notable one was: unable to select a registration state.

Briefly how the website works

When a user opens the registration website, the user will fill in personal details. Then the user must select the state, location & time for their vaccination slot. Finally, the user will submit their form.

The main issue happens at step #2. In order for the user to select the state, the browser will request the latest list of available slots at http://api.vaksincovid.gov.my/az/?action=listppv. This API endpoint was choking at 12 pm and only works intermittently.

I have written in length about that issue in my Twitter thread

Assumptions & Scoping

  • There were 1M vaccination slot available across the country
  • Malaysia has ~30M population
  • Assuming 10% of the population are living in urban areas and fighting for the slot, we now have 3M users waiting to register themselves at 12 pm

Given that there’s a 1M vaccination slot, so there’ll be around 1M database writes that will happen in the span of 1 and half hours (they close the registration after 90 minutes). That would be roughly 185

--

--

Mohamad Fadhil

Software Engineer, helping people find jobs. See me on fadhil-blog.dev