People (including programmers) like to think that programming is binary, there’s a right way and a wrong way, good or bad.
But in reality it’s all very subjective.
There’s usually a dozen ways to solve a problem, and that’s where design of the code comes into play.
GUI is of course literal design, but code is designed too.
The software designer will usually not write a single line of code. Just like a graphic designer does not usually write the website they have designed.
A software designer will look at the requirements. They will set up a functional specification so that they know what technologies they will be working with where. They will layout the data architecture and information flow. They will define the functionalities of the software. They will basically “draw” an image of the software that is to be developed from a high level perspective.
This is then handed to a team of programmers to actually write the code and make it happen.
Ideally you want a software designer who has coded and is experienced in data architecture and work flows. They need to be logical and have an understanding of the technologies that are to be used.
for further reading consider this article