27 March 2013

Beautiful code does not make a beautiful product

Developers, I know this might hurt, but it has to be said: beautiful, logical architecture within your code does not magically lead to software that users find equally beautiful and logical to use.

The sad state of most software is largely a result of ignorance to this distinction, leading to development practices that privilege the concerns of developers above those of users.

I found a striking illustration of this in Eric Evans’ well-regarded book, Domain-Driven Design. The needs of users appears as only a shadow amidst discussion about the design of data and logic.

This is the design process that Evans recommends:

  • Developers extract and clarify business needs through conversations with customers (who may not be the actual users of the software).
  • Through great intellectual effort, developers convert the business model into a software model.
  • Back and forth dialogue between developers and customers ensures the accuracy and viability of this model.
  • At the end of this process, a single model exists which represents the needs of customers and guides developers as they write code.

The deficiency of this approach for building human-facing systems is illustrated by an example provided by Evans himself. In the example, he tries to show the dangers of "superimposing" a UI model that differs from the underlying business/development model.

A user of Internet Explorer thinks of "Favorites" as a list of names of Web sites that persist from session to session. But the implementation treats a Favorite as a file containing a URL, and whose filename is put in the Favorites list. That's a problem if the Web page title contains characters that are illegal in Windows filenames. Suppose a user tries to store a Favorite and types the following name for it: "Laziness: The Secret to Happiness". An error message will say: "A filename cannot contain any of the following characters: \ / : * ? " < > | ".

In Evans’ opinion, silently removing illegal characters to eliminate the error is unacceptable, which leaves two possible fixes:

  • Expose the underlying filesystem to the user and have them deal with Favorites like they would any other file.
  • Change the way Favorites are stored to eliminate the problem of illegal characters.

Amazingly, Evans treats each of these options as equivalent. The first solution increases the work users must do, forcing them to interact with the filesystem, while the second option simply removes constraints, keeping the simplicity of the Favorites model. Each of these solutions is logically valid, but only one is correct. It is only blindness to the needs — and frustrations — of users that allows them to be treated as equal.

The first solution is seen as viable because it retains the purity of the codebase and requires no work from developers. Instead, the burden is shifted onto users.

The needs and goals of users must take precedence over the desire of developers to write beautifully architected code. If the purity of the code would suffer from a change that enhances the experience of users, then the code should suffer.

The design process that Evans endorses is a fine way to handle the collection and analysis of business requirements. But this must be paired with a design process that focuses explicitly on the human facing parts of the system. Agreement between customers and developers does not ensure the soundness of a design. Users don't really know what they want, nor do they understand the complexities of software well enough to drive the design process. The specific skills and methods of designers (interaction, user experience, whatever they happen to call themselves) are needed to distill the real needs of users. Even then, a designer must continually evaluate his or her work through direct observation of users in front of running software.

The contrast between these different approaches can be seen in a classic debate between Alan Cooper and Kent Beck, appropriately titled Extreme Programming vs. Interaction Design.

In the ten years since this discussion, Cooper and the interaction design community have moved to incorporate the agile/lean methodologies championed by XP. However, while the value of design for software has become more apparent, my own experience with developers is that many still do not grasp the real consequences of designing software from the perspective of users, not themselves.

18 March 2013

What to know before joining a startup

If you are considering an offer from a startup, I strongly recommend two articles: Negotiating Your Startup Job Offer by Robby Grossman and The worst time to join a startup is right after it gets initial VC financing by Chris Dixon.

Robby's post is a thorough look at the mistakes and gotchas found in many startup job offers. I want to highlight two points:

  • Your stock options will not make you rich. It would take a Facebook-sized success for stock options to make you wealthy. If your startup does have a successful exit, a more likely scenario is that you can put a down payment on a house or buy a new car.
  • For many startup employees, stock options will amount to nothing. This is an area where I'd love to see more numbers and analysis, but all the evidence points to the reality that many (most?) startup employees receive no financial gain from options. The startup may fail, have a minor success (which means the options don't exceed the cost of purchasing them or the salary given up to obtain them), or the employee chooses not to exercise the options.

If Robby's post is about evaluating the specifics of an offer, Chris’ post provides a general framework for evaluating offers and opportunities.

The most important point can be found in the title: The worst time to join a startup is right after it gets initial VC financing.

Depending on your willingness to accept risk, there are two (much different) periods when joining a startup is best:

  • Before initial VC financing, as close to founding as possible. This involves more risk than most opportunities, but puts you in a position to shape the DNA of the company, receive a more significant share of it, and experience the building of a company from the very beginning.
  • After sustained growth. A low risk, but potentially high-reward opportunity. The company you are joining is either profitable or heading toward a successful exit. Even if your options are small, the chance of them returning value is much higher. You'll be able to learn how successful companies are run and get access to a network of coworkers who could become co-founders for your next venture.

Implicit in these two articles is another piece of useful advice: Beware of joining a startup in the “trough of sorrow”.

Being a member of a stagnant or floundering startup can be extremely difficult, professionally and personally. During hiring, it's natural that a company may paint a positive picture of their situation despite the stagnation. Beware. Ask to see revenue numbers and other key metrics. Talk to investors, current employees, previous employees, and third-party observers. For a company in this position, the most important question to answer is whether they have a strong enough culture to make it through.

