Software design is the process by which an
agent creates a specification of a
software artifact, intended to accomplish
goals, using a set of primitive components and subject to
constraints. Software design may refer to either "all the activities involved in conceptualizing, framing, implementing, commissioning, and ultimately modifying complex systems" or "the activity following
requirements specification and before
programming, as ... [in] a stylized software engineering process."