Code is material: why designers must learn to code

It would seem obvious and non-contentious to say that if you are crafting a digital product, you should know how to code.

It is neither obvious nor non-contentious.

Last year, around this time, Jared Spool offered three reasons why learning to code makes you a better designer. He got responses indicating only partial agreement or complete disagreement from Jan Tidwell, Hillel Cooperman, Davide Casali, and on and on. (There are also lots and lots and lots of responses in the affirmative).

When you craft something, you manipulate a material to do what you want, to behave in the way you desire. And when you have a mastery of that material, you can act with a strong sense of fluidity. I’ve heard artists describe this fluidity as a dance: where both partners have autonomy, but there is harmony between them. The artist knows the limits of the material, how it “wants” to move or flow, how it will react when you push or pull it, how it will change over time, how it will react with other materials, and so-on. When I studied ceramics in upstate New York, my mentor used to mix glazes according to recipes he developed over thirty years. He would follow the recipes to a point; then, he would add pinches of materials based on the humidity or the ambient room temperature. I’ve been using his glaze recipes here in Austin, and while the general aesthetic is right, they don’t have the same richness and depth, and I don’t have enough of a mastery of the material to fix them. (He also adds coffee to the clay before mixing it, a habit I’ve picked up without really understanding why. He also listens to classical Indian music while throwing, a habit I fully subscribe to.)

I like the metaphor of “code as material.” When you write code, it has a flow to it. It reacts to your actions (and the actions of other people – “users”) in certain ways. It changes over time, based mostly on the complexities of the environment in which it is found. It reacts to other code, and so-on. And, like clay and glazes, it has both accessibility for basic learning and a frustratingly long learning curve towards developing mastery. Once you develop mastery in code, you can dance with it, and produce the same types of harmonious beauty that comes from understanding the flow and pulse of any material.

I’m a big proponent of thoughtful, methodical, intellectual design process. I advise students to think through the details. Consider the edge cases. Work through iterations. Don’t throw everything up and see what sticks; have an informed opinion. Take your time. Make supporting artifacts, as these help you think. And so-on.

But one of the few principles of agile that I actually agree with is the idea that design doesn’t end when development starts. Development should be a creative activity, not a rote form of execution, and if that’s true, coding is an extension of design. During development, design decisions happen over and over and over. That’s not a failure of the designer forgetting to specify things; it’s a reality of dancing with the material, and it should be one of the most enjoyable parts of making. Instead, it commonly becomes a point of contention. It is in these real-time development decisions that a quality product is often lost. Developers who have little autonomy feel that they weren’t given all of the data to execute. Designers who don’t understand the material feel frustrated (both with themselves and with their development teams) when they see the results. The seams of the product become exposed, as these small details add up.

I’m watching one of my alumni, Ruby Ku, code the next version of HourSchool through paired programming with another alumni, Chap Ambrose. Two years ago, Ruby didn’t know how to design or code. Now, she’s achieving proficiency in both. And as a result, I see her engaging in the dance, and having moments of beauty in crafting. And as a result of that, I see her having a more thoughtful, more considered, and more nuanced opinion about digital products in general.

Ruby’s broad goal is to tackle wicked problems. This can only help. Learning to code is giving her increased mastery over her materials, and so she can begin to craft things she sees as positive changes to the world. Technology is a magical bridge between people because it acts as an amplifier. Learning to design and learning to code will give you control over what is amplified, and allow you to drive the changes you want to see in the world.


[Related: Craftsmanship]