System Design - Creating a functional design
What you'll learn
- Create a functional architecture for large products or platforms
- Define components and services using single responsibility principle
- Component Design
- Minimize service sprawl
- Some programming experience
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.
Who this course is for:
- Developers who want to learn system design and up-level to principal engineer/architect
I can broadly categorize my career into two phases. I spent the first 14 years of my career at IBM Research solving important research problems on the intersection of distributed systems, cloud and analytics and applying them to IBM products and services. My work led to numerous papers and patents, led to major features in multiple IBM products, and created new service engagements. I received IBM’s Outstanding Innovation Award and ACM Middleware’s 10 year best paper award for my work on Power management and virtual machine consolidation.
I spent the next 7.5 years in industry applying the same computer science principles to solve real world problems. I was responsible for all engineering related to hotels for Makemytrip and its subsidiaries, and built the core pricing and supply platforms at Makemytrip. I received Makemytrip’s highest honor for this work. I built the digital engineering team at Airtel from 30 to 170+ talented engineers and engineering leaders. I led some of the most significant and highest impact projects at Airtel during this time and received Airtel’s highest recognition, the Chairman Award, for all three years at Airtel.
I enjoy setting engineering practices for large teams to drive efficiency as well as working in a hands-on fashion with small (<20) member teams building systems from scratch. I am currently Portfolio CTO at Trilogy responsible for the technical roadmap, architecture and strategy of multiple products in the Trilogy portfolio.