Systems Design Preparation
Systems Design Preparation
When interviewing for a Software Development Engineer, a Software Development Manager, or a Technical Program
Manager position at Amazon, you will likely have at least one interview focused on software systems design. This is a very
important interview, so it’s critical to prepare for it thoroughly. You’ll know when you’re being asked the systems design
question because you’ll be asked to design a software system. Answering this question will be very interactive; the
interviewer will ask you lots of questions related to the design and you are encouraged to ask the interviewer any necessary
questions to complete your design. It helps to think out loud and take hints from the interviewer. You will most likely be
diagramming your design on a white board, so if you have access to a white board at home (or even just a pen and paper),
writing these sort of designs out by hand can be great practice.
Often times, software systems need software components, something to store data, something to make decisions
(such as business logic) and APIs or processes. Reviewing software systems design diagrams (especially SOA or
distributed software systems) can be helpful for preparation
Scaling is a critical component of software design at Amazon. It’s important to consider scaling when diagramming
and designing your software system. Be sure and research scalability concepts and technology prior to your interview
such as caching, load balancing, non-relational databases, microservices and sharding.
Knowledge of distributed systems, SOA, and n-tiered software architecture is very important in answering systems
design questions. If you don’t work with these concepts regularly, be sure to review them prior to your interview.
4. Be prepared to discuss trade-offs in your design. With any software system there are multiple ways to design it. What
advantages would yours have? Disadvantages? What if you were to change a component or process? Be prepared to
discuss these questions.