How Discourse Uses Discourse

How Discourse uses Discourse with a photo of Blake Erikson, Software Engineer at Discourse

One of the best things about working at Discourse is that we practice what we preach: we run our 100+ employee company entirely on our own platform. From chatting with coworkers and planning features to tracking bugs, looking up documentation, and even scheduling time off, everything happens in one place. I genuinely believe our culture and success as a 100% remote company stems from using our own collaboration tool, and I want to share how we use Discourse to build Discourse so you can create a similar setup for your team.

Our internal forum is invite-only, meaning everything we discuss happens in a private space just for our team. Within that space, we’ve built out a handful of ideas and processes that keep our company running smoothly…

Knowledge base by default

One of the key benefits of using Discourse for internal communication is that it creates a knowledge base by default. Through our everyday conversations in categorized and tagged topics, we naturally document nearly every aspect of how the company operates. While we do maintain official runbooks (we’ll cover these in more detail later), the bulk of our institutional knowledge emerges organically from our daily communication. If you’re trying to figure something out and can’t find it documented anywhere, that’s your cue to create a topic - either to ask for help or to document what you discovered.

The crucial element here is that our knowledge base serves as our primary communication hub. Because we live in it every day, we naturally keep it current. We add tags, move topics to better categories, update outdated information, ask for clarification—we learn and grow together. This is vastly superior to those external knowledge base systems that gather dust, are rarely visited and hopelessly out of date.

My favorite example of a living document is our Coding Lore topic. Since its creation, it has accumulated 76 edits, with the most recent update coming just 29 days ago from a new hire.

Screenshot of our Coding Lore topic
Screenshot of our Coding Lore topic

Having a living knowledge base allows us to stay in sync as a company in a way that a group chat just can’t. Employees can solve problems on their own with access to critical information, enjoy seamless onboarding, and contribute to the team and the company’s living legacy. Without this collective knowledge we’ve built up I truly believe I would be less productive and I’d enjoy my job and my work less!

Discourse Chat: For Real-Time Conversations

Discourse has its own built in chat feature just like you would find with Slack or any other chat-focused product, but since it's built into the core of Discourse it easily allows us to preserve any key discussions we have and easily turn them into a long form discussion topic. 

We have a number of different channels: typical ones like #general and #random, and also dedicated channels for each of our different teams. We have a #help channel for quick questions, and we recently added a non-chat #help category for requests that aren’t urgent and are worth preserving for others in the future. On the development side we have a #dev channel and a #code-review channel where we post links to GitHub pull requests that are ready for review.

Screenshot of the Discourse random chat channel
Screenshot of our random chat channel

The key is that our chat function gives us a place to collaborate in real time. If there are any critical discussions or decisions we move those into their own topics for safe keeping.

From Ideas to Action: Product vs Todo Topics

One important change we have made is a separate distinction between todo topics and product topics. This was necessary because we needed to create space for discussion and input - but once a consensus or a decision was made, we could then define a concrete todo topic for that feature or task being built and assign the work.

When an idea for a new feature comes up, rather than just making a todo topic for it, we create a dedicated product topic. The original author will describe the feature and how it should work to the best of their abilities. Once they have created their proposal this gives room for designers to come in and offer suggestions on how it might work. Same for engineers who will be implementing the feature. They can provide insight into any concerns they might have with performance or any other programming difficulties that may arise. All of this discussion ultimately shapes the feature. Once we have it narrowed down, we then create a fresh new todo topic for the feature. This allows us to preserve all of the historical context of discussion but get rid of all the noise leaving just the concrete tasks that are required to complete the task.

An example of a product topic and a todo topic
An example of a product topic and a todo topic

Todo topics are a bit unique from other topics in that we use workflow tags - #in-progress, #up-next, #maybe-later - along with priority tags like #pri-high and #pri-urgent to track what’s being worked on and how important it is.

Screenshot of our kanban board
Screenshot of our kanban board

Runbooks: Our Institutional Memory

At Discourse, everything is written down. This has been crucial as a completely remote company with coworkers all over the world. For work that is critical to our company we use Runbook Topics. These are topics with step by step instructions on how to do a certain task. If I need to know how to do something, say move a site from our standard tier to our business tier, I can read a topic on how to do that very thing. Because it's been documented I don’t have to go bug a coworker in chat or worry I’d wake them due to timezones. Being able to refer to key pieces of information like this has made me a much more self-sufficient worker. If a guide does happen to be out of date, usually there is more than enough content to get me started and then I can work out the necessary pieces to finish my task. Once I know how to complete it I could then go back, edit the document and keep it updated for the next person.

Screenshot of a runbook topic
Screenshot of a runbook topic

Who's working today?

When you’re working fully remote there is no parking lot full of cars to easily see at a glance who is in the office or not. To keep track of time off, we use the calendar feature in Discourse. We have a single topic with a calendar at the top. If we need to take time off, we just reply to the topic with the days we need and a short reason why, and it automatically gets added to the calendar. The cool thing about this feature is that on our day off, our avatar in Discourse gets a little calendar badge next to it so that anyone can easily see that we currently have the day off and may not respond to things.

