In many of my articles, I talk about the Software Designer, I even call myself one. But what does this mythical person do? Are they a graphics designer? An architect? A consultant?
A software designer is an individual who has the vision, passion, communication, understanding, flexibility and process to generate software form; and make the necessary decisions about what, when, where and how in development.
Note that the designer does not necessarily conceptualize the idea. They may do so, in which case they will be designing their own product, much like Indies do. More likely, a client has an idea, and the designer analyzes it, visualizes it and communicates it within a development project.
There are really two things at work here, vision and visualization.
Designers need vision to see whether an idea has merit, whether it’s worth doing or not, and how best to do it. They need take the idea and envision the benefits, usability, popularity, feature set, plan and solutions to come, choose a path and set clear product objectives.
Designers also need to visualize it. A great designer can see the final product in their heads before the first line of code is written. They can see components, structures, themes, and processes; they can see the software running before it exists. If they can visualize it, they can design it. Visualization takes iteration and process to clarify the vision.
Design is not easy. Its iterative, hard work and for many, emotionally difficult. Its easy to stop after a few iterations, avoid the grind or just give up. Good software designers have such a passion for the software that they will iterate again and again until they are satisfied, grind until their backs break and keep on going. It takes passion to completely design a product to pixel perfect looks, perfect functional mix, intuitive flows and rock solid engineering.
It’s no good if the design is locked up in the designers mind. No matter how awesome it is, unless the designer can communicate all aspects of the design to the various teams, it will not be developed. They need to communicate the desired look and feel to the graphic designers, they need to communicate the feature set to stakeholders, users and customers, they need to communicate the architecture and components to developers. They need to speak graphic, business and tech clearly to get it developed right.
Great designers do not design alone. They work with artistic graphic and interface designers, they commune with systems and software craftspeople, they debate with experts in whatever fields impact the idea, and consult with stakeholders, users and customers. With each they need to listen, learn and communicate in order to crystalize the design.
In order to design a great product, the designer needs to have a deep understanding of the idea. They need to feel the flows, get intimate with users and customers, spot the challenges, drill on the details, and most importantly be clear on all aspects of the idea. This clarity will lead to great architectures, simple workflows, great user experience, proper function mix, all in all, a great design.
A great way for a designer to project this clarity is to walk the idea back to the idea’s originator, to present their understanding and to resolve any misunderstandings early.
Good software designs change, great software designs are flexible. As the designer analyzes the idea further, better flows emerge, and these should be communicated. As the designer iterates with the graphics team, the theme of the software will change and evolve. As the designer constructs the architecture, it too evolves. Great designers use these evolutions to improve their designs, learning the lessons from previous evolutions and integrating the ideas and feedback of others.
And if an unbeatable challenge presents, designers need to find a better design, a novel solution or rework the existing design to eliminate the barrier.
Design is all about art and craft but its also about process. Evaluation, combination, evolution and generation are all iterative processes. It takes process to completely evaluate the idea, to combine the input of others and the lessons learned, to evolve and iterate a design and to generate the final product.
It takes process to explore design ideas to see if they are workable, it takes process to build platform and architectural models, it takes process to determine optimal flows. Great software designers understand these processes and work them hard to complete designs. And they also know when to finish the process.
All the vision, passion, communication, understanding, flexibility and process will not lead to a great product unless the designer can and does make decisions. They need to decide on workflows and functionality so they can focus on more detailed design. They need to decide which features to include, what platform to use, which architecture is best, implementation priorities, standards, usability and interface so the developers can get going. They need to decide on theme, GUI, colors and image so the graphic designers can complete their work.
And as issues and challenges arise, as things change, and they always do, designers need to keep making decisions to keep the product development on track.
Many of these decisions are and should be those of the designer, and many are those that need to be made in consultation with others. Flows and functionality decisions need to be made with the client and stakeholders, platform and architecture decisions with the project manager and programmers, look and feel with the graphic designers. Good software designers enjoy regular consultation with all parties involved and make timely, clear decisions.
In the real world
Software design is often lacking, which is why most software is unwieldy, nonintuitive, bloated and unpleasant to use. That’s because most software is either insufficiently designed, or designed by committee.
Insufficient design comes from skipping design process steps, not looking at workflow, ignoring usability, picking a preferred platform instead of the right one, using the same old architecture instead of designing the right one, and ignoring graphic design outright. It comes from using programmers who have only one platform and language skill to come up with the design, from using business analysts who have no technical skills to write designs, from using project managers with no aesthetic skills to create strategies. Look at the corporate software in front of you next time you are at work, and you’ll see what I mean.
Design by committee is even worse, and just as common. The committee meets to choose functionality, flow, platform, just like a software designer would, but contains as many different visions and understandings as there are members. Combining these disparate visions and understandings leads to compromises and compromised design. And invariably, not all committee members are happy. Passionate members push the others to accept their design forms, practical members push theirs, and uncaring members hold to their favorite tools. The result is often a confusing, incoherent design that is barely communicable and each part of the project runs off on it own.
In the real world, there are many examples of this. Microsoft Windows is the ultimate example, for example the Off switch in Vista (and 7). There are nine of them! Moishe Lettvin describes here how it came to be, up to 43 people were involved! Michael Arrington raves on that Digg’s redesign was done by the largest committee.
He also gives the best example of great design, the iPhone.
“Product should be a dictatorship. Not consensus driven. There are casualties. Hurt feelings. Angry users. But all of those things are necessary if you’re going to create something unique. The iPhone is clearly a vision of a single core team, or maybe even one man.”
That one man is not necessarily Steve Jobs, he has ensured that each software team at Apple has a single fully authorized software designer and decision maker, and he handles the decisions that operate across teams.
For your software
Whether you have an idea for a single function widget, an internal corporate system, a consumer application or a massive multinational’s mission critical system, you need a great designer. Someone to create the product vision, has the passion to drive it home, can communicate it to all involved, understands all the niggly details, has a process to iterate and evolve the best design, and can make the hard decisions to create the perfect software form. Then hold on to the designer throughout the development process, to guide the stakeholders, artists and programmers to produce the best software and to correct the design’s course when things change.