- Published on
The Most Important Concerns when Designing Software Systems
- Authors
- Name
- Rosie Arasa
Scalability
- As the demands from a system grow; systems designed efficiently should be able to handle the increase in traffic volume, data volume or complexity with reasonable performance. There should be systems set up to handle the growth
- If a system grows in a certain way do we have a system in place to deal with the growth?
- Load - the current load on a system can be in terms of requests per second to web server, reads : writes in a database, number of simultaneous users in a chat room etc
- We need to have a system in place to handle unexpected spike in traffic/load to enable the performance of ur system to meet the target
- Performance:
- Throughput - the number of requests a system can process per second
- Response time- the time elapsed between a client sending a request and receiving a response.
- Latency - a duration that a request is waiting to be handled.
- Approaches to Copping with Load
- Vertical scaling
- Horizontal Scaling
- Load - the current load on a system can be in terms of requests per second to web server, reads : writes in a database, number of simultaneous users in a chat room etc
- If a system grows in a certain way do we have a system in place to deal with the growth?
Reliability
- A well designed system should be able to continue working correctly despite errors, outages in both software or hardware components. This system needs to be fault tolerant. When is s system said to be reliable:
- performs expected user functions.
- can tolerate user errors: making mistakes or using software incorrectly.
- good performance for required use case under expected load and volume.
- system prevents unauthorized access and abuse.
Maintainability
- It should be seamless for many developers to work on a system while maintaining the current behavior and adapting new use cases productively
- Operability
- Ease of keeping the system running smoothly
- Simplicity
- Removing unnecessary complexity making the system easy to understand.
- Evolvability
- Easy to make changes to the system and adopting it for unexpected use cases.
- Operability