Amazon·Software Engineer·Onsite - System Design / Architecture
May 2026
Amazon system design round for a software engineering role. The whole thing was one big design question about memory management and it went deep fast, covering OS internals, concurrency, multi-tenancy, and ops concerns all in one shot.
- Design an in-process memory usage monitor that switches an application between NORMAL and DEGRADED modes based on configurable thresholds, with hysteresis to prevent flapping between states.
- How would you design the API surface for this system, specifically setThresholds, getState, and registerCallbacks, and what actions should trigger on mode transitions like cache eviction, request rejection, or batch slowdown?
- Compare different approaches to sampling memory usage across Linux and macOS: polling process RSS, using OS memory-pressure notifications, and reading container or cgroup signals. What are the tradeoffs?
- How would you extend this system to support multi-tenant memory budgets where individual components register their own limits and the system enforces them independently?
- What is your strategy for testing this system, including load tests, fault injection, and validating that threshold crossings and mode transitions behave correctly under concurrency?
- How do you handle concurrency and thread safety in this design, and what are the failure modes if the monitoring thread itself crashes or stalls?
- How would you handle configuration persistence and rollback for threshold settings that are updated at runtime?
“This is where I spent most of the session.” The rest of the author's notes on Software Engineer interview at Amazon, Onsite - System Design / Architecture round, covers how they worked through the question, what the panel pushed back on, and what they would do differently.
View Post