Requirements
Requirements
is a formal description of how the system should behave- It's important to raise the right requirements because changes in large systems are expensive (engineers, contracts, reputation, brand)
- Requirements are the
architectural drivers
Gathering requirements
- The client (who demands the feature) usually do not know what they need (the requirement), but they know
what they want to solve
- Allow people to join drivers on a route, who are willing to take passengers for a fee
- A system that allows sharing of large files between users.
-
What problem is being solved here?
-
Make the right questions
to solve the problem!
Classification
Feature Set (Functional Requirements
)
- It's a
must do
- Requirements that define the target feature
- Results may be triggered by either user actions or events
-
Functional requirements DO NOT influence on the architecture, since a feature can be implemented using any kind of architecture (just it may not be viable)
-
Examples
- User must have access to the e-commerce platform
- User must be able to search an item
- After a user uploads a file, they will get a unique link that they can share with other users. Any user with that link can download the file.
flowchart LR
A[User Action] --> System
B[Events] --> System
System --> C[Outcome/Result]
System Quality Attributes (Non-Functional Requirements
)
- It's a
must have
- It's a quality measure on how well the system perform on a particular dimension
- Non-functional requirements DO influence on the architecture
- Quality attributes need to be
measurable
andtestable
- Example of a bad attribute definition: "it must be fast!"
- Quality attributes may contradict one another, we need to make the right
tradeoff
- Unrealistic requirements must be
called out
as soon as possible -
Example: < 100 ms latency between South America and Asia. 100% availability
-
Examples
Latency
: user must be able to check the account balance within 1 sScalability
Flexibility
Availability
: the online store must be available to the users at least 99.9% of the timeSpeed
: download speeds should be at least 50 Mbit/sDeployability
: the dev must be able to deploy a new version at least twice a week
System Constraints
- Limitations and boundaries
- System constraints requirements DO influence on the architecture
- System constraints are not necessarily a bad thing, it helps narrowing down the scope
- They provide us with a solid starting point
- Usually 3 types
- Technical constraints
- Being locked to a particular hardware/cloud vendor
- Having to use a particular programming language
- Having to use a particular database technology
- Having to support a platform X
- Having to support low-end mobile devices
- Having a limited skillset of engineers
- Business constraints
- Time constraints, strict deadlines
- Financial constraints, limited budget
- Use specific external partners/carriers
- Staffing constraints, small number of available engineers
- Legal/regulatory constraints
- GDPR (data protection)
- HIPAA (medical)
Extended Requirements
- Browsing data has to be saved for future analytics