The ability to create an end–to–end system design differentiates a developer from principal engineers and architects. One of the most important aspects of system design is the ability to create a functional design outlining all the components and how they work together. This course provides a step–by–step approach to create a functional design for a system using single responsibility principle and architectural patterns.
In this course, you will learn how to
1) Define the users of a platform you want to build
2) Understand the most important problems for the users the platform is meant to solve and define the core functions that solve this problem.
3) A depth–first based approach to design the core functions one–by–one.
4) Define the components and their integration framework using the single responsibility principle.
5) Understand the difference between frontend and backend design and the need for a BEFE layer like GraphQL.
6) Detailed design of each component
7) Creating an end–to–end system view from the component design.
We will use a running example throughout this course to apply the approach described in this course. There are a set of assignments that every student should complete as part of this course. Finally, it is important for you to apply the learnings in your day–to–day work and improve your system design skills with time.
Specification: System Design – Creating a functional design