It provides a clear and practical framework for distinguishing between critical and non-critical system tasks. However, it oversimplifies the architectural complexity of real-world distributed systems for the sake of brevity.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
Amazon Checkout System Design Explained in 2 MinutesAdded:
Today, I want your opinion on famous system design problem.
Let's consider an Amazon style online shopping system.
You add all the items you need in the cart and then click place order and the website confirms if your order is placed.
Behind that place order button, the system has to finish six different jobs.
First, it has to charge your credit card. Then, hold the item in the warehouse so nobody else buys the last one.
Next, we save this order to the database.
Fourth task is to send a confirmation email.
Fifth is to tell the warehouse what product needs to be shipped. And the last one is to update your product recommendations so that we can suggest similar or related items next time.
The question is, how do you arrange those six jobs?
Option A is to do them all in a single line, one after another.
First, we charge the card, then reserve the item, then save the order to database, then send the email, then notify the warehouse, then update recommendations.
The website only says order placed after every single step finishes.
The problem is that it takes significantly more time for user to see the confirmation on website.
For example, if it takes 200 milliseconds for payment, 150 milliseconds to reserve items and so on, then we are looking at a 1 and 1/2 second wait every time someone clicks that button.
And if any single step breaks, let's say the email service is having a bad day, the whole thing fails and user will see an error on website.
But the truth is that some of the steps might have already succeeded. The payment may have already gone through.
The order may already have been saved.
Therefore, the customer is charged but doesn't know if their order worked because website shows error and customer tries to place the order again.
Now you've got duplicate orders to clean up.
Option B is a little smarter.
We only do the must finish jobs in line like charging the card and saving the order.
The user sees order placed once these must finish jobs are done.
Everything else like sending the email, the warehouse notification, and product recommendations gets pushed onto a background job queue.
Then background programs pick these jobs up and finish them when they can.
This is much faster for the user.
But here's the issue.
One day, the background program that sends emails just stops working.
The customer saw order placed on the website, but never gets a confirmation email.
So, they start calling support asking, "Did my order actually go through?"
And you don't even notice the email program is broken until the support tickets start piling up.
Now, the real question isn't about do everything at once or do some things later.
The question is, what absolutely must finish before you can honestly tell the user that your order is placed?
And which tasks can actually happen later safely as long as they eventually gets done?
Let me know your thoughts in comment section.
Related Videos
Re: 🗣️📍theprophedu📍2026 GST 103 CLASS (E-EXAM REVISION)
theprophedu
636 views•2026-06-04
WEB TECHNOLOGIES UNIT-2 | Degree 4th sem BCOM Computers web technologies unit-2 full explanation💯✅
LearnwithSahera
1K views•2026-05-29
More tests are always better? How to use AI to identify tests that bring little value
Alliance4Qualification
335 views•2026-05-29
Search Algorithms Explained in 60 Seconds! 🤖💨
samarthtuliofficial
218 views•2026-06-01
People of Game of Thrones using JavaScript DOM
AltCampus
296 views•2026-05-30
Instagram accounts got PWNed
EricParker
13K views•2026-06-03
Introduction to Problem Solving Part - 1 | Lecture 1 | Intermediate DSA
ascensionix
107 views•2026-05-29
So What's Odin Lang Even Good For
TechOverTea
131 views•2026-06-01











