Live Auction Platform
Live-streamed auctioneer with online bidding
Design a live sale that is streamed to the internet: an auctioneer calls lots on video while bids arrive from the room, the phones and thousands of online bidders, and every bid must be ordered fairly and shown to everyone within a second.
Overview
In a live sale, an auctioneer stands at a rostrum and sells lots one after another. Bids come from people in the room raising paddles, from staff on the phones, and, on this platform, from people bidding online while they watch a video stream. The auctioneer asks for a price ('1,000, do I hear 1,000?'), takes the first bid at that price, raises the ask by the next increment, gives a fair warning, and brings down the hammer.
This is different from a timed online auction, where bids arrive over days, a proxy bids up to each person's maximum and a soft close stops last-second sniping; the Online Auction problem covers that. Here a human sets the pace, a lot sells in about a minute, and the hard parts are time and fairness across channels. Someone in the room sees the auctioneer at once; an online bidder sees a video that is some fraction of a second, or several seconds, behind. The design must make sure an online bid counts exactly as it would if the bidder raised a paddle in the room.
The answer has three parts: a sequencer that is the single place where the order of bids is decided, a data channel that carries the asking price and the current leader faster than video, and a video path chosen by role: very low delay for bidders, cheaper and a little later for viewers.
Questions to ask first
- Who runs the sale? — A human auctioneer; a clerk enters room and phone bids on a console
- How big is a sale? — 300 lots, about a minute each; 100,000 viewers, 2,000 registered online bidders
- How do online bids work? — One button: 'bid the current asking price'; no typed amounts
- Absentee (left before the sale) bids? — Entered by the clerk as the auctioneer's book; proxy logic is out of scope
- What must be true about order? — One order per sale, the same for every channel and every screen
- How far behind live may video be? — Under a second for bidders; a few seconds is fine for viewers
What you will be able to do
- Explain why the video cannot be the source of truth, and what is.
- Design a single-writer sequencer per sale that orders room, phone and online bids.
- Choose video delivery by role, and state each path's delay from its spec.
- Push numbered state updates to 100,000 viewers and resync them after a reconnect.
- Fail over a sequencer without two writers, using a fencing token.
Key concepts
- Sale sequencer (single writer)
- Asking price version
- Bid increments
- Fair warning and hammer
- WebRTC for bidders
- Low-latency HLS for viewers
- Sequence-numbered state updates
- Fencing token on failover
- Clerk console
Functional requirements
- Stream the auctioneer live to registered bidders and to viewers
- Let an approved online bidder bid the current asking price with one action
- Let the clerk enter room and phone bids, fair warning, hammer and pass
- Order all bids of a sale in one sequence and reject bids at a price that has moved
- Push the lot, asking price, leader (by paddle number) and state to every viewer
- Show the auctioneer online bids on the rostrum screen as they are accepted
- Record every event so the sale can be replayed and audited
Non-functional requirements
- An accepted online bid appears on the rostrum screen within 500 ms (a target we chose)
- Bid state reaches viewers within 1 second at p99; bidders' video within 1 second; viewers' video within about 5 seconds
- Exactly one order of events per sale, even across a sequencer failover
- An online bidder is never charged for a bid that was not accepted and shown
- A viewer who reconnects catches up from the log, with no gaps
Interview questions
- How is this different from a timed online auction?
- Two bidders click at the same time. Who wins?
- Online bidders see the video late. How is that fair?
- Why one sequencer, and how do you make it survive failure?
- How do you get state to 100,000 viewers within a second?
- How do you stop a bidder from leading more than they can pay?
- What if the video for bidders fails but the state channel works?
Sign up free to read the full topic
More System Design topics
Start free on Cariara · Coding problems · System design studio