Software Design is concerned with how to produce a solution that meets the requirements. Good software design allows us to produce good software that is acceptable, dependable, efficient and maintainable. During design, we figure out how things decompose into smaller problems and then combine back together.