Running an open-source project Discord server
We are writing Dolt, the world's first and only version-controlled SQL database. It's free and open source software, and we've been using Discord to connect with our users for a little over 3 years. This blog is about why we picked Discord and how we get the most out of it to support our customers and find new ones.
Why Discord for an open source project?
We aren't the open only source project using Discord. As a matter of fact, it's practically a standard at this point. For a while Discord was keeping an active list of all the open-source projects that have Discord servers, but eventually they stopped updating their list, presumably because there were so many projects using Discord they didn't really need to advertise how many there were anymore.
So Discord is a popular choice for connecting open-source projects with their user base. But why? Why is it better than other methods of communication, like GitHub issues?
In our experience, this comes down to a few big factors:
- Immediacy. Talking to a person on a project in real time is just more satisfying than filing an issue and waiting for a response. For open-ended conversations with a lot of back and forth, it's also dramatically more effective.
- Community. People don't like to just talk to the maintainers of the project, they also want to meet other users and swap stories about it. There are only 15 project maintainers on our server, but hundreds of active users.
- Convenience. Because Discord is so popular as a general chat client, there's an excellent chance that prospective users of your open-source project already have it installed. The fact that it's heavily used in the video gaming world makes this an even better chance. They're already running the client on their machine, so a single click on your website connects them to your server.
- Free. Your users don't need to pay a monthly fee to chat with you. They click a link and it just works. This is not true for other chat services cough Slack cough
All this adds up to a great solution for connecting with our users.
We still get plenty of GitHub issues directly, but a majority of them originate on Discord now: our users show up there first, report an issue or ask a question, and then we ask them to please also file a GitHub issue so we can track the problem more durably.
Talking to our customers in the same place we talk to each other also has the added benefit of increasing our customer focus. We mostly hang out in the back of the shop making our widgets, but our customers are in the store with us, and we come up to the front when they ring the bell. They feel real to us because we interact with them in real time, constantly. Their concerns aren't just abstract requests sitting in a work queue or issue list, they're real problems experienced by real people who we talk to and have a relationship with. This is a crucial difference which helps keep us motivated and on target, and our customers appreciate it too.
Why Discord instead of Slack?
As for why we picked Discord over another live chat solution, like Slack, we wrote a whole blog about that when we made the choice. Just compare how the two solutions brand themselves.
If you think Discord would be a more fun experience based on these images, that was the impression we got as well. Every UX decision makes Slack feel sterile, all business, while Discord emphasizes a fun, laid back vibe at every turn. That matched how we think of our culture at DoltHub.
And there's also the install base to consider: plenty of people use Slack for work, but millions of gamers use Discord for fun, and since there's a huge overlap between gamers and software engineers, most of our potential customers already have it installed.
Managing your open source project's server
Getting started with Discord is really easy. I set ours up in under an hour, which is why I'm the one with a crown next to my name. If you haven't set up a server yet, do it now so you're the one to get this coveted flair.
After basic server setup, like getting a logo in place, you'll want to turn your attention to some other practical matters.
Public channels
Most Discord servers feature a bunch of different channels, which are basically separate threads of conversation. There are lots of strategies for how to organize your server's channels, but here's the approach we took.
- You definitely want an introductions channel, since that will be the landing channel for anybody who receives a server invite (you can change this in server settings). People will often write a paragraph of introduction about themselves. For a while we pinned these introductions, but eventually there were too many to manage so now we treat it as transient.
- General is just what is sounds like, for conversations that don't have a particular topic in mind
- Product-specific channels for our various product offerings. That's what dolt, hosted-dolt, data-bounties, etc. are. Each is a place for people to talk and get support for a particular project.
- Off-topic is a good release valve for the overly sociable -- it gives them a place to just hang out and chat with people they meet on the server without feeling like they're annoying people there to get something done.
In addition to these text channels, we also have a public voice channel where people can talk or video chat in real time. It's rarely used, and your project would need to be really massive to warrant having more than one public voice channel.
Private channels
We use Discord both to talk to our customers and to talk to each other. Here's a peek behind the curtain at what we talk about on our internal-only channels:
You can see that we follow the same basic philosophy with private channels that we do with public ones. We divide things up by product area to keep discussions focused, which means people who don't care about a topic can mute it most of the time. We also learned fairly early on that it's a bad idea to have a public and private channel with the same name -- too easy to address the wrong audience by mistake. That's why we have dolt-internal and other -internal channels, to make it obvious who we're talking to.
We also have a private voice channel, but it's also used very infrequently. We use Discord voice calls for private talks between team members as necessary, but whenever we have a big meeting we tend to use Google Meet instead.
Customer support channels
Discord is our first line of customer support, and all paying customers get a private support channel. We also give private channels to pretty much anybody who wants to talk about non-public details of their use of the software. Here's some of them (customer names hidden to protect the guilty):
We use a naming scheme with the customer's name and our name, again to prevent any confusion about who we're talking to.
As with non-paying users, these channels are usually the first place our customers come to ask questions or report bugs. Any confirmed bugs or feature requests we can't get to right away we usually have them convert to a GitHub issue so we can track it in one place.
Permissions
The main thing you should care about when setting up your permissions on Discord to host an open source server is two groups: project maintainers and everyone else. Discord makes this pretty easy with roles and channel categories. Just create a role with all your project maintainers that has the permissions you want (editing messages, deleting messages, etc.) and add your whole team to it. Ours is called dolt-team.
Then give that role access to your private channel category, and any new private channels you create in that category will automatically be visible to your team and nobody else. Discord has a catch-all role called everyone that you can use to set what permissions new people joining the server should have. Make sure that your public channel category has appropriate permissions for the everyone role, and you should be all set for permission management.
When you're playing with roles and permissions, it's a good idea to use the handy view server as role feature, which lets you view your server as if you're a member of that role. It's the best way to make sure you didn't grant the wrong visibility or permissions to any channel. We made some dumb mistakes when we were first learning how roles and permissions work, so better safe than sorry.
For our customer support channels, the number of outside users who should have access is usually very limited (just a handful of people), so we don't bother creating roles for these channels. We just add individual members to them as customers ask us to.
Discord servers also have a special admin role that has every permission, including being able to create and delete channels, ban users, etc. We keep this role locked down to just a couple people on the team, just to make mistakes less likely to occur from a stray click.
Useful plugins / bots
Discord has a very active plugin scene and a truly staggering number of bots you can install on your server. A little Googling can turn up lists of popular bots, but it can be confusing to know where to start. Most of these bots provide game-like or just-for-fun functionality and most of them you won't want to let anywhere near your server. We haven't done much in the way of bots, but there are a couple that we have found very helpful.
Dyno
Dyno is a very powerful bot that has a ton of commands at its disposal for managing roles, permissions, and other aspects of your server. We mostly use it to monitor our introductions channel, where it notifies us when new people join the server so we can welcome them. This happens many times a day, and it's a great way to let people know they're welcome and where to ask questions. It's always better to be proactive and reach out to new members who might have otherwise remained silent.
DeleteBot
We treat Discord as ephemeral storage, and we want our users to treat it that way too. Anything that needs to be preserved should find its way into GitHub issues or our documentation. But there's no built-in Discord functionality to make messages expire after a certain amount of time, so many people have written bots to do this. The one we use is called DeleteBot, and it used to work well enough. The only trick is that you have to give it permission on your channels, and put the words "DeleteBot" in your channel's description.
Unfortunately, as of this writing DeleteBot seems to have been inoperable for the last several months, and I can't find an equivalent bot that works. Given the legal risk associated with indefinite message retention, we consider this a serious problem. Hopefully DeleteBot comes back online or Discord themselves build support for explicit retention policies, like other tools in this space have.
Customization and vanity options
You can customize the background graphics on your server's landing page for 2 server boosts, which costs about $10 a month. We had this option enabled for a while, but our impression is it doesn't really move the needle on server membership. People see the landing page once, before they join the server, then never again.
If you are willing to spend more money, Discord will give you a custom invite link, rather than the normal 10 random letters and numbers. We are too cheap, I mean frugal, to pay for this perk, but if your server is popular enough your members can pay for server boosts to unlock it for you. Discord will give this to you for free if they decide your server is important enough, but it seems like the threshold for "importance" as an open source project is pretty high in their eyes.
Community servers
Discord has a feature called Community Server that gets your server some extra features, including more metrics. We had this on for a while, but to enable it you need to turn on media scanning (for adult content), which kept getting falsely triggered when our members wanted to share screenshots or other innocuous content. In our opinion the metrics aren't worth the extra friction, at least not at our current scale.
Handling abuse
We've been lucky, and there are only two instances in 3 years of operation that we've had to kick or ban abusive users. Maybe that's typical for open source project servers. But in any case, it's important for the sake of inclusivity to be able to get rid of server members who are making others miserable. Discord has built in commands to kick or ban such users, and Dyno has even more expressive capabilities, like being able to mute people for a fixed duration to give them a time-out. We've never found that necessary, since our server isn't so busy that a simple ban isn't good enough.
Results and discussion
In a little over three years of running our server, we've had 1,894 people join the server, about half of whom were active in the last 30 days.
Is this good for an open source project? We don't really know, but compared to the number of people who have starred our GitHib project, currently about 15.5k, it seems like a pretty good conversion rate.
We advertise our server on our main site, on our GitHub README, and at the bottom of every blog we write (3x a week). Of our currently paying customers, a majority first made contact on Discord. We don't have a counterfactual experiment where we weren't running a Discord server the last three years, but it's our strong impression that Discord is a very rich generator for sales leads. Customers who get deep enough into the product to buy our paid offerings tend to want to talk to us, and Discord makes it very easy and low-pressure for them to do so.
Conclusion
Discord is a vital part of our operational platform at DoltHub, both for internal comms and communicating with customers. The ability for new users of our software to find us and talk to us in real time is great for them and very gratifying for us. There's nothing better than meeting a new customer and shipping them a bug fix in the same day, which in our experience happens at least five times as often as them going to the trouble to file a GitHub issue. And since we need an internal chat server anyway, hosting customer chat channels there as well is a really easy choice.
Have questions about Discord server management or Dolt? Join us on our server to talk to our engineering team and meet Dolt users. See you there!