ShipHero Communication Guidelines
This document is meant to describe guidelines for how we communicate with each other. It will describe the tools we use as well as how we use those tools. It will also give suggestions on best practices when communicating with others on the team. This is and will always be a work in progress, we will update it periodically as we use new tools and based on what we learn.
Summary (aka TL;DR)
- Use asynchronous communication over real-time by default.
- People’s speed of responsiveness is not a measure of their individual performance.
- It is a core goal as a company that in general people have frequent long stretches of uninterrupted time at work.
- Our most important conversations happen in Twist, it’s the only place where we assume everyone will have read over the course of a few days.
Why is this needed?
As a remote company, the way we communicate is different than it would be if we were all in an office. We don’t run into each other in the hallway or meet by the water cooler. When we do need something it’s hard to know if a person is busy or on a call. This is becoming more common and we’re part of a growing number of companies grappling with this issue. Getting interrupted while focusing on something has a heavy cost. That gets multiplied for example when a whole Slack channel gets interrupted. We’re trying to find a way to balance that with the cost of lack of communication, we don’t want people losing focus, but we also need to keep the lines of communication open.
The tools we use
In order to talk about communication we first must look at the tools we use to communicate. Each tool has its advantages and disadvantages and how we use them is has a big impact.
Slack is currently the most popular way in which we communicate. It also has the most potential to be disruptive. It’s great for short conversations with a limited group of people, but makes asynchronous conversations very hard to manage.
Twist works well in conversations that require multiple people and will go more in depth. Separating conversations into their own topic allows it to take place without interfering with other conversations and make it easy to add other people if needed. However for quick questions or short discussion it can feel like there’s too much overhead to use it.
Terrible for real time communication and not ideal for conversations with multiple people, but good for things that are only for one person and don’t need an immediate response.
Meet Used for video calling multiple people. Most of our daily/weekly team calls use Meet.
Engineering ticket system. Leaving comments and tagging people can be used to communicate with something working on the ticket.
Not frequently used, but phone/text messages can be used to get in touch with people if the matter is urgent.
Fax Not even once.
There are two important things to consider when communicating with team members:
- Minimize disruption
- Include all relevant people and give them a chance to respond
We’ll look at those one at a time.
Before you reach out to someone – using any of the tools, you should consider if it’s likely to be disrupting them. Each tool has different potential to do that, for example an email can be sent and read at any time, while a Slack DM will likely require the person to shift attention right away.
Here are some guidelines:
- Realistic Expectations: Don’t expect an immediate response unless it’s an emergency. If it is, state that in the message so the person knows that their attention is required.
- Be Direct: If you are trying to contact a specific person, do so directly based on their preference (more on that later). Don’t post in a public channel and mention them if the message is only meant for them.
- Use the right tool: If you need input from several people, use Twist. If a conversation starts in Slack suggest that it moves to Twist or a Hangout if needed. It not only makes it easier to have the conversation, but creates less noise for other people who may not be involved. Also, if there is a non urgent issue that needs to be looked at, create a Jira ticket. Don’t DM someone instead in the hopes of having them look at it right away.
- Use the right channel: There are topic specific channels in Slack. If your question is for a specific team, use the channel for that team. Consider who is in the channel and if that is the best place to post it.
- Avoid @here, @channel, @everyone: Anything that will notify multiple people at once should generally be avoided. Unless there is an emergency there’s no need to notify everyone in the channel.
- Use @ sparingly: If you are referencing a person, don’t tag them unless you need them to see the message and give input. For example if you are telling one person that another one took care of something, there’s no reason to tag the person. Tag people if you are trying to bring them into a conversation or need them to see something.
- Check Slack Status: If someone has a Slack status set, try to avoid DM or tagging them. Also note if there is a phone next to their name, that means they are on a Slack call.
- Use Do Not Disturb: If you want to temporarily stop notifications, use Do Not Disturb to pause notifications for a set amount of time. This can be overridden by the sender if the message is urgent.
- Set Communication Preferences: As part of your Slack profile, list how you prefer to be contacted for non urgent issues. Also list a phone number so you can be contacted in an emergency. For now, we’ll use the “Skype” field in the Slack profile for that purpose since we don’t use Skype anyway. When contacting someone directly, try to make note of their preference.
- Keep the conversation where it is: Other than moving to a more appropriate tool, for example Slack to Twist for more in depth discussions, try to keep the conversation where it is. If you want to comment on a Jira ticket, add a note to the ticket. If it does get moved (for example to a Twist thread), try to update the ticket with any conclusions.
- Use reactions: Instead of posting “OK” or “Thank You” in a public channel, use reactions instead.
- Close Conversations: Twist has a Close Thread feature that can be used to signal when a conclusion has been reached. When closing a thread, summarize what was decided so it can be easily referenced in the future.
- Don’t post away updates: There’s no need to post when you are going to lunch or running an errand. If a specific team lead feels it’s necessary it should be done in that team channel, not in General. This can also be accomplished by updating status instead of posting a message.
- Group questions together: If you have a bunch of questions for another person, instead of asking them in Slack as they come up, schedule a time with them where you can go over all the questions at once.
Include all relevant people and give them a chance to respond
The downside to minimizing disruptions is that it can often mean not getting input from all the relevant people. For example, if you DM someone it doesn’t give other team members a chance to be involved in a conversation. Even when there is a conversation in a public channel, it can create pressure on some team members to respond now or lose the chance to give their input.
Here are some guidelines to avoid that:
- Involve all the relevant people: If you are having a conversation with one person directly, consider if the conversation would be better had in public so others can get involved. That can be in the form of a Hangout, a Twist thread or even Slack. Someone not being available at the current time, should never be a reason to exclude them from a decision. If someone is out that should be considered before making a decision. If you do have a one on one discussion and come to a conclusion – consider opening the conversation up to others.
- Use the right tool: As has been discussed, if you need input from multiple people about a specific topic, try to avoid using Slack. Twist allows the conversation to happen asynchronously and gives everyone a chance to participate.
- Allow time for conversation: Give enough time for all people to give their input without them feeling pressure to respond right now. If it’s time sensitive, call that out. For example, “we need to decide on this by tomorrow morning”. This way people know what is expected and can feel comfortable that their voice will be heard.
- Come to a conclusion: If you start a thread, you should also end it. When a decision is made, document the decision. That doesn’t mean that people can’t comment, but it makes it clear where things stand.
- Set a status to let people know if you are not available.
- Use Do Not Disturb to avoid all notifications (other than urgent ones).
- Use the “All Unreads” section to quickly review your unread messages.
- Customize your notification preferences to specify how you want to be notified.
- Snooze notifications when you do not want to be disturbed
- Use the Time Off feature if you are away, that let’s people know not to expect a response until you are back.
- Use Email notifications to get a summary of activity instead of desktop notifications which can be disruptive.
- Close conversations when they are done.
- Add Channels for different teams or topics.
- Customize your notification preferences to specify how you want to be notified.
- When creating a message or replying to one, notify only the people who are relevant to the conversation. You can always add people later if needed.
Did you get all that? Want to work with us even though we don’t use Fax?