Skip to content

System Design

System design is the process of converting the functional and non functional requirements of a system. It includes definiing architecture, components and interaction of a software systems.

Process of System Design

System design is a structured process that involves: conceptualization, refinement and construction. This serves as a blueprint for transforming conceptual ideas into abstract working components. The different phases are:

Requirement Analysis

This involves clarifying contraints and the use cases the system needs to satifsy. This part involves knowing the functional and non-functional requirement of the system such as the audience fot product, major use case for the product, usage pattern of the users as well as other constraints we have to adhere to while designing the system.

For example for a url shortening service, we can get the functional requirements as such:

  • Inputting a long url would output a shorter url.
  • The shorter url would redirect the original longer url.
  • User can have custom urls which they can choose from.
  • Automatic/Manual expiration of the generated links
  • Way to access the service would be via an api or a web ui.
  • analytics of each url visits
  • user account and link managment

Now for the non-functional requirements:

  • The system must be highly available so that the shortened urls are not broken
  • Redirection should not take a lot of time
  • It must be able to scale to support large number of urls
  • The urls created must be unique and collision resistant.
  • The system must contain a lot of urls with minimal footprint as possible.

references: