Well-defined problems have clear solutions, ill-defined problems require interpretation, and wicked problems have complex, ambiguous solutions judged as good or bad rather than right or wrong. Software design includes architecture design to organize the system, detailed design of components and interfaces, and construction design of code and frameworks. Roles include systems engineers, software architects, component designers, and user interface designers, with differing responsibilities.