✏️ Explanatory Question
The hard requirement is: no seat may ever be sold twice. Everything else is routine.
This single constraint eliminates most easy answers - you cannot use an eventually consistent store for seat state, and you cannot cache availability without a correctness story.
Functional: browse events, view a seat map, hold a seat, pay, receive a ticket.
The critical non-functional set:
The insight to voice: reads (browsing) are massive and cacheable; writes (holding a seat) are small in volume but must be strictly serialised per seat. So you split the paths entirely - a cached, slightly stale seat map for browsing, and a strongly consistent conditional write at the moment of the hold, where the user finds out for certain.