Ruby Rogues
106 RR Discourse with Jeff Atwood
The Rogues talk to Jeff Atwood about the Discourse project.
May 22, 2013
1:02:22
Episode 106
Hosted by
Special Guests
106 RR Discourse with Jeff Atwood
Ruby Rogues
1:02:22
0:00
1:02:22
Speed:
Share This Episode
Show Notes
The Rogues talk to Jeff Atwood about the Discourse project.
Special Guest: Jeff Atwood.
Transcript
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.
[Laughter]
[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. [Laughter]
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. [Laughter]
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. [Chuckles]
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.
CHUCK:
[Laughter]
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? [Laughter]
JEFF:
Well, I didnât say Walmart. [Laughter]
JOSH:
Yeah, but I did.
JEFF:
Yeah.
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.â [Laughter]
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. [Laughter]
CHUCK:
You hurt his feelings.
JOSH:
Thatâs not fair of me to dig on him when heâs not here.
CHUCK:
Yeah.
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. [Laughter]
JOSH:
Oh, derail, ha-ha. [Chuckles] Sound cool?
JEFF:
Sure.
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?
JEFF:
Well, there were three real choices, as I broke it down, because the goal of the project was to be open source and free in every sense of the word. We are a venture capital backed company, which is fantastic. I love it. There are venture capitalists actually wiling to back companies that say, âHey, weâre open source.â Weâre going to try to make money in the same way that WordPress makes money. But weâre fundamentally going to be open source. Everybody can get this. Itâs available to everyone. You can just install. You donât have to ask us any permission. You donât have to pay us any money. You just do what you want to do because itâs your clubhouse. Thatâs the point of the project. I donât think a forum project can succeed that isnât open source for that reason. Because for example, if I went to someone really famous and said, âOh, you must join our network and weâll give you our software but you have to sign over rights to us.â They would never do it because the type of people that can deploy forums are, quite frankly, famous people for the most part, ones that get big. And theyâre not going to give you anything. So, we just give it away. Like, no problem, here, take it. Make it part of your empire. Do what you will with it. And thatâs great. So, everything had to serve that goal. It had to be a language that is very friendly to open source and freely available, freely downloadable. And our options were Ruby, Python, and Node. Now initially, I got excited about Node because this thing, Atwoodâs Law, which is any application that can be written in JavaScript, will be written in JavaScript.
CHUCK:
[Laughter]
JEFF:
And I still believe that JavaScript is still going to become, itâs already incredibly dominant. If you look at the top GitHub projects, most of them are JavaScript projects. The large majority are JavaScript projects now, of the top most starred repositories or what have you. So, thatâs enticing because you donât have to switch gears, like you write JavaScript on the client, in the browser, and then you write JavaScript on the server. But I looked at Node and I talked to a number of people about Node and I feel like Node is still where Ruby was in 2004, maybe in a little earlier, that none of the significant frameworks have really emerged yet and thereâs going to be a lot of change. So, I felt like if we wrote it in Node, the other thing that was a big warning sign to me in Node was nobody could tell me even how to structure a large project in Node. [Chuckle] Everybodyâs like, âI donât know. Nobody really knows how to build a large project in Node yet.â That was like a huge warning flag to me. And I think Node is going to be great in four to five years once all that stuff is figured out. But that just felt too bleeding edge. I felt like we would have to rewrite the app from scratch in two years if weâd used Node, inevitably. And that was not attractive to me. So then, it came down to Python versus Ruby. And what decided that, honestly, was the person I found, Robin Ward, who wrote this game, ForumWarz, which is a game about forum culture, written in Ruby that had a forum attached to it. You had a guy who had written a game all about forum culture and had run a forum on a game about forum culture. And he wrote all that stuff. And I was like, âWell, this is a guy who understands forums as well as anyone in the world.â He has a PhD in forum culture. And heâs done Ruby since 2006. So, that definitely clinched the decision. That made sense based on the skills that he had. And Iâve always liked Ruby. I mentioned in a post Steve Yegge who I respect deeply and I think is an amazing polyglot developer. Iâm not really a polyglot developer. I dabble in other languages, but really, Iâve always been a BASIC, well I did a little Pascal [Chuckles] but Iâve always been a BASIC/C#, simple languages kind of guy, simple stuff, not complicated. But Steve knows, heâs tried everything under the sun. And he in, was it 2007, he examined a bunch of languages and walked people through them and said Ruby was his favorite. He felt like it combined the best aspects of a lot of other languages. He had a lot of praise for it. And praise from Steve Yegge, to me, is like gold. I pretty much accept his opinions as fact, for the most part, unless theyâre crazy. And that always stuck with me. And I always wanted to come back to Ruby. So, I was happy to make that decision and come back to Ruby. And certainly, weâve had plenty of contributions. You can look at our commit graph. Itâs Github.com/Discourse/Discourse. The organization is discourse. The project is discourse. We had lots and lots of contributions. And the number of gems and libraries we have access to is just huge. And thatâs been great, coming from a .NET world where you just donât have as many libraries to choose from. For example, just HTML parsing, thereâs like, what, Nokogiri and the thing that [inaudible] did, I canât remember the name of it off the top of my head, that are both excellent. There are two excellent, awesome parsers for HTML.
CHUCK:
Is it Mechanize?
JOSH:
Hpricot.
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 sideeffect 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.
CHUCK:
[Chuckles]
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?
CHUCK:
Yeah.
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 lowhanging 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.
CHUCK:
Wow!
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.
CHUCK:
So I have to ask, if youâre really concerned about performance, does putting a lot of the stuff into Ember and JavaScript, does that help it or hurt it?
JEFF:
It helps in the sense that youâre scaling performance across end-clients. Those end-clients are getting faster and faster and faster. Even though theyâre moving to tablets and stuff like that. The iPad4 is twice as fast as the iPad3 and thatâs in less than a year. And most desktops and laptops are absurdly powerful now. They get more powerful. I mean, people donât even know it. Thatâs why nobody upgrades their PCs anymore or Macs because who cares? You already have everything you could possibly need and more. So, I think it makes sense. The packaging of the app in JavaScript is really a reaction to this world where you must download a binary app for every device you own. I think this is a huge step backward over the thing we build on the web, which is, hey you go to a website, you donât have to deploy anything, you donât have to think about what version it is, you donât have to think about updating it. It just works. Now, weâre back to this world where, what version of the app do you have in binary for the platform that youâre running? [Laughs] So thatâs moreover, itâs not necessarily a performance reaction, itâs reaction to I want to deliver one experience that works really well on all your devices that you donât have to think about updating. It just works and works the same on all your devices. Because that also makes me crazy about apps is there are all these subtle differences in the way they work on different platforms versus, say, the website. Itâs nuts. Itâs a daily struggle for me. I have a blog entry planned about this. I think the whole app model is really broken. And Iâm not really convinced thatâs actually the future like all the venture capitalists think it is.
CHUCK:
Yeah. I have one more question along these lines though. And that is, youâre talking about performance and basically the speed to render stuff to the screen. And I get the scaling, because you make the client do some of the work with JavaScript. But have you found that rendering on the server versus rendering in the client is necessarily faster or slower most of the time?
JEFF:
Weâre really careful about how we do it. So, weâve actually seen really good performance. I know 37Signals famously said that they had bad results with it. But you got to look at the trends, like where we are with performance versus where weâre going to be. The place where you have an obscene amount of performance and continuing to have more and more obscene amounts of performance is the client. And browsers are getting faster. Just look at JavaScript engine speed over the last three years. Itâs crazy, the graph is crazy. Eventually, thatâs going to level out where theyâve optimized everything and they canât optimize anymore. But you want to sort of be ahead of the curve in terms of where things are going. And I think betting on JavaScript is extremely one of the safest bets that there is. Is there even a more competitive space for performance than JavaScript on a client? Itâs incredibly competitive. You have three or four major browsers all competing to be as fast as possible. Although Safari has the WebKit engine, they use a different JavaScript engine. So, you have multiple competing JavaScript engines that are pretty much guaranteed to be faster. And what are you going to do with all this performance? You have supercomputers on your desktops and laptops. And your servers donât necessarily have that.
[Chuckles] It makes a lot of sense to scale stuff to the client and let the client do a lot more work.
KATRINA:
So, we talked about betting on Ruby and betting on JavaScript. One of the things that surprised me when you first launched was that people had an adverse reaction to you choosing PostgreSQL.
They were like, âWhy PostgreSQL?â Has that reaction changed?
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.â [Laughter]
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.
JEFF:
Oh, right. But I mean, itâs the immense amount of work thatâs necessary to get this done. But itâs getting better. Every day, itâs better. Our install guide is better. Our configuration is better. Our feedback on the admin page, we try to detect certain failure conditions and tell you about them on the admin page. Like tap you on the shoulder and go, âHey, by the way, you havenât configured Facebook logins, you probably should do that.â Or, âHey, by the way, it looks like Sidekiq isnât running at all.â [Chuckles] Weâve observed the problems that people had and try to put the feedback into the software so they know these things are happening. I would say if you want to use Discourse now, speaking again to the audience of hardcore Ruby developers that presumably listen to this podcast. First of all, I would like everybody looking at the sense of how does the project work? Raw SQL issue aside, like, does it make sense, because really this is a JavaScript app. The Ruby part is not the big part. I mean, itâs important, but we donât use a huge slot with Rails, which is all about the UI. Itâs really an Ember app. Ember is a JavaScript framework. These emerging frameworks for building apps in the browser using JavaScript, a ball of JavaScript that comes down. If you view source on Discourse, you get essentially nothing. You get what we have to feed to Google, what must be there, plus download this giant JavaScript file. [Chuckles] Thatâs the app. So, Iâm curious, Iâm not so curious about the Rails, Iâm curious about how Ruby people are going to react to Ember, honestly. I think Ember is a bigger issue in terms of how are people going to adapt to it. Do they like it? Do they not like it? Because thatâs essentially how the big blocks get moved, is a lot of Ember on the client.
JOSH:
Yeah. So Chuck, you need to have Jeff back on the JavaScript Jabber to talk about using Ember.
CHUCK:
I was actually going to ask him after the show. [Laughter]
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. [Laughter]
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.
JOSH:
Okay.
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. [Laughter]
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:
Yeah. [Laughter]
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 selfhelp 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].
[Laughter]
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.