On episode four, we chat with Julian Lam, co-founder of open-source forum software NodeBB. As you might have guessed, it’s built on NodeJS and reinvents forum software for the modern web. What’s that mean? Speed, realtime streaming, responsive design, chat, desktop notifications and much more.
Julian covers how NodeBB got its start, what the place of a forum is on the modern web and how they monetize with premium hosting, support and custom development work. In addition, he touches on how translating NodeBB increased its user base and what’s next for the team and its software.
Translating your software may be low on your list of priorities, but it could make a significant difference in your software’s adoption. For Julian and the team, translating NodeBB began when adding support for American English to the project, which had some British English tendencies. Today, NodeBB is available in 31 languages, with support for five more in progress.
In particular, Chinese-speaking users are a fairly big audience for NodeBB. The lesson here is not to underestimate non-English speaking markets.
Ready to translate your own project to other languages? Don’t use Github to do it. Instead, use Transifex, which helped the NodeBB team double its translations in one week. It provides a platform that’s friendly for non-developers and non-English speakers to easily provide translations. What’s more, it’s free for open-source projects.
- Julian Lam: Twitter, Github
- NodeBB: Website, Twitter, Github
- Templates.js – Templating framework created by the NodeBB team
Alexis: Today we have Julian Lam, co-founder of NodeBB, and he is braving the wilds of the Linux version of Skype to join us. How’s it going Julian?
Julian: Great, glad to be here.
Alexis: For folks who are not familiar with your NodeBB, first give us a little background about yourself.
Julian: I’m a self-described full-start developer working in the Toronto, Canada area. I’ve been in and out of the startup game for a number of years now. I first started out many years ago as a PHP developer at a social gaming studio – making things like Facebook games, and so on. That ended up teaching me a lot about full-stack work. Working with front-end design and managing the back with the PHP design as well. While I was there I met my two colleagues, Andrew and Barış, who are both now co-founding NodeBB with me.
Alexis: For those not in the know, can you tell us a little bit about NodeBB?
Julian: In a nutshell, NodeBB is a discussion platform that uses the latest technology for web applications. Things that we expect from Web 2.0 applications, like two-way communication between server and client, real-time updates, responsive design, mobile first-theming. Basically, a lot of the good stuff that we expect from modern web apps that we haven’t had in forum software until now.
If you look back and think about forum software, and I’m not going to name any specific brands out there, but they’re all built in the 90s, and back then things that we expect like AJAX wasn’t even mainstream yet. So while there are a lot of products that attempt to reinvent forums in a certain way, the traditional forum concept has maintained its popularity and it’s still a relic of the Internet that’s still very relevant today.
Alexis: I don’t want to call anybody out, but for folks who want some ideas of what kind of forum software’s out there that’s maybe a bit long in the tooth, or is close to our hearts because it’s been with us for so long. phpBB is one example. I guess NodeBB’s name is a tribute to that.
Julian: Yes, very much so. In the beginning when we first started working with NodeBB, we weren’t sure what to exactly call it so the actual repository name is Node-Forum. Then when we were trying to think of a name, we were really excited about pumping out features – really simple things like being able to reply to a topic, persistent logging in, all of the basics. We were so excited by it. We didn’t want to spend a lot of time thinking for a fancy name, so we just thought, “Okay, well there’s phpBB. There’s something else it would be flexBB, NodeBB, I mean, we both” -, and then we used NodeBB because we use Node.js. It’s not a very creative name, but if you think of Node.js and a bulletin board system, the two naturally go together.
Alexis: It makes sense. It’s following the heritage of forum software. I can understand why you’re working on NodeBB because there’s a lack of a good, meaty Node forum solution. You touched on that there’s still a place for forums on the web. But, what is that place? With social networks taking over the web (in a way), and even for myself, I was never a huge forum guy. I cruised them for a while, but less so nowadays.
Julian: It’s a really good question. If you think back to bits of technology that we still use today, what I consider relics of the Internet. You think of things like e-mail, or newsgroups, or IRC. Things that aren’t as popular as they were back in the 90s, but people still use them. For example, I was trying to reach out to somebody – a maintainer for a server-monitoring app to see if they want a forum.
And he said, “No. I don’t want a forum. I don’t want a Facebook group. Because I use my newsgroups.” Or, “I use my e-mail mailing list. Because those are things people are used to in those circles,” or something like that. So then forums are one of those software technologies that have been around for a long time that actually fills a niche in that it’s sort of a staple, and a process that we’re used to when it comes to sharing messages between people.
When I mentioned that lots of people have tried to reinvent forums, I’m including Facebook as one of those, because Facebook has, in some ways, reinvented how we connect and communicate with each other. I have a very neat quote from Michael Wu, who is a social scientist. He wrote a book called The Science of Social, and he puts this really in perspective. He says that a social network is there to maintain relationships, while a community is there to establish and build relationships.
So social networks like Facebook and LinkedIn are held together by pre-established, interpersonal relationships. Things like family and friends. But, communities are held together by common interests. So that’s what I tell people when they declare that forums are dead. That the ability to have two people around the world meet online, just because they share an interest in something like Minecraft or Bitcoin. It is something no social network can really accomplish.
Alexis: You even integrate some interesting features, among the ones you added to NodeBB, that aren’t available in other forum softwares. For example, chat, which is straddling the other kinds of communication that you can’t normally get with forum software.
Julian: The introduction of chat was – I’m not sure if this is actually true – but the reason this was put in is because building a chat application is usually the first thing that anybody who works with Socket.IO does. Because the whole idea of having server-client communication in real-time is so mind-blowingly interesting that the first thing that people jump to is, “Let’s make a chat app out of it.” So if you go onto things like a JS forum or subreddit, there’s going to be at least one post on the first page that says, “Here’s a chat app. You have another chat app built on Socket.IO.” So it’s true. We threw that in there. It’s not something you typically see in forum software, but it is surprising some of the things people ask for when we were introducing NodeBB itself.
Alexis: It’s been about a year since you introduced it, right?
Julian: That’s right.
Alexis: So what was the development time for version 0.0.1?
Julian: Originally, version 0.0.1 was really soon in development. We were developing very quickly. At that time we weren’t working full-time on it, but we were slowly transitioning out of our full-time, actual paying jobs, to work on this passion-project of ours because we were having so much fun with it. Working with Node.js is like coming up for a breath of fresh air when you’re still working with things like PHP. Then, being able to actually pump out features really quickly is something that’s so exhilarating that I just couldn’t go back to work anymore.
That’s why we ended up accelerating the development process, and it ended up proceeding very quickly. When you look at all of the comments that come in about NodeBB back in the beginning – they’re all about now nice it looks, but also, how fast we develop and how quickly we respond to support requests. Being not too popular at that time, there weren’t too many, but having someone in Europe send us a message at 10am, which is something like 4am here, 5am, and being able to respond because someone, one of us is online. So it’s so exciting for them.
Alexis: It sounds a lot like you are working on this full-time now.
Julian: Yes we are working on this full-time, and all three of us are fully dedicated to this project.
Alexis: I was looking through the Indiegogo campaign you had, I believe, in October or November?
Julian: I believe it was two Augusts ago. Something like that.
Alexis: You guys managed to raise $6,000. Not bad, 25% of your goal. So that was enough to keep you going through the development until you could make it full-time?
Julian: Yeah. That money that came in through the Indiegogo was instrumental in allowing us a runway to get a decent version out. What we ended up doing was split development of NodeBB with some contracting that we’re doing at the same time. So, transitioning from a full-time job to doing one-off projects for clients, and having that money that came in through there to feed and clothe us while we’re developing NodeBB as well.
Alexis: You guys were also part of a webshop, or a startup company called Design Create Play, and now NodeBB has taken over so much that you guys have shunned all the other projects and said this was it.
Julian: Yeah, very much. When we first started moving away from full-time work it was because we wanted to start our own shop. We were spending all this time and energy staying after work to develop projects for other companies, or for the company we were working for. We thought, “Why would we do this for our boss when we can do it for ourselves?”
That’s why we started with our own dev-shop and got some clients and started working for them. In the downtime we would start playing around with things and Node.js was one of them. Of course, not having a forum solution in Node.js, it was sort of a – I wouldn’t say a calling – but there’s a niche that was begging to be filled. That’s where we came in.
Alexis: It’s kind of funny. Last week we interviewed John O’Nolan of Ghost, and he had a similar story, in that he wasn’t familiar with Node.js at all. I think he used something like Code School to learn it. Then he started building Ghost with some help. You guys have a similar story where you were familiar with Node.js but you didn’t have any background in its development, –
Julian: That’s right.
Alexis: – and you just jumped in to do it.
Julian: We jumped in feet-first, or head-first, in any case we jumped in all the way and just started developing. When you go into something like this you can only learn so much from a book, or from reading tutorials online, and following these code samples. You end up doing a lot of things wrong. But, the really cool thing with working with Node.js is that it’s very quick and very responsive. You don’t need to compile or anything. It’s very easy to go back. If you’ve coded in such a way that you can refactor easily, we end up doing that.
If you think of working in a big corporation where you have a 6-month timeline to do a specific project you end up cutting corners and you think of things that you really ought to do perfectly the first time, but you brush through it. Then, the client sees it, and he says, “Okay, great. Project over.” You think there are so many things you can improve or refactor, but it’s not going to happen now because it’s all ready been released, and the client has paid for it.
So whatever works, don’t touch it, even if it’s really slow or ugly. But with NodeBB being open-source, and secondly having to work with it day-in and day-out, it gives us the incentive to go back and say, “I don’t like how I did this” or, “I didn’t like the way the data was stored. So I’m going to go back and rip out the entire system and rewrite it, or refactor it in such as way that it’s something I can be proud of.” That first reason is very important too – that it’s open sourced, because the code is out there.
When I posted NodeBB to a subreddit a long time ago, we got a lot of people trolling our code, essentially. Saying, you’re not doing this right. There were small sections where we had actually taken code from a library called PHP.js, and even just mentioning PHP in some of these forums gets so much vitriol.
Alexis: I can only imagine.
Julian: We don’t, you know, actually have that code in there anymore, it’s been replaced.
Alexis: A little learning in between. So you mentioned open-source, and in kind of the spirit of phpBB and past forum softwares, you guys have also made NodeBB open source, right?
Julian: Yes. A lot of program software is open-source. Andrew, one of the co-founders, actually wrote a lot of mods for phpBB. He’s the one with more forum experience when it comes to writing mods and so on. Anyway, I interrupted. Go on.
Alexis: No problem. So why did you choose to go with open source?
Julian: We actually directly modeled our business model with WordPress. Well, not directly – indirectly.
Alexis: So GPL and that kind of thing?
Julian: We are GPLv3 but we are not a non-profit. Like Ghost, we actually aim to make a profit from this. But other than that we do open source the code. We find it’s the trend in software development to do something like that. Mostly because then you have more eyes on the code, and so much more usage because it’s open-source, free, and anyone can download the code and have it up-and-running in five minutes.
Whereas if we had developed it all in-house proprietary, we would have to have someone come to us and we’d have to license the source code. It’s very – we wouldn’t have even a fraction of the market share that we do have today, if we had kept it all close-source.
Alexis: Speaking of profit, what is your revenue model?
Julian: Our revenue model is based on premium hosting services. So, if you think about the types of forum administrators you have out there, we’ve identified two types: those with technical expertise, and those who are very good at building a community, or following. That latter group isn’t so hot with the technical side. They might not understand what Node.js is, or an idea of having to download an app and run it on a virtual private server.
People are used to going to a domain host and clicking a one-click install or WordPress or something like that, right? But you don’t have that with NodeBB, and other forum softwares that try to follow the same goals we do, there’s no way you can go and one-click install them, yet. So the idea is we want to simplify the process. That’s where our premium hosting comes in. You’re really good at building a community of enthusiasts about your product or idea, so you focus on that and you leave-out a technical addition to us. So we charge a small monthly fee for set-up and support.
Alexis: I think it’s $35 for, the way you’ve phrased it, a hamlet, $75 for a village, and $100 for a city, so, different sizes for communities. How has revenue been? I think you launched your premium hosting service about six months ago now?
Julian: Yes we launched it in January of this year. Reception has been pretty good. We have clients coming in every month. So definitely there is a market there for forum software, especially from those people who don’t have the technical expertise, or just don’t want to deal with it. We do have some customers who do have the technical expertise – and they can start up a virtual private server – but they don’t want to deal with things like upgrading, or things like plug-in compatibility. We handle all of that for them.
Alexis: Are you working on a one-click install you can use maybe on DigitalOcean or that kind of thing?
Julian: Yes and now, we would love to. But the idea is – I’m not sure if I should say this – but if we do have a one-click install for NodeBB, then people aren’t going to buy our premium hosting service.
Alexis: Right, the value proposition isn’t so clear in that case.
Julian: A lot of people do actually go ahead and do it on their own. There are some services. I can’t think of the name right now, but they plan on offering it in the future. With these new cloud hosting services like Cloud 9, or Modulus, or Heroku, you can actually host a NodeBB completely for free. Not for very long because the free plans aren’t very big, but you can actually get it up and running fairly simply. We have guides that allow you to do that.
With DigitalOcean, with the Ghost image where you select the image and it selects the server for you – we could possibly do that in the future. It’s a tradeoff between how much revenue we could earn if we didn’t do it, versus just having more people use DigitalOcean. I don’t want to broadcast this as well, but DigitalOcean also has a referral program. Anytime someone uses our referral, like to start-up a NodeBB, we get a nice referral kickback from that – and that helps development as well.
Alexis: You guys have been doing this for how many months now?
Julian: We’ve been going full-time for –
Alexis: Just over a year maybe?
Julian: Yeah, I guess around a year or so.
Alexis: You’re not a non-profit. Have you taken VC money, or is the revenue you’re generating enough to keep the food on the table and keep you going?
Julian: At this time, the revenue we’re taking in is enough for one person, although there are three of us. Yes – We have taken a little bit of VC money. We had closed seed round funding a couple months back from undisclosed recipients. I cannot share more than that.
Alexis: That’s all right. Was that the plan all along?
Julian: Well, no. The plan was to get purchased by Google, of course.
Alexis: It still might be.
Julian: It might be, yeah. The idea was – it’s nice to have. Having someone come in and say, “I love what you’re doing. Here’s a bundle of money and keep doing what you’re doing.” That’s the kind of thing we’re pursuing. We would love to generate enough revenue to be completely self-sufficient.
Alexis: Who’s using NodeBB? Can you share how many folks you have on your plans, maybe? Or some standouts, like “Wow, these guys are using NodeBB. I never would have thought that Apache, or Oracle,” or who knows.
Julian: We don’t have very many huge names like that. We would love it if FIrefox would use us. I know there’s not much chance of Google using us because they have their own competing forum software. I would like to point out that I don’t actually have a number of NodeBBs out in the wild right now, because the NodeBB core code itself does not ship with any “phone home” code. Which is important because people don’t want to be tracked in anyway.
What I can at least mention, or estimate, is that there are certain plug-ins that are installed with each installation with NodeBB. So you’re in a set-up script that installs a bundled plug-in called “user name mentions”. If you look in the MPM repository page you can see how people download it. Yesterday we had 108, so we can think of that as roughly 108 installs. Or maybe it’s one person who reinstalled 108 times that couldn’t get it working. Who knows?
Alexis: That was me last night. I confess, I was doing research, maybe 107.
Julian: Yeah. So we have some rough usage stats from there, but we don’t keep track of totals or anything. We noticed we have a lot of enthusiasm from start-ups. One in particular is NFC Ring. They have a Kickstarter and I believe it got fully funded. They’re an outfit based in Australia, or New Zealand, or something like that. They build and construct metal rings that have an NFC enable chip inside. You can do cool things like unlock your phone or unlock your front door, something like that. They ended up using NodeBB to replace their existing forum software, which wasn’t working very well for them because they wanted something modern to match with their actual product. We were a really easy fit because we were a modern solution that was sleek and fast and jibed with what they were doing. So I guess that’s one cool example I can think of.
Alexis: How have you spread the word of NodeBB? Have you done anything actively or just relying on word-of-mouth?
Julian: For the most part we relied on word of mouth. I cannot give enough credit to our community for spreading the word, because if you end up searching – Every once in a while we do a Google search for NodeBB in the last 24 hours so we can get a rough feel for how NodeBB is being received in the wild. We pay attention to conversations that are happening with NodeBB on other forums – if the competing forums don’t get scared and delete the post. Sometimes that happens.
What’s really cool that happened recently was, on June 23rd, while I was sleeping mind you, around 5am in the morning, someone posted NodeBB on Hacker News. It went straight up to the first page. It just decimated our analytics. We had some nice graphs on Google Analytics. After that day, everything before was just flat-line.
Alexis: You had to zoom in.
Julian: So we had that luck and we got really good feedback there. Things like that happen. We were at ForumCon in San Francisco this year, which was last month, and we’re looking to go back again next year. We’re looking to do a little bit of outreach in the local areas. I’m planning on speaking at a Toronto Node.js conference late this month or early next month, and will be speaking again in Toronto around this time next year.
Alexis: I should point out that if you do a search for “Node.js forum” on Google, you guys are the top-hit. Node.js developers searching for forum solution will find you organically pretty easily.
Julian: Yep, fantastic. And that helps because there’s only one Node.js forum solution out there right? Our first goal back in the beginning was if you searched “Node.js forum” you got a quora post from someone asking, “why aren’t their any forum softwares for Node.js” so –
Alexis: But wait! There are!
Julian: First thing we did was, “Yeah, there is! Check out this repository.” Then, from there on, once we beat that, move on to the next milestone, and so on.
Alexis: You guys have a plug-in architecture for third parties to use. Tell me a bit more about it.
Julian: Yes, so I’m very proud of the plug-in architecture. Accessibility has been the number one thing on my mind right now. We’re really impressed with the power behind WordPress, and it’s not just because WordPress is a blogging platform, it’s because of their huge plug-in database where you can turn WordPress into anything you want it to be. We wanted to replicate that experience with NodeBB, which is why our plug-in process is very open and you can extend NodeBB in a multitude of ways. We followed the same model of WordPress where we have things like “hooks” that allow you quite literally to hook into the NodeBB core code base.
When something happens like a forum post, it fires off a hook that your plug-in can listen for and react accordingly. Just following that simple process and building a system, both plug-in and theming system that doesn’t stop you from hacking away at the code, allows us to have more plug-ins than almost every other competing forum software.
Alexis: You’re even working on themes, right?
Julian: Yes, themes are another part of it. Theme ability is very difficult to do with forum softwares.
Alexis: I can attest to that.
Julian: Lots of people have tried to theme different forums, and they found if you change one thing a little bit too much, other things you didn’t expect to break start breaking. We’ve tried to make that process easier by having a system that doesn’t stop you from changing things. If you want to move that floating header bar to the side, you can, and that’s what one person has done, in fact. You have our community forum and if you go to our informal showcase forum Convoe.com you can see it looks completely different from our community forum.
Alexis: So this Convoe thing is yours?
What’s really cool about Convoe, and Trevor specifically, he was looking for the modern forum solution. This was even before we were around. He ended up finding a competitor of ours. He didn’t like how restrictive their theming system was, and then he found us and didn’t look back. That really tells us that we’re doing the right thing, on the right track. We want to keep that enthusiasm and reaction to newcomers, a part of that NodeBB core experience. Someone comes in and says, “wow.” As opposed to going on and thinking that it’s just another forum.
Alexis: “This will do, I guess.”
Julian: There’s a forum out there that’s called Yet Another Bulletin Board. We don’t want it to be yet another bulletin board. Every time we come up with a new default theme, there has to be one aspect that is completely new and novel. Not necessarily 100% likable by everybody.
For example, our main theme right now is called “Lavender.” The novel aspect of that is that it borders the categories with a Pinterest-style, Masonry inspired format. It’s either you love it or hate it. If you don’t use a lot of Pinterest for example, you go on and think, “This is amazing”. But on the other hand, if you don’t like Pinterest, you will hate the idea altogether. We were obviously after Pinterest, so it’s kind of like we’re following in the footsteps of Pinterest. We were experimenting with it and it was received fairly well, but we’re looking for a new theme as well.
Alexis: So, would you say that plug-ins or theme ability is a kind of thing that once you developed it, it helped kind of kick up adoption. Or, is there something else that did that as well – maybe better?
Julian: Plug-in development really does. What we aim to do with plug-ins was not only to have accessibility in our core code, but also put in features we didn’t really want to build into core. The whole idea of NodeBB is to keep everything lean and simple. Something as simple as being able to tag someone in a post with an @, like in Twitter, that is not built into the core. It’s actually a plug in. Or the whole idea that what you type is parsed as “markdown”, which is our formatting language. That’s not built in. If someone wants to migrate to a NodeBB and says, “my existing forum using BB code, but you guys use markdown.” They can actually uninstall markdown, install the BB plug-in, and then you have a seamless transition.
Having modular parts of the code that you can take out and put in allows forum administrators to build or customize their forum to be exactly what they like. We get a lot of suggestions but we can’t say “yes” to every one of them, especially if we want to keep the code core base lean. That’s where plug-ins come in.
We can say, “We love this idea, but we can’t build it into core, but it would be great as a plug-in.” Then either they’ll build it or someone else will, because they also share the idea that being able to embed Soundcloud would be a good idea. We have plug-in for that now. But we can’t build it into core because not everybody would want that.
Alexis: So have you got to the point where it’s like a WordPress ecosystem where, “man, someone’s made a plug-in and they’re charging for it!”?
Julian: At this point, not yet. We don’t have any sort of plug-in or theme marketplace. People are asking for that, but our attention can only be split in certain ways. We don’t want to depart too far from NodeBB itself. We’d love to have a plug-in database, or marketplace. We’re almost there. In a couple of months, that might be a reality. We’re looking to resolve some core issues with NodeBB first. Actually, I want to mention Convoe. The theme Trevor is using on Convoe.com is called “Majestic”. That theme is for sale. That will be the first for-pay theme out there.
Alexis: You beat your own marketplace.
Julian: That’s right. He ended up doing it on his own. Something really cool is that there is no forum software in existence that can do push-notifications to your phone. Let’s say you’re following a topic and you’re out of the house. If someone replies, you won’t find out until the next day when the forum e-mails you, if it e-mails you. Or if you check it, right? Being able to subscribe to a topic and have it pushed to your phone. If you’re on the road or a bus and someone replies, let’s open my phone and reply right there.
That’s where our pushbullet plug-in comes in. Pushbullet is a nice start-up in San Francisco that is doing this. So we ended up rushing out a pushbullet plug-in. That is also for sale until our next version ships, in which case it will be completely free.
Alexis: I should mention you also have desktop notifications too.
Julian: Yes we do.
Alexis: So if you’re on your Mac you can see a little notification pop-up.
Julian: That’s the notifications plug-in, just like our Pushbullet plug-in – which does desktop notifications as well.
Alexis: It makes flame wars so much more immediate.
Alexis: I didn’t see any while I was cruising the NodeBB forums, I’m happy to report. You mentioned earlier that you do paid support. Do you also do paid customization?
Julian: Yes we do. We do paid customization for people who want to do things intricate with their existing log in system, or custom theme or custom module, which lots of people do want. So if you know anybody that is interested, all they have to do is give us a shout at [email protected] and we’ll get back to them with a quote.
Alexis: How much of your time is this taking up? Maybe 30/70, 70/30?
Julian: We try not to take too many one-off customization projects at once. The majority of our time is spent on NodeBB core itself. Although, we could always use more.
Alexis: I also noticed you guys have been translating in different languages, so much that you’ve crossed the 31 languages mark, with 5 more incoming. How did that get started?
Julian: Translating is a really interesting story as well, because people wanted to translate NodeBB of course. The first story I want to mention is that we had an unofficial forum for the Kansas University basketball team using NodeBB. One of the users said, “This forum looks nice, but why is it written in old English?” of course because we spelt favorite with a “u.” So, from there we wanted to translate, not only because we wanted an American English equivalent, but so we could get different languages as well, because that drives adoption.
The first thing I did was use an existing system. What better system is there than get help with pull requests? I thought this was perfectly fine system. You have English in a separate folder and someone wants to afford a repository and create a new folder for German or French. They can do that. That worked really well actually.
Then, I discovered Transifex and realized it was free. I spent the better part of an hour setting it up. Within a week we had doubled our languages. I had no idea that GitHub itself was such a barrier to entry when it comes to translating. Because of course, you speak two different languages. You think, this is a nice forum, and you host on GitHub, but I don’t even know what GitHub is. So they can’t even begin to understand what Git is, or a cloning process, or how to fork.
While it comes naturally to me as a developer, to somebody who speaks a different language they have no idea. We have a comparatively large market in China, surprisingly because there are a lot of programmers out there who don’t speak any English at all. They have no exposure to English or American television or anything like that. That’s why you see things like Baidu, a search engine, instead of Google. They have their own Twitter, called Weibo, their own social networks.
You can use Twitter in Chinese of course, but because the majority of the community is from North America or Europe, you don’t speak their language or follow everybody you want to, they have their own niche communities. They have their own technical support Q&A forums and Stack Overflow, I’m assuming. You have this entire untapped market that you can’t really penetrate because you’re speaking English.
We have a lot of people who want to use NodeBB, but if they go to our support forum – I may be Chinese, but I’m very westernized. I don’t speak any Chinese anymore, not much. I can’t write Chinese on the Internet so I can’t help them. It’s very difficult to have to cross a language barrier when often it’s support. Giving support to somebody in Europe is difficult enough, but giving support to somebody who doesn’t speak your language at all using Google Translate –
Alexis: It’s all technical stuff, so it’s all downhill.
Julian: Exactly. One of the things we’re doing now is to work with some community helpers who speak Chinese to help build out a Chinese support forum for NodeBB. It’s an experiment we’re trying right now.
Alexis: Initially, this whole translation effort started out because of the Old English joke on a forum you guys installed, and it turned out to be a good driver for getting folks on board.
Julian: A huge driver.
Alexis: You guys are a team of three living in Toronto. Do you guys work remotely from your homes, or do you have an office? What is the dynamic?
Julian: We had an office, mostly because of the whole, “we ought to have an office” thing. We had an office, mostly for client meetings, and we found out we’re paying rent for an office, and we ended up all coming in, say “hello”, we all put our headphones on and we chat through Skype for the rest of the day. So we can do that, or we can just stay at home and chat through Skype.
We communicate through Skype and a lot of what we do is send bug reports, images of issues, we also send memes to each other, of course. Being able to do that all digitally makes working in an office – I mean there are still advantages to working in an office of course. Being able to turn around and have an in-person discussion about a feature is definitely advantageous, but for the most part, because we do spend about 80-90% in our screens engrossed in our code, there’s no need for us to be in an office at the same time. We’re distributed in a sense, but we’re all in the same city.
Alexis: You guys use Skype for chatting, what do you use for project management?
Julian: We use GitHub exclusively for project management. We played around with Trello, but we never ended up finding the motivation to use it completely. We experimented with Trello for issue management, but then GitHub did it better. We looked into using Trello again for educating our users about our roadmap and feature listings, but we found that GitHub Wiki was better at doing that. So we don’t use Trello anymore. We put everything on GitHub – also because it’s easy to register for a GitHub account and you can participate in discussions in addition to using forums.
So, I like to mention the fact that we dogfood our own forum software because we use NodeBB on our community forum. Whenever we want our user’s opinions on certain features we want to develop, we put an issue on GitHub and tag the “request for comments” and we crosspost it to our forum. We get a good mix of people who don’t have a GitHub account and people who visit our forum and we’d like to get their opinion as well, because our users’ opinions, wishes and desires are important for shaping the direction of NodeBB.
Alexis: This gives me a good idea. I should start asking these kinds of communication and project management questions for each interview so we can get a broad view of the landscape of people’s workflows. Which brings me to my next question: which text editor do you use?
Julian: I see. I use Sublime Text 2, but only because I didn’t get off my ass and download Sublime Text 3. I believe there are issues in Sublime Text 3, and Andrew uses Sublime Text 2, for the same aforementioned reason, and he’s experimenting with Atom, because Atom has a Windows build now. He likes it, so you never know.
Alexis: I’m also in the Sublime Text camp.
Julian: There’s no reason not to use version 3, really.
Alexis: So what’s next for NodeBB?
Julian: We have a lot to fix still. Most of the core functionalities are there. It’s just things that people ought to expect from a modern forum software. No one should have to degrade their expectations because they’re using a forum software. That’s something we want to aim for. One thing is, you’ve loaded up a forum, let’s say you’re on a phpBB forum, and you’ve loaded up the forum and replied, and you go away for an hour, and you might come back to your computer. If you want to check for new replies, what do you do? You refresh. We want to get rid of that altogether. And we did.
Way at the beginning we had live streaming of new posts and you can actually just stay on the site and you’ll have the latest version on it. A new post will come in; you’ll see notifications coming up in real time. That’s something that using NodeBB allows us to take advantage of. We’re working on, like I mentioned before, a new theme out to door. People just love or hate Lavender. Translations are an ongoing process. Topic searching is what I’m focusing on right now, actually. Our existing search engine was something we threw in for fun, and it works on phonetics, which is cool and novel, which is why I put it in. You can search for “Johan” and you would get results containing “John” which is nice.
But what’s bad about it is that you get a lot of false positives as well. So you search for the word “forums” and you get results for “farms”. Phonetics only work in the Latin context. If you try to search on the Chinese forum, you won’t get anything. Considering the whole international viewpoint, we really want a full text-search engine that works well. We’re going back to what’s tried and true. I’m working on a new search plug-in utilizing Apache Solr as a back-in. Which is free and open sources, which is a big driver in why I chose it as well.
Alexis: This actually brings up another question when it comes to design. You all have a background in PHP – are any of you designers as well or do you outsource that?
Julian: We actually do have a designer. One of us is a designer. I’m more of a full-stock back-end sort of guy. Barış did a little bit of AS3 and Flash back in the day. Also he has an architecture degree, which is pretty neat. So we get some design from him as well. Andrew is actually our main go-to guy for design. He has all of the software. He lives and breathes design. So, he’s the one who does design. We mock it up, build it, and he makes it look nice.
Alexis: So you guys don’t have to worry about design, “how will we make this look good?”
Julian: In general we don’t have to do a lot of charging to get something to look nice. We use Bootstrap as a base. It brings up the default styling of a page from really ugly, to really nice. All by adding a CSS library. A lot of people don’t like it because it makes every site look the same.
We want to build on top of an existing Bootstrap theme to make something that looks unique and looks nice. The whole idea of Bootstrap is that I can put in the minimum amount of effort, and it would look horrible if I hadn’t used Bootstrap. But because I did, it looks really nice already. I’ve raided the base line from really ugly, to really neat.
Alexis: You guys are over a year into this now. Is there anything you would have done differently?
Julian: We would have used SQL. No I’m just kidding. That’s a good question.
Alexis: SQLite, right?
Julian: One thing we do like about Ghost specifically is that you can configure it without an installed database. A prerequisite for using NodeBB is you have to install Redis or Mongo. We don’t have anything like SQL light, yet. The fact that Ghost can do that; you just download the code, and run the set up script, and you’re all set. That’s something we want to replicate as well. We really are jealous of Ghost of doing that. I wish I had done that first.
A long time ago I wanted to do something similar and install a web-based install process. At that time I didn’t know enough about Node.js to do that. I tried it, got fairly far, and decided against it. We ended up with a command-line installation. I’m looking to do it again. It’s on my list of to-dos, but my to-do list is very, very long.
Alexis: Now on the flip side of that question, is there a critical decision you made that maybe you weren’t sure of, but now it was the clearly right answer you’re glad you stuck with?
Julian: I can’t really think of anything right now.
Alexis: You guys know exactly what to do.
Julian: I wouldn’t say that. I’m sure we made a lot of wrong decisions. Lots of people come to us and say, “why are you using Redis as the database backend for your forum software? You’re not using it right.” Even though if you think about it, it was one of the largest Chinese websites right now built using Node.js uses Redis as a backend. It uses a couple-hundred GBs of memory dedicated to storing Redis because they need that raw speed. Speed was one of the things we wanted to focus on for NodeBB. That’s why we chose Redis. Also, because we wanted to play around with no SQL. People still say, “why did you choose Redis?” and I guess we still have our reasons for it.
One critical point I wanted to bring up was that we could have used something else like Mustache or Jade or Handlebars as our templating engine, but instead we built our own. We built our own templating engine because we didn’t want to work – I guess I don’t want to say didn’t want to work with it or we were just too lazy to work with it. But, we ended up building our own. What happened was ours was faster and more flexible to use, which is not something you can really say with a lot of template engines because they’re really fast already.
Alexis: Is this something that’s a separate open-source project or is it something you can break out?
Julian: It’s completely open-source. It used to be built into core, but Andrew is the one who ended up building it, and it’s actually completely separate now. It’s called Templates.JS, again with the really non-creative naming. So you can find it on GitHub under his user name “psychobunny”. Psychobunny/templates.js.
Alexis: It will be linked to the show notes.
Julian: Fantastic. We use that. We haven’t done any benchmarks or comparisons, but from what we have seen it is a little bit faster. I don’t know enough to explain it in full, but instead of going bottom – up, we go top – down. That’s how he explained to me, as to why it was faster. There are certain things you can do with Templates.JS that you can’t do with Handlebars.
For instance, if you’re iterating through a loop in a template, you can’t reference any global variables or any template variables in the root scope. It’s really hard to explain without showing you code, but you can do it in Templates.JS. It’s something so simple. People keep asking on the Handlebars issue tracker, but they keep getting shot down because it’s too complicated to do now that Handlebars has already been built. It would break everything.
Alexis: A couple of questions, not from me, but from John O’Nolan. You asked last week why the Ghost team didn’t use NodeBB for their forum solution. Apparently, the answer was that they were trying to get something up really fast, between 24-72 hours. They tried it with Discourse, and didn’t like it. They tried with phpBB, and they didn’t like it. They finally settled on getting help from someone else, and that’s just who they went with because they needed to do it fast. However, now he has a question for you. Does your blog run Ghost?
Julian: Yes, our blog runs Ghost, definitely.
Alexis: We foresaw this. We’ve come up with another question for you that wouldn’t be as easy – or maybe it is. Would you like to build a new Ghost.org forum for them?
Julian: We would love to build a new Ghost.org forum for them. We would do it for free and I would make it my personal project for the next couple months. I would love to do that.
Alexis: I didn’t expect the BinPress Podcast would be a matchmaking podcast as well.
Julian: What I would like to mention about Ghost on our blog specifically, is that we integrated our forum software into Ghost itself. If you go onto our blog, and look inside – because Ghost elects not to have comments mainly because people want to use their own commenting systems like Disqus or Muut – we ended up building our own. We have NodeBB forums integrated as comments inside of a Ghost shell. You post the comment and it posts directly to the forum itself. It refreshes and you see your comment on the page.
Alexis: Is that a plug-in available for folks to download?
Julian: It sure is.
Alexis: Well I know somebody that’s going to download it. John. Is there anything that I didn’t ask that I should have?
Julian: No. I think that was it.
Alexis: If folks would like to find out more about NodeBB, where should they go?
Julian: You can check us out at NodeBB.org. Or checkout our GitHub project at github.com/Nodebb/Nodebb.
Alexis: If we’d like to stalk you on Twitter, where can we do that?
Julian: You can find out Twitter handle as @NodeBB. We’re also on Facebook.
Alexis: You can find Binpress at @Binpress on Twitter and myself @alexissantos. Where can we find out about you personally on Twitter?
Julian: You can find me @JulianLam.
Alexis: Thank you for being on the show again, and we will catch the listeners next week.
Julian: It was a pleasure, thanks.
Alexis: No problem.
Author: Alexis Santos