Just as there are differences between startups and other kinds of companies, not all startups are equal. After you've looked at the financial and professional variables, the final question to ask yourself is whether you are passionate enough about the opportunity to make it through the days when you simply have to show up and keep trying.

14 February 2013

The advantages of design in the 21st century

There's a talk by Bruno Latour titled A Cautious Prometheus? A Few Steps Toward a Philosophy of Design that I find myself coming back to again and again. As with most academic presentations, the path it follows is winding and at times obscure, but it plunges into depths that few manage to obtain.

In the talk, Latour speaks of design as a practice and perspective that will be central to shaping the 21st century. In his view, the world is shifting away from what he calls "matters of fact" and towards "matters of concern." Meaning those things we formerly viewed as objective facts which must be grimly accepted are now coming under our ability to control: disease, death, the traits of our children, the earth's climate, and on and on. The world we inhabit will increasingly be one that is designed by humans.

The central portion of the talk outlines what Latour sees as the "five advantages of the concept of 'design'". The argument that runs through each is that design is a necessary antidote to certain perspectives that shaped the 20th century.

  1. Design implies humility

    As a concept, design implies a humility that seems absent from the word "construction" or "building".

  2. Design pays attention to details

    "Go forward, break radically with the past and the consequences will take care of themselves!" This was the old way - to build, to construct, to destroy, to radically overhaul: "Après moi le déluge!" But that has never been the way of approaching a design project. A mad attention to the details has always been attached to the very definition of design skills.

  3. Design is open to interpretation and questions of meaning

    Wherever you think of something as being designed, you bring all of the tools, skills and crafts of interpretation to the analysis of that thing. It is thus of great import to witness the depths to which our daily surroundings, our most common artefacts are said to be designed.

  4. Design is always a redesign

    Design is a task that follows to make that something more lively, more commercial, more usable, more user friendly, more acceptable, more sustainable, and so on, depending on the various constraints to which the project has to answer.


    Designing is the antidote to founding, colonizing, establishing, or breaking with the past. It is an antidote to hubris and to the search for absolute certainty, absolute beginnings, and radical departures.

  5. Design involves an ethical dimension

    No designer will be able to claim: “I am just stating what exists”, or “I am simply drawing the consequences of the laws of nature”, or “I am simply reading the bottom line”.

There is of course much more nuance and detail to be found within the talk on each of these points.

The talk ends with a challenge to designers:

Now here is the challenge: In its long history, design practice has done a marvellous job of inventing the practical skills for drawing objects, from architectural drawing, mechanic blueprints, scale models, prototyping etc. But what has always been missing from those marvellous drawings (designs in the literal sense) are an impression of the controversies and the many contradicting stake holders that are born within with these.

In short, if design is charged with responding to the negative externalities of 20th century technology -- climate change, disease, increasing inequality -- how can we avoid creating new (and perhaps even more devastating) unintended outcomes?

18 December 2012

Guns as technology, guns as culture

Once a technology becomes ubiquitous, it ceases to be experienced as merely “technology”. It is now a part of culture.

Technology only exists as technology when we are forced to deal with an incomplete or buggy implementation — when the thingness of it gets in the way of the benefits it provides. Once a technology becomes stable and understood, it takes its place alongside other technologies that have become part of culture: hammers, running water, telephones, tractors, paved roads and so on. When ubiquitous technology becomes a part of culture, it also becomes a symbol. A symbol of mankind's desire to transcend our limits, to master some part of the world that has previously overwhelmed us.

This perspective helps us untangle the complexities of gun control in America. Guns are not only technology, they are culture and symbol. Much unproductive debate is had when they are reduced to merely one or the other.

When viewed as dangerous technology, it is common sense to severely restrict access to guns. The Onion understands this.

When viewed as symbols, guns are a potent part of the American myth. They are synonymous with the desire to tame nature and prove oneself worthy of existing within it. They represent authenticity and self-sufficiency. For those who feel a cultural connection to them, gun laws control culture, not technology.

But in the time since guns were absorbed into American culture, their power to destroy has grown out of proportion to their benefits. Like fossil fuels, they are a technology whose profound consequences have taken hundreds of years to manifest.

Debate about guns in America must grapple with the need to regulate dangerous technology, while navigating the complicated relationship to the symbol. American gun laws will be a delicate surgery at the technological, societal and political level.

22 November 2012

Design & Hacking

If design is treated as a neutral or implicitly good activity, it becomes merely a function of marketing and advertising. For design to be the radical activity that it can and should be, it must incorporate the spirit of hacking.

In a seminal post, Paul Buchheit describes hacking as a search for the actual rules of a system, as opposed to the perceived or claimed rules. It’s a search for truth.

Hacking is an overloaded word in our culture. It’s a search for truth, but it’s also a search for vulnerabilities and the means to exploit them. It often operates in the space between right and wrong. Taken far enough, hacking changes the world. It creates a new system with new rules by destroying the old system. It’s hard not to evoke shades of Nietzsche here.

Design that doesn’t attempt to achieve systematic change is merely style. The stylist produces fashion that is easily incorporated into the existing order of things. In order to meaningfully shape the future, design must challenge and overturn entrenched systems, not simply create new packages for yesterday’s ideas.