Software design is the process of specifying the nature
and composition of a software system that satisfies
client needs and desires, subject to constraints. (Fox,
2006)
Software Product Design:
Software product design is the process of specifying
software product features, capabilities and interfaces
to satisfy client needs and desires. (Fox, 2006)
Product Design Phases
Analysis:
Understanding the problem
Resolution:
Solving the problem
Product Design Phases (cont.)
Analysis results in Needs:
A statement of the "problem"
For example, "The user needs to ..."
Resolution results in Requirements:
A statement of the "solution"
For example, "The product must..."
Product Design in Context
In Heavyweight/Non-Incremental Software Processes:
Product design is (mostly) completed "up front"
and the result is (mostly) "set in stone"/"non-negotiable"
(as would be the case for a manufactured product)
Analysis is (mostly) completed before resolution begins
(though there is often some iteration)
In Agile/Incremental Processes:
Product design is a "just in time" activity (i.e., just enough
of the users' needs are identified to create requirements
that allow construction to begin/continue)
The product is modified continuously (based on conversations and
negotiations with stakeholders)