Annyeong!
This post series is a note from things that I've learned from the Udemy course: Software Architecture & Design of Modern Large Scale Systems.
Requirement Gathering Steps
When gathering information before we actually design the system, we need to gather sufficient information by following below steps:
- Identify all the actors / users in the system.
- Capture & describe all the possible use cases / scenarios (listing use cases).
- Describe user flow — expand each use case through flow of events. Each event contians action and data.
Let's take an exmaple of the hitchhiking service. The initial idea of this service is to allow people to join drivers on a route, who are willing to take passengers for a fee.
- The actors in this service will be driver and rider.
- Use cases are as below:
- Rider first time registration
- Driver registration
- Rider login
- Driver login
- Successful match and ride
- Unsucessful ride(match)
- We can represent the user flow using a Sequence Diagram.
Sequence Diagram

Sequence Diagram is a diagram that represents interactions between actors and objects. This is a type of a Unified Modeling Language (UML), which is a standard for visualizing system design.
In practice, UML diagrams are used mostly for software design. While UML isn ot strictly followed in the industry, the Seqeunce Diagrams are frequently used to represent interactions between entities.
System Quality Attributes Requirements
Systems are frequently redesigned NOT because of the functional requirements, but they change because of the system as it stands:
- It is not fast enough
- It doesn't scale efficiently
- It is slow to develop
- It is hard to maintain
- It is not secure enough
Quality attributes are non-functional requirements. More specifically, they are qualities of the functional requirements. In other words, the quality attributes doesn't say what the system does, but instead they provide a quality measure on how well the system performs on a particular dimension.
The system quality attributes have direct correlation with the architecture of the system. Let's take an example of an online store where users can look for products based on some search keywords.
"when a user clicks on a search button after they typed in a particular search keywords, the user will be provided with a list of products that closely match the search keyword within at most a 100 milliseconds."
- The functional requirement here is that the action that the system takes when the user clicks the search button.
- The quality attribute in this case is that the performance dimension describes how fast this action is to be performed (it should be performed within at most a 100 milliseconds).
Important Considerations of Quality Attributes
1. Quality attributes need to be measurable, and testable. If we cannot prove that the system satisfied the required quality attributes, we don't know if the system performs well or poorly.
2. There's no silver bullet — no single software architecture can provide all the quality attributes. Certain quality attributes contradict one another. So, some combinations of quality attributes are very hard or impossible to achieve. In this case, we need to make the right tradeoff to have a higher chance of success of the system.
- The very intuitive example here is the contradict of the performance and security. The more secure a system is, the slower the performance will be.
3. Feasibility is important. We need to make sure that the system is capable of delivering with the client asking for. It sounds pretty obvious — but keep in mind that some clinets may ask for something that is either technically impossible and/or prohibitively expensive to implement. It is our (as a software architect) job to call that our early on the process.
- Let's think about implementing the 100% availability of a system. This basically means that the system will never fail on any reasons. This means that it should have full protection against attackers and always have a stable network bandwidth, disaster-tolerant, etc. I believe implementing 100% availability is impossible.
To add some notes, there are some ways to measure & test the quality attributes using Datadog :)
- Service Level Objectives (SLOs) are the key tool to measure your service in any kind of dimensions. This provides a framework for defining clear targets around applications performance, which ultimately help teams provide a consistent customer experience, balance feature development with platform stability, and more. For more information, you can check out the following link: https://docs.datadoghq.com/service_management/service_level_objectives/
- Synthetic Testing and Monitoring allows you to test the system in application level. This observes how the systems and applications are performing using simulated requrests and actions from around the globe, making it easy to test the performance and/or availability. For more information, you can check out the following link: https://docs.datadoghq.com/synthetics/
Service Level Objectives
Track the status of your SLOs
docs.datadoghq.com
Synthetic Testing and Monitoring
Use automated testing to ensure the most critical parts of your systems and applications are up and running from various locations around the world.
docs.datadoghq.com
That's it for today! See you in the next post ;)
'Server > System Design' 카테고리의 다른 글
| Review: Software Architecture & Design of Modern Large Scale Systems (1) (0) | 2025.11.24 |
|---|---|
| 가상 면접 사례로 배우는 대규모 시스템 설계 기초 8장: URL 단축기 설계 (0) | 2025.06.22 |
| 가상 면접 사례로 배우는 대규모 시스템 설계 기초 7장: 분산 시스템을 위한 유일 ID 생성기 설계 (0) | 2025.06.21 |
| 가상 면접 사례로 배우는 대규모 시스템 설계 기초 6장: 키-값 저장소 설계 (1) | 2025.06.19 |
| 가상 면접 사례로 배우는 대규모 시스템 설계 기초 5장: 안정 해시 설계 (0) | 2025.06.16 |