
How is an architect different from a developer? This lecture covers how an architect, responsible for functional design, needs to think differently from a developer.
Design your platform around core functions, analyzing marketplaces, subscriptions, and online versus offline delivery. Align architecture to support primary users, suppliers, and analytics.
Apply a depth-first search-based design and the single responsibility principle to define core functions and build components, focusing on text search, filtering, ranking, and describe.
Master integration design by connecting frontend and backend components through a layered architecture. Compare rest, GraphQL, and hybrid approaches to efficiently assemble multi-entity data for diverse devices.
Design each component to fulfill a core function in system design, covering component and service design, integration, and three components: category-based search, text search, and pricing.
Explore how a ranking service turns candidates into a top-ranked list by scoring relevance and quality, and weigh on-demand versus precomputation for low-latency results.
Design the ranking service as a rest service, compute segment-based relevance scores for courses, update them on new enrollments, incorporate review scores, and illustrate component collaboration with a sequence diagram.
Create an end-to-end system view by defining core functions, building components, and using a DFS-based sequence approach to illustrate data flows and replication.
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.