Welcome to the second edition of High Growth Engineering. Today, we’ll be discussing the Searchable Log of All Conversation and Knowledge. AKA, Slack!
But first, a quick refresher on what I write about for those that are new here.
The goal of this newsletter is to discuss techniques for building better software and being more effective in high growth companies. I mix in longer form content — think a short blog post that you could read in 5 minutes — with some of my favourite links.
Last week, I covered how to write better proposals. If you subscribe, you’ll receive weekly posts from me on topics such as:
Techniques for testing in production
Estimating the payoff of work
Writing maintainable software under time constraints
Project management and prioritisation as an engineer
Right — to Slack, we ride!
Slack has become the de facto way that startups communicate with each other. And people have opinions about it.
Used well, it’s an effective source of human and machine collaboration. You’re able to quickly collaborate with colleagues. It’s clear what you have to do, and when. And most importantly, you can blow off steam with puppy GIFs, or Pokemon battles.
Untamed and unstructured, you’re drinking from a firehose. You’re spinning multiple plates in different channels, aiming to get context, and getting nothing else done as a result. Why have I been tagged in 20 threads, when I just went to get a cup of coffee? Why can’t we just go back to email? I empathise — really, I do.
I can help. There’s a few small things that you can do to make you more productive, and improve how your team and company use it. Most of these tips are picked up from how we use Slack to run a bank at Monzo. We’re not perfect users of Slack, but I think we’re doing pretty good.
As a result, this advice skews towards companies that have 100+ users, but most parts are relevant for all. Let’s go! 🚀
Think forums, not chatrooms
When people use Slack for the first time, they think ‘Cool! Chatrooms!’. It looks like a chatroom. It feels like one. Until 2018, they had an IRC gateway so you could use it like one.
I think this is the wrong way to view Slack.
Slack works best when you view it as a forum: a grouping of (hopefully) high quality thoughtful posts, with other related posts attached in a thread. Discussion within threads is moderated so you stay on topic. Threads form part of a sub-forum — a channel.
The product experience doesn’t always push you in this direction, but it’s helpful to internalise.
Turn off notifications 🔕
First, Slack should not be used as a time-sensitive method of communication. Second, if other people want your synchronous attention, you are not beholden to give it to them. I don’t think I need to explain myself further.
Please, for the love of god, use threads
Threads are the only way of maintaining sanity and order in companies of any reasonable scale (30-50+). Otherwise, a channel degrades into a stream of seemingly unrelated posts.
It’s simple. Create a thread per topic you want to discuss. Ask for responses in that thread. Police this consistently.
The only exceptions are:
Very small channels. These essentially function as public DMs.
Channels that are designated for responding to events where a live stream of messages is desired. For example, a channel designated for employees to talk during a company All Hands.
This is the 80/20 payoff. No other tips I provide here will bear fruit unless you do this.
Semantic emoji 🎉
An emoji is defined as:
A small digital image or symbol used in electronic communication to convey an idea or feeling.
Semantic emoji are emoji that convey some larger message, based on common understand of what the emoji represents. It doesn’t really matter what emoji you use — just that you have clear agreement on what it means.
Here’s some of the most useful that I can think of:
📣 - an announcement.
🔴 - urgent action is required on this post. Optionally tag the folks that you require action from.
❔ - A question that isn’t blocking the person asking it from progressing.
❓- A question that is the person asking it from progressing, and should be answered quickly.
✅ - react with this when a question has been answered, and no further action is needed. It stops people needing to go into the thread to determine whether they need to help. It can also be used as a very basic task manager for ‘help’ channels: for example, #payroll-questions.
:headsup: - I can’t show the emoji, unfortunately. But use this to give people a heads-up that something is happening.
Semantic emoji are very powerful. You can scan a list of messages, and quickly gain context on what’s required. Is it urgent? Has it already been answered or decided? This saves time and mental energy.
Invest time in writing clear posts ✍️
A simple, but important tip. Many Slack posts are about requesting others to do something for you. Spend the extra couple of minutes writing a clear post that clearly highlights:
What you’d like them to do.
The timeframes you’d like them to do it on.
What you’ll do by default if they don’t respond, or any negative consequences.
Let’s see this in action. Here’s a poor post.
The moustachioed gentleman:
Doesn’t link to the doc in question, meaning folks have to scroll around and try and find it. A one time cost for the writer is now a O(feedback givers) cost.
Tags everyone in the channel, when it’s probably only relevant to a subset.
Doesn’t provide any timeframes on when they’d like feedback.
Let’s have a quiet word with him, and see if we can improve the situation.
Said gentleman now:
Uses markdown formatting to logically break up the post into sub-sections.
Highlights a sub-set of folks that he needs attention from, and tags others simply to keep them in the loop.
Uses emojis, because why not.
This is much clearer to read, took approximately 3 minutes to write, and will help others give you what you want.
Edit posts to provide ‘live’ updates
Slack allows you to edit posts, and for updates to instantly appear. This can be useful when you want to update others on the status of a live event.
For example, say you’re migrating from one system to the other over the space of a few hours. Create a Slack post that shows your rollout checklist, with all actions set to ❌. As you complete actions on your rollout, edit the post to set each one to ✅.
This allows others to follow along, and allows you to concentrate on the job at hand without needing to provide constant status updates.
Have ‘public’ and ‘private’ channels
Much like public and private code in modules, you can do the same with Slack channels.
‘Public’ channels are the public interface of the squad, where updates are shared and questions can be asked.
‘Private’ channels are the private interface of the squad, where they can share early ideas, coordinate between members, and share cat gifs.
Both channels are made public and are free to view by all. This means that teams can talk ‘privately in public’, without fear that others from outside will criticise early ideas, whilst maintaining organisational transparency.
You can do this with a naming convention: e.g. #growth and #growth-squad.
Use naming conventions for channels
As mentioned above, semantic meaning can be ascribed to channels based on naming conventions. Some other useful ones:
#tmp-project-zeus: use #tmp before the channel name to highlight that it is ephemeral. This might be for short lived projects.
#helpdesk-ask: use the #ask suffix to make it clear that this is a channel for asking questions and getting answers. These are commonly used for teams that service other teams such as People, IT, and so on.
#private-channel-priv: suffixing with #priv makes it clear to those in the channel that it is private.
Group channels together 🗂
Slack has recently added the ability to group channels together in the sidebar. This is really handy. The way I use them is that I group channels together based on topic. I then order the groups in priority order. This means whenever I want to look at Slack, I start at the top, and work down. Here’s my current groupings at work.
💡Handy tip for when you’re sick of reading: press Option+Click to collapse all groups down.
This technique has helped me be OK with leaving large chunks of Slack unread for a long time, knowing that I’m always looking at the highest priority things.
Best of the internet 🔗
Every week, I collate some of my favourite links to share. Found something cool, or built something great? Send it to me by replying to this email and I might include it in the next edition. 📧
BLUF stands for “bottom line up front”. It’s a technique that you can use to write more clearly by putting the most important details first. If you were interested in the tips I gave on writing clear posts, this one’s for you.
This is from an engineer that used to work at Monzo. He espouses many of the things I recommend here, but he wrote it a couple of years earlier 😄
In addition to being the most excellent engineer I’ve ever worked with, Phil is a great writer. Here, he takes us through the cost of the common io.Reader abstraction in Go. if you’re a performance nut, this is a great, quick dive into benchmarking and speeding up code. Make sure you read his other posts as well: they are gold.
As with last week, not particularly relevant to the topic discussed, but one of my favourite technical talks of recent times.
Andrej walks through the progress they’re making on full-self driving. The most interesting aspect to me is how they’ve built a system for continuous improvement through human labellers, and pushing newer models down to the cars to bootstrap knowledge on areas they’re less confident about.
I spent years working in a machine learning focused company at Ravelin, and I thought we were pretty good at it. What the Tesla folks are doing is next-level. Perhaps one day I’ll be able to afford one. 💰
That’s all from this week’s High Growth Engineering! If you enjoyed it, I’d really appreciate it if you could do one of the following:
Share it with a friend that would find it useful.
Subscribe: just enter your email below.
Want to have your say on what I write about next? Just hit reply.