02:14 - Stack Overflow
03:11 - Goals and Motivations
10:35 - Success
16:46 - Discourse’s Code
23:12 - Open-Source Licensing
26:43 - Using a CLA (Contributor License Agreement)
33:12 - Discourse and Ruby
45:35 - Choosing PostgreSQL
47:15 - Releasing Discourse
Explore It!: Reduce Risk and Increase Confidence with Exploratory Testing by Elisabeth Hendrickson! We will be recording with Elisabeth on June 19th, 2013 and the episode will air on June 26th.
Imposter Syndrome with Tim Chevalier
JOSH: Good day.
CHUCK: Isn’t that what bonjour means anyway? Of course, if that’s really what it means, then why do they have bonsoir, which means good evening?
KATRINA: They do. They use it whenever it’s not day anymore.
JOSH: Because the night is the time for love and deserves its own word.
[Hosting and bandwidth provided by the Blue Box Group. Check them out at Bluebox.net.]
[This show is sponsored by Heroku Postgres. They’re the largest provider of Postgres databases in the world and provide the ability for you to fork and follow your database, just like your code. There's easy sharing through data clips or just for your data. And to date, they have never lost a byte of data. So, go and sign up at Postgres.Heroku.com.]
[This episode is sponsored by JetBrains, makers of RubyMine. If you like having an IDE that provides great inline debugging tools, built-in version control, and intelligent code insight and refactorings, check out RubyMine by going to JetBrains.com/Ruby.]
[This podcast is sponsored by New Relic. To track and optimize your application performance, go to RubyRogues.com/NewRelic.]
CHUCK: Hey everybody, and welcome to Episode 106 of the Ruby Rogues podcast. This week on our panel, we have Katrina Owen.
KATRINA: Hello from the laundry room.
CHUCK: Avdi Grimm.
AVDI: Hello from the basement.
CHUCK: Josh Susser.
JOSH: Hello from the office nook.
CHUCK: I’m Charles Max Wood from the upstairs bedroom office. [Chuckles] We have a special guest and that’s Jeff Atwood.
JEFF: Hi everybody.
CHUCK: So Jeff, can you introduce yourself for those who don’t know who you are?
JEFF: Sure, absolutely. So, most people know me for a couple of reasons. I’m going to list those reasons. One is I have this blog Coding Horror that I’ve written since 2004, that got surprisingly popular. And then, the other big thing that I did was in 2008, I formed a business partnership with Joel Spolsky and we built Stack Overflow and Stack Exchange, a network of Q&A sites for programmers and then larger technical topics. And then this year, we launched the project Discourse, which is a forum software reimagining, reboot. So, are sort of my main things that people might know me for.
CHUCK: Yeah. I said this on the pre-call, but, God bless you for Stack Overflow.
JEFF: Oh, well thank you. Yeah, it’s been hugely successful and I feel like it really met a need for a site of the community, by the community, that was a place to get good information because that was our frustration. The original reason we launched Stack Overflow was that our frustration as a programmer, when you do searches, you get kind of terrible search results. You get a lot of forums which had a huge set of problems. You get a lot of Experts Exchange, which everybody hated, pretty much, universally. So, there just wasn’t a good central clearing house for communities specific to programmers. When you had a specific question, you wanted it answered and you didn’t want to necessarily debate Java versus .NET again. [Chuckles] That was the goal and it worked really well for that, so I’m happy about that.
JOSH: Well, it’s definitely been a significant resource for the community, so kudos.
JEFF: Yeah. Thank you.
JOSH: But we asked you to come on today to talk about Discourse, which is the new shiny.
JEFF: Yeah. So, the impetus with Discourse was when we started Stack Overflow, we looked at forums as an exemplar of, okay, this is what we’re building. And then, we quickly realized we weren’t actually building a forum. We were building a Q&A system. And Q&A systems are really different from forums because Q&A systems aren’t really about discussion, if you do it right. A lot of Q&A sites do it wrong. But if you do it the right way, all the answers are about the question because that’s the purpose of the question. You come in and you had to ask the question because you need the answer. You don’t necessarily want to engage in a lot of related discussion about what’s wrong with the world, Israel and Palestine, Ruby versus .NET. You know, programmers love to fight about this stuff, as does everyone. And it’s fun. But it’s a bikeshed type discussion. It’s like, can we avoid all the bikeshed discussions and stick to let’s solve the problem at hand in a way that that makes sense. And there can be more than one way to do it. There are usually multiple answers to any Stack Overflow question. And sometimes many of them are good. So, there’s more than one way to do it, but we had to suppress discussion. So when I came out of Stack Exchange, because I had twin baby girls who are now one year old and I had Henry who’s now four years old, and there were just other changes going on. The company was getting really large. We’d kind of solved our primary mission, which was to displace Experts Exchange, which everybody hated, and to become a great resource for programmers. And that was well, well underway. So, it just sort of made sense for me to take some time off and think about what the next thing was to do. And I was really surprised coming back in 2012 when it came out, February, I looked at forums again, because we had stopped looking, realizing that we’re not building a forum. I completely stopped looking at forum software. But then people would come to me. Startups would occasionally come to me and ask me for advice about what they were doing. And the first thing I would say to them is, “Well, why are you asking me? Why aren’t you asking your own community what they think of what you’re doing and where you’re going?” And that seemed to me like a very obvious way to go for feedback because I probably don’t use the thing that you’re going to ask me about. I’m probably not in the community for your thing, or the audience, right? So, why are you asking me? I’m ostensibly and expert on something but I don’t use your stuff. So, why not ask the people that are using your stuff? And then the smarter ones say, “Oh, that’s a great idea. We should set up a place for our community to come together and figure out if we even have a community.” If you don’t have a community then nobody cares and that’s your problem. Fix that.
JEFF: Why doesn’t anyone care about your thing? That’s your problem, not what I think about it. That’s why nobody cares about your thing. So assuming you can get a community to materialize, what does that look like? Where do we go? What software do we install? How do we do this? How do we have a clubhouse for people to go to talk about this thing that we do? And I said, “Well, that’s a good question. Let me look and see what’s out there and get back to you.” And all the options you have are really bad. I was shocked that none of the…
JOSH: Oh, what’s wrong with phpBB?
JEFF: [Sighs] So many things. Mostly…
CHUCK: Just start with the name. [Chuckles] And go from there.
JEFF: Yeah. Right. So, I have this whole problem with PHP in terms of its attained ubiquity, which is great. But it’s not really a great tool. It’s just used because it’s there, not because it’s actually good. And that’s not a great state of affairs. But there were no forum softwares that I felt comfortable recommending, in good conscience. I would feel bad. Say, you have a product. Like, oh cool. This happened to me. Let me give you an actual example. So there is this game, I think it was called Weigh. It was this weird little indie game where it would match you with a random person. You were on the top and they were on the bottom, or vice versa, it doesn’t matter. And together, you had to solve puzzles. But the game didn’t really tell you what to do. The other person had to tell you what to do. They can make gestures. They can make faces. You could communicate in the game with the other person and try to figure out these puzzles. And I played with a while with another random person. I said, “Wow! This is really neat.” I’m figuring stuff out. He’s showing me how to do stuff. And it was really cool. And then eventually he raged a bit because I got stuck and I felt, really, like a bad person because I couldn’t figure out this puzzle and the guy’s like, “No, do this. Do this, do this!” And he’s gesturing with his little avatar and I’m like, “I don’t know what to do!” And he quits the game. And I was like, “Damn it!” You know? I wasn’t good enough.
JEFF: I made the other person rage quit. And I was like, “This is a really neat experience.” And so, I went to the game’s website and of course, they had a forum link. And I click on the forum and then I’m mentally playing sad trombone, because the forum just doesn’t work for me. Because the first thing I see when I go to the forum is a list of categories, of like categorization. Which category of thing do you want to look at? And I was like, “I don’t even know! I don’t know what I want to look at because I don’t know anything about this game. I don’t even know what’s going on here. And you’re already asking me to make a decision that I don’t have any information about how to proceed.” I can just randomly click on stuff. And that sucked. Immediately, it sucks. Out of the gate, it sucks. The first experience is, this is terrible. Why are you doing this to me? And then, clicking through to the discussion is also bad, because mostly it’s just so noisy. Like phpBB and a lot of typical forms, they dump a ton of crap in the browser page so that the actual content is tiny. It’s this tiny little rectangle of content buried in hundreds of lengths and dancing avatars and god knows what else. But the software out of the box is burying the lead. Its’ burying all the content in a bunch of crap that I’ve never cared about. I’ve used this one forum for about ten years. It’s vBulletin. And I swear that I’ve clicked on maybe five of the links on all the screens, in all that ten year time.
JEFF: So, it’s like, why are these other links here? If I can use it for ten years and not care about any of the stuff that’s on the screen, why is it there? What is going on? I don’t even understand what’s happening. And then the other problem is this stuff hasn’t changed. I’ve used this forum for ten years. It materially looks the same as it did ten years ago. What other part of the web looks identical in a decade? I don’t think forums are so well-done that they don’t need to change at all in ten years. This is the same beef I have with a site like Reddit, where Reddit visibly hasn’t changed since 2005 and I think that’s strategically a huge error. I think there are tons of ways for…
CHUCK: Yeah, but it’s so pretty.
JEFF: [Chuckles] It’s a lot of things, but I would not use the word ‘pretty’ to describe it.
JEFF: So, that’s sort of some of the thinking that we came in. It was like, well this is a problem. I love forums and I continue to get really good search results to forums that have amazing information that’s just buried in this terrible, terrible software. And I want there to be a free open source option that’s actually good, that I can recommend to people and feel good about. You can deploy this and you will feel good. The example I use, it’s sort of like walking into a seedy, dingy, bad neighborhood with boarded up windows and you walk into a store and the lights are kind of flickering and they have products there. They have Tide or whatever it is you need, but you just don’t feel good there. It’s not clean, it’s not well lit. There’s kind of sketchy people around. It’s kind of a weird neighborhood. There’s a lot of tattoo parlors. There’s a lot of pawnshops. And then you walk down the street and it’s like, “Hey, it’s a Target!” I know a Target. Target is nice. It’s clean. It’s well lit. I have a good feeling when I go in there. They may or may not have what I want, but I don’t go there and feel bad about myself as a person. So, we’re trying to build more Targets and less seedy, dingy, weird neighborhood corner stores.
JOSH: And what’s wrong with Walmart?
JEFF: Well, I didn’t say Walmart.
JOSH: Yeah, but I did.
JOSH: Okay, so that sounds like a great set of goals and motivations. I guess the next question is how’s it going?
JEFF: It’s going great. So, the way we measure success is first of all, the way I’ve always measured success in Stack Overflow and Stack Exchange is how do I feel about the pages we’re putting on the Internet? If I go to a random page on the Stack Exchange site, it doesn’t have to be Stack Overflow, it could be any networked site, because Stack Exchange has a huge network of sites, am I embarrassed to be associated with this page? Does this page make me happy or sad, as a consumer of the Internet, as an Internet citizen? And I really use that same benchmark for Discourse. There are a lot of other things we can look at that I’ll get into, but that’s the core one. How do I feel about the pages we’re putting on the Internet? Is this good? Bad? Meh? You know, what are they? We’ve done one partner. We want to do three partners. Right now, we’ve done one of three. The one is you can go to HowToGeek.com and forums or it’s forum or Forums.HowToGeek.com. And How-To Geek himself has been a great friend and he’s really helped us in this initiative. He’s really interested in forum software. He’s said himself, though. His forum now is a huge improvement over his old forum. And what he means by that is that the topics are better. The discussion is better. The type of people it’s attracting is better. Essentially, when you put in a Target, so sort of get better clientele [Chuckle] than at the pawnshop, right? And even though it’s the same basic conversations that are going on, you’re just generating pages that are of slightly higher quality. And that’s because the software looks better, feels better, works better. It feels better to participate. It feels better to walk into Target than it does a pawnshop, in terms of the interactions you’re going to have and the way you’re going to approach the topic. And the other thing that works for us is that forum software is broken in so many ways that the bar is really low, really basic stuff. For example, and again none of this is rocket science, but I’m just going to give you some examples. On Discourse, when you start typing your post, we auto-save drafts, automatically on the server. So, you can just type to type, close your browser, and then come back to a totally different computer in a different city and come into that topic and it says, “Hey, you have a draft at the bottom,” and you can expand it and reopen it. And almost no forum software does this. The other thing that we do is mentions. If we quote someone, we reply to your post. Or I even mention your name in passing, “Oh, @joesmith said blah…blah…blah.” We notify that person that you were talking with them. So, virtually no forum software does this. It’s extremely rare. And this is, to me, the most essential part of forum software. It’s all about conversations. It’s all about back and forth conversations about any topic. And if you don’t know people are talking to you, what kind of experience can you really have? So, the bar is really low, which helps. And then, we’ve seen from the first partner, and there’s another big partner coming up, I can’t say who it is, but it’s a site you’ve probably been to and have heard of, people will see that, “Oh wow! This really is a better experience.” Fundamentally, they’re getting better discussions, more participation, less trolling, all that stuff.
JOSH: I think that my metric is signal to noise ratio. What you’re talking about, like notifying someone that somebody responded to them, that’s definitely a very important signal and it’s much lower noise than just getting an Email anytime anyone posts anything on anything.
CHUCK: Yeah. The other thing is when you’re talking about all the extra stuff that’s on the page, even if you took all that away, I’ve used vBulletin, phpBB, I’ve used a couple of other ones out there. Even if you take all of that garbage away and just have the conversations, the conversations themselves aren’t setup to be easily followable and readable. And so, a reasonable person doesn’t even know what they’re looking for. And if they do know what they’re looking for, it’s really hard to find. So, I’m pretty excited about seeing where that can go.
JEFF: Definitely. And I think you have to realize what the goal is. On Stack Exchange, we’re really, really strict. The point that every day, someone’s complaining that we’re dicks and we close questions and we don’t let people do what they want to do on the Internet. And there’s a reason for that. It’s the same reason people complain they can’t get into community college, they can’t get into Harvard, and they can’t get into Yale. It’s like, well you have standards. Well, we have standards here. We have certain standards that we expect people to meet before they show up on campus. Now, Stack Overflow and Stack Exchange are really just community colleges. Their standards are not that high, but you’re comparing it with the Internet where the expectation is I can do whatever I want, wherever I want, however I want, “’Coz ain’t nobody going to stop me, man. We’re libertarians. We can do whatever.”
JEFF: And there’s just this weird mentality of I can do what I want because I do what I want on the Internet. And I’m like, “Well, you can do that but you can’t do that here.” But the reason we do that, why do they do that? Well, why does Yale have the standards they have? Why do community colleges have the standards that they have? It’s because they want people to learn, right? They don’t have rules because they love rules. They have rules because they want people to learn and this is how you learn. If everybody can interrupt a class and say, “Hey, it’s time for a beer bash,” let’s post 50 LOL Cats all of a sudden. All of a sudden you’re not really learning anything. All of a sudden you’re just having fun which is great, but that’s not really learning. So, that’s why you have the rules you have, is to make sure that everybody is really learning stuff as much as possible. And that’s not really the goal on a forum. It can be, depending on what their forums are. It’s a rainbow system. That’s why the Discourse logo itself has a rainbow in it. It’s because it’s a rainbow system, meaning who knows what the goal is for your clubhouse that you’re going to set up for your whatever it is, your product, your team, your reachable area. I don’t know what your goals are and I don’t need to know what your goals are. In Stack Exchange, the goals are learning. We’re very vocal about that. It’s like, “We’re here to learn stuff, man. If you don’t learn stuff, then don’t come here. That’s not the purpose of this place.” But on a forum, you can say, hey, the goal is really just to hang out and be friends and have some fun and post some topics and talk back and forth. It’s like a party. It’s really like having a party at your house. And some parties are different. Some parties, you might learn stuff. You might meet some really interesting people and have interesting conversations. And some parties, you might just, you know, get really drunk and make fart jokes all the time, and that’s okay.
JOSH: Yeah, but I stopped inviting David to those parties, so.
CHUCK: You hurt his feelings.
JOSH: That’s not fair of me to dig on him when he’s not here.
JOSH: Sorry, David. [Chuckles] Okay, Jeff. That sounds good. Since we have a limited time today, let’s talk about the code in the project.
CHUCK: Oh, I was so going to derail you that way.
JOSH: Oh, derail, ha-ha. [Chuckles] Sound cool?
JOSH: Okay. So, you did a blog post recently where you talked about your decision to use Ruby and Rails for the project. That was actually what got me most interested in the project, because I knew that you don’t really have a background as a Ruby guy. You do .NET, I believe?
JEFF: Yes. Stack Overflow and Stack Exchange are all .NET.
JOSH: Yeah. So, let’s talk for a minute about why Ruby and have you been enjoying that you chose Ruby or regretting it?
CHUCK: Is it Mechanize?
CHUCK: Hpricot, that’s it.
JEFF: Yeah, Hpricot. And then there’s probably a third one that’s also pretty good. But in the .NET world, there’s probably one. And you probably won’t like it. A lot of the .NET libraries tend to be kind of Java-y, which is not good. There’s a lot of copying what Java did philosophically and I don’t like that. I think languages sort of pick their own battles and write things their own way rather than just aping. The canonical example is like, what is the name of that logging library that Ruby uses, I can’t remember the name of it, but logging itself is just, I don’t know. Stuff just gets blindly copied. Instead of a JLog, it’s NLog. [Chuckles] I always dislike that. And it’s nice coming into Ruby where, believe me, everybody has their own ideas about how to do things, maybe a little too much in some ways. [Chuckles] But it’s refreshing. It’s refreshing, because people aren’t coming in with preconceived notions of, “Oh, we copy Java and then we do this.” And it’s just a much more vibrant ecosystem. And there’s a lot more choice.
JOSH: Hey, I have a question about the open source licensing. You just said you want it to be open source, freely shareable, et cetera. And you opted for the GPL.
JEFF: Yes, we did.
JOSH: So, in the Ruby community, the MIT license is the most common one that gets used. And GPL is fairly uncommon. I think people may not really understand what that’s about.
JEFF: Well, WordPress is kind of our spirit animal. You have to understand, because we want to do what WordPress did, for the most part. We don’t want to start in 2004 like they did. We want to start with the 2008 WordPress and not revisit all the early bad decisions. But their GPL, Drupal is GPL. A lot of really popular open source stuff started out as GPL and it’s worked for them. And we want to follow in the footsteps of the champions, the people that had made this work and had actually made businesses. Because the goal really is, we’re venture capital backed and we want to be able to pay ourselves. Right now, it’s a fairly small team. There’s me, Robin in Canada. I’m in California, Robin’s in Canada. Sam is in Australia. That’s really the key team. And we have some part-time helpers who are really, really good. Our sys admin is amazing, in particular. But those are the founders and we want to be able to build a business around this. So we can at least support ourselves to continue developing it. And certainly once you involve venture capital guys, they have this idea that eventually, it’s going to be a big project, potentially as big as WordPress. So, GPL seemed like a good way to achieve that like that specifically was our goal. Eventually, you have a sustainable business. We’re going to start charging money for hosting. We’ll never charge you money for the code because that’s not the model. We don’t want to do that. We want you to have, let’s say you’re a non-profit here, “Here you go, have the code. Go set it up. Have a great time.” But if you want a hosted experience, then we want to be the best host in the world for Discourse. And we want to have a nice network of popular forums that we can publicize and cross-promote and make sure everybody knows about them and just get some great conversations going. We want to be the ultimate party, if you will, where we’ll be a house like a mansion. We want to be sort of the Playboy Mansion, maybe without all the sex and stuff. But just a place where a party’s going on all the time and all the different rooms are different. That’s sort of the goal for Discourse. I had this idea, now discourse is a fancy word. When you think discourse, you think men in 18th century suits standing in a room giving speeches. [Chuckles] And it is that. I want substantive discussion to go on. One of the key things I learned, looking at this project and looking at forums was that in order for people to be in the same room and have conversations that matter, they have to be having fun. They have to be achieving some level of entertainment to even have the conversation occur and get those people in the same room. So, it turns out that fun is a really big component of what forums do. Because if you’re not having fun, why would you even go? What’s the point of going there? If it’s just this dry, academic place where you have these really serious important discussions, that’s not going to be everybody’s cup of tea. So, it needs to be fun. So, you kind of embrace this idea of the mechanics should be fun, the gameplay should be fun, what I call the core gameplay needs to be fun. And it needs to be entertaining to some degree. And then, the side-effect of that is every 10th or 50th page will be a really good page that will show up in your Google search results and actually help you with something. That’s a natural side-effect of these conversations going on.
CHUCK: I want to jump in ask, since it’s written in Ruby, a lot of our listeners are people who are capable of contributing to Discourse. I’m assuming you’re welcoming contributions. But you also have this Contribution License Agreement, which is something that I’ve encountered before with, say the Apache Foundation and a few other projects out there. Mostly, from what I understand, they set them up so that you can protect the GPL nature of what people are writing. In other words, basically it says that what people contribute to the source code is owned by the project and distributed with the GPL license and you assert that what you’re giving can be given away. Are there other reasons that you’re going with CLA?
JEFF: The main reason is so that we retain an underlying license to code so we can sell licenses to big companies, say companies that are allergic to GPL but want to use Discourse internally or what have you. We retain the right to resell it to large companies under different licensing terms because we retain a right to all the code that was submitted. Obviously, the code that we wrote, we have an underlying right, too. But the code that everybody else writes, we also need an underlying right to that. Now, the risk there is that we could, in theory, this would never happen, for the record, we could take all the code and say, “You know what? It’s no longer open source.” We would throw it behind a paywall or what have you, and then there would be some version after which it’s no longer open source. So, that’s the risk versus reward. You have to balance what are the odds that you think the Discourse project is going to do that to you? Now, to ameliorate this concern, in the CLA sign up document, we put in another point, which is as long as we, the founders, are at the company, we commit to you, the contributor, that we will always strive to have the code be available as open source no matter what happens. And then if something happens to us, we will hand it over to the Free Software Foundation or an organization that can guarantee those rights to you. Now, I can’t guarantee that I will be at the company forever, because who knows? Life happens, right? But as long as the founders are at the company, we make that pledge. And the pledge is as good as the founders. It’s a belief system thing. You have to believe in us. Are we doing the right thing? Do you think we’ll do the right thing? And the philosophy of the project, that’s what you have to balance. The reason it’s there is because we plan to make money, really, two main ways, and possibly a third way. One of the main ways is of course hosting. Give us a credit card, $19 a month or whatever it is, and you would now have a Discourse forum. Poof! You didn’t have to do any work of setting up a project. You have it up and running in ten minutes or five minutes or whatever it is. That’s probably the main way. And then the other way is, again, big companies coming to us saying, “Hey, we want to use Discourse but GPL, we don’t know. Big Co or ACME widgets, we can’t use GPL.” No problem. Give us a big check and we’ll relicense the code to you and you can use it under your own proprietary license that never needs to see the light of the day. The third way is advertising, but that’s really far out. We reserve the right to potentially do advertising on some of the hosted sites depending on the payment scheme or whatever you sign up for, but I don’t know when or if that will actually happen.
CHUCK: So, one other question I have for you regarding this is that there is another company out here that I’ve done some things with and they have their own open source version and then their proprietary version that they actually sell to people as a software, as a service. Do you see Discourse kind of diverging at some point so that most of the core stuff is in the open source version, but you do have a few things that you apply to your hosted versions that people can’t get in the open source version?
JEFF: I really hate that model. I really hate that a lot. So, personally, no. As long as I’m in the company, I don’t see that happening because I hate that model. You know who does this, and I like Vanilla and I’m not saying this in a negative way, but one thing I don’t like about Vanilla is that they use this model where their open source version is good, but then the proprietary version you pay for has all these other features. And every blog entry they have, there’s somebody [deleted] about, “Oh, I can’t use this feature. This is not fair, this is not right.” And they’re kind of right. I think this is a [deleted] thing to do to your users and your customers, to have this haves and have nots. Like, “Oh, there’s this special version that’s really good but you pay us extra money for that.” I think the entire principle of open source is there’s one version, the awesome version. And that’s the version that you get. And I like that. That’s why I think one of the huge advantages of open source is you don’t have to think about all that crap of like, “Oh, I paid this money and unlock these special bits that give me these special features.” I mean, Microsoft does that. It always drove me nuts. We installed server software and we’re like, “Oh, only 32 Gigabytes of our memory is available. Why is that?” Because the server has 48. I was like, “Oh, we didn’t pay for the bit that flips that lets you use all the memory on the server.” And I hate that. I think that’s lame. I understand why they do it. I understand they’re capturing consumer surplus. Every company does this. It’s crazy, but it’s the way of the world. When a customer comes up, you basically look at them and say, are they rich or are they poor? If they’re rich, you charge them more. [Chuckles] And if they’re poor, you charge them less. And that’s just the way the world works. Every company does this to some degree, whether it’s the sales people or with explicit policies.
JOSH: Or pro-level products.
JEFF: [Sigh] Yeah. And I think one of the huge advantages of open source is you get the awesome version every time.
CHUCK: Yeah. The company that I’m talking about, the other thing that they’ve done is they built the awesome version first, and then they sort of ripped out or crippled the pieces in the open source version that they didn’t want people to have. And so sometimes, you get weird stuff because there are integration points there that integrate the things that don’t exist anymore.
JEFF: Well, yeah. You also fork the code to some degree, right?
JEFF: You’ve created two versions. And that’s obviously just historically a terrible path to go down because it leads to so much trauma. We have actually had a little bit of a fork of Discourse early on. It wasn’t a serious problem, but it’s up and running on Heroku and what we tried to do mildly is pull in all the patches so that we could run on Heroku in the main branch without special weirdness because we don’t want to have multiple forks. We want one version, the awesome version. And then over time, of course, it does get complicated. You have to essentially have a plugin model to accommodate the vast number of needs that your audience has. And we haven’t gotten there yet. We have strong plans to have a really good plugin model. But for now, the goal is definitely how you’re going to have one main branch and then keep all the really cool features on that. And we haven’t gotten to bloat stage yet. I’m sure we will. [Chuckles] But we haven’t quite gotten there yet.
CHUCK: So, I’m going to keep pushing things along because I know we’re short on time. I have one other question and that has more to do with the Ruby community. I see this project as something that’s going to draw in more people to Ruby because it’s a high profile project. It’s written in Ruby on Rails. But what kinds of things are you looking to give back to the Ruby community?
JEFF: Well, we’ve already done a number of performance patches. Sam, in particular, is very gung-ho about performance. And there’s a lot of low-hanging fruit. There’s a surprising amount of low-hanging fruit with performance in Ruby.
CHUCK: In Ruby on Rails or both?
JEFF: Well, Rails mostly, honestly. A little bit Ruby, but a lot of Rails. Rails has gotten, I hate to say, a little bit bloated.
CHUCK: No one will argue with you about that.
JEFF: Yeah. It’s fixable. I think a lot of the performance things we’ve seen, we can actually go in. Well to be fair, let me compare our experience at Stack Overflow and Stack Exchange. We occasionally ran into bugs in .NET. It wasn’t very common. It’s much more common for us to run into bugs in Ruby because it’s open source and you let it all hang out, and that’s fine. I don’t really have any moral judgment on which is better because it doesn’t matter. You’re getting a very, very different experience from those two. But in the cases when we did run into .NET bugs, there was no way to get unblocked. We had to talk to Microsoft and see what they could do and go through the process. And generally, they were very friendly to us because we were a big .NET app and they wanted us to be happy. So, we had a good experience. But it’s even better when you can just go in and just rip [deleted] out and just fix it yourself and then contribute it back as a pull request to Rails. And Sam’s done this a couple of times and his pull requests go in. And he’s always like, “Yes! I did it!” It’s like we fixed the thing for everybody. We did it. We made the experience better for everyone. And that’s a great feeling. And we love that. And I think that’s definitely a little bit missing from the .NET world. It’s much harder to do that and make that stick and make it work.
JOSH: So, a variation of Chuck’s probing line here. This is a big project already. I’m looking at the models directory and there’s scores of models here and a couple dozen controllers and a lot of stuff in the project already. So, it’s clear you guys are making good progress. But as I look around, and I think this is common of large Rails projects, is that the bigger they get, the more they diverge from sort of the standard conventional ways of doing things in Rails. And I just opened a model file at random and found code that was composing SQL fragments as strings, which is something that most Rails developers try and avoid. They want to work at the API level in Ruby rather than at the SQL fragment strings level. And I totally understand that there are tradeoffs and there are good reasons for doing that. I’m curious if you guys are thinking about, we want to have this project be something that is easy for experienced Rails developers to jump in on and it operates like a Rails application. And their intuition that they’ve developed over months or years of working with Rails is applicable.
JEFF: Sure. That makes sense. And I think our background, at least Sam and I have a background coming from Stack Overflow and Stack Exchange, and even on .NET -- let me be clear, .NET is dramatically faster than Ruby. It’s not even close. Now, speed is not the only reason to do things. There are a lot of factors in performance, believe me. But when it comes down to just building a page, it is a quarter of a magnitude faster. And even in .NET, there was a huge cost. We were using LINQ to SQL. Another problem Microsoft has is they build all this stuff and then some of it just gets abandoned and nobody can update it. So anyway, LINQ to SQL was this great feature where, you stop dealing with raw SQL strings. You have magical .NET keywords that produce SQL behind the scenes, but you don’t have to touch any of that nasty, ugly SQL. You don’t have to think about SQL. You don’t have to learn SQL. It’s just magical .NET keywords that do the right thing. And we’re like, “Okay, let’s try this.” And we figured for simple stuff, it would work. We just need to grab a user record. All the fields, we need all the fields. It’s just simple. Just go grab one user record. And in LINQ to SQL we found huge performance problems. We weren’t really clear. Some of the magic they were doing, at the scale that Stack Overflow got to, even for simple queries, was massive amount of overhead. It was really slowing down the app. And eventually, we doubled down on this thing called Dapper that Sam built, which was essentially reinvesting in raw SQL. Saying, “Look, if you want to select a record from the user table, do SELECT * FROM user_table.” And that was our background. So, Sam’s done a lot more benchmarking than I have, but I think what we’ve seen is for simple queries, ActiveRecord does work well. But for some of the weirder queries that you run, you can get into a lot of performance weirdnesses. We were giving up a ton of performance. So, I would say, for those sections where you’re seeing raw SQL, we welcome pull requests, as long as performance doesn’t degrade. We want performance to stay at the same level because we’re really gung-ho about building a really fast app. There’s all this data out there. And we believe in this deeply at Stack Overflow and Stack Exchange, above all else, be fast. It’s like, be quick or be dead.
JOSH: Well, sure.
JEFF: That’s trickier in Ruby than it is in .NET.
JOSH: So, have you put any performance tests in your test suite so that contributors can actually tell if they’re improving or degrading performance?
JEFF: One thing I want to build is actually just a generic benchmark system within Discourse that actually uses Discourse to benchmark some. And people deploy Discourse to a server. They might have a bad experience because it’s an under-spec’d server. And we don’t know that. So, I want to have essentially Discourse, once you deploy your Discourse forum, like forum.example.com/benchmark. And that would actually run a bunch of sort of Discourse-style code and run it through its space and actually give you a number about how fast you are. And then, we would actually show, oh on our servers which are, right now, the fastest Xeons you can get, we have this number. That’s what you should aspire to. Certainly, what we’ve seen in building out servers is that Ruby is really sensitive to I/O, like crazily so. Switching to SSD is an enormously big win in Ruby, on every level. It’s like night and day. It’s crazy. And then also very, very CPU clock speed sensitive. It doesn’t really matter how many cores you have. It matters in terms of how many engines you can spin up to answer requests and things like that, but in terms of actually satisfying one request as fast as possible, it’s all about clock speed, and very much so. We saw a very pretty much a linear increase in speed with just throwing more gigahertz at Ruby. So, I think there’s a lot of ways to look at performance. One way is I definitely want to get a benchmark routine into Discourse so people can maybe throw it around. It’s like, “Look how fast my server is. Here’s my Discourse benchmark number.” They don’t even care about Discourse, right? [Chuckles] It’s just one of those benchmark numbers that geeks love to throw around. I would love that. And it’s nice, too.
CHUCK: So, would it be its own gem or its own Rails project or would it be part of Discourse itself?
JEFF: Well, this is just an idea I had. And we’ve been working on a lot of stuff, like getting the partners up. So, this hasn’t really come to fruition. But this is something I really want to get to, is this idea of getting the culture of Discourse as a benchmark app. Like you want to benchmark how fast your server is, well run the Discourse suite and see how fast your server really is. And it’s real code. It’s retrieving topics and doing rendering stuff. So, it’s like a real benchmark, a real live production Ruby code. Another weirdness we ran into, and maybe your community can help with this, we had real trouble virtualizing Discourse without losing just 20% to 40% of performance and we don’t know why. The first server we built was an 8-core Sandy Bridge Xeon and it had a 128 Gigs of memory. This is like a $9,000 server. You can buy fancier servers, but this is pretty fancy. And our idea was, “Oh, we’ll just virtualize and we’ll have a lot of instances of Discourse.” We sat down to do it and we used Xen and I can’t remember the name of the other one, it’s a real common virtualization platform. But anyway, the two main virtualization platforms. And we just couldn’t do better than 20% perf loss.
JEFF: And sometimes up to 40%. We were really shocked about this. And I still don’t really know why that is. But anyway, we switched back to bare metal and had good results. So, there’s a lot of, like I said, low-hanging fruit with performance stuff in Ruby. And we’re still figuring some of it out.
JOSH: Aside from performance, has there been any other big problem or big challenge with Ruby?
JEFF: Well, I would say we’re kind of anal about performance. I think a lot of people don’t care about performance as much as we do. Coming back, again from Stack Overflow and Stack Exchange background, I really like to see pages render in under 50 milliseconds. That’s not always easy to do in Ruby. [Chuckles] So a lot of people are like, “Oh, 100 milliseconds, who cares? 200ms, 300ms, as long as it loads in under half-second, we’re good.” I don’t really think like that. And you’ll notice when you install Discourse, we have a mini-profile that comes up. It shows you how long pages take to render. It’s a little chiclet in the upper left-hand corner. It’s upper left or upper right, let me get a minute and see. But that’s how serious we are about it. We pulled across this thing we had in the .NET world that shows us load times.
JEFF: Well, I think what people are reacting to is essentially, we’re competing with PHP. So, a lot of the decisions we have to make, some of the performance stuff, we need to be as good as PHP, which is itself a depressing thing to even say, but deploying to shared hosting. The one thing you’re going to have on shared hosting, it’s what I call ‘server herpes’. It’s going to have MySQL, it’s going to have PHP and it’s going to be supported. That’s the one thing you can guarantee. Every server has herpes. It’s going to have that stuff. But it’s not going to have Ruby. It’s not going to have PostgreSQL. So, people that were complaining were complaining that, “Look, my provider, they support MySQL, but they don’t support PostgreSQL.” And we’re trying to change the world. We’re trying to say, “Look, Discourse is so good.” It’s so compelling of a killer app in terms of you get if for free. It’s a great experience. It’s a super nice, super well-maintained Target. Who doesn’t want a Target at least somewhere close to them they can go to, right? You’ll be motivated to say, “Look, provider! Get off your ass and support PostgreSQL because we need it, because there’s awesome app named Discourse that uses it. So, we need it really bad.” So, it’s not just an abstract desire. It’s a desire based on a killer app. And those tend to move things forward a lot faster than just random whining about, “Oh, I wish we could use PostgreSQL.” So, we’re trying to build a killer app that gets people to use Ruby, that gets people to get the right dependencies in place, that moves Ruby forward, that moves PostgreSQL forward, and makes a better environment. So, you don’t have to, “Oh, I got to pick a PHP app because that’s the only thing my provider will actually support. So, what can I run that’s on PHP?” That’s a terrible way to make decisions.
KATRINA: Another thing we talked about briefly was versioning. Discourse is still in sort of a pre or a beta or something. When do you envision being ready for primetime?
JEFF: Well, I have this big, deep belief, a lot of my beliefs are philosophical and/or religious, that programmers have this idea: everything you build is super reusable. I built a calendar component. It’s the most reusable calendar component in the world. Everyone could use it. But they haven’t actually gone through the exercise of using it in three different scenarios or three different audiences. That’s what I call ‘The Rule of Three’. It’s this old programming axiom that’s in Robert Glass’s book. It’s been in a couple of different books. It needs more currency because I think it’s a great, great concept that we’re trying to deploy with three partners. We’ve started with How-To Geek. The next one’s coming up. I can’t say who it is, but it’s going to be awesome. And then, the third partner. So, once we’ve deployed with three different audiences that we support on our own servers, so we’re living and breathing the pain alongside these partners, we guarantee a good experience. And if they don’t look good, we don’t look good. Because when you see a failed WordPress blog, do you blame WordPress? Do you go, “Oh, WordPress sucks because I see this blog that isn’t very good.” And well obviously, that’s WordPress’s fault. Well, on Stack Exchange, that was our fault because we hosted all the Q&A sites. So, if there was a failed one, it reflected poorly on the engine. It reflected poorly on the company. But that doesn’t work in the world of open source. Nobody blames the project for a failed site. So, we want to host them on our servers so we have that sense of, “We’re walking alongside you. And there is only one set of footsteps because we were carrying you.”
JOSH: Nice! Thank you very much. Okay. So, the really important follow-up question to that is when can we start using Discourse for the Ruby Rogues Parley list?
JEFF: Well, theoretically, immediately. I mean, for people that are very technical, that are comfortable. So, we launched February 5th to the public. We’ve been working about eight or nine months before that. It was certainly rough. But it’s getting much, much better every day. We’re moving the block. This is like building a pyramid. So, how do you build a pyramid? You move these massive stone blocks and you pile them on top of each other. You say, “Well, how the hell does that happen?” The way that happens, you take a massive stone block and you push it a certain number of feet per day [Chuckles] and you keep doing that.
JOSH: I thought it was levitation.
CHUCK: I was actually going to ask him after the show.
JOSH: Parley is a private list. Does Discourse have a way to have private lists that don’t show up in Google or for random people?
JEFF: There is. A lot of the stuff is emerging because we’re trying to service the partners first. Because our primary goal is to make sure the three partners, the rule of three, are ecstatically happy with Discourse. Now along the way, we do try to satisfy request from other forums that have popped up. One that popped up, did you guys see the news article about this game company that released a pirated version of its own game? And this is a game about game development. It’s a simulation of game development. And what they did was they patched their game and created a “cracked” version that when you went in and started playing, after a short while, all your games would be pirated nonstop and you couldn’t make any money. [Laughs]
JOSH: Told you so!
JEFF: And this is the version that the pirates would download and they had no recourse. Eventually, all their stuff would start getting pirated and they had no recourse and they’d go out of business because they weren’t selling any games anymore because it was all getting pirated. This went hyper-viral. I saw this so many places. Tim O’Reilly retweeted it at one point. It just got huge currency. And they have a forum and they were an early adopter of Discourse. So, it’s called Forum.GreenHeartGames.com. And it got to be a really, really popular forum. The most popular forum we’ve had on the engine. There were a hundred new topics a day for a while. It’s kind of calmed down a little. But it was really blowing up. And we were talking closely to those guys. And I was on there every day trying to read everything and see what’s happening and observe the behavior. One of the cool things about it was, and I couldn’t believe this, I was actually quite shocked because human beings have the propensity to complain about everything, that’s the first thing that happens. You expect complaints. It could be the best thing in the world and then somebody’s going to be in there complaining about it. But there were almost no complaints about the forum software. And I couldn’t believe this. It was like, wow. The volume that these guys have, nobody’s really [deleted] about, “What is this terrible software you’re making us use and why is it so weird and why does it do the things it does?” And I just expect that on any forum now. Especially when you switch to Discourse, there’s going to be a lot of complaints from friction. But it worked really well. And the only problem they really had was massive numbers of duplicate topics. So, we sort of redoubled our efforts on the detecting duplicate topics front and merging topics and trying to tell people. We have just a tiny thing that pops up when you start typing that tries to tell you, “Hey look, your topic looks a lot like these other topics that already exist and have 20 replies.” And they came to us with some other requests that they needed and we prioritize all that stuff because we want the people doing the early adopter work to have a really, really good experience. And we want to fix any conditions that you’re running into. So, if you want to set this up, I would really encourage you to do it. Now, if you don’t want public visibility, there’s an ability to put a password on the entire site at this time, which is kind of ghetto, I know. We use that actually for the beta, the private beta. But we actually are looking at that. We’re also looking at a model where you can’t see it until you’ve created an account. And there’s already a way to whitelist certain Email addresses and stuff like that. So, there might be a way to do what you want to do today. But if not…
JOSH: Pull requests welcome, if you ask.
JEFF: Yeah. Well, come to meta.discourse and look for the topics that discuss that and chime in and say, “Hey, we want another forum but we can’t because we need X feature.” We evaluate that stuff all the time.
AVDI: Okay. So, one quick question. Discourse is open source but when you rolled it out, you already had something working. You had a lot of the features there. What went into the decision at what point to release it into the world?
JEFF: Well, I have a really clear viewpoint on this, which is that working code attracts people that like to write code. Concepts attract people that just like to talk. And those are not helpful people to have on a project in my experience. You want people that are actively willing to go in, rip out code, put in code. And to do that, they have to see a functioning thing, something that looks like they could get benefit from change and have a meaningful effect on the project and things like that. Whereas if you’re in this conceptual stage, if you don’t have anything built, it’s just a bunch of talking and not so much the doing. [Chuckles] And so, I’m a big believer in having a really good prototype that functionally works but can be missing pieces. From my perspective, people tell me Discourse looks very complete. But in my mind, it’s wildly incomplete because I think mentally, I’m comparing it with the last four years of what we did on Stack Overflow and Stack Exchange, which is totally unfair because we spent four years building that thing. But mentally, this is a fraction of what I want it to be. But it’s still useful. We use it every day. We dog-food it. We’ve dog-fooded it forever. We try to, I believe deeply in this idea, you build for yourself first. And you’re going to keep yourself happier than you are anyone else because that’s just how people work. And you’ve got to live the pain along with your clients and your customers and your audience. And we definitely, definitely try to do that. And I can’t participate on every forum. There’s another forum on Soylent. Have you guys heard about this? [Chuckles] One of the things I love about Discourse is it’s a rainbow system. It’s supposed to be for everybody from white supremacists to every special interest under the sun. It’s a rainbow. And they started this site, it’s this guy. He decided he wanted to eat the same food every day. [Chuckles] I don’t know how to explain this. He wanted a standard meal he could eat that was in liquid form, that he didn’t have to think about, that was cheap. And he could just gulp down the solution every day, for every meal for the rest of his life. [Laughter]
JOSH: Yeah. It’s like Neil Gaiman only wearing black so he doesn’t have to figure out what he should wear every day.
JEFF: Kind of like that. Kind of like that. And I’m not sure I entirely agree with this because hamburgers are pretty awesome, right? But I think it’s awesomely geeky because he’s figuring out exactly the combination of nutrients he needs. And this could be dangerous because you’re eating the same thing every day. Although I guess that’s what my cats do, technically.
JEFF: I didn’t really think about it this way. But they eat the same kibble all the time and nothing bad has happened to the cats so maybe this works for humans, too.
JOSH: Well, you don’t see what they eat when they go out.
JEFF: Well, these cats don’t go out.
JEFF: They’re not seeing anything. So, if you go to discourse.soylent.me, you’ll see this forum. And it’s all about these somewhat crazy, but crazy in a fun way [Chuckles] not in a tinfoil hat way, of people that are coming up with, how do we build this solution that we can all eat everyday around the world? And it’s cheaper, it’s more effective, it doesn’t harm the environment as much. Plus it’s named Soylent, which is awesome because that’s from the movie Soylent Green.
JEFF: I thought that was a very, very clever way to name.
JOSH: Which you’re about to spoil with the punch line.
JEFF: No, no, no. no, I won’t. You guys can look that up, but that’s a classic movie with Charlton Heston.
JOSH: Definitely. It sounds like it’s time for picks, Chuck.
CHUCK: Josh, why don’t you start us off?
JOSH: Because I don’t have any picks.
CHUCK: Avdi, why don’t you start us off?
AVDI: [Chuckles] Alright. I think just one today. This spring, I got an inexplicable urge to start running again. I say inexplicable because throughout my life, running has been nothing but misery for me. It’s not something I think about in terms of a fun thing to do, which has a lot to do with the fact that I have asthma. But I don’t know. I got this urge. I started doing it. And I’ve been doing barefoot style running. I’m not actually barefoot yet. I’ve been using some minimalist running sandals. But I have to say, having totally rejiggered my stride based on some stuff in the book ‘Barefoot Running Step by Step’, running is like 50% less misery than it has been before I started changing my stride to match a barefoot style. So yeah, barefoot running, I guess. That’s my pick.
CHUCK: I think it’s funny that you basically said the cup is half as empty as it was before.
AVDI: I don’t want to get too enthused about running, because, you know, running.
CHUCK: [Chuckles] Alright. Katrina, what are your picks?
KATRINA: My pick today is Cal Newport. He’s a mathematician, software developer, author, person, blogger. I’m specifically going to pick an article that he wrote a while back, probably way over a year ago, about getting creative things done. And one of the most important concepts in this article, for me, was the idea that when you have a good process that works, you should focus on that process, not on your progress, on completing or moving towards some goal. So, I just thought that was really interesting. So, I wanted to show that.
CHUCK: Awesome. I’ve got one pick that I want to pick really quickly and that is ‘The Fred Factor’. It’s a book by Mark Sanborn. And basically, it talks about a mailman, and several other people, who went above and beyond the call of duty in their jobs and in life in general, people that just cared about other people and really become awesome contributors to the people in their lives. And so, I’m going to highly recommend that book. And I’m really hoping that we can inspire a few people who are good people to just kind of become great people by reading the book. It’s a real short read, so no big deal. Jeff, what are your picks?
JEFF: I have one pick. It’s a self-help book. And self-help books are notoriously unreliable. And one of the things I thought was cool about this book is this guy on the Internet. He said he had read 340 self-help books because he’s insane. I thought that was great. That’s why I love the Internet. There’s somebody that’s going to go there and read 340 of these books. And his conclusion was that 95% of them were just total [deleted].
JEFF: And I think that’s correct. That sounds correct, right? But the book he did recommend, I thought was amazing. I went out and bought it and read it and I thought it was amazing. It’s called ‘59 Seconds: Think a Little, Change a Lot’. And the difference in this book is it’s all based on science. Meaning, all these things that make people productive, they actually find studies citing why this works, how this works. There’s data behind it. And it’s really, really interesting. And it made me think a lot about how I do things and why I do things in a way that wasn’t just some random person giving me advice, but based on actual science and data. And I thought that was really cool. If you’re interested, it’s definitely worth checking out. I pulled a few things in and changed the way I behave based on it.
CHUCK: Awesome. Alright, well, it’s been great having you on the show. And there are definitely some things that you talked about that I’m going to want to maybe explore a little more deeply. Is there a good place for people to follow you and even get in touch with you if they have questions?
JEFF: Well, I would say, if it’s about Discourse, go to meta.discourse.org. That’s where we have all these discussions about why Discourse works, how Discourse works, what should we do to change it. And then of course, the GitHub repo has all the steps. We have a Vagrant image that makes it really easy to get started. We have an advanced guide if you’re hard core and you want to install everything manually. And of course, the source code is all available there, our latest check-ins. We’re letting it all hang out, so to speak. So, nothing is hidden.
CHUCK: Alright. Well, thanks for coming on the show again. We really, really appreciate it.
JEFF: Yeah, it was really fun. Thanks guys.