Example of the holiday emoji
Example of the holiday emoji

Policies Everyone Actually Reads

Some topics are important for every employee to read and be aware of. For these we use the Policy Plugin. When a topic is indicated as a policy it will notify all the users in the appropriate group that they need to read and accept it. It shows a list of how many employees have accepted the policy and it has a form at the bottom of the topic to indicate that you have indeed read the policy and understand it. Then 1 year after acknowledging it, Discourse will remind you again that you need to re-read it and accept it again. 

These policy documents are a super easy way for me as an employee to be aware of all the important policies we have as a company and a super easy way for management to distribute policies and know they are being read and aren't just lost in an email inbox.

Example of our Policy topics
Example of our Policy topics

Weekly Updates: Staying Connected

Each employee creates a weekly update topic for the year. Then each week they write about what they worked on that week, their general thoughts on things, and if they wish, share personal happenings in their life. These weekly updates are a great way to keep up with my coworkers. They keep me informed with the work they have been doing and I get to learn about their life and interests. Many coworkers post pictures of trips they go on, their pets, their family, and other things going on. It really is a great way to stay up to date on their lives  and remember that they are human beings with their own ups and downs that need to be taken into account as we work together.

A screenshot of a weekly update
A screenshot of a weekly update

The Monthly Newsletter

We also have monthly internal newsletter topics that introduce new hires, let us know who had a birthday, and any upcoming events like an upcoming webinar we are hosting. There is a section providing an update to our product roadmap. A fireside chat section to learn about a specific team at Discourse; for October we covered the Product team. Of course everyone's favorite part is our Guess the Mystery Person game. Several clues describing the person are provided and we all take turns guessing who it might be. It's a great way to learn about our fellow co-workers and allows each incorrect guess to respond with why it isn't them.

Business Transparency with Metrics

On the business side of things we also have a monthly topic covering key metrics. As an engineer on the team it's nice to be included in the financials and growth of the company. It makes the work you do feel like it has an impact and it's nice to know where we stand on a monthly basis toward hitting our annual goals.

Our internal AI Bot

Our internal AI Chat bot has become a powerful tool; you can use it like you would ChatGPT, but it has contextual knowledge of all of the topics in our internal discourse forum as well as our codebase. I often use it as a supplement to search to find specific topics that I know exist, but can't recall exactly where to go to find them. One query I made recently was, “Are there any topics that talk about not using PluginStore anymore? Trying to figure out if I should use PluginStore or just make my own db table and columns in a plugin I’m working on,” the Discourse AI Bot responded with a helpful answer and even linked directly to our Development Styleguide describing exactly what I should use.

Example of the AI bot
Example of the AI bot

Weekly AI Updates

Now that we are a team of over 100 employees, reading everything in our internal Discourse is not always possible and definitely not required. To give a general idea of what is going on across all the different teams we have a Weekly report generated by AI. It provides a sentiment analysis and surfaces emerging themes. It also highlights important topics across all of our different internal categories like sysadmin, dev, design, and biz. It also includes non-work updates drawn from our weekly posts, so we stay aware of major life events - like when someone gets married, adopts a new pet, or has a visa approved.

Getting to Know Each Other:

Introduction topics

When a new hire is brought on one of their first tasks is to write an introduction topic. This is a great way for us to learn about them, what their hobbies are, details about where they are from, and what they like to eat. It gives us a place to respond and welcome the new hire to the team, share our own common interests, and start interacting with them. It's also a great reference for Secret Santa gifts and helps us learn about our fellow co-workers.

Screenshot of an Introduction topic
Screenshot of an Introduction topic

Icebreaker topics

We have a whole section for non-work related topics we call icebreakers. With topics like "What does your workstation look like?", "What books are you reading?", "Recommend a Movie", "Urban Wildlife — what lives around you?", and many many more.

Screenshot of our icebreakers
Screenshot of our icebreakers

These sorts of topics are a lot of fun, provide a healthy side quest, and ultimately help us connect with one another to make working at Discourse a pleasant experience.

Handling Incidents as a Team

Incidents happen, but being able to rally together as a team to solve it as quickly as possible is what really matters. To handle incidents we have several tools as part of our Discourse toolkit that we use. 

First: we have critical alerts from various monitoring services that are pumped into discourse as they fire. These allow everyone to know something is up. Once someone has acknowledged the firing alerts are in fact real we all rally together in the incident chat channel.

During an incident we also create an incident topic where a dedicated scribe documents what is going on. Discourse has a handy timestamp keyboard shortcut `cmd+shift+.` to easily insert a timestamp while they are authoring a topic. 

We also create an incident retrospective topic that covers what happened and from this we generate any follow up todos that need to be handled. Once the incident is resolved we preserve the entire chat log by moving it into a dedicated topic.

A Better Way to Work Remotely

Discourse gives us structure without taking away flexibility. Everything important is documented, searchable, and shared - but it still feels human. The mix of long-form discussion, real-time chat, and clear organization means nothing gets lost, and everyone, no matter their timezone, has the same seat at the table. 

Discourse is a system for community; and it's our system for working together better.