11 Designer, Architect, Developer

Over the last six years I’ve bootstrapped three successful enterprises (Cube6 Media, Gravatar, and GitHub) and failed to gain traction with a handful of others. After a lot of thought and reflections on these experiences, I’ve identified three major skills that should be present in order to best build a successful web application. These roles can be loosely defined as the Designer, the Architect, and the Developer.

In college I spent a lot of time in the campus dark room dipping rolls of film and sheets of paper into various chemical baths beneath a dim red light. The most interesting part, though, was mounting the negative into the projector and exposing the photo paper. Every time I turned on the bright light of the projector I was reminded of a saying that has stuck with me ever since: “A photograph is nothing more than an image created by light.” Think about that for a second. The only way the photograph, and hence, the viewer, interact with the original subject is via the light that was captured. None of the fancy flashes, soft boxes, bounces, umbrellas, or backdrops mean a thing if the light they produce or redirect is in the wrong place. If the light is bad, the photograph is bad.

I think the same concept holds true for web applications. Adapting the saying for our own situation, I would say: “A web application is nothing more than an experience created by design.” Users can’t see what technology you use or whether you follow an agile development process or not. All they experience is what’s on the screen. It can’t be confusing, it can’t look amateur, and it can’t have spelling errors. If the UX is bad, the web application is bad. It’s that simple.

The way you get good UX is by having a good designer. Someone on the team must be skilled not only in making things pretty, but in making them usable as well. Without a good UX/visual design, you may as well not even bother. It’s impossible to stress how important this is.

Design comes first. It defines what you will build. Once you have an idea of what you’re creating, you need to figure out how to make it happen. That’s where the Architect comes in.

With the recent explosion of open source solutions to common problems like databases, web frameworks, job processors, messaging systems, etc, you need a team member that has a broad understanding of the technology landscape. The choices you make early on will impact your company for many years, and the wrong choices can spell disaster. The role of the Architect is to choose the best tools for the job, and to decide when new tools need to be created.

The Architect must also be ready to scale any piece of the site when you start attracting users. There’s a fine line between premature optimization and crumbling under the wave of thousands of new signups. A good architect will always be one step ahead of the curve, laying the groundwork for future scaling needs just before they are needed.

Design and architecture dictate what you build and how you build it, but without someone to do the construction, you’re dead in the water. The role of the Developer is to turn the wishes of the Designer into reality while staying within the constraints that the Architect has put forth. In addition, the Developer has to ensure that the codebase remains healthy and protect against technical debt. Sloppy development up front means a huge amount of wasted effort later on.

The three roles of the Designer, the Architect, and the Developer may reside in a single person, but it’s much more common to see groups of two or three people satisfy all these skills. In fact, the best founding teams are those where everyone fills some combination of roles. This fosters an environment of friendly argument that leads to better decisions.

But whatever you do, make sure your team fills all of these roles. Once you do, executing on your idea should come easily!

About Tom Preston-Werner ()

Tom Preston-Werner is a cofounder of GitHub, the social coding phenomenon that has captured the imaginations of hackers around the globe. He is also a serial entrepreneur having sold Gravatar to Automattic and run a web/graphic design firm, Cube6 Media, out of San Diego. When he's not writing code or running a business, Tom likes to mountain bike the Redwood forests of the Bay Area and snowboard the slopes of Tahoe.

Tagged: , , , , , , , , ,
  • http://twitter.com/PazzaArchitect Pascale Scheurer

    Very interesting. I’m an architect and I’m always intrigued by how similar the creation of web applications and buildings really is. We definitely have these roles in our field.

    It’s fun to learn from each other too – a few years ago I was discussing with Channel 4′s online content director. I was explaining we wanted to run a competition for young architects to design a virtual centre where we could get together online, since we didn’t have funds to build it physically. She replied that inversely, she gets website designers to think of designing a building, with signposts, a front door, rooms, wallpaper, furniture, and a welcoming host making guests feel at ease. A brilliant reversal of the concept.

    • http://iain.nl iain

      I have to disagree with the analogy of creating buildings and software. Especially when it comes to the role of the developer and architect. I think they are one role. Code is comparable to the blueprint of the application: it’s an accurate description of what the final product will be. Glenn Vanderburg explains it excellently in his talk at the Lone Star Ruby Conference (http://confreaks.net/videos/282-lsrc2010-real-software-engineering)

      There is danger in seeing software as making a building. Software isn’t set in stone. If you think this way, you’ll become bogged down in trying to get all te details right.

      I do agree with the article that UX is the most important feature of a web application.

  • http://twitter.com/jrasmusson Jonathan Rasmusson

    Great article. Agree 100%.

  • http://twitter.com/jrasmusson Jonathan Rasmusson

    Great article mojombo. Good for you for also starting 3 great ventures. All the in the future.

  • http://twitter.com/soulim Alex Soulim

    Thank you! Fantastic article. I’m agree on 100%

  • Pingback: Links della settimana #11-2011 « Avventure sul Web

  • http://twitter.com/daonb daonb

    great post. thanks. 
    The only thing that’s missing for me is that you have to ensure not only that your team fills those roles, but that there is one and only one team member that is ultimately responsible for it. It simplifies decision making and eliminates a lot of the friction.

  • Jens

    Tom,
    totally agree, you need these three skill sets. 

    I think you need one more. However, I think you are just covering product development. The key learning of the last 10 years has been that customer development is THE most important aspect of building new products/new businesses. 

    What do you think? Where does that fit into your skill set schema?

  • nXqd

    Thanks for good article. 

  • http://www.facebook.com/jeremy.fein Jeremy Fein

    Awesome post, couldn’t agree with this more!

  • http://twitter.com/olefredrik Ole Fredrik Lie

    Spot on!

  • Chris Russell

    Thanks. Thoughts on why it’s so difficult to get people interested in investing in software development tools? It doesn’t make sense to me.

  • Pingback: Linkflood #2-2011 | neetpiq