Software and hardware design is less different than software designers think, but more different than hardware designers think.
Fred BrooksA design style is defined by a set of microdecisions. A clear style reflects a consistent set. A clear style may not be a good style; a muddled one never is.
Fred BrooksThe hardest single part of building a software system is deciding precisely what to build the most important function that software builders do for their clients is the iterative extraction and refinement of the product requirements. For the truth is, the clients do not know what they want. They usually do not know what questions must be answered, and they have almost never thought of the problem in the detail that must be specified.
Fred Brooks