Skip to main content

A Beginner's Guide to System Design

A Beginner's Guide to System Design

Introduction

Systems design is the process of defining the architecture, modules, interfaces, and data for a system to satisfy specified requirements. Systems design could be seen as the application of systems theory to product development. There is some overlap with the disciplines of systems analysis, systems architecture and systems engineering.

Whether you are a backend developer, product manager or technical manager, everyone needs to know the basics of System Design. So this article is the only destination that can solve all queries you have about System Design.

Aspects of System Design

High Level System Design

High-level design (HLD) explains the architecture that would be used for developing a software product. The architecture diagram provides an overview of an entire system, identifying the main components that would be developed for the product and their interfaces. The HLD uses possibly nontechnical to mildly technical terms that should be understandable to the administrators of the system. In contrast, low-level design further exposes the logical detailed design of each of these elements for programmers.

A high-level design provides an overview of a system, product, service or process. high-level design should be a complete view of the entire system, breaking it down into smaller parts that are more easily understood. To minimize the maintenance overhead as construction proceeds and the lower-level design is done, it is best that the high-level design is elaborated only to the degree needed to satisfy these needs.

Low Level System Design

Low-level design (LLD) is a component-level design process that follows a step-by-step refinement process. This process can be used for designing data structures, required software architecture, source code and ultimately, performance algorithms. Overall, the data organization may be defined during requirement analysis and then refined during data design work. Post-build, each component is specified in detail.

The LLD phase is the stage where the actual software components are designed.

During the detailed phase the logical and functional design is done and the design of application structure is developed during the high-level design phase.

Key factors in System Design

Scalability

Scalability is the system’s ability to deliver reasonable performance in face of increased load. System load can be described in terms of parameters that best translate an application’s request and response technically. For example for a social networking website, the expected number of the writes (posts) per second or reads (posts in timeline view) per second can be used to describe load. You can also consider peak reads/writes instead of average, for describing load on the system.

Reliability

Reliability means the ability of a system to tolerate faults or problems in order to prevent failures or complete shutdowns. Large systems are built using fault intolerant components. The beauty and art of system design is to build fault tolerant systems using fault intolerant components.

Faults can be categorized as hardware or software.

A large data center, with hard disks with MTTF of 50–100 years, will witness disks going bust every day or the system memory gets corrupted are hardware faults.

Software faults can happen due to a variety of reasons. One runaway process can hog your system resources and cause a systematic crash across all nodes which will lead to the whole system to crash.

Maintainability 

Maintainability means writing code that can easily be understood, refactored and upgraded by someone who is not the original author of the code. Any piece of spaghetti confusing code will ultimately be understood by machines. Good code should be readable and easily understood so that teams can collaborate. Good code should also have the right level of abstractions, clean APIs and interfaces so that new functionality can be easily built on top of existing codebase.


Design Techniques

Structural Design


Structured design is a data-flow based methodology that helps in identifying the input and output of the developing system. The main objective of structured design is to minimize the complexity and increase the modularity of a program. Structured design also helps in describing the functional aspects of the system.



In structured designing, the system specifications act as a basis for graphically representing the flow of data and sequence of processes involved in a software development with the help of DFDs. After developing the DFDs for the software system, the next step is to develop the structure chart.

Object Oriented Design


In the object-oriented approach, the focus is on capturing the structure and behavior of information systems into small modules that combines both data and process. The main aim of Object Oriented Design (OOD) is to improve the quality and productivity of system analysis and design by making it more usable.



In analysis phase, OO models are used to fill the gap between problem and solution. It performs well in situation where systems are undergoing continuous design, adaption, and maintenance. It identifies the objects in problem domain, classifying them in terms of data and behavior.

Factors affect the System Complexity

The two important concepts related to the system development that help in determining the complexity of a system are coupling and cohesion.

Coupling


Coupling is the measure of the independence of components. It defines the degree of dependency of each module of system development on the other. In practice, this means the stronger the coupling between the modules in a system, the more difficult it is to implement and maintain the system.



Each module should have simple, clean interface with other modules, and that the minimum number of data elements should be shared between modules.

Cohesion

Cohesion is the measure of closeness of the relationship between its components. It defines the amount of dependency of the components of a module on one another. In practice, this means the systems designer must ensure that −

  • They do not split essential processes into fragmented modules.
  • They do not gather together unrelated processes represented as processes on the DFD into meaningless modules.
The best modules are those that are functionally cohesive. The worst modules are those that are coincidentally cohesive.

In a good system low coupling and high cohesion is maintained.

Example: Library Management System(LMS)

So now we take an example of a very simple system called  "Library Management System(LMS)". It is a basic Library management system and here we discussed both the higher perspective view or HLD and the detailed view or LLD of LMS.  

High Level Design

Component Diagram of LMS

Low Level Design

Class Diagram of LMS
[*]Both Component Diagram and Class diagram are belongs to UML diagrams , those parts will be covered in the next article. For the sake of knowledge let's know the basic definitions .

Component diagrams are used to visualize the organization of system components and the dependency relationships between them. They provide a high-level view of the components within a system.

Class diagram is a UML diagram type that describes a system by visualizing the different types of objects within a system and the kinds of static relationships that exist among them. It also illustrates the operations and attributes of the classes.

Conclusion

In this article I discussed basics of System Design , you can say this the Part 0 of the series that I am going to discuss. Hope this gives you a brief idea about System Design and the fundamental concepts. Please give feedback and share the article if it helped you. In the next article I will discuss the Scalability part briefly.   





Comments

Popular posts from this blog

Problem Solving and Algorithms

Problem Solving and Algorithms Introduction A problem space is all of the various components that go into creating a resolution for a problem. Think of it like a frame, which acts as something of a border to help define an area. A problem space helps you or, on a larger scale, a business, figure out what the problem is, work through ways to correct them and then drives implementation of the appropriate solution. The ultimate purpose is to take corrective action for some identified problem. Problem solving refers to cognitive processing directed at achieving a goal when the problem solver does not initially know a solution method. In computer science there are two different types of problems, ill-defined and well-defined : different approaches are used for each. Well-defined problems have specific end goals and clear expected solutions, while ill-defined problems do not. In computer science, an algorithm is a finite sequence of well-defined , computer-implementable inst...

A Basic Overview of LINUX

A Basic Overview of LINUX Introduction Linux is a family of open source Unix-like operating systems based on the Linux kernel,an operating system kernel first released on September 17, 1991, by Linus Torvalds . Linux is typically packaged in a Linux distribution.Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project.Popular Linux distributions include Debian , Fedora , and Ubuntu . Commercial distributions include Red Hat Enterprise Linux and SUSE Linux Enterprise Server . Desktop Linux distributions include a windowing system such as X11 or Wayland , and a desktop environment such as GNOME or KDE Plasma . Distributions intended for servers may omit graphics altogether, or include a solution stack such as LAMP . Because Linux is freely redistributed, anyone may create a distribution for any purpose.Linux was originally developed for personal computers based on the Intel x86 architecture, but has ...