Software design is the act of determining the user's experience with a piece of software.
It has nothing to do with how the code works inside, or how big or small the code is. The designer's task is to specify completely and unambiguously the user's whole experience. Here are the beginnings of a pattern language that can be used to generate software designs which are user centered . By user centered, we mean software designs that place the user's experience first and foremost. Even if a software system is architected in such a way that its internal structure and operations are efficient, elegant and correct, it is ultimately the interface by which the end user judges its usefulness.