back to index

Jeff Atwood: Stack Overflow and Coding Horror | Lex Fridman Podcast #7


Chapters

0:0 Introduction
0:56 What motivates most programmers
1:52 Data is fun too
3:19 What motivates you
6:2 How do you have selfawareness
7:50 Selfcriticism
9:18 Passion
10:52 Discourse
15:51 What is Stack Overflow
19:18 What is Forum
27:53 Coding Horror
29:13 Writing Advice
30:33 Writing Process
31:31 NonLinear Decisions
33:57 The Birth of Stack Overflow
39:6 Anxiety on Stack Overflow
40:4 Stack Overflow QA
43:26 Duplicate Questions
49:14 Solo Programming
51:18 Being Effective at Programming

Whisper Transcript | Transcript Only Page

00:00:00.000 | The following is a conversation with Jeff Atwood.
00:00:02.400 | He is the co-founder of Stack Overflow and Stack Exchange,
00:00:05.840 | websites that are visited by millions of people
00:00:08.240 | every single day.
00:00:09.560 | Much like with Wikipedia, it is difficult to understate
00:00:13.880 | the impact on global knowledge and productivity
00:00:16.680 | that these networks of sites have created.
00:00:19.520 | Jeff is also the author of the famed blog Coding Horror
00:00:24.000 | and the founder of Discourse,
00:00:26.000 | an open source software project
00:00:27.640 | that seeks to improve the quality
00:00:30.000 | of our online community discussions.
00:00:32.560 | This conversation is part of the MIT course
00:00:36.640 | on artificial general intelligence
00:00:38.440 | and the Artificial Intelligence Podcast.
00:00:40.800 | If you enjoy it, subscribe on YouTube, iTunes,
00:00:43.680 | or your podcast provider of choice,
00:00:45.560 | or simply connect with me on Twitter @LexFriedman,
00:00:48.680 | spelled F-R-I-D.
00:00:50.960 | And now, here's my conversation with Jeff Atwood.
00:00:56.160 | Having co-created and managed for a few years
00:00:59.120 | the world's largest community of programmers
00:01:01.080 | in Stack Overflow 10 years ago,
00:01:04.160 | what do you think motivates most programmers?
00:01:08.600 | Is it fame, fortune, glory, process of programming itself,
00:01:13.280 | or is it the sense of belonging to a community?
00:01:16.360 | - I think it's puzzles, really.
00:01:17.960 | I think it's this idea of working on puzzles
00:01:22.320 | independently of other people
00:01:23.840 | and just solving a problem sort of like on your own almost,
00:01:28.320 | although nobody really works alone in programming anymore.
00:01:32.240 | But I will say there's an aspect of sort of
00:01:35.360 | hiding yourself away and just sort of
00:01:38.000 | beating on a problem until you solve it,
00:01:39.520 | like brute force, basically, to me,
00:01:40.960 | is what a lot of programming is.
00:01:42.120 | It's like the computer's so fast, right,
00:01:44.320 | you can do things that would take forever for a human,
00:01:46.560 | but you can just do 'em like so many times and so often
00:01:49.200 | that you get the answer, right?
00:01:52.000 | - You're saying just the pure act of tinkering with the code
00:01:55.280 | is the thing that drives most programmers.
00:01:57.800 | The joy, the struggle balance within the joy of overcoming
00:02:02.800 | the brute force process of pain and suffering
00:02:05.920 | that eventually leads to something that actually works?
00:02:09.240 | - Well, data's fun, too.
00:02:10.080 | Like there's this thing called the shuffling problem,
00:02:12.200 | like the naive shuffle that most programmers write
00:02:14.960 | has a huge flaw, and there's a lot of articles online
00:02:17.160 | about this 'cause it can be really bad
00:02:18.880 | if you're like a casino
00:02:20.000 | and you have an unsophisticated programmer
00:02:22.000 | writing your shuffle algorithm.
00:02:23.440 | There's surprising ways to get this wrong,
00:02:25.120 | but the neat thing is the way to figure that out
00:02:27.160 | is just to run your shuffle a bunch of times
00:02:29.000 | and see like how many orientations of cards you get.
00:02:32.120 | You should get an equal distribution of all the cards.
00:02:34.640 | And with the naive method of shuffling,
00:02:36.600 | if you just look at the data,
00:02:37.520 | if you just brute force and say,
00:02:38.440 | okay, I don't know what's gonna happen,
00:02:40.820 | you just write a program that does it a billion times
00:02:43.240 | and then see what the buckets look like of the data.
00:02:46.000 | And the Monty Hall problem is another example of that,
00:02:48.160 | where you have three doors
00:02:50.040 | and somebody gives you information about another door.
00:02:52.660 | So the correct answer is you should always switch
00:02:54.960 | in the Monty Hall problem, which is not intuitive
00:02:56.400 | and it freaks people out all the time, right?
00:02:58.040 | But you can solve it with data.
00:02:59.740 | If you write a program that does the Monty Hall game
00:03:04.360 | and then never switches, then always switches,
00:03:06.040 | just compare, you would immediately see
00:03:07.620 | that you don't have to be smart, right?
00:03:09.640 | You don't have to figure out the answer algorithmically.
00:03:11.520 | You can just brute force it out with data and say,
00:03:13.120 | well, I know the answer is this
00:03:14.200 | because I ran the program a billion times
00:03:16.120 | and these are the data buckets that I got from it, right?
00:03:18.920 | - So empirically, you find it, but what's the joy of that?
00:03:22.280 | So for you, for you personally, outside of family,
00:03:26.320 | what motivates you in this process?
00:03:29.400 | - Well, to be honest,
00:03:30.480 | I don't really write a lot of code anymore.
00:03:32.520 | What I do at Discourse is like managery stuff,
00:03:35.040 | which I always kind of despised, right?
00:03:37.840 | As a programmer, you think of managers
00:03:39.240 | as people who don't really do anything themselves.
00:03:42.320 | But the weird thing about code is you realize
00:03:44.320 | that like language is code, like the ability
00:03:46.440 | to direct other people lets you get more stuff done
00:03:50.360 | than you could by yourself anyway.
00:03:52.240 | - You said language is code?
00:03:53.680 | - Language is code.
00:03:54.520 | - Meaning communication with other humans?
00:03:56.060 | - Yes, it is.
00:03:56.900 | - You can think of it as a systematic.
00:03:58.480 | So what is it like to be, what makes,
00:04:02.000 | before we get into programming, what makes a good manager?
00:04:04.320 | What makes a good leader?
00:04:05.820 | - Well, I think a leader, it's all about leading by example,
00:04:08.320 | first of all, like sort of doing
00:04:10.400 | and being the things that you want to be.
00:04:12.480 | Now, this can be kind of exhausting,
00:04:13.640 | particularly when you have kids,
00:04:14.560 | 'cause you realize that your kids are watching you
00:04:16.560 | like all the time, like even in ways
00:04:19.040 | that you've stopped seeing yourself.
00:04:20.600 | Like the hardest person to see on the planet
00:04:22.200 | is really yourself, right?
00:04:23.680 | It's a lot easier to see other people
00:04:24.680 | and make judgments about them,
00:04:26.320 | but yourself, like you're super biased.
00:04:28.840 | You don't actually see yourself the way other people see you.
00:04:30.880 | Often you're very, very hard on yourself
00:04:32.760 | in a way that other people really aren't going to be.
00:04:34.640 | So, you know, that's one of the insights is, you know,
00:04:37.820 | you gotta be really diligent about thinking like,
00:04:40.240 | am I behaving in a way that represents
00:04:42.400 | how I want other people to behave, right?
00:04:44.760 | Like leading through example.
00:04:46.120 | There's a lot of examples of leaders
00:04:48.000 | that really mess this up, right?
00:04:49.280 | Like they make decisions that are like,
00:04:50.560 | wow, that's why would, you know,
00:04:52.080 | it's just, it's a bad example for other people.
00:04:54.960 | So I think leading by example is one.
00:04:57.440 | The other one I believe is working really hard.
00:04:59.640 | And I don't mean like working exhaustively,
00:05:01.540 | but like showing a real passion for the problem.
00:05:06.540 | Like, you know, not necessarily your solution to the problem
00:05:09.040 | but the problem itself is just one
00:05:10.240 | that you really believe in.
00:05:11.080 | Like with discourse, for example,
00:05:12.520 | the problem that we're looking at,
00:05:14.000 | which is my current project is,
00:05:15.400 | how do you get people in groups to communicate
00:05:18.640 | in a way that doesn't like break down
00:05:20.120 | into the howling of wolves, right?
00:05:21.800 | Like how do you deal with trolling?
00:05:23.620 | Not like technical problems,
00:05:24.960 | but how do I get people to post paragraphs?
00:05:26.480 | How do I get people to use bold?
00:05:27.520 | How do I get people to use complete sentences?
00:05:29.560 | Although those are problems as well,
00:05:30.800 | but like how do I get people to get along with each other,
00:05:33.080 | right, like, and then solve whatever problem it is
00:05:35.120 | they set out to solve or, you know,
00:05:36.700 | reach some consensus on discussion
00:05:38.320 | or just like not hurt each other even, right?
00:05:40.040 | Like maybe it's a discussion that doesn't really matter,
00:05:41.960 | but are people like yelling at each other, right?
00:05:43.600 | And why, right?
00:05:44.440 | Like that's not the purpose of this kind of communication.
00:05:46.760 | So I would say, you know, leadership is about,
00:05:50.720 | you know, setting an example, you know,
00:05:53.000 | doing the things that represent what you want to be
00:05:54.920 | and making sure that you're actually doing those things.
00:05:56.800 | And there's a trick to that too
00:05:58.160 | because the things you don't do
00:05:59.760 | also say a lot about what you are.
00:06:02.440 | - Yeah, so let's pause on that one.
00:06:04.000 | So those two things are fascinating.
00:06:05.200 | So how do you have as a leader that self-awareness?
00:06:08.120 | So you just said it's really hard to be self-aware.
00:06:10.240 | So for you personally, or maybe for other leaders
00:06:12.940 | you've seen or look up to,
00:06:14.240 | how do you know both of the things you're doing
00:06:18.680 | are the wrong things to be doing,
00:06:20.040 | the way you speak to others, the way you behave,
00:06:22.360 | and the things you're not doing?
00:06:23.640 | How do you get that signal?
00:06:25.240 | - There's two aspects to that.
00:06:26.440 | One is like processing feedback that you're getting.
00:06:28.760 | So-- - How do you get feedback?
00:06:30.240 | - Well, right, so are you getting feedback, right?
00:06:32.280 | Like, so one way we do it, for example,
00:06:33.320 | at Discourse, we have three co-founders
00:06:34.880 | and we periodically talk about decisions
00:06:37.360 | before we make them.
00:06:38.200 | So it's not like one person can make a mistake
00:06:40.800 | or like, wow, that's, you know,
00:06:42.040 | there can be misunderstandings, things like that.
00:06:43.240 | So it's part of like group consensus of leadership
00:06:45.600 | is like it's good to have,
00:06:47.080 | I think systems where there's one leader
00:06:49.400 | and that leader has the rule of absolute law
00:06:51.000 | are just really dangerous in my experience.
00:06:53.600 | For communities, for example,
00:06:54.660 | like if you have a community that's run by one person,
00:06:56.200 | that one person makes all the decisions,
00:06:57.580 | that person's gonna have a bad day.
00:06:59.400 | Something could happen to that person, you know,
00:07:01.200 | something, you know, there's a lot of variables.
00:07:03.360 | So like at first, when you think about leadership,
00:07:05.120 | have multiple people doing leadership
00:07:07.100 | and have them talk amongst each other.
00:07:08.960 | So giving each other feedback about the decisions
00:07:11.400 | that they're making.
00:07:12.240 | And then when you do get feedback,
00:07:13.720 | I think there's that little voice in your head, right?
00:07:15.680 | Like, or your gut or wherever you wanna put it in your body.
00:07:19.120 | I think that voice is really important.
00:07:22.420 | Like I think most people who have any kind of moral compass
00:07:25.240 | or like want to do,
00:07:26.080 | most people want to do the right thing, I do believe that.
00:07:28.440 | I mean, there might be a handful of sociopaths out there
00:07:31.040 | that don't, but most people,
00:07:32.640 | they want other people to think of them as a good person.
00:07:34.720 | And why wouldn't you, right?
00:07:35.640 | Like, do you want people to despise you?
00:07:36.880 | I mean, that's just weird, right?
00:07:38.100 | So you have that little voice that sort of the angel
00:07:40.200 | and devil on your shoulder sort of talking to you
00:07:42.080 | about like what you're doing, how you're doing,
00:07:43.480 | how does it make you feel to make these decisions, right?
00:07:46.280 | And I think having some attunement to that voice
00:07:49.240 | is important.
00:07:50.200 | - But you said that voice also for,
00:07:52.340 | I think there's a programmer situation too,
00:07:55.120 | where sometimes the devil on the shoulder
00:07:57.120 | is a little too loud.
00:07:59.740 | So you're a little too self-critical for a lot of developers,
00:08:03.360 | and especially when you have introverted personality.
00:08:05.560 | How do you struggle with the self-criticism
00:08:07.560 | or the criticism of others?
00:08:09.760 | So one of the things of leadership
00:08:11.800 | is to do something that's potentially unpopular
00:08:14.440 | or what people doubt you,
00:08:15.760 | and you still go through with the decision.
00:08:18.240 | So what's that balance like?
00:08:21.080 | - I think you have to walk people
00:08:22.120 | through your decision making, right?
00:08:23.200 | Like, this is where blogging is really important,
00:08:25.040 | and communication is so important.
00:08:26.040 | Again, code, language is just another kind of code.
00:08:27.840 | It's like, here is the program by which I arrived
00:08:30.820 | at the conclusion that I'm gonna reach, right?
00:08:33.240 | It's one thing to say, like,
00:08:34.080 | this is a decision, it's final, deal with it, right?
00:08:36.720 | That's not usually satisfying to people.
00:08:38.800 | But if you say, look,
00:08:39.960 | we've been thinking about this problem for a while.
00:08:41.320 | Here's some stuff that's happened.
00:08:42.540 | Here's what we think is right.
00:08:43.920 | Here's our goals.
00:08:44.880 | Here's what we wanna achieve.
00:08:45.880 | And we've looked at these options,
00:08:47.840 | and we think this of the available options
00:08:49.360 | is the best option.
00:08:50.520 | People will be like, oh, okay.
00:08:51.880 | Right, maybe I don't totally agree with you,
00:08:53.040 | but I can kinda see where you're coming from.
00:08:54.320 | And I see it's not just arbitrary decision
00:08:56.840 | delivered from a cloud of flames in the sky, right?
00:09:00.200 | It's like a human trying to reach some kind of consensus
00:09:03.360 | about goals, and their goals might be different than yours.
00:09:05.720 | That's completely legit, right?
00:09:06.720 | But if you're making that clear, it's like, oh,
00:09:09.040 | well, the reason we don't agree
00:09:09.960 | is 'cause we have totally different goals, right?
00:09:11.640 | Like, how could we agree?
00:09:12.880 | It's not that you're a bad person.
00:09:14.100 | It's that we have radically different goals in mind
00:09:16.680 | when we started looking at this problem.
00:09:18.080 | - And the other one you said is passion,
00:09:20.120 | or hard work, sorry.
00:09:22.360 | - Well, those are tied together to me, in my mind.
00:09:23.880 | I mean, let's say hard work and passion.
00:09:25.000 | Like, for me, I just really love the problem
00:09:27.160 | discourse is setting out to solve,
00:09:28.360 | because in a way, it's like,
00:09:30.560 | there's a vision of the world
00:09:32.160 | where it all devolves into Facebook
00:09:33.720 | basically owning everything
00:09:35.200 | and every aspect of human communication, right?
00:09:37.120 | And this has always been kind of a scary world for me.
00:09:39.960 | First, 'cause I don't,
00:09:40.880 | I think Facebook is really good at execution.
00:09:42.440 | I gotta compliment them.
00:09:43.280 | They're very competent in terms of what they're doing.
00:09:45.440 | But Facebook has not much of a moral compass
00:09:48.200 | in terms of, Facebook cares about Facebook, really.
00:09:51.080 | They don't really care about you and your problems.
00:09:53.600 | What they care about is how big they can make Facebook,
00:09:56.240 | right? - Is that you're talking
00:09:57.080 | about the company or just the mechanism
00:09:58.880 | of how Facebook works? - Well, kind of both,
00:10:00.580 | really, right?
00:10:01.420 | And the idea with discourse,
00:10:02.800 | the reason I'm so passionate about it
00:10:03.920 | is 'cause I believe every community
00:10:05.440 | should have the right to own themselves, right?
00:10:07.120 | Like, they should have their own software
00:10:08.360 | that they can run that belongs to them.
00:10:11.080 | That's their space where they can set the rules.
00:10:12.960 | And if they don't like it,
00:10:13.780 | they can move to different hosting
00:10:14.860 | or whatever they need to happen can happen.
00:10:18.140 | But this idea of a company town
00:10:20.660 | where all human communication is implicitly owned
00:10:22.760 | by WhatsApp, Instagram, and Facebook.
00:10:25.360 | And it's really disturbing, too,
00:10:26.280 | 'cause Facebook is really smart.
00:10:27.840 | Like I said, they're great at execution.
00:10:29.000 | Buying in WhatsApp and buying Instagram
00:10:30.720 | were incredibly smart decisions.
00:10:33.280 | And they also do this thing, I don't know if you know,
00:10:34.840 | but they have this VPN software
00:10:36.360 | that they give away for free on smartphones,
00:10:38.880 | and it indirectly feeds all the data
00:10:41.080 | about the traffic back to Facebook.
00:10:42.920 | So they can see what's actually getting popular
00:10:44.680 | through the VPNs, right?
00:10:46.000 | They have low-level access to the network data
00:10:48.480 | because users have let them have that.
00:10:50.480 | So-- - So let's take
00:10:53.080 | a small pause here.
00:10:54.160 | First of all, discourse.
00:10:55.400 | Can you talk about, can you lay out the land
00:10:59.140 | of all the different ways you can have communities?
00:11:01.920 | So there's Stack Overflow that you've built,
00:11:03.880 | there's discourse.
00:11:05.320 | So Stack Overflow is kind of like a wiki,
00:11:07.320 | Wikipedia you talk about,
00:11:09.240 | and it's a very specific scalpel, very focused.
00:11:12.000 | So what is the purpose of discourse,
00:11:13.560 | and maybe contrast that with Facebook?
00:11:16.120 | First of all, say what is discourse?
00:11:18.100 | - Yeah. - Start from the beginning.
00:11:19.320 | - Well, let me start from the very beginning.
00:11:20.240 | So Stack Overflow is a very structured
00:11:22.040 | wiki-style Q&A for programmers, right?
00:11:24.720 | And that was the problem we first worked on.
00:11:26.800 | And when we started, we thought it was discussions
00:11:29.080 | because we looked at programming forums and other things,
00:11:32.080 | but we quickly realized we were doing Q&A,
00:11:33.520 | which is a very narrow subset of human communication.
00:11:37.040 | - Sorry, so when you started Stack Overflow,
00:11:38.920 | you thought you didn't even know the Q&A.
00:11:41.920 | - Not really. - You didn't know
00:11:42.760 | it would be Q&A. - I mean, kind of.
00:11:43.580 | Well, we didn't know.
00:11:44.420 | We had an idea of like, okay, these are things
00:11:45.920 | that we see working online.
00:11:47.000 | We had a goal, right?
00:11:47.840 | Our goal was there was this site, Experts Exchange,
00:11:51.160 | with a very unfortunate name.
00:11:52.760 | - Thank you for killing that site.
00:11:54.000 | - Yeah, I know, right?
00:11:54.840 | And a lot of people don't remember it anymore,
00:11:56.560 | which is great.
00:11:57.380 | That's the measure of success,
00:11:58.220 | if people don't remember the thing
00:11:59.320 | that you were trying to replace, then you've totally won.
00:12:02.640 | So it was a place to get answers to programming questions,
00:12:05.640 | but it wasn't clear if it was like focused Q&A,
00:12:07.480 | if it was a discussion.
00:12:08.820 | There were plenty of programming forums.
00:12:10.380 | So we weren't really sure.
00:12:11.360 | We were like, okay, we'll take aspects of Dig and Reddit,
00:12:13.480 | like voting were very important,
00:12:15.760 | reordering answers based on votes,
00:12:17.440 | wiki-style stuff of like being able to edit posts,
00:12:19.600 | not just your posts, but other people's posts
00:12:21.280 | to make them better and keep them more up-to-date,
00:12:23.640 | ownership of blogging of like, okay, this is me.
00:12:26.220 | I'm saying this in my voice.
00:12:28.080 | This is the stuff that I know.
00:12:29.860 | And you get your reputation accrues to you
00:12:33.400 | and it's peer recognition.
00:12:34.920 | So you asked earlier, like what motivates programmers?
00:12:37.080 | I think peer recognition motivates them a lot.
00:12:40.080 | That was one of the key insights of Stack Overflow
00:12:41.880 | was like recognition from your peers is why things get done.
00:12:45.000 | Not necessarily money, not necessarily your boss,
00:12:46.420 | but like your peers saying, wow,
00:12:47.880 | this person really knows their stuff, has a lot of value.
00:12:50.400 | So the reputation system came from that.
00:12:53.320 | So we were sort of Frankensteining a bunch of stuff together
00:12:56.320 | in Stack Overflow, like stuff we had seen working
00:12:58.680 | and we knew worked.
00:13:01.200 | And that became Stack Overflow.
00:13:03.800 | And over time, we realized it wasn't really discussion.
00:13:06.520 | It was very focused questions and answers.
00:13:08.760 | There wasn't a lot of room on the page for,
00:13:10.840 | let me talk about this tangential thing.
00:13:12.560 | It was more like, okay, is it answering the question?
00:13:14.800 | Is it clarifying the question?
00:13:16.200 | Or could it be an alternative answer to the same question?
00:13:18.740 | 'Cause there's usually more than one way to do it
00:13:20.560 | in programming.
00:13:21.400 | There's like, say, five to 10 ways.
00:13:22.680 | And one of the patterns we got into early on
00:13:24.400 | with Stack Overflow was there were questions
00:13:26.400 | where there would be like hundreds of answers.
00:13:28.400 | And we're like, well, how can there be a programming question
00:13:31.800 | with 500, 200, 500 answers?
00:13:34.680 | And we looked at those and we realized
00:13:36.160 | those were not really questions in the traditional sense.
00:13:38.800 | They were discussions.
00:13:39.760 | It was stuff that we allowed early on
00:13:42.240 | that we eventually decided wasn't allowed,
00:13:43.800 | such as what's your favorite programming food?
00:13:46.720 | What's the funniest programming cartoon you've seen?
00:13:49.240 | And we had to sort of backfill a bunch of rules
00:13:51.280 | about like, why isn't this allowed?
00:13:53.040 | Such as, is this a real problem you're facing?
00:13:55.120 | Like, nobody goes to work and says, wow, I can't work
00:13:57.160 | 'cause I don't know what the funniest programming cartoon is
00:13:59.040 | so, sorry, can't compile this code now.
00:14:01.800 | Right, it's not a real problem you're facing in your job.
00:14:04.560 | So that was run rule.
00:14:05.400 | And the second, like, what can you really learn from that?
00:14:07.280 | It's like what I call accidental learning
00:14:08.720 | or Reddit-style learning.
00:14:10.160 | Where you're just like, oh, I'll just browse some things
00:14:11.600 | and oh, wow, did you know tree frogs only live three years?
00:14:14.920 | I mean, I just made that up.
00:14:15.960 | I don't know if that's true.
00:14:16.860 | But I didn't really set out to learn that.
00:14:18.880 | I don't need to know that, right?
00:14:20.240 | It's accidental learning.
00:14:21.680 | It was more intentional learning.
00:14:23.400 | Where you're like, okay, I have a problem
00:14:24.560 | and I wanna learn about stuff around this problem having.
00:14:26.840 | Right, and it could be theory, it could be compiler theory,
00:14:29.120 | it could be other stuff.
00:14:29.960 | But I'm having a compiler problem,
00:14:31.760 | hence I need to know the compiler theory,
00:14:34.240 | that aspect of it that gives me, gets me to my answer.
00:14:38.080 | So kind of a directed learning.
00:14:39.320 | So we had to backfill all these rules
00:14:40.880 | as we sort of figured out what the heck it was
00:14:42.660 | we were doing.
00:14:43.600 | And the system came very strict over time.
00:14:45.320 | And a lot of people still complain about that.
00:14:46.800 | And I wrote my latest blog entry,
00:14:48.960 | "What Does Stack Overflow Want to Be When It Grows Up?"
00:14:52.360 | - Celebrating the 10 year anniversary, yeah.
00:14:54.200 | - Yeah, so 10 years.
00:14:55.260 | And the system has trended towards strictness.
00:14:57.680 | There's a variety of reasons for this.
00:14:58.900 | One is people don't like to see other people
00:15:01.320 | get reputation for stuff as they view as frivolous.
00:15:03.960 | Which I can actually understand.
00:15:05.080 | Because if you saw a programmer got like 500 upvotes
00:15:07.880 | for funniest programming cartoon
00:15:10.360 | or funniest comment they had seen in code.
00:15:11.800 | It's like, well, why do they have that reputation?
00:15:13.840 | Is it because they wrote the joke?
00:15:15.040 | Probably not.
00:15:15.880 | I mean, if they did, maybe.
00:15:16.920 | Or the cartoon, right?
00:15:18.240 | They're getting a bunch of reputation
00:15:19.440 | based on someone else's work.
00:15:20.720 | That's not even like programming.
00:15:22.640 | It's just a joke, right?
00:15:23.600 | It's a related program.
00:15:24.800 | So you begin to resent that.
00:15:26.440 | You're like, well, that's not fair.
00:15:27.520 | And it isn't.
00:15:28.360 | At some level, they're correct.
00:15:29.180 | I mean, I empathize.
00:15:30.020 | 'Cause like, it's not correct to get reputation for that.
00:15:31.980 | Versus here's a really gnarly regular expression problem.
00:15:36.040 | And here's a really clever, insightful, detailed answer
00:15:40.520 | laying out, oh, here's why you're seeing the behavior
00:15:42.200 | that you're seeing here.
00:15:43.040 | Let me teach you some things
00:15:43.880 | about how to avoid that in the future.
00:15:44.700 | That's great.
00:15:45.540 | Like, that's gold, right?
00:15:46.540 | You want people to get reputation for that.
00:15:47.920 | Not so much for, wow, look at this funny thing I saw, right?
00:15:50.960 | - Great, so there's this very specific Q&A format.
00:15:54.320 | And then take me through the journey
00:15:56.600 | towards discourse in Facebook and Twitter.
00:15:58.600 | So you started at the beginning
00:16:00.440 | that Stack Overflow evolved to have a purpose.
00:16:02.960 | So what is discourse, this passion you have
00:16:06.720 | for creating community for discussion?
00:16:09.760 | What is that?
00:16:10.600 | When was that born and how?
00:16:12.200 | - Well, part of it is based on the realization
00:16:13.600 | that Stack Overflow is only good
00:16:14.960 | for very specific subjects where there's sort of,
00:16:17.600 | it's based on data, facts, and science
00:16:19.720 | where answers can be kind of verified to be true.
00:16:22.520 | Another form of that is there's the book of knowledge,
00:16:24.880 | like the tome of knowledge that defines whatever it is.
00:16:28.720 | You can refer to that book and it'll give you the answer.
00:16:30.880 | There has to be, it only works on subjects
00:16:33.120 | where there's like semi-clear answers to things
00:16:35.360 | that can be verified in some form.
00:16:37.840 | Now, again, there's always more than one way to do it.
00:16:39.800 | There's complete flexibility in the system around that.
00:16:41.960 | But where it falls down is stuff like poker and Lego.
00:16:45.320 | Like we had, if you go to stackexchange.com,
00:16:48.760 | we have an engine that tries to launch
00:16:50.440 | different Q&A topics, right?
00:16:52.320 | And people can propose Q&A topics, sample questions,
00:16:57.000 | and if it gets enough support within the network,
00:16:59.080 | we launch that Q&A site.
00:17:00.120 | So some of the ones we launched were poker and Lego,
00:17:02.320 | and they did horribly, right?
00:17:03.400 | Because, I mean, they might still be there lingering on
00:17:06.240 | in some form, but it was an experiment.
00:17:07.840 | This is like a test, right?
00:17:09.040 | And some subjects work super well in the Stack Engine
00:17:11.720 | and some don't.
00:17:12.800 | But the reason Lego and poker don't work
00:17:14.640 | is because they're so social, really.
00:17:16.000 | It's not about what's the rule here in poker.
00:17:19.080 | It's like, well, what kind of cigars do we like
00:17:21.800 | to smoke while playing poker?
00:17:23.440 | Or what's a cool set of cards to use when playing poker?
00:17:26.920 | Or what's some strategies?
00:17:28.720 | Like say I have this hand come up,
00:17:30.040 | what's some strategies I could use?
00:17:31.200 | It's more of a discussion around what's happening.
00:17:33.040 | Like with Lego, same thing, like here's this cool Lego set
00:17:35.720 | I found, look how awesome this is.
00:17:36.880 | And I'm like, yeah, that's freaking awesome, right?
00:17:38.520 | It's not a question, right?
00:17:39.880 | There's all these social components of the discussions
00:17:41.800 | that don't fit at all.
00:17:43.000 | Like we literally have to disallow those
00:17:44.640 | in Stack Overflow 'cause it's not about being social.
00:17:46.480 | It's about problems that you're facing in your work
00:17:49.360 | that you need concrete answers for, right?
00:17:51.320 | Like you have a real demonstrated problem
00:17:52.760 | that's sort of blocking you in something.
00:17:53.880 | Nobody's blocked by what should I do
00:17:56.440 | when I have a straight flush, right?
00:17:57.960 | Like it's not a blocking problem in the world.
00:18:00.440 | It's just an opportunity to hang out and discuss.
00:18:02.320 | So discourse was a way to address that and say,
00:18:05.520 | look, discussion form software was very, very bad.
00:18:10.720 | And when I came out of Stack Overflow in late, early 2013,
00:18:15.720 | early 2012, it was still very, very bad.
00:18:19.840 | I expected it improved in the four years since I last looked
00:18:22.760 | but it had not improved at all.
00:18:24.560 | And I was like, well, that's kind of terrible
00:18:25.960 | because I love these communities of people
00:18:29.000 | talking about things that they love,
00:18:30.600 | you know, that they're just communities of interest, right?
00:18:32.880 | And there's no good software for them.
00:18:34.560 | Like startups would come to me and say,
00:18:36.600 | hey Jeff, I wanna, you know, I have this startup,
00:18:39.720 | here's my idea.
00:18:41.040 | And the first thing I would say to them is like,
00:18:42.720 | well, first, why are you asking me?
00:18:43.960 | Like, I don't really know your field, right?
00:18:46.400 | Like necessarily, like,
00:18:47.440 | why aren't you asking like the community,
00:18:48.960 | like the people that are interested in this problem,
00:18:51.240 | the people that are using your product,
00:18:52.440 | why aren't you talking to them?
00:18:53.840 | And then they'd say, oh, great idea.
00:18:55.160 | Like, how do I do that?
00:18:56.080 | And then that's when I started playing sad trombone
00:18:58.080 | 'cause I realized all the software involving
00:19:00.040 | talking to your users, customers, audience,
00:19:02.760 | patrons, whatever it is, it was all really bad.
00:19:05.160 | You know, it was like stuff that I would be embarrassed
00:19:06.640 | to recommend to other people.
00:19:08.320 | And yet that's where I felt they could get the biggest
00:19:10.800 | and strongest, most effective input
00:19:12.760 | for what they should be doing with their product, right?
00:19:15.560 | It's from their users, from their community, right?
00:19:17.480 | That's what we did on Stack Overflow.
00:19:18.840 | - So what we're talking about with forums,
00:19:21.320 | the, what is it, the dark matter of the internet,
00:19:25.440 | it's still, I don't know if it's still,
00:19:26.800 | but for the longest time,
00:19:28.720 | it has some of the most passionate
00:19:31.480 | and fascinating discussions.
00:19:32.760 | And what's the usual structure?
00:19:34.600 | There's usually, it's linear, so sequential.
00:19:38.160 | So you're posting one after the other
00:19:39.640 | and there's pagination, so it's every,
00:19:42.760 | there's 10 posts and you go to the next page.
00:19:45.000 | And that format still is used by, like I'm,
00:19:49.040 | we're doing a lot of research with Tesla vehicles
00:19:51.440 | and there's a Tesla Motors Club forum,
00:19:53.600 | which is extremely--
00:19:54.440 | - We really wanted to run that, actually.
00:19:56.240 | They pinged us about it, I don't think we got it,
00:19:57.680 | but I really would have liked to gotten that one.
00:19:59.200 | - But they've started before even 2012, I believe.
00:20:02.560 | I mean, they've been running for a long time.
00:20:04.160 | It's still an extremely rich source of information.
00:20:06.840 | So what's broken about that system
00:20:09.760 | and how are you trying to fix it?
00:20:12.200 | - I think there's a lot of power in connecting people
00:20:15.920 | that love the same stuff around that specific topic.
00:20:19.220 | Meaning, Facebook's idea of connection is
00:20:22.200 | just any human that's related to another human, right?
00:20:24.560 | Like through friendship or any other reason.
00:20:27.520 | Facebook's idea of the world
00:20:28.800 | is sort of the status update, right?
00:20:30.480 | Like a friend of yours did something,
00:20:32.520 | ate at a restaurant, right?
00:20:35.040 | Whereas discussion forums were traditionally
00:20:37.280 | around the interest graph.
00:20:38.320 | Like I love electric cars, specifically I love Tesla, right?
00:20:42.000 | Like I love the way they approach the problem,
00:20:44.320 | I love the style of the founder,
00:20:45.920 | I just love the design ethic.
00:20:48.200 | There's a lot to like about Tesla.
00:20:49.280 | I don't know if you saw the oatmeal,
00:20:50.280 | he did a whole love comic to Tesla.
00:20:53.120 | And it was actually kind of cool
00:20:53.960 | 'cause I learned some stuff.
00:20:54.780 | He was talking about how great Tesla cars were specifically,
00:20:57.040 | like how they were built differently.
00:20:58.360 | And he went into a lot of great detail
00:20:59.880 | that was really interesting.
00:21:00.720 | And to me, that oatmeal post, if you read it,
00:21:02.680 | is the genesis of pretty much all interest communities.
00:21:05.760 | I just really love this stuff.
00:21:07.000 | So for me, for example, there's yo-yos, right?
00:21:08.440 | Like I'm into the yo-yo communities.
00:21:09.720 | And these interest communities
00:21:11.760 | are just really fascinating to me.
00:21:12.960 | And I feel more connected to the yo-yo communities
00:21:15.280 | than I do to friends that I don't see that often, right?
00:21:18.680 | Like to me, the powerful thing is the interest graph.
00:21:21.800 | And Facebook kind of dabbles in the interest graph.
00:21:25.040 | I mean, they have groups,
00:21:25.960 | you can sign up for groups and stuff.
00:21:27.040 | But it's really about the relationship graph.
00:21:29.480 | Like this is my coworker, this is my relative,
00:21:32.120 | this is my friend, but not so much about the interest.
00:21:35.280 | So I think that's the linchpin
00:21:36.920 | of which forums and communities are built on
00:21:39.200 | that I personally love.
00:21:40.440 | Like I said, leadership is about passion, right?
00:21:44.240 | And being passionate about stuff
00:21:45.520 | is a really valid way to look at the world.
00:21:47.560 | And I think it's a way a lot of stuff
00:21:50.280 | in the world gets done.
00:21:51.240 | Like I once had someone describe me as,
00:21:52.840 | he's like, "Jeff, you're a guy who,
00:21:54.600 | "you just get super passionate about a few things at a time,
00:21:57.480 | "and you just go super deep in those things."
00:21:59.760 | And I was like, "Oh, that's kind of right.
00:22:00.660 | "That's kind of what I do.
00:22:01.500 | "I'll get into something and just be super into that
00:22:03.320 | "for a couple years or whatever,
00:22:04.460 | "and just learn all I can about it,
00:22:05.880 | "and go super deep in it."
00:22:07.800 | And that's how I enjoy experiencing the world, right?
00:22:11.000 | Like not being shallow on a bunch of things,
00:22:12.380 | but being really deep on a few things
00:22:14.320 | that I'm interested in.
00:22:15.360 | So forums kind of unlock that, right?
00:22:17.220 | And you don't want a world
00:22:18.920 | where everything belongs to Facebook, at least I don't.
00:22:20.900 | I want a world where communities can kind of own themselves,
00:22:22.760 | set their own norms, set their own rules,
00:22:25.140 | control the experience.
00:22:26.320 | 'Cause community is also about ownership, right?
00:22:29.300 | If you're meeting at the Barnes & Noble every Thursday,
00:22:32.140 | and Barnes & Noble says, "Get out of here.
00:22:33.340 | "You guys don't buy enough books."
00:22:34.580 | Well, you're kind of hosed, right?
00:22:36.620 | Barnes & Noble owns you, right?
00:22:37.860 | Like you can't.
00:22:38.900 | But if you have your own meeting space,
00:22:40.500 | your own clubhouse, you can set your own rules,
00:22:43.060 | decide what you wanna talk about there,
00:22:44.540 | and just really generate a lot better information
00:22:47.820 | than you could just hanging out at Barnes & Noble
00:22:49.520 | every Thursday at 3 p.m., right?
00:22:51.900 | So that's kind of the vision of Discourse,
00:22:53.820 | is a place where it's fully open source.
00:22:57.140 | You can take the software, you can install it anywhere,
00:22:59.120 | and you and a group of people can go deep
00:23:01.520 | on whatever it is that you're into.
00:23:02.840 | And this works for startups, right?
00:23:04.440 | Startups are a group of people
00:23:05.920 | who go super deep on a specific problem, right?
00:23:08.400 | And they wanna talk to their community.
00:23:09.240 | It's like, "Well, install Discourse."
00:23:11.040 | That's what we do at Discourse.
00:23:12.040 | That's what I did at Stack Overflow.
00:23:13.560 | I spent a lot of time on MetaStack Overflow,
00:23:15.520 | which is our internal, well, public community feedback site,
00:23:20.180 | and just experiencing what the users were experiencing,
00:23:24.160 | 'cause they're the ones doing all the work in the system.
00:23:26.040 | And they had a lot of interesting feedback.
00:23:27.520 | And there's that 90/10 rule of 90% of the feedback you get
00:23:30.520 | is not really actionable for a variety of reasons.
00:23:32.320 | It might be bad feedback, it might be crazy feedback,
00:23:34.560 | it might be feedback you just can't act on right now.
00:23:36.320 | But there's 10% of it that's like gold.
00:23:38.240 | It's like literally gold and diamonds,
00:23:39.680 | where it's like feedback of really good improvements
00:23:42.360 | to your core product that are not super hard to get to
00:23:44.740 | and actually make a lot of sense.
00:23:45.720 | And my favorite is about 5% of those stuff
00:23:47.720 | I didn't even see coming.
00:23:48.640 | It's like, "Oh my God, I never even thought of that."
00:23:50.420 | But that's a brilliant idea, right?
00:23:52.500 | And I can point to so many features of Stack Overflow
00:23:54.500 | that we derive from Meta Stack Overflow feedback
00:23:56.640 | and meta discourse, right?
00:23:57.960 | Same exact principle of discourse.
00:23:59.940 | We're getting ideas from the community.
00:24:02.040 | I was like, "Oh my God, I never thought of that."
00:24:03.400 | But that's fantastic, right?
00:24:04.720 | I love that relationship with the community.
00:24:07.480 | - Having built these communities,
00:24:08.640 | what have you learned about?
00:24:11.040 | What's the process of getting a critical mass
00:24:12.800 | of members in a community?
00:24:14.080 | Is it luck, skill, timing, persistence?
00:24:17.120 | Is it the tools like discourse that empower that community?
00:24:22.380 | What's the key aspect of starting from one guy or gal
00:24:25.840 | and then building it to two and then 10
00:24:27.680 | and 100 and 1,000 and so on?
00:24:29.920 | - I think when you're starting with an N of one,
00:24:32.240 | I mean, I think it's persistence
00:24:33.840 | and also you have to be interesting.
00:24:36.960 | Like somebody I really admire once said something
00:24:39.000 | that I always liked about blogging.
00:24:40.120 | He's like, "Here's how you blog.
00:24:41.720 | "You have to have something interesting to say
00:24:44.280 | "and have an interesting way of saying it, right?
00:24:46.800 | "And then do that for like 10 years."
00:24:49.840 | So that's the genesis is like you have to have
00:24:52.320 | sort of something interesting to say
00:24:53.500 | that's not exactly what everybody else is saying
00:24:55.260 | and an interesting way of saying it,
00:24:56.380 | which is another way of saying it,
00:24:57.220 | kind of entertaining way of saying it.
00:24:59.260 | And then as far as growing it, it's like ritual.
00:25:02.380 | You have to, like say you're starting a blog,
00:25:04.240 | you have to say, "Look, I'm gonna blog every week,
00:25:06.620 | "three times a week."
00:25:07.940 | And you have to stick to that schedule, right?
00:25:09.940 | Because until you do that for like several years,
00:25:12.860 | you're never gonna get anywhere.
00:25:14.340 | Like it just takes years to get to where you need to get to
00:25:16.660 | and part of that is having the discipline
00:25:18.680 | to stick with the schedule.
00:25:19.700 | And it helps again if it's something
00:25:20.940 | you're passionate about,
00:25:21.780 | it just won't feel like work.
00:25:22.720 | You're like, "I love this.
00:25:23.560 | "I could talk about this all day every day."
00:25:24.780 | Right?
00:25:25.620 | You just have to do it in a way
00:25:27.660 | that's interesting to other people.
00:25:28.620 | And then as you're growing the community,
00:25:30.620 | that pattern of participation within the community
00:25:32.460 | of like generating these artifacts
00:25:34.300 | and inviting other people to help you
00:25:35.700 | like collaborate on these artifacts.
00:25:36.920 | Like even in the case of blogging,
00:25:38.260 | like I felt in the early days of my blog,
00:25:40.860 | which I started in 2004,
00:25:41.900 | which is really the genesis of Stack Overflow.
00:25:43.740 | If you look at all my blog, it leads up to Stack Overflow,
00:25:46.240 | which was, I have all this energy in my blog,
00:25:48.420 | but I don't, like 40,000 people were subscribing to me.
00:25:51.260 | And I was like, "I want to do something."
00:25:52.380 | And then I met Joel and said,
00:25:53.740 | "Hey Joel, I want to do something.
00:25:55.220 | "Take this ball of energy from my blog and do something."
00:25:57.340 | And all the people reading my blog saw that.
00:25:58.780 | It's like, "Oh, cool.
00:25:59.700 | "You're involving us.
00:26:00.540 | "You're saying, look, you're part of this community.
00:26:03.260 | "Let's build this thing together."
00:26:04.500 | Like they pick the name.
00:26:05.460 | Like we voted on the name for Stack Overflow on my blog.
00:26:08.020 | Like we came up, and naming is super hard for a slide.
00:26:10.900 | The hardest problem in computer science
00:26:12.180 | is coming up with a good name for stuff, right?
00:26:14.460 | But you can go back to my blog.
00:26:15.820 | There's the poll where we voted
00:26:17.580 | and Stack Overflow became the name of the site.
00:26:19.220 | And all the early beta users of Stack Overflow
00:26:21.140 | were audience of my blog plus Joel's blog, right?
00:26:24.540 | So we started from, like, if you look at the genesis,
00:26:26.500 | okay, I was just a programmer who said,
00:26:28.040 | "Hey, I love programming,
00:26:29.580 | "but I have no outlet to talk about it.
00:26:30.900 | "So I'm just gonna blog about it
00:26:31.780 | "'cause I don't have enough people to work
00:26:33.200 | "to talk to about it."
00:26:34.300 | 'Cause at the time I worked a place where,
00:26:36.420 | you know, programming wasn't the core output of the company.
00:26:38.820 | It was a pharmaceutical company.
00:26:40.780 | And I just love this stuff, you know, to an absurd degree.
00:26:43.500 | So I was like, "I'll just blog about it,
00:26:44.820 | "and then I'll find an audience."
00:26:45.920 | And eventually found an audience, eventually found Joel,
00:26:48.980 | and eventually built Stack Overflow
00:26:50.460 | from that one core of activity, right?
00:26:52.840 | But it was that repetition of feeding back in
00:26:55.380 | feedback from my blog comments, feedback from Joel,
00:26:58.060 | feedback from the early Stack Overflow community.
00:27:01.460 | When people see that you're doing that,
00:27:02.820 | they will follow along with you, right?
00:27:04.100 | They'll say, "Oh, cool, you're here in good faith.
00:27:05.380 | "You're actually, you know, not listening to everything
00:27:07.140 | "'cause that's impossible, but you're actually,
00:27:10.920 | "you know, weighting our feedback in what you're doing."
00:27:14.060 | And why wouldn't I?
00:27:14.900 | Because who does all the work on Stack Overflow?
00:27:16.660 | Me, Joel?
00:27:17.900 | No, it's the other programmers
00:27:19.600 | that are doing all the work.
00:27:20.460 | So you've got to have some respect for that.
00:27:22.540 | And then, you know, discipline around,
00:27:24.780 | "Look, you know, we're trying to do a very specific thing
00:27:26.300 | "here on Stack Overflow.
00:27:27.140 | "We're not trying to solve all the world's problems.
00:27:28.980 | "We're trying to solve this very specific Q&A problem
00:27:30.820 | "in a very specific way.
00:27:32.240 | "Not 'cause we're jerks about it,
00:27:33.460 | "but because these strict set of rules
00:27:35.860 | "help us get really good results, right?"
00:27:39.340 | And programmers, that's an easy sell for the most part,
00:27:41.420 | 'cause programmers are used to dealing with
00:27:42.780 | ridiculous systems of rules, like, constantly.
00:27:45.060 | That's basically their job.
00:27:46.780 | So they're very, "Oh yeah, super strict system of rules
00:27:49.380 | "that lets me get what I want."
00:27:50.400 | That's programming, right?
00:27:51.580 | That's what Stack Overflow is.
00:27:53.640 | - So you're making it sound easy, but in 2004,
00:27:56.900 | let's go back there.
00:27:57.980 | In 2004, you started the blog, Coding Horror.
00:28:01.500 | Was it called that at the very beginning?
00:28:03.540 | - It was.
00:28:04.380 | One of the smart things I did,
00:28:05.200 | it's from a book by Steve McConnell, Code Complete,
00:28:06.700 | which is one of my favorite programming books,
00:28:08.220 | still probably my number one programming book
00:28:09.780 | for anyone to read.
00:28:10.780 | One of the smart things I did back then,
00:28:13.820 | I don't always do smart things when I start stuff,
00:28:16.040 | I contacted Steve and said, "Hey, I really like this."
00:28:18.340 | It was a sidebar illustration indicating danger in code.
00:28:21.740 | Coding Horror was like, "Watch out."
00:28:23.860 | And I love that illustration 'cause it spoke to me.
00:28:27.340 | 'Cause I saw that illustration and go,
00:28:28.340 | "Oh my God, that's me.
00:28:29.540 | "I'm always my own worst enemy."
00:28:31.180 | That's the key insight in programming is,
00:28:33.280 | every time you write something,
00:28:34.260 | think, "How am I gonna screw myself?"
00:28:36.500 | Because you will, constantly.
00:28:39.180 | So that icon was like, "Oh yeah,
00:28:41.140 | "I need to constantly hold that mirror up and look
00:28:43.060 | "and say, 'Look, you're very fallible.
00:28:45.280 | "'You're gonna screw this up.
00:28:46.440 | "'How can you build this in such a way
00:28:47.880 | "'that you're not gonna screw it up later?'
00:28:50.440 | "How can you get that discipline around
00:28:52.880 | "making sure at every step,
00:28:54.180 | "I'm thinking through all the things that I could do wrong
00:28:56.040 | "or that other people could do wrong?"
00:28:57.220 | 'Cause that is actually how you get
00:28:58.660 | to be a better programmer a lot of times.
00:29:00.540 | So that sidebar illustration, I loved it so much.
00:29:03.340 | I wrote Steve before I started my blog and said,
00:29:05.460 | "Hey, can I have permission to use this
00:29:06.660 | "'cause I just really like this illustration?"
00:29:08.380 | And Steve was kind enough to give me permission to do that
00:29:11.220 | and just continues to give me permission.
00:29:13.220 | - Really, that's awesome.
00:29:15.080 | But in 2004, you started this blog.
00:29:18.240 | You look at Stephen King, his book on writing,
00:29:22.600 | or Stephen Pressfield, War of Art book.
00:29:26.440 | I mean, it seems like writers suffer.
00:29:30.040 | I mean, it's a hard process of writing, right?
00:29:32.960 | - There's gonna be suffering.
00:29:34.200 | I mean, I won't kid you.
00:29:35.200 | Well, the work is suffering, right?
00:29:36.840 | Doing the work, even when you're, every week,
00:29:38.680 | you're like, "Okay, that blog post wasn't very good,"
00:29:40.280 | or people didn't like it,
00:29:41.440 | or people said disparaging things about it.
00:29:44.060 | You have to have the attitude,
00:29:46.020 | it's like, "No matter what happens,
00:29:48.360 | "I wanna do this for me."
00:29:49.480 | It's not about you, it's about me.
00:29:51.240 | I mean, in the end, it is about everyone
00:29:53.320 | because this is how good work gets out into the world,
00:29:55.840 | but you have to be pretty strict about saying,
00:29:59.080 | "I'm selfish in the sense that I have to do this for me."
00:30:03.480 | You mentioned Stephen King, his book on writing,
00:30:05.460 | but one of the things I do, for example,
00:30:06.840 | when writing is I read it out loud.
00:30:08.680 | One of the best pieces of advice for writing anything
00:30:10.640 | is read it out loud, multiple times.
00:30:13.880 | And make it sound like you're talking
00:30:15.780 | because that is the goal of good writing.
00:30:17.860 | It should sound like you said it
00:30:19.220 | with slightly better phrasing
00:30:20.860 | 'cause you have more time to think about what you're saying,
00:30:22.080 | but it should sound natural when you say it.
00:30:24.340 | And I think that's probably the single best writing advice
00:30:27.100 | I can give anyone, just read it over and over out loud,
00:30:29.760 | make sure it sounds like something you would normally say,
00:30:32.580 | and it sounds good.
00:30:33.660 | - And what's your process of writing?
00:30:35.620 | So there's usually a pretty good idea behind the blog post.
00:30:39.380 | - So ideas, right.
00:30:40.220 | So I think you gotta have the concept
00:30:43.300 | that there's so many interesting things in the world.
00:30:46.200 | Like, I mean, my God, the world is amazing, right?
00:30:48.820 | Like, you can never write about everything that's going on
00:30:52.000 | 'cause it's so incredible,
00:30:52.840 | but if you can't come up with, like, let's say,
00:30:54.840 | one interesting thing per day to talk about,
00:30:57.120 | then you're not trying hard enough
00:30:58.400 | 'cause the world is full of just super interesting stuff.
00:31:00.760 | And one great way to mine stuff is go back to old books
00:31:04.280 | 'cause they bring up old stuff that's still super relevant.
00:31:07.240 | And I did that a lot
00:31:08.200 | 'cause I was reading classic programming books
00:31:09.920 | and a lot of the early blog posts were like,
00:31:11.200 | "Oh, I was reading this programming book
00:31:12.240 | "and they brought this really cool concept
00:31:13.680 | "and I wanna talk about it some more."
00:31:14.980 | And you get the, I mean,
00:31:16.100 | you're not claiming credit for the idea,
00:31:17.300 | but it gives you something interesting to talk about
00:31:18.660 | that's kind of evergreen, right?
00:31:19.860 | Like, you don't have to go, "What should I talk about?"
00:31:21.940 | So just go dig up some old classic programming books
00:31:24.620 | and find something that, "Oh, wow, that's interesting."
00:31:26.980 | Or, "How does that apply today?"
00:31:28.140 | Or, "What about X and Y?"
00:31:29.540 | Or compare these two concepts.
00:31:30.980 | - So pull a couple of sentences from that book
00:31:32.740 | and then sort of play off of it,
00:31:34.780 | almost agree or disagree.
00:31:36.220 | So in 2007, you wrote that you were offered
00:31:41.900 | a significant amount of money to sell the blog.
00:31:44.440 | You chose not to.
00:31:45.960 | What were all the elements you were thinking about?
00:31:49.000 | 'Cause I'd like to take you back.
00:31:50.560 | It seems like there's a lot of nonlinear decisions
00:31:52.560 | you made through life.
00:31:53.640 | So what was that decision like?
00:31:56.080 | - Right, so one of the things I love
00:31:57.880 | is the "Choose Your Own Adventure" books,
00:31:59.400 | which I loved as a kid
00:32:00.320 | and I feel like they're early programmer books
00:32:01.760 | 'cause they're all about if-then statements, right?
00:32:04.080 | If this, then this.
00:32:05.120 | And they're also very, very unforgiving.
00:32:07.280 | Like, there's all these sites that map
00:32:08.960 | the classic "Choose Your Own Adventure" books
00:32:11.080 | and how many outcomes are bad.
00:32:12.580 | There's a lot of bad outcomes.
00:32:13.980 | So part of the game is like, oh, I got a bad outcome.
00:32:16.140 | Go back one step, go back one further step.
00:32:17.860 | It's like, how did I get here, right?
00:32:19.220 | Like, it's a sequence of decisions.
00:32:21.940 | And this is true of life, right?
00:32:23.220 | Like, every decision is a sequence, right?
00:32:25.020 | Individually, any individual decision
00:32:28.380 | is not necessarily right or wrong,
00:32:29.300 | but they lead you down a path, right?
00:32:31.100 | So I do think there's some truth to that.
00:32:32.820 | So this particular decision,
00:32:34.780 | the blog had gotten fairly popular.
00:32:36.380 | There was a lot of RSS readers that I had discovered.
00:32:39.140 | And this guy contacted me out of the blue
00:32:41.040 | from this bug tracking company.
00:32:42.480 | He's like, oh, I really wanna buy your blog for like,
00:32:44.480 | I think it was around, it was $100,000.
00:32:47.040 | It might have been like 80,000, but it was a lot, right?
00:32:49.280 | Like, and that's, you know, at the time,
00:32:51.160 | like, I would have a year's worth of salary all at once.
00:32:54.480 | So I had to really think about, like, well, you know,
00:32:57.760 | and I remember talking to people at the time.
00:32:58.600 | I was like, wow, that's a lot of money.
00:32:59.880 | But then at the other end, like, I really like my blog,
00:33:01.840 | right, like, do I wanna sell my blog?
00:33:03.760 | 'Cause it wouldn't really belong to me
00:33:05.000 | anymore at that point.
00:33:06.000 | And one of the guidelines that I like to,
00:33:09.380 | I don't like to give advice to people a lot,
00:33:11.020 | but one of the pieces of advice I do give,
00:33:12.500 | 'cause I do think it's really true
00:33:13.700 | and it's generally helpful,
00:33:15.540 | is whenever you're looking at a set of decisions,
00:33:17.580 | like, oh gosh, should I do A, B, or C,
00:33:19.860 | you gotta pick the thing that's a little scarier
00:33:22.500 | in that list, because not, you know,
00:33:24.540 | not like jump off a cliff scary,
00:33:25.660 | but the thing that makes you nervous.
00:33:27.020 | 'Cause if you pick the safe choice,
00:33:28.980 | it's usually you're not really pushing.
00:33:30.340 | You're not pushing yourself.
00:33:31.340 | You're not choosing the thing that's gonna help you grow.
00:33:33.900 | So for me, the scarier choice was to say no.
00:33:36.120 | I was like, well, no, let's just see where this is going,
00:33:38.040 | right, because then I own it.
00:33:39.480 | I mean, it belongs to me.
00:33:40.480 | It's my thing.
00:33:41.680 | And I can just take it
00:33:43.080 | and to some other logical conclusion, right?
00:33:45.320 | Because imagine how different the world would have been
00:33:46.840 | had I said yes and sold the blog.
00:33:49.000 | It's like there probably wouldn't be Stack Overflow.
00:33:50.880 | - Yeah.
00:33:51.720 | - You know, a lot of other stuff would have changed.
00:33:53.600 | So for that particular decision,
00:33:55.320 | I think it was that same rule,
00:33:56.280 | like, what scares me a little bit more.
00:33:57.920 | - Do the thing that scares you.
00:33:59.200 | - Yeah.
00:34:00.040 | - So speaking of which, startups.
00:34:01.740 | I think there's a specific, some more general questions
00:34:05.000 | that a lot of people would be interested in.
00:34:07.560 | You've started Stack Overflow.
00:34:10.320 | You started Discourse.
00:34:12.080 | So what's the, you know, it's one, two, three guys,
00:34:15.320 | whatever it is in the beginning.
00:34:17.200 | What was that process like?
00:34:19.360 | Do you start talking about it?
00:34:20.680 | Do you start programming?
00:34:21.800 | Do you start, like, where's the birth
00:34:24.520 | and the catalyst that actually--
00:34:25.840 | - Well, I can talk about it in context
00:34:27.000 | of both Stack Overflow and Discourse.
00:34:28.080 | So I think the key thing initially is there is a problem.
00:34:31.040 | Something, there's some state of the world
00:34:32.420 | that's unsatisfactory to the point
00:34:33.920 | that you're upset about it, right?
00:34:36.540 | In that case, it was experts exchange.
00:34:37.840 | I mean, Joel's original idea,
00:34:38.960 | 'cause I approached Joel, I was like,
00:34:40.200 | look, Joel, I have all this energy behind my blog.
00:34:41.760 | I wanna do something, I wanna build something,
00:34:43.240 | but I don't know what it is,
00:34:44.080 | 'cause I'm honestly not a good idea person.
00:34:45.700 | I'm really not.
00:34:46.540 | I'm like the execution guy.
00:34:47.760 | I'm really good at execution,
00:34:48.660 | but I'm not good at blue-skying ideas.
00:34:51.000 | It's not my forte.
00:34:52.080 | Which is another reason why I like the community feedback,
00:34:54.080 | 'cause they blue-sky all day long for you, right?
00:34:56.340 | So when I can just go in and cherry-pick
00:34:57.760 | a blue-sky idea from a community,
00:34:59.320 | even if I have to spend three hours reading
00:35:00.800 | to get one good idea, it's worth it, man.
00:35:02.720 | But anyway, so the idea from Joel was,
00:35:04.680 | hey, experts exchange, it's got great data,
00:35:07.400 | but the experience is hideous, right?
00:35:09.040 | It's trying to trick you.
00:35:09.920 | It feels like a used car salesman.
00:35:11.080 | It's just bad.
00:35:12.040 | So I was like, oh, that's awesome.
00:35:13.080 | It feeds into community.
00:35:14.280 | It feeds into like, we can make a creative commons.
00:35:16.680 | So I think the core is to have a really good idea
00:35:18.520 | that you feel very strongly about in the beginning,
00:35:20.280 | that there's a wrong in the world,
00:35:22.000 | an injustice that we will right
00:35:24.280 | through the process of building this thing.
00:35:26.120 | For discourse, it was like, look,
00:35:27.520 | there's no good software for communities
00:35:30.200 | to just hang out and do stuff, right?
00:35:32.960 | Like whether it's problem-solving, startup, whatever.
00:35:35.500 | Forms are such a great building block of online community,
00:35:37.640 | and they're hideous.
00:35:38.600 | They were so bad, right?
00:35:39.760 | It was embarrassing.
00:35:40.760 | Like I literally was embarrassed
00:35:42.040 | to be associated with this software, right?
00:35:44.160 | We have to have software that you can be proud of.
00:35:45.720 | It's like, this is competitive with Reddit.
00:35:47.120 | This is competitive with Twitter.
00:35:48.360 | This is competitive with Facebook, right?
00:35:50.360 | I would be proud to have the software on my site.
00:35:53.520 | So that was the genesis of discourse,
00:35:54.920 | was feeling very strongly about
00:35:57.160 | there needs to be a good solution for communities.
00:36:01.760 | So that's step one,
00:36:02.720 | genesis of an idea you feel super strongly about, right?
00:36:04.600 | And then people galvanize around the idea.
00:36:06.680 | Like Joel was already super excited about the idea.
00:36:08.520 | I was excited about the idea.
00:36:10.000 | So with the forum software, I was posting on Twitter.
00:36:13.300 | I had researched, as part of my research,
00:36:15.040 | I start researching the problem, right?
00:36:16.680 | And I found a game called Forum Wars,
00:36:19.540 | which was a parody of forum.
00:36:21.480 | It's still very, very funny of like forum behavior,
00:36:23.680 | circle like I would say 2003.
00:36:26.120 | It's aged some, right?
00:36:27.720 | Like the behavior's a little different in the era of Twitter,
00:36:29.880 | but it was awesome.
00:36:30.880 | It was very funny.
00:36:31.880 | And it was like a game, it was like an RPG,
00:36:33.480 | and it had a forum attached to it.
00:36:34.840 | So it was like a game about forums with a forum attached.
00:36:37.520 | I was like, this is awesome, right?
00:36:38.520 | This is so cool.
00:36:39.360 | And the founder of that company or that project,
00:36:41.880 | it wasn't really a company,
00:36:43.040 | contacted me, this guy Robin Ward from Toronto.
00:36:45.680 | He said, "Hey, I saw you've been talking about forums.
00:36:47.320 | "And I really love that problem space.
00:36:49.260 | "I'd still love to build really good forum software
00:36:51.540 | "'cause I don't think anything out there's any good."
00:36:53.360 | And I was like, awesome.
00:36:54.200 | At that point, I was like, we're starting a company.
00:36:55.880 | Because I couldn't have wished for a better person
00:36:58.560 | to walk through the door and say,
00:37:00.080 | I'm excited about this too.
00:37:01.480 | Same thing with Joel, right?
00:37:02.320 | I mean, Joel is a legend in the industry, right?
00:37:03.960 | So when he walked through, he said,
00:37:04.800 | I'm excited about this problem.
00:37:05.620 | I was like, me too, man.
00:37:06.760 | We can do this, right?
00:37:08.140 | So that to me is the most important step.
00:37:10.560 | It's like having an idea you're super excited about
00:37:12.040 | and another person, a co-founder, right?
00:37:14.600 | 'Cause again, you get that dual leadership, right?
00:37:16.160 | Of like, am I making a bad decision?
00:37:18.000 | Sometimes it's nice to have checks of like,
00:37:21.480 | is this a good idea?
00:37:22.400 | I don't know, right?
00:37:23.720 | - So those are the crucial seeds.
00:37:25.600 | But then starting to build stuff,
00:37:27.520 | whether it's you programming or somebody else--
00:37:28.360 | - There is prototyping.
00:37:29.360 | So there's tons of research.
00:37:30.600 | There's tons of research.
00:37:31.440 | Like, what's out there that failed?
00:37:32.880 | 'Cause a lot of people look at its successes.
00:37:34.360 | Oh, look at how successful X is.
00:37:36.040 | Everybody looks at the successes.
00:37:37.320 | Those are boring.
00:37:38.360 | Show me the failures 'cause that is what's interesting.
00:37:40.840 | That's where people were experimenting.
00:37:42.080 | That's where people were pushing.
00:37:43.480 | But they failed, but they probably failed for reasons
00:37:46.600 | that weren't directly about the quality of their idea, right?
00:37:50.080 | So look at all the failures.
00:37:51.420 | Don't just look what everybody looks at,
00:37:52.720 | which is like, oh gosh,
00:37:53.560 | look at all these successful people.
00:37:54.680 | Look at the failures.
00:37:55.960 | Look at the things that didn't work.
00:37:57.280 | Research the entire field.
00:37:59.080 | And so that's the research that I was doing
00:38:01.480 | that led me to Robin, right, was that.
00:38:03.600 | And then when we, for example,
00:38:04.800 | when we did Stack Overflow, we're like, okay,
00:38:08.000 | well, I really like elements of voting and digging Reddit.
00:38:10.040 | I like the Wikipedia, everything's up to date.
00:38:12.800 | Nothing is like an old tombstone
00:38:14.340 | that like has horrible out-of-date information.
00:38:17.000 | We know that works.
00:38:17.840 | Wikipedia is an amazing resource.
00:38:19.400 | Blogging, the idea of ownership is so powerful, right?
00:38:22.420 | Like, oh, I, Joe, wrote this,
00:38:23.980 | and look how good Joe's answer is, right?
00:38:25.500 | Like all these concepts we were rolling together,
00:38:27.740 | researching all the things that were out there
00:38:29.100 | that were working and why they were working
00:38:30.660 | and trying to like fold them into that, again,
00:38:32.420 | that Frankenstein's monster of what Stack Overflow is.
00:38:35.260 | And by the way, that wasn't a free decision
00:38:37.060 | because there's still a ton of tension
00:38:38.740 | in the Stack Overflow system.
00:38:40.020 | There's reasons people complain about Stack Overflow
00:38:42.620 | because it's so strict, right?
00:38:43.660 | Why is it so strict?
00:38:44.640 | Why are you guys always closing my questions?
00:38:46.500 | It's because there's so much tension
00:38:47.880 | that we built into the system
00:38:49.140 | around like trying to get good, good results
00:38:51.260 | out of the system.
00:38:52.100 | And you know, it's not a free.
00:38:56.020 | That stuff doesn't come for free, right?
00:38:57.500 | It's not like we all have perfect answers
00:38:59.820 | and nobody will have to get their feelings hurt
00:39:02.300 | or nobody will have to get downvoted.
00:39:04.140 | Like, it doesn't work that way, right?
00:39:06.640 | - So this is an interesting point and a small tangent.
00:39:09.420 | You write about anxiety.
00:39:12.000 | So I've posted a lot of questions
00:39:14.060 | and written answers on Stack Overflow.
00:39:16.060 | And the questions that I usually go to
00:39:18.320 | something very specific to something I'm working on.
00:39:21.200 | This is something you talk about
00:39:22.280 | that really the goal of Stack Overflow
00:39:25.000 | isn't about, is to write a question that's not about you.
00:39:29.360 | It's about the question that will help
00:39:33.480 | the community in the future.
00:39:35.800 | - Right, that's a tough sell, right?
00:39:37.540 | Because people are like, well, you know,
00:39:39.160 | I don't really care about the community.
00:39:40.280 | What I care about is my problem.
00:39:41.520 | - My problem.
00:39:42.400 | - And that's fair, right?
00:39:43.480 | It's sort of that, again, that tension,
00:39:44.960 | that balancing act.
00:39:45.780 | We wanna help you, but we also wanna help
00:39:47.360 | everybody that comes behind you, right?
00:39:48.680 | The long line of people are gonna come and say,
00:39:49.960 | oh, I kinda have that problem too, right?
00:39:52.160 | And if nobody's ever gonna come up and say,
00:39:54.080 | I have this problem too, then that question
00:39:55.840 | shouldn't exist on Stack Overflow
00:39:57.000 | because the question is too specific.
00:39:58.880 | And even that's tension, right?
00:40:00.080 | How do you judge that?
00:40:00.920 | How do you know that nobody's ever gonna have
00:40:02.600 | this particular question again?
00:40:04.720 | So there's a lot of tension in the system.
00:40:06.800 | - Do you think that anxiety of asking the question,
00:40:09.600 | the anxiety of answering that tension
00:40:12.640 | is inherent to programmers,
00:40:14.200 | is inherent to this kind of process,
00:40:16.960 | or can it be improved?
00:40:20.320 | Can it be happy land where that tension
00:40:24.040 | is not quite so harsh?
00:40:25.800 | - I don't think Stack Overflow can totally change
00:40:29.480 | the way it works.
00:40:30.320 | One thing they are working on, finally,
00:40:31.800 | is the Ask page had not changed since 2011.
00:40:35.200 | I'm still kinda bitter about this
00:40:36.760 | because I feel like you have a Q&A system
00:40:39.360 | and what are the core pages in a Q&A system?
00:40:41.400 | Well, first of all, the question,
00:40:42.220 | all the answers and also the Ask page,
00:40:43.760 | particularly when you're a new user
00:40:45.120 | or someone trying to ask a question,
00:40:46.520 | that's the point at which you need the most help.
00:40:48.400 | And we just didn't adapt with the times.
00:40:50.760 | But the good news is they're working on this,
00:40:52.320 | from what I understand,
00:40:53.240 | and it's gonna be a more wizard-based format.
00:40:55.200 | And you could envision a world
00:40:56.840 | where as part of this wizard-based program,
00:40:58.440 | when you're asking a question,
00:40:59.280 | so okay, come up with a good title.
00:41:01.100 | What are good words to put in the title?
00:41:02.560 | One word that's not good to put in the title
00:41:04.280 | is problem, for example.
00:41:05.840 | I have a problem.
00:41:06.680 | Oh, you have a problem.
00:41:07.760 | Okay, a problem, that's great, right?
00:41:10.000 | Like, you need specifics, right?
00:41:11.240 | Like, so it's trying to help you
00:41:12.200 | make a good question title, for example.
00:41:14.240 | That step will be broken out.
00:41:15.680 | All that stuff.
00:41:17.560 | But one of those steps in that wizard of asking
00:41:19.560 | could say, hey, I'm a little nervous.
00:41:21.480 | You know, I've never done this before.
00:41:22.660 | Can you put me in a queue for special mentoring, right?
00:41:26.080 | You could opt in to a special mentor.
00:41:27.560 | I think that would be fantastic.
00:41:28.800 | Like, I don't have any objection to that at all
00:41:31.360 | in terms of being an opt-in system.
00:41:32.600 | 'Cause there are people that are like,
00:41:33.680 | you know, I just wanna help 'em.
00:41:35.480 | I wanna help a person no matter what.
00:41:36.720 | I wanna go above and beyond.
00:41:37.920 | I wanna spend hours with this person.
00:41:41.320 | It depends what their goals are, right?
00:41:42.880 | - It's a great idea.
00:41:43.720 | - Who am I to judge, right?
00:41:44.600 | So that's fine.
00:41:45.440 | It's not precluded from happening.
00:41:47.320 | But there's a certain big city ethos that we started with.
00:41:49.680 | Like, look, we're New York City.
00:41:51.080 | You don't come to New York City and expect them to be,
00:41:52.800 | oh, welcome to the city, Joe.
00:41:54.360 | How's it going?
00:41:55.200 | Come on in.
00:41:56.020 | Let me show you around.
00:41:57.120 | That's not how New York City works, right?
00:41:59.360 | I mean, and you know, again,
00:42:01.760 | New York City has a reputation for being rude,
00:42:03.080 | which I actually don't think it is
00:42:04.080 | having been there fairly recently.
00:42:05.260 | It's not rude.
00:42:06.100 | People are just like going about their business, right?
00:42:07.200 | They're like, look, I have things to do.
00:42:08.960 | I'm busy.
00:42:09.780 | I'm a busy professional, as are you.
00:42:11.820 | And since you're a busy professional,
00:42:13.420 | certainly when you ask a question,
00:42:14.660 | you're gonna ask the best possible question, right?
00:42:16.440 | Because you're a busy professional
00:42:18.220 | and you would not accept anything less
00:42:20.140 | than a very well-written question
00:42:21.420 | with a lot of detail about why you're doing it,
00:42:23.300 | what you're doing, what you researched,
00:42:25.060 | what you found, right?
00:42:26.220 | 'Cause you're a professional like me, right?
00:42:28.580 | And this rubs people sometimes the wrong way.
00:42:31.020 | And I don't think it's wrong to say,
00:42:32.340 | look, I don't want that experience.
00:42:33.700 | I want just a more chill place for beginners.
00:42:37.620 | And I still think Stack Overflow
00:42:39.940 | was never designed for beginners, right?
00:42:41.940 | There's this misconception that,
00:42:43.820 | even Joel says sometimes,
00:42:44.820 | oh yeah, Stack Overflow for beginners.
00:42:46.140 | And I think if you're a prodigy, it can be.
00:42:48.820 | - Right, but for the most part not.
00:42:49.660 | - But that's not really representative, right?
00:42:52.300 | I think as a beginner,
00:42:53.140 | you want a totally different set of tools.
00:42:55.140 | You want live screen sharing, live chat.
00:42:58.060 | You want access to resources.
00:42:59.220 | You want a playground,
00:43:00.260 | like a playground you can experiment in and test,
00:43:03.300 | and all this stuff that we just don't give people
00:43:05.640 | because that was never really the audience
00:43:07.780 | that we were designing Stack Overflow for.
00:43:09.300 | That doesn't mean it's wrong.
00:43:10.700 | And I think it would be awesome
00:43:11.780 | if there was a site like that on the internet,
00:43:13.280 | or if Stack Overflow said,
00:43:14.300 | hey, we're gonna start doing this.
00:43:15.820 | That's fine too.
00:43:17.140 | I'm not there, I'm not making those decisions.
00:43:18.700 | But I do think the pressure,
00:43:20.660 | the tension that you described is there
00:43:22.100 | for people to be, look, I'm a little nervous
00:43:24.500 | 'cause I know I gotta do my best work, right?
00:43:26.420 | - The other one is something you talk about,
00:43:28.020 | which is also really interesting to me,
00:43:30.300 | is duplicate questions.
00:43:33.820 | It's a really difficult problem that you highlight.
00:43:38.080 | - Super hard.
00:43:38.920 | - Like, you could take one little topic,
00:43:41.720 | and you could probably write 10, 20, 30 ways
00:43:44.960 | of asking about that topic,
00:43:46.640 | and they would be all different.
00:43:48.220 | I don't know if there should be one page
00:43:50.200 | that answers all of it.
00:43:51.880 | Is there a way that Stack Overflow
00:43:54.800 | can help disambiguate,
00:43:58.920 | like separate these duplicate questions,
00:44:01.180 | or connect them together?
00:44:02.840 | Or is it a totally hopeless, difficult, impossible task?
00:44:06.240 | - I think it's a very, very hard computer science problem,
00:44:08.520 | and partly 'cause people are very good
00:44:10.320 | at using completely different words.
00:44:11.800 | It always amazed me on Stack Overflow,
00:44:13.200 | you'd have two questions that were functionally identical,
00:44:15.480 | and one question had like zero words in common
00:44:17.560 | with the other question.
00:44:18.400 | I'm like, oh my God.
00:44:19.560 | From a computer science perspective,
00:44:20.960 | how do you even begin to solve that?
00:44:23.000 | And it happens all the time.
00:44:24.520 | People are super good at this, right?
00:44:26.320 | Accidentally at asking the same thing
00:44:28.400 | in like 10, 20 different ways.
00:44:31.280 | And the other complexity is we want
00:44:32.640 | some of those duplicates to exist,
00:44:33.920 | 'cause if there's five versions with different words,
00:44:36.000 | have those five versions point
00:44:37.280 | to the one centralized answer, right?
00:44:39.600 | It's like, okay, this is duplicate, no worries.
00:44:41.880 | Here's the answer that you wanted over here on this,
00:44:44.480 | the prime example that we want to have,
00:44:48.000 | rather than having 10 copies of the question and the answer.
00:44:50.680 | Because if you have 10 copies of the question and answer,
00:44:52.400 | this also devalues the reputation system,
00:44:54.120 | which programmers hate, as I previously mentioned.
00:44:56.840 | You're getting reputation for an answer
00:44:58.320 | that somebody else already gave.
00:44:59.280 | It's like, well, it's an answer,
00:45:00.400 | but somebody else already gave that answer,
00:45:02.160 | so why are you getting reputation for the same answer
00:45:04.520 | as the other guy who gave it four years ago?
00:45:06.440 | People get offended by that, right?
00:45:07.720 | So the reputation system itself adds tension to the system,
00:45:11.880 | in that the people who have a lot of reputation
00:45:14.000 | become very incentivized to enforce the reputation system.
00:45:17.160 | And for the most part, that's good.
00:45:18.880 | I know it sounds weird, but for the most part,
00:45:20.440 | it's like, look, strict systems,
00:45:22.760 | I think to use Stack Overflow,
00:45:23.840 | you have to have the idea that,
00:45:24.680 | okay, strict systems ultimately work better.
00:45:26.600 | And I do think in programming,
00:45:28.240 | you're familiar with loose typing versus strict typing,
00:45:30.800 | right, the idea that you can declare a variable,
00:45:32.960 | not declare a variable, rather,
00:45:34.000 | just start using a variable,
00:45:34.840 | and okay, I see it's implicitly an integer,
00:45:36.280 | bam, awesome, duck equals five.
00:45:38.080 | Well, duck is now an integer of five, right?
00:45:40.720 | And you're like, cool, awesome, simpler, right?
00:45:42.320 | Why would I wanna worry about typing?
00:45:43.800 | And for a long time, in the Ruby community,
00:45:45.800 | they're like, yeah, this is awesome.
00:45:46.880 | You just do a bunch of unit testing,
00:45:48.160 | which is testing your program's validity after the fact
00:45:50.920 | to catch any bugs that strict typing
00:45:53.680 | of variables would have caught.
00:45:54.760 | And now you have this thing called TypeScript
00:45:56.680 | from Microsoft, from the guy who built C# Anders,
00:45:59.560 | who's one of the greatest minds in software development,
00:46:02.640 | right, like in terms of language design,
00:46:04.200 | and says, no, no, no, we wanna bolt on
00:46:06.080 | a strict type system to JavaScript
00:46:07.320 | 'cause it makes things better.
00:46:08.160 | And now everybody's like, oh my God,
00:46:10.000 | we deployed TypeScript and found 50 latent bugs
00:46:13.240 | that we didn't know about, right?
00:46:14.480 | Like, this is super common.
00:46:15.800 | So I think there is a truth in programming
00:46:19.900 | that strictness, it's not the goal.
00:46:22.200 | We're not saying be super strict
00:46:23.480 | 'cause strictness is correct.
00:46:25.680 | No, it's no, no, strictness produces better results.
00:46:28.560 | That's what I'm saying, right?
00:46:29.800 | So strict typing of variables,
00:46:31.680 | I would say you almost universally have consensus now
00:46:33.840 | is basically correct, should be that way in every language.
00:46:37.640 | Duck equals five should generate an error
00:46:39.400 | 'cause no, you didn't declare,
00:46:40.600 | you didn't tell me that duck was an integer, right?
00:46:42.860 | That's a bug, right?
00:46:43.780 | Or maybe you mistyped, you typed deck, right,
00:46:45.680 | instead of duck, right?
00:46:46.520 | You never know, this happens all the time, right?
00:46:48.760 | So with that in mind, I will say
00:46:50.760 | that the strictness of the system is correct.
00:46:52.640 | Now, that doesn't mean cruel, that doesn't mean mean,
00:46:54.980 | that doesn't mean angry, it just means strict, okay?
00:46:57.760 | So I think where there's misunderstanding is,
00:46:59.440 | and people get cranky, right?
00:47:00.680 | Like another question you asked is like,
00:47:02.240 | why are programmers kind of mean sometimes?
00:47:05.080 | Well, who do programmers work with all day long?
00:47:07.320 | So I have a theory that if you're at a job
00:47:10.000 | and you work with assholes all day long,
00:47:12.360 | what do you eventually become?
00:47:14.320 | - An asshole. - An asshole.
00:47:15.720 | And what is the computer except the world's biggest asshole?
00:47:19.200 | Because the computer has no time for your bullshit.
00:47:21.760 | The computer, the minute you make a mistake,
00:47:23.960 | everything else crashing down, right?
00:47:25.200 | One semicolon has crashed space missions, right?
00:47:28.080 | So that's normal.
00:47:28.960 | So you begin to internalize that, you begin to think,
00:47:31.200 | oh, my coworker, the computer, is super strict
00:47:35.520 | and kind of a jerk about everything.
00:47:37.440 | So that's kind of how I'm gonna be,
00:47:39.960 | because I work with this computer
00:47:41.800 | and I have to accede to its terms on everything.
00:47:44.500 | So therefore, you start to absorb that
00:47:46.320 | and you start to think, oh, well, being really strict
00:47:48.480 | arbitrarily is really good.
00:47:50.360 | An error of error code 56249 is a completely good error
00:47:53.720 | message 'cause that's what the computer gave me, right?
00:47:56.040 | So you kind of forget to be a person at some level.
00:47:59.320 | And you know how they say great detectives
00:48:01.360 | internalize criminals and kind of are criminals themselves?
00:48:04.140 | Like this trope of the master detective is good
00:48:07.040 | 'cause he can think like the criminal.
00:48:08.640 | Well, I do think that's true of programmers.
00:48:10.360 | Really good programmers think like the computer
00:48:12.560 | because that's their job.
00:48:14.160 | But if you internalize it too much,
00:48:15.880 | you become the computer and you kind of become
00:48:18.160 | a jerk to everybody because that's what you've internalized.
00:48:21.640 | - You're almost not a jerk, but you have no patience
00:48:24.240 | for a lack of strictness, as you said.
00:48:26.160 | - It's not out of a sense of meanness, it's accidental.
00:48:28.580 | But I do believe it's an occupational hazard
00:48:30.360 | of being a programmer is you start
00:48:31.940 | to behave like the computer.
00:48:33.660 | You're very unforgiving, you're very terse,
00:48:35.840 | you're very, oh, wrong, incorrect, move on.
00:48:38.360 | It's like, well, can you help me?
00:48:39.680 | Like, what could I do to fix, nope, wrong, next question.
00:48:43.640 | Right, like that's normal for the computer, right?
00:48:46.400 | Just fail, next, right?
00:48:47.720 | Like, I don't know if you remember in Saturday Night Live,
00:48:51.160 | like in the '90s, they had this character who was an IT guy.
00:48:54.080 | - Yeah. - The Move guy, move.
00:48:56.640 | - Was that Jimmy Fallon?
00:48:58.040 | No, no.
00:48:59.520 | - Can't remember. - Who played him?
00:49:01.080 | Okay, yeah, I remember, move.
00:49:02.560 | - Right, he had no patience for it.
00:49:04.120 | - Might have been Mad TV, actually.
00:49:05.640 | - Oh, was it Mad TV?
00:49:06.600 | Might have been, might have been.
00:49:07.520 | But anyway, that's always been the perception, right?
00:49:10.880 | You start to behave like the computer.
00:49:12.480 | It's like, oh, you're wrong, out of the way, you know?
00:49:14.820 | - You've written so many blog posts about programming,
00:49:17.480 | about programs, programming, programmers.
00:49:22.480 | What do you think makes a good,
00:49:25.600 | let's start with what makes a good solo programmer?
00:49:29.280 | - Well, I don't think you should be a solo programmer.
00:49:31.520 | I think to be a good solo programmer,
00:49:33.280 | it's kinda like what I talked about, well, not on mic,
00:49:35.520 | but one of the things John Carmack,
00:49:37.960 | one of the best points he makes in the book
00:49:40.000 | "Masters of Doom," which is a fantastic book,
00:49:42.080 | and anybody listening to this who hasn't read it,
00:49:43.640 | please read it, it's such a great book,
00:49:45.760 | is that at the time they were working on stuff
00:49:48.440 | like Wolfenstein and Doom,
00:49:50.680 | they didn't have the resources that we have today.
00:49:52.720 | They didn't have Stack Overflow,
00:49:53.880 | they didn't have Wikipedia,
00:49:54.800 | they didn't have discourse forums,
00:49:56.600 | they didn't have places to go to get people to help them.
00:50:00.120 | They had to work on their own.
00:50:01.800 | And that's why it took a genius like Carmack
00:50:03.700 | to do this stuff, 'cause you had to be a genius
00:50:05.500 | to invent from first principles.
00:50:07.080 | A lot of the stuff he was,
00:50:08.480 | the hacks he was coming up with were genius,
00:50:11.000 | genius-level stuff.
00:50:11.840 | But you don't need to be a genius anymore,
00:50:13.780 | and that means not working by yourself.
00:50:15.480 | You have to be good at researching stuff online,
00:50:17.320 | you have to be good at asking questions,
00:50:19.180 | really good questions that are really well researched,
00:50:20.960 | which implies, oh, I went out and researched
00:50:22.320 | for three hours before I wrote this question.
00:50:24.000 | It's like, that's what you should be doing,
00:50:25.600 | because that's what's gonna make you good, right?
00:50:28.080 | To me, this is the big difference between programming
00:50:29.840 | in the '80s versus programming today,
00:50:32.080 | is you kinda had to be by yourself back then.
00:50:34.960 | Where would you go for answers?
00:50:36.440 | I remember in the early days,
00:50:37.840 | when I was learning Visual Basic for Windows,
00:50:41.240 | I would call the Microsoft helpline on the phone
00:50:44.520 | when I had a program, 'cause I was like,
00:50:46.000 | I don't know what to do.
00:50:46.960 | So I would go and call, and they had these huge phone banks,
00:50:49.600 | and I'm like, can you imagine how alien that is now?
00:50:51.440 | Who would do that?
00:50:52.280 | Like, that's crazy.
00:50:53.480 | So there was just nowhere else to go when you got stuck.
00:50:57.640 | I had the books that came with it.
00:50:59.480 | I read those, studied those religiously.
00:51:01.240 | I just saw a post from Steve Sanofsky
00:51:03.280 | that said the C++ version seven came with 10,000 pages
00:51:08.280 | of written material, because where else
00:51:11.960 | were you gonna figure that stuff out?
00:51:13.560 | Go to the library?
00:51:14.840 | I mean, you didn't have Wikipedia.
00:51:15.720 | You didn't have Reddit.
00:51:17.840 | You didn't have anywhere to go to answer these questions.
00:51:20.680 | - So you've talked about, through the years,
00:51:24.120 | basically not having an ego and not thinking
00:51:26.520 | that you're the best programmer in the world.
00:51:29.680 | And so always kind of just looking to improve,
00:51:34.000 | to become a better programmer than you were yesterday.
00:51:36.440 | So how have you changed as a programmer
00:51:39.160 | and as a thinker, designer around programming
00:51:43.240 | over the past, what is it, 15 years,
00:51:47.280 | really, of being a public figure?
00:51:48.920 | - I would say the big insight that I had
00:51:50.800 | is eventually, as a programmer,
00:51:52.600 | you have to kind of stop writing code to be effective,
00:51:54.680 | which is kind of disturbing, 'cause you really love it.
00:51:58.160 | But you realize being effective at programming
00:52:02.200 | in the general sense doesn't mean writing code.
00:52:05.080 | And a lot of times you can be much more successful
00:52:06.560 | by not writing code than writing code
00:52:08.760 | in terms of just solving the problems you have.
00:52:10.320 | Essentially hiring people that are really good
00:52:12.280 | and setting them free and giving them basic direction
00:52:16.280 | on strategy and stuff.
00:52:17.960 | 'Cause a lot of the problems you encounter
00:52:19.600 | aren't necessarily solved through really gnarly code.
00:52:22.320 | They're solved by conceptual solutions,
00:52:25.000 | which can then be turned into code.
00:52:26.480 | But are you even solving the right problem?
00:52:28.600 | I mean, so I would say for me,
00:52:31.840 | the main insight I have is to succeed as a programmer,
00:52:35.240 | you eventually kind of stop writing code.
00:52:37.480 | That's going to sound discouraging, probably,
00:52:39.080 | to people who are hearing, but I don't mean it that way.
00:52:40.680 | What I mean is that you're coding
00:52:42.040 | in a higher level language.
00:52:43.160 | Eventually, like, okay, so we're coding
00:52:44.680 | in assembly language, right?
00:52:45.520 | That's the beginning, right?
00:52:46.560 | You're hard-coded to the architecture.
00:52:48.880 | Then you have stuff like C, where it's like,
00:52:49.920 | wow, we can abstract across the architecture.
00:52:52.000 | You can write code.
00:52:52.840 | I can then compile that code for ARM
00:52:54.560 | or whatever, X86 or whatever else is out there.
00:52:58.200 | And then even higher level than that, right?
00:53:00.040 | Like you're looking at Python, Ruby, interpreted languages.
00:53:02.920 | And then to me as a programmer, like, okay,
00:53:04.880 | I want to go even higher.
00:53:05.920 | I want to go higher than that.
00:53:07.080 | How do I abstract higher than language?
00:53:08.480 | It's like, well, you abstract in spoken language
00:53:11.040 | and written language, right?
00:53:12.040 | Like you're sort of inspiring people to get things done,
00:53:14.560 | giving them guidance, like, what if we did this?
00:53:16.000 | What if we did this?
00:53:17.440 | You're writing in the highest level language that there is,
00:53:19.720 | which is, for me, English, right?
00:53:21.320 | Whatever your spoken language is.
00:53:23.000 | So it's all about being effective, right?
00:53:25.760 | And I think Patrick McKenzie, patio 11 on Hacker News
00:53:30.760 | and works at Stripe, has a great post about this,
00:53:33.560 | of how calling yourself a programmer
00:53:35.840 | is a career limiting move at some level,
00:53:38.520 | once you get far enough from your career.
00:53:39.680 | And I really believe that.
00:53:40.720 | And again, I apologize, this is sound discouraging.
00:53:43.000 | I don't mean it to be, but he's so right.
00:53:45.200 | Because all the stuff that goes on around the code,
00:53:47.680 | like the people, like that's another thing,
00:53:49.720 | if you look at my early blog entries,
00:53:51.000 | it was about, wow, programming is about people
00:53:54.160 | more than it's about code,
00:53:55.200 | which doesn't really make sense, right?
00:53:56.640 | But it's about, can these people even get along together?
00:53:59.120 | Can they understand each other?
00:54:00.800 | Can you even explain to me what it is you're working on?
00:54:02.920 | Are you solving the right problem?
00:54:04.480 | Peopleware, right?
00:54:05.320 | Another classic programming book, which again,
00:54:07.480 | up there with CodeComplete, please read Peopleware.
00:54:09.840 | It's that software is people, right?
00:54:11.480 | People are the software first and foremost.
00:54:13.400 | So a lot of the skills that I was working on
00:54:15.560 | early in the blog were about figuring out
00:54:18.120 | the people parts of programming,
00:54:19.320 | which were the harder parts.
00:54:20.600 | The hard part of programming,
00:54:21.600 | once you get a certain skill level in programming,
00:54:23.000 | you can pretty much solve any reasonable problem
00:54:25.160 | that's put in front of you.
00:54:26.240 | You're not writing algorithms from scratch, right?
00:54:28.040 | That just doesn't happen.
00:54:29.200 | So any sort of reasonable problem put in front of you,
00:54:31.280 | you're gonna be able to solve.
00:54:32.200 | But what you can't solve is our manager is a total jerk.
00:54:36.840 | You cannot solve that with code.
00:54:38.560 | That is not a code-solvable problem.
00:54:40.560 | And yet that will cripple you way more than,
00:54:43.600 | oh, we had to use this stupid framework I don't like,
00:54:45.720 | or Sam keeps writing bad code that I hate,
00:54:49.240 | or Dave is off there in the wilderness
00:54:52.080 | writing God knows what, right?
00:54:53.200 | These are not your problems.
00:54:54.080 | Your problem is your manager or a coworker
00:54:56.720 | is so toxic to everybody else in your team
00:54:58.680 | that nobody can get anything done
00:55:00.080 | because everybody's so stressed out and freaked out, right?
00:55:02.280 | These are the problems that you have to attack.
00:55:04.440 | - Absolutely, and so as you go to these
00:55:06.160 | higher level abstractions, as you've developed
00:55:08.200 | as a programmer to higher, higher level abstractions
00:55:10.560 | and go into natural language,
00:55:12.200 | you're also the guy who kind of preached building it,
00:55:16.920 | diving in and doing it, and learn by doing.
00:55:21.520 | Do you worry that as you get to higher,
00:55:28.440 | higher level abstractions, you lose track
00:55:31.480 | of the lower level of just building?
00:55:35.400 | Is like, do you worry about that?
00:55:37.240 | Even, not maybe now, but 10 years from now,
00:55:39.640 | 20 years from now?
00:55:41.520 | - Well, no, I mean, there is always that paranoia,
00:55:43.880 | and oh gosh, I don't feel it's valuable
00:55:45.360 | since I'm not writing code.
00:55:46.240 | But for me, when we started the Discourse project,
00:55:48.240 | it was Ruby, which I didn't really know Ruby.
00:55:50.240 | I mean, as you pointed out,
00:55:51.560 | and this is another valuable observation from Stack Overflow,
00:55:53.800 | you can be super proficient, for example, C#,
00:55:56.000 | which I was working in, that's when we built Stack Overflow,
00:55:57.840 | and still is written in,
00:55:59.360 | and then switch to Ruby, and you're a newbie again.
00:56:01.960 | But you have the framework.
00:56:03.240 | I know what a for loop is.
00:56:04.440 | I know what recursion is.
00:56:05.800 | I know what a stack trace is.
00:56:10.040 | I have all the fundamental concepts to be a programmer,
00:56:12.040 | I just don't know Ruby.
00:56:12.880 | So I'm still on a higher level.
00:56:14.800 | I'm not like a beginner, beginner, like you're saying.
00:56:16.600 | I'm just like, I need to apply my programming concepts
00:56:18.640 | I already know to Ruby.
00:56:20.360 | - Well, so there's a question that's really interesting.
00:56:23.240 | So looking at Ruby, how do you go about learning enough
00:56:26.880 | that your intuition can be applied, carried over?
00:56:29.640 | - That's what I was trying to get to.
00:56:30.480 | What I realized, particularly when I started
00:56:31.640 | with just me and Robin, I realized,
00:56:33.320 | if I bother Robin, I am now costing us productivity.
00:56:37.080 | Every time I go to Robin, rather than building
00:56:39.520 | our first alpha version of discourse,
00:56:43.800 | he's now answering my stupid questions about Ruby.
00:56:46.040 | Is that a good use of his time?
00:56:47.600 | Is that a good use of my time?
00:56:49.160 | And the answer to both of those was resoundingly no.
00:56:51.960 | We were getting to an alpha, and it was pretty much just,
00:56:55.120 | okay, we'll hire more programmers.
00:56:56.720 | Like we eventually hired Neil, and then eventually Sam,
00:57:00.280 | who came in as a co-founder.
00:57:01.720 | Actually, it was Sam first, then Neil later.
00:57:05.040 | But the answer to the problem is just hire
00:57:06.640 | other competent programmers.
00:57:07.480 | It's not like teach, now I shall pull myself up
00:57:10.360 | by my bootstraps and learn Ruby.
00:57:12.360 | But at some point, writing code becomes a liability to you
00:57:16.080 | in terms of getting things done.
00:57:17.400 | There's so many other things that go on in the project,
00:57:19.400 | like building the prototype.
00:57:20.840 | You mentioned, well, how do you, if you're not writing code,
00:57:23.160 | how does everybody keep focused on what are we building?
00:57:25.720 | Well, first, basic mock-ups and research, right?
00:57:28.160 | Like what do we even want to build?
00:57:30.160 | There's a little bit of that that goes on.
00:57:31.240 | But then very quickly, you get to the prototype stage.
00:57:32.800 | Like build a prototype, let's iterate on the prototype
00:57:34.840 | really, really rapidly.
00:57:35.920 | And that's what we do at Discourse.
00:57:36.880 | And that's what we demoed to get our seed funding
00:57:38.960 | for Discourse was the alpha version of Discourse
00:57:42.360 | that we had running and ready to go.
00:57:43.840 | And it was very, it was bad.
00:57:45.160 | I mean, it was, I'll just tell you it was bad.
00:57:47.640 | We have screenshots of it, and I'm just like embarrassed
00:57:49.200 | to look at it now.
00:57:50.560 | But it was the prototype.
00:57:51.400 | We were figuring out like what's working,
00:57:52.640 | what's not working.
00:57:53.560 | 'Cause there's such a broad gap between
00:57:56.840 | the way you think things will work in your mind
00:57:59.440 | or even on paper, and the way they work
00:58:01.160 | once you sit and live in the software,
00:58:03.080 | like actually spend time living and breathing on software,
00:58:05.600 | so different.
00:58:06.720 | So my philosophy is get to a prototype,
00:58:10.800 | and then what you're really optimizing for
00:58:12.560 | is speed of iteration, like how you can turn the crank,
00:58:14.800 | how quickly can we iterate?
00:58:16.120 | That's the absolutely critical metric
00:58:18.000 | of any software project.
00:58:19.000 | And I had a tweet recently that people liked,
00:58:20.920 | and I totally, this is so fundamental to what I do,
00:58:23.140 | is like if you wanna measure the core competency
00:58:25.960 | of any software tech company,
00:58:27.640 | it's the speed at which somebody can say,
00:58:29.160 | hey, we really need this word in the product
00:58:31.200 | changed to this word, right?
00:58:32.280 | Because it will be more clear to the users,
00:58:34.280 | like what, like instead of respond,
00:58:35.640 | it's reply or something.
00:58:36.480 | But there's some, from the conception of that idea
00:58:39.800 | to how quickly that single word can be changed
00:58:42.200 | in your software and rolled out to users,
00:58:43.400 | that is your life cycle.
00:58:44.920 | That's your health, your heartbeat.
00:58:47.280 | If your heartbeat is like super slow,
00:58:50.000 | you're basically dead.
00:58:51.600 | No, seriously.
00:58:52.440 | If it takes two weeks or even a month
00:58:55.060 | to get that single word change,
00:58:56.180 | they're like, oh my God, this is a great idea.
00:58:57.700 | That word is so much clearer.
00:58:58.960 | I'm talking about like a super,
00:59:00.020 | like everybody's on board for this change.
00:59:01.620 | It's not like, let's just change a word 'cause we're bored.
00:59:03.420 | It's like, this is an awesome change.
00:59:05.500 | And then it takes months to roll out.
00:59:06.980 | It's like, well, you're dead.
00:59:07.860 | Like you can't iterate.
00:59:09.140 | You can't, how are you gonna do anything, right?
00:59:12.300 | So anyway, about the heartbeat,
00:59:13.660 | it's like get the prototype and then iterate on it.
00:59:15.940 | That's what I view as like the central tenet
00:59:18.940 | of modern software development.
00:59:20.420 | - That's fascinating that you put it that way.
00:59:21.940 | It's actually, so I work in, I build autonomous vehicles.
00:59:24.420 | And when you look at what,
00:59:27.100 | maybe compare Tesla to most other automakers,
00:59:29.760 | the psych, the whatever, the heartbeat for Tesla
00:59:34.080 | is literally days now in terms of they can over the air
00:59:38.100 | deploy software updates to all their vehicles,
00:59:41.140 | which is markedly different than every other automaker,
00:59:44.780 | which takes years to update a piece of software.
00:59:49.100 | And so, and that's reflected in everything that's,
00:59:52.780 | the final product, it's reflected in really
00:59:56.420 | how slowly they adapt to the times.
00:59:58.180 | - And to be clear, I'm not saying being a hummingbird
00:59:59.900 | is the goal either.
01:00:00.740 | It's like, you don't want a heartbeat that's like so fast.
01:00:02.380 | It's like you're just freaking out.
01:00:04.560 | But like, it is a measure of health.
01:00:05.700 | You should have a healthy heartbeat.
01:00:07.300 | It's up to, for people listening to this,
01:00:08.700 | decide what that means, but it has to be healthy.
01:00:10.860 | It has to be reasonable 'cause otherwise
01:00:12.580 | you're just gonna be frustrated 'cause like,
01:00:13.800 | that's how you build software.
01:00:15.100 | You make mistakes, you roll it out, you live with it.
01:00:17.740 | You see what it feels like and say,
01:00:18.780 | oh God, that was a terrible idea.
01:00:19.900 | Oh my gosh, this could be even better if we did Y, right?
01:00:22.700 | You turn the crank and then the more you do that,
01:00:24.980 | the faster you get ahead of your competitors ultimately
01:00:27.480 | because it's rate of change, right?
01:00:29.660 | Delta V, right?
01:00:30.900 | How fast are you moving?
01:00:32.640 | Well, within a year, you're gonna be miles away
01:00:34.740 | by the time they catch up with you, right?
01:00:36.540 | Like that's the way it works.
01:00:37.860 | And plus users, like as a software developer,
01:00:40.780 | I love software that's constantly changing
01:00:42.780 | because I don't understand people get super pissed off
01:00:45.580 | when like, oh, they changed the software on me.
01:00:47.140 | How dare they?
01:00:47.980 | I'm like, yes, change the software.
01:00:49.500 | Change it all the time, man.
01:00:50.780 | That's what makes this stuff great
01:00:52.700 | is that it can be changed so rapidly
01:00:55.300 | and become something that is greater than it is now.
01:00:58.420 | Now granted, there's some changes that suck, I admit.
01:01:01.120 | I've seen it many times.
01:01:02.220 | But in general, it's like,
01:01:03.500 | that's what makes software cool, right?
01:01:05.040 | Is that it is so malleable.
01:01:06.460 | Like fighting that is like weird to me
01:01:08.420 | 'cause it's like, well, you're fighting the essence
01:01:10.620 | of the thing that you're building.
01:01:12.020 | Like that doesn't make sense.
01:01:12.980 | You wanna really embrace that.
01:01:13.880 | Not to be a hummingbird,
01:01:15.420 | but like embrace it to a healthy cycle of your heartbeat.
01:01:18.180 | - So you talk about that people really don't change.
01:01:20.980 | It's true.
01:01:22.500 | That's why probably a lot of the stuff you write about
01:01:24.500 | in your blog probably will remain true.
01:01:27.900 | - There's a flip side of the coin.
01:01:28.780 | People don't change.
01:01:29.600 | So investing in understanding people
01:01:31.620 | is like learning Unix in 1970
01:01:34.780 | because nothing has changed, right?
01:01:37.020 | Like all those things you've learned about people
01:01:38.860 | will still be valid 30, 40 years from now.
01:01:40.660 | Whereas if you learn the latest JavaScript framework,
01:01:43.160 | that's gonna be good for like two years, right?
01:01:45.220 | - Exactly.
01:01:46.300 | So, but if you look at the future of programming,
01:01:49.780 | so there's a people component,
01:01:51.140 | but there's also the technology itself.
01:01:54.340 | Do you, what do you see as the future of programming?
01:01:57.300 | Will it change significantly?
01:01:59.300 | Or as far as you can tell,
01:02:00.900 | people are ultimately programming
01:02:04.780 | and so it will not,
01:02:05.940 | it's not something that you foresee changing
01:02:08.700 | in any fundamental way.
01:02:10.020 | - Well, you gotta go look back
01:02:11.980 | on sort of the basics of programming.
01:02:14.380 | And one of the things that always shocked me
01:02:15.500 | is like source control.
01:02:16.340 | Like I didn't learn anything about source control.
01:02:18.540 | Now granted, I graduated from college in 1992,
01:02:22.380 | but I remember hearing from people
01:02:24.180 | like as late as like 1998, 1999,
01:02:26.580 | like even maybe today,
01:02:27.580 | they're not learning source control.
01:02:28.900 | And to me, it's like,
01:02:29.740 | well, how can you not learn source control?
01:02:31.540 | That is so fundamental to working with other programmers,
01:02:34.580 | working in a way that you don't lose your work.
01:02:35.940 | Like just basic software,
01:02:37.580 | the literal bedrock of software development
01:02:40.340 | is source control.
01:02:41.200 | Now you compare today, like GitHub, right?
01:02:42.820 | Like Microsoft bought GitHub,
01:02:43.900 | which I think was an incredibly smart acquisition move
01:02:45.820 | on their part.
01:02:46.940 | Now they have anybody who wants like reasonable
01:02:49.620 | source control to go sign up on GitHub.
01:02:50.940 | It's all set up for you, right?
01:02:52.380 | There's tons of walkthroughs, tons of tutorials.
01:02:55.300 | So from the concept of like,
01:02:56.540 | has programming advanced from say 1999?
01:02:58.660 | It's like, well, hell, we have GitHub.
01:03:00.300 | I mean, my God, yes, right?
01:03:01.600 | Like it's massively advanced over what it was.
01:03:04.820 | Now as to whether programming is significantly different,
01:03:08.860 | I'm gonna say no,
01:03:09.700 | but I think the baseline of like what we view
01:03:12.020 | as like fundamentals will continue to go up
01:03:15.420 | and actually get better.
01:03:16.520 | Like source control, for example.
01:03:17.500 | That's one of the fundamentals that has gotten,
01:03:19.060 | I mean, hundreds of orders of magnitude better
01:03:22.040 | than it was 10, 20 years ago, right?
01:03:23.860 | - So those are the fundamentals.
01:03:24.940 | Let me introduce two things that maybe you can comment on.
01:03:28.260 | So one is mobile phones.
01:03:31.020 | So that could fundamentally transform what programming is,
01:03:35.020 | or maybe not, maybe you can comment on that.
01:03:39.100 | And the other one is artificial intelligence,
01:03:41.500 | which promises to, in some ways,
01:03:45.140 | to do some of the programming for you,
01:03:48.060 | is one way to think about it.
01:03:49.460 | So it's really what a programmer is,
01:03:51.980 | is using the intelligence that's inside your skull
01:03:55.660 | to do something useful.
01:03:58.060 | The hope with artificial intelligence
01:03:59.500 | is that it does some of the useful parts for you
01:04:02.060 | the way you don't have to think about it.
01:04:03.580 | So do you see smartphones,
01:04:06.020 | the fact that everybody has one,
01:04:07.700 | and they're getting more and more powerful
01:04:09.340 | as potentially changing programming?
01:04:11.580 | And do you see AI as potentially changing programming?
01:04:14.300 | - Okay, so that's good.
01:04:15.580 | So smartphones have definitely changed.
01:04:17.500 | I mean, since, I guess, 2010 is when
01:04:19.620 | they really started getting super popular.
01:04:21.780 | I mean, in the last eight years,
01:04:24.100 | the world has literally changed, right?
01:04:25.700 | Like, everybody carries a computer around,
01:04:27.340 | and that's normal.
01:04:28.460 | I mean, that is such a huge change in society.
01:04:31.300 | I think we're still dealing with a lot of the positive
01:04:33.780 | and negative ramifications of that, right?
01:04:35.100 | Like, everybody's connected all the time,
01:04:36.260 | everybody's on the computer all the time.
01:04:37.780 | That was my dream world as a geek, right?
01:04:40.300 | But it's like, be careful what you ask for, right?
01:04:41.980 | Like, wow, now everybody has a computer,
01:04:44.060 | and it's not quite the utopia
01:04:45.140 | that we thought it would be, right?
01:04:46.980 | Computers can be used for a lot of stuff
01:04:48.460 | that's not necessarily great.
01:04:51.140 | So to me, that's the central focus of the smartphone
01:04:53.100 | is just that it puts a computer in front of everyone,
01:04:55.660 | granted a small, small-ish touchscreen computer.
01:04:59.060 | But as for programming, like, I don't know.
01:05:00.500 | I don't think that, I've kind of, over time,
01:05:03.020 | come to subscribe to the Unix view of the world
01:05:05.340 | when it comes to programming.
01:05:06.180 | It's like, you want to teach these basic command line things,
01:05:10.020 | and that is just what programming's gonna be
01:05:11.660 | for, I think, a long, long time.
01:05:14.380 | I don't think there's any magical, like, visual programming
01:05:17.060 | that's gonna happen.
01:05:18.140 | I just, I don't know.
01:05:20.620 | I've, over time, have become a believer
01:05:22.700 | in that Unix philosophy of just, you know,
01:05:24.260 | they kind of had it right with Unix.
01:05:26.380 | That's gonna be the way it is for a long, long time.
01:05:28.900 | And we'll continue to, like I said, raise the baseline.
01:05:31.560 | The tools will get better, it'll get simpler,
01:05:32.980 | but it's still fundamentally gonna be command line tools,
01:05:35.580 | you know, fancy IDEs.
01:05:37.140 | That's kind of it for the foreseeable future.
01:05:39.180 | I'm not seeing any visual programming stuff on the horizon.
01:05:42.220 | 'Cause you kind of think, like,
01:05:43.060 | what do you do on a smartphone
01:05:44.060 | that would be directly analogous to programming?
01:05:46.380 | Like, I'm trying to think, right?
01:05:48.180 | And there's really not much.
01:05:49.580 | - So, not necessarily analogous to programming,
01:05:55.120 | but the kind of things that,
01:06:00.120 | the kind of programs you would need to write
01:06:04.420 | might need to be very different.
01:06:06.360 | - Yeah.
01:06:08.180 | - And the kind of languages, I mean,
01:06:09.700 | but I probably also subscribe to the same,
01:06:12.340 | just because everything in this world
01:06:14.260 | might be written in JavaScript.
01:06:16.500 | - Oh yeah, that's already happening.
01:06:17.740 | I mean, discourse is a bet.
01:06:18.980 | Discourse is itself JavaScript,
01:06:20.220 | is another bet on that side of the table.
01:06:21.660 | And I still strongly believe in that.
01:06:23.620 | So I would say smartphones have mostly a cultural shift,
01:06:25.780 | more than a programming shift.
01:06:27.980 | Now, your other question was about artificial intelligence
01:06:30.060 | and, like, sort of devices predicting
01:06:32.460 | what you're gonna do.
01:06:33.300 | I do think there's some strength to that.
01:06:34.620 | I think artificial intelligence is kind of overselling it
01:06:37.020 | in terms of what it's doing.
01:06:37.860 | It's more like, people are predictable, right?
01:06:39.220 | People do the same things.
01:06:40.700 | Like, let me give you an example.
01:06:42.220 | One check we put into discourse
01:06:44.540 | that's in a lot of big commercial websites is,
01:06:48.260 | say you log in from New York City now,
01:06:51.140 | and then an hour later, you log in from San Francisco.
01:06:54.220 | It's like, well, hmm, that's interesting.
01:06:56.560 | How did you get from New York to San Francisco in one hour?
01:06:59.820 | So at that point, you're like, okay,
01:07:01.020 | this is a suspicious login at that point.
01:07:02.640 | So we would alert you.
01:07:03.480 | It's like, okay, but that's not AI, right?
01:07:05.340 | That's just a heuristic of, like,
01:07:07.300 | how did you in one hour get 2,000 miles, right?
01:07:11.100 | That doesn't, I mean, you're on a VPN,
01:07:12.660 | there's other ways it's happened,
01:07:13.540 | but that's just a basic prediction
01:07:15.380 | based on the idea that people pretty much
01:07:17.220 | don't move around that much.
01:07:19.260 | Like, they may travel occasionally,
01:07:20.940 | but nobody, I mean, unless you're a traveling salesman
01:07:22.980 | that's literally traveling the world every day,
01:07:25.500 | like, there's so much repetition and predictability
01:07:28.260 | in terms of things you're going to do.
01:07:29.620 | And I think good software anticipates your needs.
01:07:31.860 | Like, for example, Google, I think it's called Google Now
01:07:34.160 | or whatever that Google thing is that predicts your commute
01:07:36.160 | and predicts based on your phone location,
01:07:37.680 | like, where are you every day?
01:07:39.140 | Well, that's probably where you work, that kind of stuff.
01:07:42.080 | I do think computers can get a lot better at that,
01:07:43.760 | but I hesitate to call it like full-blown AI.
01:07:46.240 | It's just computers getting better at like,
01:07:48.480 | first of all, they have a ton of data
01:07:49.440 | 'cause everybody has a smartphone.
01:07:50.480 | Now all of a sudden we have all this data
01:07:52.000 | that we didn't have before about location,
01:07:53.820 | about like, you know, communication,
01:07:56.160 | and feeding that into some basic heuristics
01:07:59.200 | and maybe some fancy algorithms
01:08:00.440 | that turn it into predictions of anticipating your needs,
01:08:03.080 | like a friend would, right?
01:08:04.480 | Like, oh, hey, I see you're home.
01:08:06.520 | Would you like some dinner, right?
01:08:07.480 | Like, let's go get some food
01:08:08.580 | 'cause that's usually what we do this time of day, right?
01:08:10.760 | - In the context of actually the active programming,
01:08:13.600 | do you see IDEs improving
01:08:15.320 | and making the life of programming better?
01:08:17.440 | - I do think that is possible
01:08:18.800 | 'cause there's a lot of repetition in programming, right?
01:08:20.680 | Oh, you know, Clippy would be the bad example of,
01:08:23.200 | oh, I see, it looks like you're writing a for loop.
01:08:25.920 | But there are patterns in code, right?
01:08:27.800 | Like, and actually libraries are kind of like that, right?
01:08:30.320 | Like, rather than go, you know,
01:08:33.200 | code up your own HTTP request library,
01:08:35.400 | it's like, well, you'd use one of the existing ones
01:08:37.520 | that we have that's already troubleshot, right?
01:08:39.720 | That's not AI per se, it's just, you know,
01:08:42.280 | building better Lego bricks, bigger Lego bricks
01:08:46.280 | that have more functionality in them
01:08:47.720 | so people don't have to worry
01:08:48.840 | about the low-level stuff as much anymore.
01:08:50.480 | Like WordPress, for example, to me is like a tool
01:08:53.160 | for somebody who isn't a programmer to do something.
01:08:55.840 | I mean, you can turn WordPress into anything.
01:08:57.640 | It's kind of crazy actually through plugins, right?
01:08:59.500 | And that's not programming per se.
01:09:01.320 | It's just Lego bricks stacking WordPress elements, right?
01:09:04.520 | And a little bit of configuration glue.
01:09:06.520 | So I would say maybe in a broader sense,
01:09:08.480 | what I'm seeing like, there'll be more gluing
01:09:11.320 | and less like actual programming.
01:09:14.120 | And that's a good thing, right?
01:09:15.560 | 'Cause most of the stuff you need
01:09:16.680 | is kind of out there already.
01:09:17.920 | - You said 1970s Unix.
01:09:20.080 | Do you see PHP and these kind of old remnants
01:09:28.240 | of the early birth of programming
01:09:31.740 | remaining with us for a long time?
01:09:33.740 | Like you said, Unix in itself.
01:09:35.580 | Do you see ultimately, you know,
01:09:37.620 | this stuff just being there out of momentum?
01:09:42.620 | - I kind of do.
01:09:44.100 | I mean, I was a big believer in Windows early on
01:09:46.100 | and I was a big, you know, I was like,
01:09:47.300 | Unix, what a waste of time.
01:09:48.700 | But over time I've completely flipped on that
01:09:50.060 | where I was like, okay, the Unix guys were right.
01:09:51.660 | And pretty much Microsoft and Windows were kind of wrong,
01:09:54.580 | at least on the server side.
01:09:55.700 | Now on the desktop, right, you need a GUI,
01:09:57.340 | you need all that stuff.
01:09:58.180 | And yeah, the two philosophies,
01:09:59.140 | like Apple built on Unix, effectively Darwin.
01:10:02.620 | And on the desktop it's a slightly different story,
01:10:04.540 | but on the server side where you're gonna be programming,
01:10:06.920 | now it's a question of where the programming's gonna be.
01:10:08.420 | Is it gonna be a lot more like client-side programming?
01:10:10.680 | 'Cause technically, Discourse is client-side programming.
01:10:13.560 | The way you get Discourse,
01:10:14.440 | we deliver a big ball of JavaScript,
01:10:16.120 | which is then executed locally.
01:10:18.200 | So we're really using a lot more local computing power.
01:10:20.920 | We'll still retrieve the data, obviously.
01:10:22.300 | We have to display the posts on the screen and so forth.
01:10:24.260 | But in terms of like sorting and a lot of the basic stuff,
01:10:26.980 | we're using the host processor.
01:10:29.380 | But to the extent that a lot of programming
01:10:31.200 | is still gonna be server-side,
01:10:32.980 | I would say, yeah, the Unix philosophy definitely won.
01:10:35.260 | And there'll be different veneers over Unix,
01:10:38.580 | but it's still, if you peel away one or two layers,
01:10:40.780 | it's gonna be Unix-y for a long,
01:10:42.900 | I think Unix won, I mean, so definitively.
01:10:45.500 | - It's interesting to hear you say that,
01:10:47.420 | because you've done so much excellent work
01:10:49.060 | on the Microsoft side in terms of backend development.
01:10:52.820 | Cool.
01:10:53.640 | So what's the future hold for Jeff Atwood?
01:10:56.900 | I mean, the discourse, continuing the discourse
01:11:01.820 | in trying to improve conversation on the web?
01:11:03.900 | - Well, discourse is what I viewed as a,
01:11:05.620 | and originally I called it a five-year project,
01:11:07.020 | then really quickly revised that to a 10-year project.
01:11:08.780 | So we started in early to the 2013,
01:11:12.260 | that's when we launched the first version.
01:11:13.620 | So we're still five years in.
01:11:16.100 | This is the part where it starts getting good.
01:11:17.380 | Like we have a good product now.
01:11:18.500 | Discourse, there's any project you build in software,
01:11:21.740 | it takes three years to build
01:11:22.740 | what you want it to build anyway.
01:11:24.060 | Like V1 is gonna be terrible, which it was.
01:11:26.540 | But you ship it anyway,
01:11:27.380 | 'cause that's how you get better at stuff.
01:11:28.940 | It's about turning the crank.
01:11:29.900 | It's not about V1 being perfect, 'cause that's ridiculous.
01:11:32.760 | It's about V1, then let's get really good at V1.1,
01:11:35.500 | 1.2, 1.3, like how fast can we iterate?
01:11:37.960 | And I think we're iterating like crazy on discourse
01:11:40.100 | to the point that like, it's a really good product now.
01:11:41.900 | We have serious momentum.
01:11:43.540 | And my original vision was,
01:11:46.220 | I wanna be the WordPress of discussion,
01:11:48.080 | meaning someone came to you and said,
01:11:49.820 | I wanna start a blog.
01:11:50.740 | Although the very question is kind of archaic now.
01:11:52.940 | It's like, who actually blogs anymore?
01:11:55.280 | But I wanted the answer to that to be,
01:11:58.940 | it would be WordPress normally,
01:12:01.320 | 'cause that's the obvious choice
01:12:02.220 | for blogging most of the time.
01:12:04.180 | But if someone said, hey, I need a group of people
01:12:06.920 | to get together and do something,
01:12:08.740 | the answer should be discourse, right?
01:12:10.380 | That should be the default answer for people.
01:12:11.780 | 'Cause it's open source, it's free,
01:12:13.340 | doesn't cost you anything.
01:12:14.180 | You control it, you can run it.
01:12:15.940 | Your minimum server cost for discourse
01:12:17.360 | is five bucks a month at this point.
01:12:19.540 | They actually got the VPS prices down.
01:12:21.500 | It used to be $10 a month for one gigabyte of RAM,
01:12:23.820 | which we're, our dependent,
01:12:26.600 | we have a kind of heavy stack.
01:12:28.360 | Like there's a lot of stuff in discourse.
01:12:30.240 | You need Postgres, you need Redis,
01:12:31.720 | you need Ruby on Rails,
01:12:33.840 | you need a sidekick for scheduling.
01:12:35.720 | It's not a trivial amount of stuff,
01:12:36.920 | 'cause we were architected for like,
01:12:37.980 | look, we're building for the next 10 years.
01:12:39.420 | I don't care about shared PHP hosting.
01:12:41.920 | That's not my model.
01:12:44.120 | My idea is like, hey, eventually,
01:12:45.840 | this is gonna be very cheap for everybody,
01:12:47.460 | and I wanna build it right using, again,
01:12:50.520 | higher, bigger building block levels, right,
01:12:53.440 | that have more requirements.
01:12:54.440 | - And there's a WordPress model of WordPress.org,
01:12:56.600 | WordPress.com.
01:12:57.680 | Is there a central hosting for discourse, or no?
01:13:01.000 | - There is.
01:13:01.840 | We're not strictly segmenting into the open source
01:13:03.620 | versus the commercial side.
01:13:05.120 | We have a hosting business.
01:13:06.040 | That's how discourse makes money,
01:13:07.120 | is we host discourse instances,
01:13:08.880 | and we have a really close relationship
01:13:09.960 | with our customers of the symbiosis
01:13:12.840 | of them giving us feedback on the product.
01:13:14.680 | We definitely weight feedback from customers
01:13:16.480 | a lot heavier than feedback from somebody
01:13:18.400 | who just wanders by and gives feedback.
01:13:20.880 | But that's where we make all our money.
01:13:22.440 | But we don't have a strict division.
01:13:24.640 | We encourage people to use discourse.
01:13:26.840 | The whole point is that it's free, right?
01:13:29.000 | Anybody can set it up.
01:13:29.960 | I don't wanna be the only person that hosts discourse.
01:13:32.600 | That's absolutely not the goal.
01:13:34.200 | But it is a primary way for us to build a business,
01:13:36.280 | and it's actually kind of a great business.
01:13:37.600 | I mean, the business is going really, really well
01:13:40.280 | in terms of hosting.
01:13:41.360 | - So I used to work at Google Research
01:13:44.280 | as a company that's basically funded on advertisement.
01:13:47.000 | So it's Facebook.
01:13:48.120 | Let me ask if you can comment on it.
01:13:50.360 | - I think advertisement at its best.
01:13:53.480 | So you'd be extremely critical on what ads are,
01:13:56.560 | but at its best, it's actually serving you.
01:13:59.680 | In a sense, it's giving you,
01:14:01.160 | it's connecting you to what you would want to explore.
01:14:05.640 | So it's like related posts or related content.
01:14:08.000 | It's the same.
01:14:08.840 | That's the best of advertisement.
01:14:10.160 | So discourse is connecting people based on their interest.
01:14:15.160 | It seems like a place where advertisement at its best
01:14:20.080 | could actually serve the users.
01:14:21.760 | Is that something that you're considering thinking about
01:14:24.880 | as a way to financially support the platform?
01:14:29.440 | - That's interesting because I actually have
01:14:31.360 | a contrarian view of advertising,
01:14:32.560 | which I kind of agree with you.
01:14:33.760 | I recently installed AdBlocker reluctantly
01:14:36.800 | 'cause I don't like to do that.
01:14:38.280 | But the performance of the ads, man,
01:14:40.600 | they're so heavy now, and it's just crazy.
01:14:43.280 | So it's almost like a performance argument
01:14:45.040 | more than I actually am pro ads.
01:14:47.200 | And I have a contrarian viewpoint.
01:14:49.480 | I agree with you.
01:14:50.320 | If you do ads right, it's serving you stuff
01:14:51.960 | you'll be interested in anyway.
01:14:53.120 | I don't mind that.
01:14:54.720 | That actually is kind of a good thing.
01:14:56.520 | So plus I think it's rational to want to support
01:15:00.000 | the people that are doing this work
01:15:01.680 | through seeing their ads.
01:15:02.600 | But that said, I run AdBlock now,
01:15:04.040 | which I didn't want to do,
01:15:06.200 | but I was convinced by all these articles,
01:15:08.200 | like 30, 40 megabytes of stuff just to serve you ads.
01:15:11.600 | - Yeah, it feels like ads now are like the experts exchange
01:15:15.960 | of whenever you started Stack Overflow.
01:15:18.240 | It's a little bit, it's overwhelming.
01:15:19.480 | - Oh, there's so many companies in ad tech, though.
01:15:21.120 | It's embarrassing.
01:15:21.960 | You can do that.
01:15:22.800 | Have you seen those logo charts of just the whole page?
01:15:24.520 | You can't even see them, they're so small.
01:15:26.200 | There's so many companies in this space.
01:15:27.800 | But since you brought it up, I do want to point out
01:15:29.640 | that very, very few discourse sites
01:15:31.160 | actually run using an ad-supported model.
01:15:33.080 | It's not effective.
01:15:34.920 | It's too diluted, it's too weird, it doesn't pay well,
01:15:39.200 | and users hate it.
01:15:40.560 | So it's a combination of users hate it,
01:15:42.800 | it doesn't actually work that well in practice.
01:15:44.600 | In theory, yes, I agree with you.
01:15:45.760 | If you had clean, fast ads that were exactly
01:15:48.400 | the stuff you would be interested in, awesome.
01:15:50.320 | We're so far from that, though, right?
01:15:52.440 | Like, Google does an okay job.
01:15:53.800 | They do retargeting and stuff like that,
01:15:55.380 | but in the real world, discourse sites
01:15:59.280 | rarely can make ads work.
01:16:01.040 | It just doesn't work for so many reasons.
01:16:03.040 | But you know what does work is subscriptions,
01:16:05.600 | Patreon, affiliate codes for like Amazon,
01:16:10.600 | of like just, oh, here's a cool yo-yo, click,
01:16:13.100 | and then you click and go to Amazon,
01:16:14.360 | and they get a small percentage of that,
01:16:15.680 | which is fair, I think.
01:16:17.160 | I mean, 'cause you saw the yo-yo on that site,
01:16:19.120 | and you click through, and you bought it, right?
01:16:21.080 | And that's fair for them to get 5% of that,
01:16:22.520 | or 2% of that, or whatever it is.
01:16:24.200 | Those things definitely work.
01:16:25.960 | In fact, a site that I used to participate on a lot,
01:16:28.580 | I helped the owner.
01:16:29.860 | One of the things, I got them to switch to discourse.
01:16:32.440 | I basically paid them to switch to discourse,
01:16:34.180 | 'cause I was like, look, you guys gotta switch.
01:16:35.320 | I can't come here anymore, this is terrible software.
01:16:38.500 | But I was like, look, and on top of that,
01:16:40.120 | like, you're serving people ads that they hate.
01:16:42.280 | Like, you should just go full on Patreon,
01:16:43.920 | 'cause he had a little bit of Patreon.
01:16:45.320 | Go full on Patreon, do the Amazon affiliates thing,
01:16:49.720 | for any Amazon links that get posted,
01:16:51.120 | and just do that, and just triple down on that stuff.
01:16:53.560 | And that's worked really well for them,
01:16:55.320 | and this creator in particular.
01:16:56.780 | So that stuff works, but traditional ads,
01:16:59.480 | I mean, definitely not working, at least on discourse.
01:17:01.720 | - So last question.
01:17:03.400 | You've created the Code Keyboard.
01:17:05.920 | I've programmed most of my adult life
01:17:07.840 | on a Kinesis keyboard.
01:17:09.860 | I have one upstairs now.
01:17:12.080 | Can you describe what a mechanical keyboard is,
01:17:14.520 | and why is it something that makes you happy?
01:17:16.720 | - Well, you know, this is another fetish item, really.
01:17:18.800 | Like, it's not required.
01:17:20.140 | You can do programming on any kind of keyboard, right?
01:17:22.240 | Even like an on-screen keyboard, oh God,
01:17:24.440 | that's terrifying, right?
01:17:25.960 | But you could.
01:17:27.040 | I mean, if you look back at the early days of computing,
01:17:28.720 | there were chiclet keyboards, which are,
01:17:30.160 | I mean, those are awful, right?
01:17:31.400 | But-- - What's a chiclet keyboard?
01:17:32.520 | - Oh, God, okay, well, it's just like
01:17:34.160 | thin rubber membranes.
01:17:36.200 | - Oh, the rubber ones, oh no.
01:17:37.680 | - Super bad, right? - Yeah.
01:17:38.820 | - So it's a fetish item.
01:17:40.340 | All that really says is, look, I care really about keyboards,
01:17:43.320 | 'cause the keyboard is the primary method
01:17:44.600 | of communication with the computer, right?
01:17:46.220 | So it's just like having a nice mic for this podcast.
01:17:49.280 | You want a nice keyboard, right?
01:17:50.560 | 'Cause it has a very tactile feel.
01:17:52.160 | I can tell exactly when I press the key.
01:17:53.960 | I get that little click, so oh, and it feels good.
01:17:56.880 | And it's also kind of a fetish item.
01:17:57.960 | It's like, wow, I care enough about programming
01:18:00.260 | that I care about the tool, the primary tool,
01:18:02.400 | that I use to communicate with the computer,
01:18:03.280 | make sure it's as good as it feels good to use for me,
01:18:06.360 | and like, I can be very productive with it.
01:18:08.320 | So to be honest, it's a little bit of a fetish item,
01:18:10.680 | but a good one.
01:18:11.520 | It indicates that you're serious,
01:18:12.560 | it indicates you're interested,
01:18:13.600 | it indicates that you care about the fundamentals,
01:18:15.280 | 'cause you know what makes you a good programmer?
01:18:17.520 | Being able to type really fast, right?
01:18:18.920 | Like, this is true, right?
01:18:20.600 | So a core skill is just being able to type fast enough
01:18:23.480 | to get your ideas out of your head, into the code base.
01:18:26.120 | So just practicing your typing
01:18:28.040 | can make you a better programmer.
01:18:29.760 | - It is also something that makes you,
01:18:33.720 | well, makes you enjoy typing, correct?
01:18:36.640 | The actual act, something about the process,
01:18:39.960 | like I play piano.
01:18:41.200 | - It's tactile.
01:18:42.040 | There's a tactile feel that ultimately
01:18:45.480 | feeds the passion, makes you happy.
01:18:47.040 | - Right, no, totally, that's it.
01:18:48.200 | I mean, and it's funny,
01:18:49.040 | 'cause artisanal keyboards have exploded,
01:18:50.680 | like Massdrop has gone ballistic with this stuff.
01:18:53.440 | There's probably like 500 keyboard projects
01:18:55.560 | on Massdrop alone.
01:18:56.880 | And there's some other guy I follow on Twitter,
01:18:58.160 | I used to write for the site, The Tech Report,
01:19:00.240 | way back in the day.
01:19:01.400 | And he's like, every week he's just posting
01:19:02.760 | like what I call keyboard porn of like,
01:19:04.600 | just cool keyboards, like,
01:19:05.440 | "Oh my God, those look really cool," right?
01:19:07.160 | That's like, how many keyboards does this guy have?
01:19:09.800 | It's kind of like me with yo-yos.
01:19:10.680 | How many yo-yos do you have?
01:19:11.520 | How many do you need?
01:19:12.360 | Well, technically one, but I like a lot.
01:19:14.880 | I don't know why.
01:19:15.840 | So same thing with keyboards.
01:19:17.240 | So yeah, they're awesome.
01:19:18.920 | Like I highly recommend anybody
01:19:20.640 | who doesn't have a mechanical to research it,
01:19:22.520 | look into it and see what you like.
01:19:24.400 | And you know, it's ultimately a fetish item,
01:19:26.320 | but I think these sort of items,
01:19:28.880 | these religious artifacts that we have
01:19:31.040 | are part of what make us human.
01:19:32.200 | Like that part's important, right?
01:19:33.880 | - It's kind of what makes life worth living.
01:19:35.800 | - Yeah, it's not necessary in the strictest sense,
01:19:38.920 | but ain't nothing necessary if you think about it, right?
01:19:42.360 | Like, so yeah, why not?
01:19:44.320 | So sure.
01:19:45.440 | - Jeff, thank you so much for talking today.
01:19:47.520 | - Yeah, you're welcome.
01:19:48.360 | Thanks for having me.
01:19:49.360 | (upbeat music)
01:19:51.960 | (upbeat music)
01:19:54.560 | (upbeat music)
01:19:57.160 | (upbeat music)
01:19:59.760 | (upbeat music)
01:20:02.360 | (upbeat music)
01:20:04.960 | [BLANK_AUDIO]