Published on

The Most Important Concerns when Designing Software Systems

Authors
  • avatar
    Name
    Rosie Arasa
    Twitter

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

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.