Software design

Software design is the internal quality of the design of software and the properties that make the software easier to understand and change in the future, specifically focusing on maintainability. It emphasizes object-oriented technology due to its prevalence in modern software development, addressing design quality at the class and package level, including aspects such as source code organization, class identification, interface use, design patterns, and the application of design guidelines [1].

An agile team thrives on change. The team invests little upfront; therefore, it is not vested in an aging initial design. Rather, they keep the design of the system as clean and simple as possible, and back it up with lots of unit tests and acceptance tests. This keeps the design flexible and easy to change. The team takes advantage of that flexibility to continuously improve the design so that each iteration ends with a system whose design is as appropriate as it can be for the requirements in that iteration [2].

Relates to

  • design principles
    • SOLID
    • Law of Demeter
    • DRY
    • small methods
    • Design by contract


youtube videos



  1. [1]J. Stevenson and M. Wood, “Recognising object-oriented software design quality: a practitioner-based questionnaire survey,” Software Quality Journal, vol. 26, pp. 321–365, 2018.
  2. [2]R. C. Martin, Agile software development: principles, patterns, and practices. Prentice Hall PTR, 2003.