An Interview with Jeff Atwood
Published: October 22, 2012
There are a few online resources that I use to keep up to speed with what’s happening in the world—or to help me get new ideas for design. One of these is the Coding Horror blog, where Jeff Atwood talks about programming and human factors. Another is my go-to site for asking and answering questions about user experience: the UX Stack Exchange, one of the many Stack Exchange Q&A sites. I was delighted when Jeff Atwood, the man behind both of these sites, agreed to do an interview for UXmatters.
Peter: Jeff, thanks for your time today. Could we start with a brief history, up to your Stack Exchange days?
Jeff: I sort of mark my career in two phases: one before the blog and one after the blog. Before the blog, I had a background as a programmer, working with a lot of small businesses.
I’d been attracted to programming at a very young age, on early personal computers. I had a Commodore 64, an Amiga, an Apple II. Once I learned to bend the machine to my will, I sort of fell in love with that idea and followed it through. That led me to the realization that I loved this stuff a little too much. I really liked it! It wasn’t really a job to me. It was kind of a lifestyle, almost, and the blog was an offshoot of that. I wanted to talk to people about my stuff and my job.
I’d switched to a large pharmaceutical company at that point. I was happy, but I didn’t have people who loved this stuff as much as I did. So, starting a blog was a way to reach out and touch the rest of the world and talk about stuff I love. You see who finds your blog, and the world kind of beats a path to your door. I reached a point in my career where I found I loved this stuff so much that I wanted to move somewhere and work for a company where software is the product—where we’re not just plumbers connecting pipes together, we’re the thing driving revenue for the company.
Peter: Coding is quite an ephemeral thing. What is the thing that really grabs you? Is it the thrill of solving a problem?
Jeff: Well, to be honest, it’s that you get to play God. You get to create a world where you control everything that happens. And beyond that, in the sense of playing God, it’s also kind of cool that you can actually create a world. People create whole online worlds for games—panoramas of forests, trees, and houses and people to interact with. I just found that fascinating—that there’s this world inside the world, and it’s kind of the ultimate machine. Certainly, as a kid, I tried to take things apart and build things. I remember trying to build an arcade machine out of cardboard, because I loved arcade games. And cardboard is great, but cardboard is kind of a pain in the butt compared to software. Software is very malleable building stuff, and you can build anything in it if you’re prepared to deal with the fact you’re building a virtual thing and not a physical thing. So, I think that’s seductive and what drew me to it the most.
Peter: So, you’d gotten as far as moving to a pharmaceutical company, what happened then?
Jeff: Yes, and I wanted to make a transition to a company where the software was the actual product, not a side effect of doing business that they tolerated and paid for—like hiring a plumber. I wanted to be part of the revenue stream for the company.
So, I moved to California, which is like a Mecca for geeks, because the personal computer was born here. Consider all of the companies in the San Francisco Bay Area. It was nice to come to Mecca, if you will, where a lot of stuff originally happened. There’s a huge tech industry here, of course.
I took a job at a small company that did consulting work for Microsoft, a boutique consulting firm called Vertigo Software. And during that time, the blog got ridiculously popular. The blog was a factor in my being hired at Vertigo, because the CEO liked my blog. He’s a nice guy and still a close friend. So, while I was at Vertigo the blog really took off and started to overshadow my regular work. It started to seem very quaint to come into work and influence 10, 20, or, if I was lucky, 50 people in a day, when I could write a blog entry and influence tens of thousands of people in a day. So it started to be a sort of Clark Kent / Superman dichotomy.
Peter: A lot of passion comes out in your blog. Was there ever any conflict between the job and the blog?
Jeff: No, the company that I worked for was very tolerant of the blogging. In fact, I also had a blog at Vertigo. But it’s hard to get people to maintain a blog. It was a good working relationship. Anyway, what it came down to was that I had this big ball of energy in the blog, and it was a question of: What do you want to do with this big ball of energy? Are you just going to throw it away? Are you going to let it dissipate? Are you going to push it in a direction? What do you do when you have a big ball of energy?
I thought it would be irresponsible not to take that ball of energy and push it in a direction that made something? That’s when I started reaching out to people online to try and find out what to do with it. And one of the people I contacted was Joel Spolsky, who became my business partner for Stack Overflow. At the time, Experts Exchange was very popular in Google search results and had the answers for a lot of technical questions, but it was not a pleasant experience. So Joel’s idea—and it was a very good idea—was, “Lets do Experts Exchange, but without all the unpleasantness attached to it.”
Peter: I love the idea of the ball of energy. It’s like a video game where you’ve built up enough energy to do a special move, and you’re just deciding which special move to do.
Jeff: That’s right! That’s a great way to explain it!
Peter: I’m not familiar with Experts Exchange. How did that work?
Jeff: I wouldn’t say Experts Exchange is defunct, but they don’t show up in search results as much anymore. They’ve been pretty much displaced by Stack Overflow and Stack Exchange, with recent Google algorithm changes. And that was kind of intentional, because we liked Experts Exchange in terms of the service they provided, but we felt it was like being sold a used car by the stereotypical used car salesman, trying to trick you into buying a load of things you don’t want.
Peter: Was it kind of a paid, subscription model?
Jeff: Well, they wouldn’t really show you the solution. It was printed in Klingon, so it looked like the solution wasn’t there, but it actually was. You’d type your question into the search engine and get an Experts Exchange page that said, “Oh, here’s a question almost exactly like yours!” but the answer is gibberish—unless you pay money. The problem is: you can’t do that and be a valid search engine target. It’s called cloaking when you present one set of search results to Google and another set to users. But if you scrolled all the way down, past the Klingon, the answer was actually there. But, in a lot of circles, this made them loathed.
Peter: You talk a lot about human factors on your blog. Did your interest start when you were looking at Experts Exchange or before then? You talk a lot about the human element of software engineering on the blog.
Jeff: I do because, if you get down to first causes, it’s not actually a problem with the way software is constructed; it’s a disconnect between what the programmers or designers thought should be happening and what the users think should be happening.
When you actually examine software development itself, usually a lot of the problems are around what we call peopleware. Problems like: Why isn’t it working? Why are we so far behind schedule? Why can nobody work together on this team? It’s not because they didn’t have the right compilers.
The book Peopleware was actually instrumental in our getting this understanding that 80% of anything you attack is about questions like: How do people interact with the software? How can you get them to interact in a way that makes sense? That’s what you need to worry about. A lot of the time it doesn’t matter if your code is technically correct or pretty. That’s irrelevant if no one can actually understand what the hell it does. So, let’s get to first principles, first causes. Let’s understand what’s going on here. And that is: Why can’t Joe figure out your program?
The UX book that I read first and that I recommend to everybody is Don’t Make Me Think!” I have a bunch of books on my reading list about usability and human factors. I was a big Tufte fan for a long, long time, but the Krug book was really instrumental in my realizing that a lot of the stuff we worry about as programmers doesn't really matter. As a programmer, I wanted to build things that people used—that were functional and useful to people. If you analyze root causes, it’s almost always people factors that matter—usability and design play a heavy part in that.
Peter: One of the books you mention on your blog is Alan Cooper’s The Inmates Are Running the Asylum. When I read the book, I must admit to being a little bit offended by his description of software engineers as loving complexity.
Jeff: But they totally do! The book is completely correct! That’s one of my lessons to my fellow programmers: Stop trying to be a great programmer, and focus on trying to be a great human being. How do you build things that human beings can actually use. I’m not saying you have to fall in love with your fellow human beings—they’re a lot harder to love and are a lot more erratic than you’d like. But you have to appreciate that, if you want people to use your stuff, you have to understand human factors. You have to appreciate that you need to ask: What’s the prior art on this? How are other people doing this, from a design perspective? That's absolutely critical to being a great programmer.
You have to ask real people—or even better, observe them. People will tell you they’re using your application when they’re not actually using it! People can’t usually remember what they do. There’s this whole other field of data-driven ways of making things, which I’m not a huge fan of, but it’s better than guessing. Do you want to measure what your users are doing, or do you want to guess what your users are doing? Measurement is better that guessing, but it’s not the whole story.
Peter: Stack Exchange has a lot of mechanics that work really well—game mechanics like trophies, scores, only being able to vote a certain number of times each day, a question being worth less than an answer. You look at it, and it just works. How did it get to that point?
Jeff: Well, when we sat down to build it, the first thing was to figure out that we were building a Q&A system. We started looking at forums, but then realized that a Q&A system is not a forum—it’s a different beast. So, I looked at every Q&A system that was out there already, and there were a lot. It was like there was this whole underbelly of the Web that was based on Q&A that was very popular—Ask.com, Answerbag. Some very large sites were built around Q&A, and that was a good sign that the Q&A model seems to work. It’s very direct.
To be a good designer, you have to be a very good observer—and to some extent a good researcher. What have people tried before? What didn’t quite work? Don’t just look at the popular things that are working. Look at the experiments, things that didn’t work, and think about why they didn’t work. See if there was some aspect of it that did work, but some flaw that kept it from working well. There are a lot of really good ideas that are buried in some kind of related failure, but people throw away the whole thing. I think that's a mistake.
What we did—certainly what I did when I was building Stack Overflow—was to build a Frankenstein monster of stuff, of body parts from other sites that I liked. I liked this arm, this eye, this leg. I would take apart sites and discover that I really liked one part—but the rest, not so much. I was trying to build this Frankenstein monster out of just the good stuff, leaving the not-so-good stuff on the operating table.
Just research everything you can on a topic—all the things that people have tried. It’s a very holistic examination of why something is working. If you go to any of the About pages on Stack Exchange sites, you’ll see a Venn diagram showing the main influences on Stack Exchange. (See Figure 1.)
Figure 1—Influences on Stack Exchange sites
I mentioned blogging earlier—and that’s an amazing way of getting information to the world—and how hard it is to get people blogging. One way to blog is to do it in fun-size blocks of work. Don’t just sit there thinking, What should I blog about? You’ll get analysis paralysis.
If you go to Q&A sites, you’ll see that there are all these people asking questions, and you might think, Hey! I know the answer to that question! or I have a comment I can provide there. So, already you’ve taken away the problem of not being able to think what to write, and you actually have a directed goal.
This isn’t like Wikipedia, which is an ownerless system. If you write an amazing entry on Wikipedia, you can’t put it on your resume. I like the editing aspect of that site, but I don’t like the ownerless aspect. We felt that, if people own stuff, they’ll take care of it. Just like if it’s your car, you’re going to keep it clean. But if it’s a rental car, who cares—it’s someone else’s problem. You want a sense of ownership, so people care about what they write. They’re open to people helping with it, but it’s their thing.
And then, of course, I thought the achievements model of the Xbox 360 was amazing—in terms of getting people to learn without reading a manual. Nobody reads a manual for a game. Having to read a manual would be ridiculous. If you bought a copy of Halo 4 tomorrow, would you go home, get out your smoking pipe, and read the manual for a day before you played the game? No, you’d pop the game in and start playing. So, the first level of the game is the tutorial. It doesn’t say, “This is the tutorial,” because that would be boring. It says, “You’ve just dropped in on a planet, but luckily there’s nobody nearby. Oh, look, you’ve found a plasma rifle. I wonder what you could do with that? Oh, look, there’s a little rock outcropping. How can I get under that? Maybe I can duck.” But it doesn’t say, “This is the tutorial.”
The first level of every game is a way to introduce you to the game, get you on your feet without throwing you into a room of bad guys. The achievements model is fantastic—in that it lets you seek out elements of the game that you may not have experienced yourself. As you go, you’re getting these ambient awards: “Oh, look, you’ve completed the first level!” “You threw a grenade for the first time!” I was shocked by how powerful this was. It was so much better than reading a FAQ. Rather than reading about how a site works, just read the badge list, see how to get badges, and understand what they’re for. This approach teaches you about the system without a tutorial or anything like that. It’s very exploratory. You’re exploring on your own terms, in your own time, and you learn how the site works that way.
Peter: I’m a PS3 gamer, and I have friends who, when they first started gaming, saw that they were accruing achievements, started finding out what the achievements were, and played using the achievements list as a guide.
Jeff: Right, and it’s fun! The purpose of the system is to be enjoyable and to trick you into learning. There are two goals for every Stack Exchange site: to learn and to teach. And you learn by teaching. Teaching is a great way of learning.
I think, in the next-generation classroom, there won’t be teachers because everybody will be a teacher. Everyone will teach each other. Certainly, it’s like that in programming. I mean, you have these experts—these mythical, fantastic experts sitting on their clouds—and the rest of us are sitting in our cubicles, trying to get stuff done.
The way we get stuff done is by asking for help from our peers, and the way we show mastery of a topic is by explaining it to someone else. You really know something only when you can explain it to someone else. I really believe that. And that’s the primary goal of our Q&A system. We try to make it as easy as possible for that interaction to happen.
There are some side effects of the system that we need to manage. You’ve probably seen questions like: “What’s the best x in the world?” The system is by no means perfect, but I don’t think there’s a finer system in the world for managing technical topics, with a body of knowledge that people can verifiably own. I haven’t seen anything better. Granted, I created the system, so you’d expect me to say that, but I haven’t seen anything better.
Peter: And if you do see anything better, you’ll take a look at it, figure out why it works, and improve Stack Exchange.
Jeff: Right! On Stack Exchange it’s all about the learning. Fun is allowed, and fun is encouraged to the extent that we’re still learning from each other. That has to be prioritized to the extent that we may suppress the fun. It’s like eating a gallon of ice cream—while it’s fun, it’s not necessarily healthy for you.
Peter: Years ago, I was asked to help someone with a coding problem when I had no idea how the language worked. So, I started by asking them to talk me through the problem—in a way that’s similar to your “Rubber Duck Problem Solving” blog post. In teaching, you really need to be able to codify your ideas and structure them in a way that makes sense to other people.
Jeff: That’s right. You’ve demonstrated your ability to learn something if you can teach it to other people. This also indirectly explains why we require some discipline in our system. For example, if you ask a question, we’re really going to be kind of jerks about the idea that you need to ask a well-formed, complete question—one that actually explains the problem without pasting in miles of source code that nobody is going to read—because that helps you. You’re rubber ducking; you’ve explained it to yourself. But it takes discipline. A lot of people don’t want to take that time. They just want to rush directly to the answer. They don’t want to think about why this is happening. So, we try to herd you through the process. It takes some discipline, but it’s worth it, and the benefits to the system are self-evident. We get amazing Google search results rankings because we produce high-quality content, and that is a direct consequence of our system requiring and enforcing discipline. It’s for your own good, as your mom always said.
Peter: You have a very healthy culture on UX Stack Exchange. Someone might come in and ask a question that is very vague, and someone will very quickly step in and say, “You need to be more specific in order for people to answer it.”
Jeff: Have you read “Gorilla vs. Shark”? You might want to read that. There are ways of asking subjective questions if you provide enough detail. This is science in the small. That’s what we try to do on Stack Exchange. We’re not about Which is better, Google+ or Facebook? But you can drill into say Google+ circles and ask a question about that. That’s the thing to talk about. People love discussing things like Ford versus Chevy, but it just comes down to opinion, and no one learns anything from it.
Peter: Establishing a culture, whether in an organization or a Web community is hard. That’s one of the things Stack Exchange gets right. But how did you get it started when the site first launched?
Jeff: At the beginning, I had this weird Fight Club-type attitude, which was that we’re here to talk about programming. I didn’t want to talk about Stack Overflow on the site, so people weren’t allowed to talk about Stack Overflow there. And this was really interesting—because this was the primary mistake I made in the development of Stack Overflow: The people who want to talk about Stack Overflow are really the most avid, engaged users who care about the health of the system. And I was telling those people to essentially go away. That was not my brightest moment!
So, the day we turned on meta.stackoverflow and said, “Here is a place to talk about where, why, and how Stack Overflow works; bugs and features,” it really unlocked a load of feedback about the system and changes we could make. This is a community-based project, and all the content comes from the people participating in the site, so in a system like that, the better you can serve the people doing all the work in the system, the better the system is. You need people who are willing to help, to curate. You need those people to scale. Listening to those people helps you form your community. And even though 90% of the feedback you get is crap, the other 10% is gold. You just have to listen and you’ll get it.
Peter: It sounds like a really big mind shift, going from “these guys are really bugging me” to “these guys have really important things to say.”
Jeff: Right! Occasionally, I have startups come to me with questions, and the first thing I say is “Why are you asking me? Why aren’t you asking your own community these questions?” And you know, it’s because they don’t have a place for the community to go. But the community uses the site every day, and they’re in the best position to give advice. I said 90% crap, but that’s not really fair. A lot of it just isn’t in scope right now or isn’t feasible for political or technical reasons. But 10% still holds. In some sense, it’s free design work, free strategy. Why would you give that away?
Peter: If you were to build Stack Overflow again, what else would you have done differently?
Jeff: I knew that openID was definitely rough. But one of the things that really bugged me was that, for every dinky site, I had to have a unique ID and password. That doesn’t scale—at least not so my human brain can cope. And if my password got exposed on one site, I’d be vulnerable on a lot of other sites. I hated that. So, when we built Stack Overflow, we decided to use a login system that people could reuse. Just like when you walk into any store, your driving licence is a trusted credential. OpenID was the main way, but it was definitely a rocky road.
In a decentralized login system, there are three entities involved: the user, Stack Overflow, and the entity that controls users’ credentials. So, there are more ways for things to go wrong. For example, if you log in with Google, and there’s a connectivity problem, you won’t be able to log in. So, that’s the trade-off: it’s a more complex system technically, but a less complex system in terms of the way users’ brains work.
I really wanted users to be comfortable with this online, because we need to move away from every dinky site having its own password system, which is just unbelievably broken. I realize there’s a long way to go on the user interface for that and on user education. Users need to be comfortable using their Facebook login credentials. I don’t see Facebook taking over the world, as long as there’s a choice of credentials—Facebook and others.
Using openID was a tough road to go down, and I won’t say it was exactly the right choice, but we’ve seen adoption in the time since 2008 when we launched. There are a lot more sites that let you log in with Facebook or Twitter. We didn’t want to perpetuate the horrible system of each site needing its own credentials. It was kind of like Apple dropping the floppy drive or the 30-pin connector on the iPhone. I support those kinds of changes. They’re painful, but they’re the right choices for the future.
Peter: One of the topics that occasionally crops up on UXmatters is UX people going into an organization and trying to get the established development community within that organization to start thinking about users. What advice would you give to someone trying to shift that mindset?
Jeff: From my viewpoint, if you want to have fewer usability problems and break through to the other side with a successful application, you need to realize that you need to factor in design, so you won’t have problems like nobody can figure out how to use your application. When you’re building something, the biggest problem you’re going to have is not bugs, but that nobody wants to use your application because nobody cares about it. Within an organization, one of the best ways to get developers on board is to let them observe users using their application in a lab. That’s fantastic if you can pull that off. The other thing is to have them man the help desk and be responsible for the calls coming in.
Peter: Share the pain?
Jeff: Exactly! Share the pain! Because, otherwise, developers don’t have to deal with their bad choices. You need developers to see users using their application and any difficulties users have. (Something that shocked me is users who double-click everything. Have you seen this? This makes no sense to me—even on the Web. I blame Apple for that with their single-button initiative. Bugs related to that just blew my mind.) And the other thing I would do is buy developers a copy of Don’t Make Me Think. You may not be able to get them to read it, but those who do will definitely have an epiphany. So three pieces of advice:
- Have developers observe actual users.
- Have them share help desk duties.
- Buy everybody a copy of Don’t Make Me Think.
The help desk is the best thing. Maybe then they’ll realize, hey, if I create a usable application, maybe I won’t have to answer all these calls! It’s not that your users are stupid—although some of them are. It’s usually that the software is stupid. Software is much stupider than people.
Peter: You blogged a little while ago that you were stepping back from Stack Exchange, spending more time with your family. So what’s next for you?
Jeff: Well, there is another story, but I’m not ready to talk about it yet. It’s another part of the Web that I feel hasn’t gotten enough attention yet. It’s a project in the same vein as Stack Exchange, in that I want to make the Web better—a better resource for everybody. I can’t go into a lot of detail—other that to say it’s kind of the B-movie side of the Web, kind of left for dead. I want to bring some new energy to another segment. It’s not going to be a curated system like Stack Exchange. Hopefully, we can improve it.
Peter: Thanks for your time and for creating such a great system!