Starts from the repository you shipped in step 1, Short links, counted.
Christmas Thursday
Over the year Pantry's customer list grew to 400,000. For the Christmas offers the team sent the SMS and an app notification at the same moment, at noon, and the short link in both was opened about 500 times a second for the first few minutes. Most of those requests waited ten seconds and gave up. Customers saw a blank page, and on Friday Maya's count was far below the sales.
The same afternoon a second link went out with the wrong price on panettone. The team wanted to take it down, and the only way was a deploy.
What has to change
At 500 openings a second on one link, nothing fails and nobody waits the way they did at Christmas. Every opening that got a redirect is still counted, including the ones answered while a deploy replaces the service, though the count may trail the clicks by up to a minute. And the team can disable a link: ten seconds later, opening it says the offer has ended.
500 a second is measured on your machine, with the service set up as it runs in production: the same build and settings you deploy, with its database running on your machine next to it. The load test may run on the same machine. A free host may not take that rate, and the host is not what this step is about. Against your public address you measure at 50 a second, as in step 1.
Not the job
No second instance, no changing where a link goes, no expiry, and no history of who clicked.
How the redirect gets faster, how clicks reach the count and how a disable reaches the redirect are yours to choose. Write the choices down in DESIGN before you build.