A couple of weeks ago I published an article about how design and development are not orthogonal disciplines. That is to say, they are not mutually exclusive, and becoming more of a designer does not make you less of a developer, and vice versa. More importantly, the qualities and ways of thinking that make you a better developer also make you a better designer (the converse also being true). The article hit the front page of Hacker News and if the 74 (mostly) thoughtful comments are anything to go by, this is a concept that many people are thinking about. Reading the discussion about the topic, I realized that despite my insistence that people be conscientious about which words they choose, I had been lax with my labels, and missed an important point about the level at which you can realistically practice both disciplines simultaneously.
The root of the word design is the latin designare (de, from + signare, to mark), which means to mark out. The original latin root is closer to our modern use of the word "designate," but its connotation of applying meaning has strengthened over time such that we now use the word to mean "the creation of a plan or convention for the construction of an object or a system."1 Designers create plans for making things, which means people creating software are designers too. When I spoke of "designers" versus "developers," I left out the implicit modifier that should appear before the word design when used in a web context. I never said which kind of designers I meant. In general when people are talking about web related projects we mean an interaction or visual/graphic designer. To quote @adrianh's wonderful comment,
The real problem is with the labels "designer" and "developer". They're not "real" things. They're reifications. They're arbitrary labels we apply to certain communities of practices."
In my article I was referring to interaction designers, specifically. For those not in the know, an interaction designer is a designer with a collection of skills focusing on modifying and eliciting desired user behaviors. Like other web design disciplines, interaction designers have an interest in an interface's form. Graphic/visual designers focus more specifically on the look and form of the interface but that leaks into interaction design because beautiful interfaces are easier to use, and tend to have a great hierarchy of visual information, making them easier to understand. Whether you think of interaction designers and graphic designers working on the web as separate, or group them under the term user interface (UI) designer, the fact remains that their ways of thinking and working overlap with that of web developers.
A Jack of All Trades, Master of Some
The other point I left out is why I included the "world-class" level designation in my diagrams. I should have said that while it is possible for a single person to practice both interaction design and software engineering at a professional level, rare is the person who can become world class at both. To quote @adrianh again,
"Nobody, or only a very, very, few extraordinarily talented individuals, are great at everything in development. Ditto for design. People have preferences and specialities. Why not pick from both baskets? Design and development are both complicated. However, in some places (e.g. figuring out what people need, requirements gathering, etc.) they are complicated in the same kind of way. In other places (spotting patterns, simplifications, etc.) they involve similar sorts of skills.
In general, a single person cannot be good at everything, but they can be really good at many things, including the required skill sets to effectively practice both interaction design and software engineering for the web at a professional level. The reason doing so is feasible is the amount of overlap between the two professions. To borrow again from Austin Bales' talk,
"It's not like we're marine biologists and coffee baristas…we're all just making web stuff."
Unicorns in the Wild: Its Not a Job Title
In the real world, only a select few (smaller) companies look specifically for people who can practice visual, interaction, and software design at a professional level simultaneously. These companies--usually start-ups--need every employee to perform double duty because there are so few. The extreme example of this is the "one man shop," the freelancer who is forced to design and implement website interfaces. As a person with the skills of the fabled "unicorn," you generally have to resign yourself to being dealt with as a designer who can code, or a software engineer with interaction design skills. In bigger companies, a person who is capable to doing both interaction design and software engineering has to choose one to dedicate the majority of his or her time to one or the other. These employees are still highly valued because an interaction designer who can code is a better designer because he/she is better aware of the design constraints on the web. A software engineer who knows about information architecture and visual hierarchy is a better engineer because he/she is able to make better tradeoffs when reducing scope due to technical limitations (and let us never forget that API design is UX design for code).
Becoming A Unicorn
Practically speaking, necessity is the mother of all…unicorns. To use BJ Fogg's behavior model, people only do stuff when there's ability, motivation, and a trigger. In the case of a unicorn, both the motivation and the trigger is usually the result of a project that with an upcoming deadline, and the ability comes from a computer with an internet connection. Continuously put yourself in a position where you have to do both design and development, and that forehead horn will grow eventually.