POS Systems for High-Volume Venues: Lessons Learned
Building point-of-sale software for stadiums and arenas is a unique engineering challenge. When 40,000 fans want food and drinks during a 20-minute halftime, every millisecond counts.
The Constraints
- Speed — Transactions must complete in under 2 seconds
- Reliability — Network outages during events are common
- Scale — 200+ terminals processing simultaneously
- Compliance — PCI DSS, age verification, tax calculations
Architecture Decisions
Offline-First Design
Stadium WiFi is unreliable. The POS must work without a connection:
interface Transaction {
id: string;
items: LineItem[];
total: number;
status: 'pending' | 'synced' | 'failed';
createdAt: Date;
syncedAt?: Date;
}
class OfflineQueue {
private queue: Transaction[] = [];
async processQueue() {
for (const tx of this.queue) {
try {
await this.sync(tx);
tx.status = 'synced';
tx.syncedAt = new Date();
} catch {
tx.status = 'failed';
}
}
}
}
Event-Driven Inventory
Real-time inventory tracking across 50+ concession stands requires an event-driven approach. Each transaction emits inventory events that are consumed by a central aggregation service.
Multi-Tenant by Design
Different venues have different menus, pricing, tax rules, and reporting needs. The system was built multi-tenant from day one with tenant-scoped databases and configurable business logic.
Key Lessons
- Test with real hardware — Thermal printers, card readers, and barcode scanners all have quirks
- Design for the worst network — If it works offline, it works everywhere
- Optimize the critical path — The order flow from tap to receipt should touch minimal services
- Analytics matter — Venue operators love real-time dashboards showing revenue by stand, top items, and throughput
Impact
The system processed over $2M in transactions during its first major event weekend with 99.97% uptime and an average transaction time of 1.4 seconds.