I want to say only one sentence about software design.
“Software design starts from and ends with [ separating things that will be changed with high possibility, from others that will not. ]”.
In macro point of view, software requirement is main subject to classify. In micro point of view, function parameter, algorithm, data structure and so one can be targets.