|
A scalable design refers to the ability to enhance the design of a system by adding or modifying functionality or features with minimal effort (impact).
Note that we emphasize the design itself; the structure and conceptual model of a system, rather than how the performance of a system can be maintained as its load increases (i.e. scalable performance). However; a good scalable design should also scale with respect to different performance requirements and their implementations!

Why do we need scalable design?
- continuous change: software designs are not cast in concrete, and have never been. Now, more then ever (and even more so in the future), the world changes, so the requirements of software change, evolve and grow: on average, 70% of the development effort takes place after the initial delivery. This requires a software design that scales with the stream of change requests and features.
- managing complexity: The study by IBM we mentioned on page 6 proposes that of all possible productivity improvements, the potential gains of reducing complexity are up to 10 times higher than other improvements (and in fact estimated to yield up to 10x productivity improvements). Managing complexity requires that the software design is structured such that new or changing requirements can be incorporated without significantly affecting the structure of the system.
When is scalable design applicable?
- software with a long life-time (i.e. it will need to be updated repeatedly during its lifetime)
- software with evolving and/or changing requirements
- software that needs to be ported to different platforms or contexts
- reusable components
- if new application areas appear for your software system
- product lines of multiple products with a lot of shared functionality in common
|