Design a course registration system
Company: J.P. Morgan
Role: Software Engineer
Category: System Design
Difficulty: easy
Interview Round: Onsite
## System Design: Course registration ()
Design an online course registration system for a university.
### Core user stories
1. Students can:
- search/browse courses by term, department, instructor, time slot
- view course details (capacity, remaining seats, prerequisites, schedule)
- enroll and drop courses
- join a waitlist if a course is full
2. Admin/Registrar can:
- create/update course offerings each term (capacity, schedule, instructor)
- set rules (prerequisites, enrollment windows, max credits)
### Key requirements
- **High concurrency** during peak registration (e.g., first 10 minutes of enrollment window).
- No overselling seats: enrollment must not exceed capacity.
- Waitlist should be fair (e.g., FIFO or priority rules).
- Students should not enroll in conflicting time slots.
- Auditing: track who enrolled/dropped and when.
### Non-functional requirements
- Strong consistency for seat counts during enrollment.
- Availability is important; graceful degradation for search/browse is acceptable.
- Observability: metrics and alerts for registration failures/latency.
Deliver:
- High-level architecture
- Data model
- APIs
- Concurrency/control strategy for seat allocation + waitlist
- Scaling and failure handling
Quick Answer: This question evaluates a candidate's ability to design scalable, strongly-consistent, and concurrent systems, testing skills in distributed systems, data modeling, API design, concurrency control, fair waitlisting, scheduling/conflict resolution, and observability within the System Design domain.