| Tony ( @ 2005-11-08 23:47:00 |
| Current mood: | |
| Current music: | No Doubt - End It On This |
| Entry tags: | anecdote, business, technology |
Some personal revelations inspired by tonight's BayCHI talk
Eight years ago I discovered Visual Basic 3. At the time I had only ever used simple imperative languages like GW BASIC and PC Logo so the ability to create user interfaces via direct manipulation was both impressive and addictive. About a year later, after having tried to build a customer and sales management system and failing miserably, I became disenchanted with VB and swore off it forever.
Tonight at BayCHI I listened to Alan Cooper talk about the death march and how to avoid it. One of his points was that, in addition to the nontechnical aid provided by product management and executive direction, good software development requires 3 different technical roles that are generally muddled together, to disastrous effect, in most software companies. For the purpose of explanation he assigned them labels: programmers write code to be shipped by adhering to well-defined process and are concerned by the minutiae of production-quality software but need to be good at solving complex problems that arise in the process of crafting code; design engineers create the detailed architecture that the programmers will use to build the software but need to be good at writing throwaway code fast so they can tackle the tough conceptual issues via rapid prototyping; interaction designers envision and describe the user experience that the software is eventually going to provide so they need to be able to translate between the otherwise mutually incomprehensible jargon employed by geeks and suits.
If you're wondering into which camp you fall, I think an effective way to determine this is based upon your programming language of choice. Interaction designers will tend to prefer visual programming (like Flash or VB) or RAD for creating quick mock-ups of the user experience; design engineers will tend to prefer weakly-typed esoteric languages (Like SmallTalk, Lisp and Ruby) for iteratively prototyping solutions to challenging problems; programmers will tend to prefer strongly typed mainstream languages (like C++). Alternately, consider which of these goals is closest to your heart: end-user satisfaction and productivity enhancement (Interaction designer), a clean design based upon the best technology (design engineer), or releasing software that is standards-compliant, reliable, efficient and secure (programmer).
But what does this mean for the executives running software companies? Well, they need to avoid mixing up the 3 distinct roles so that people do what they excel in and each task has sufficient brainpower devoted to it. Furthermore, the software ideas should begin with the interaction designers and end end up as code produced by the programmers with critical guidance from the design engineers midway through.
Anyway, when I heard Alan elucidate this division among the technical staff I suddenly understood why I've felt such an identity crisis ever since I decided to study computer science and become a computer programmer eight years ago. My heart has never been in the code; I'm really cut out to be an interaction designer but am also fairly well suited to being a design engineer. The reason I became fascinated by computer programming back in high school is because I was enthralled by the prospects of how computer software could improve our lives and implicitly recognized that writing code was the only way to make these dreams a reality. Later on I noticed the distinction between programming and design engineering. Realizing that I was more interested in and adept at the latter, I gravitated toward what was then termed software architecture and almost ended up studying it in grad school. But about a year ago I began to creep back toward my original spark of interest in interaction design, which is what compelled me to jettison my plans for grad school in favour of a position on VMware's UI team where I now spend time in all 3 aforementioned roles of software development.
What I'd like to do is eventually increase the amount of time I spend on interaction design instead of programming. Unfortunately, Alan's encouragement to lavish more resources upon interaction design has not yet been taken to heart by most software companies. The obvious solution would be to start my own company. Philip Greenspun actually presented an idea for a startup tonight but it involves hardware so the Cooper model of running a successful software company can't be applied to it easily.
It's all very exciting. But I'm the sort of person who could have multiple heart-attacks while biking through rush-hour traffic with rabid pit-bulls snapping at my heels and then say it was an exciting trip... So what do I know?
Update: after a long IM discussion with
adamspitz I am now convinced that the best software developers are those who understand and enjoy all 3 roles.