On Migrating to Microsoft Teams from Slack

Fernando De Freitas
10 min readOct 30, 2023

--

Software engineers have always had a preference for Slack over classic enterprise communication tools, be it other messaging clients or even just plain email.

But not every company uses Slack, mainly because the biggest corporate email providers come with features like cloud storage and their own set of communication and productivity tools bundled into them. Meet or rather… Spaces? (included with Google Workspace) and Teams (included with Office 365) being the top 2.

And even though Slack is not that expensive in the greater scheme of things, its costs can snowball when headcount grows massively and it’s difficult to argue against the tool that’s already available for free.

Me: Mom, can we stop at McDonald’s? Mom: We have food at home. Food at home: Boiled egg inside a slice of white bread.
https://knowyourmeme.com/memes/we-have-food-at-home

So, let’s say you’ve just moved to a new company where they only use Microsoft Teams, or your current one has decided to migrate to it. A couple of questions might cross your mind:

How do they compare?

Which features are missing?

Which features are you gaining?

Let’s try and answer some of them.

Microsoft Teams has a bad rap, and to be honest it’s put some serious sweat and blood to earn it over time, not many companies could have ruined the dominance Skype had back then before they bought it, jk, they’re the same people who dominated the market with MSN Messenger and also let it slip out of their fingers.

(BTW the Skype call sounds still haunt Teams calls)

Jokes aside, it’s improved greatly in the last couple of years. I imagine due to the rapid growth of remote working, the pandemic, etc; forcing them to catch up with Slack and the competition. I assume throwing the towel not being an option as being part of Office365 and their ever increasing market share make it kind of a “too big to fail” situation.

That being said, they’re still awful at handling rolling out new features, and in many cases the whole Office365 suite looks a bit crowded, having more than one product available to fulfil the same use cases, making it a bit awkward to integrate some of those products into your Microsoft Teams workflow.

(Bear with me, I swear I’ll get to the pros of it in a second)

One last criticism I have to say about Microsoft Teams is that they ironically seem to have a bad Marketing team. As you’ll see later, Teams has many Slack features, and arguably had them before Slack. But Slack has been better at marketing theirs (think Huddles for example).

It’s also worth pointing out that Slack has one of the best Marketing teams in the planet, specially when targeting engineers. So the bar is really high.

Ok, now let’s get to the point of this post.

Main Differences

The main difference between Slack and Microsoft Teams is the way comms are structured:

Slack

Only has the concept of DMs and channels, which can be public or private, any DM can be turned into a private channel too, with some options for keeping its full or partial chat history.

Teams

Has the concept of Chats and Teams (as you’ll notice clearly separated in its sidebar):

DMs and Meeting chats

These are more volatile conversations, aside from recurring meetings (when scheduled correctly) these chats are not meant to be used long term and usually are for very specific conversations and then you forget about them.

Teams and channels

These are meant to contain more persistent, long term interactions.

A team is a logical grouping of people (might be for a literal team or a long-term project)

Channels exist within a given team and are meant to be used for a specific topic. A common use in engineering teams is to have separate frontend and backend channels for example, to avoid creating too much noise in a single channel and make long conversations easier to follow.

Cloud storage

File storage and handling is not one of Slack’s core features. And it behaves more like a read-only bucket for most files.

Teams, on the other hand, leverages Sharepoint nodes heavily. With Teams, channels and even recurring meetings having essentially their own Sharepoint node*. So file sharing and manipulation is as eas as using OneDrive.

*Not literally their own node each, more like subdirectories, but very close in practice.

Workflow equivalents

I’m going to try and list how a given Slack feature or workflow maps to a Teams feature, or workarounds to replicate them.

Some of them will be obvious but trying to write them down for completeness.

DMs

Just like in Slack. You can of course start a DM chat with more than one person without having to create a channel.

Slack limits DMs to up to 9 people before forcing you to turn it into a private channel. Teams apparently supports up to 250 people in a DM group.

In Teams, a DM chat is like a pseudo-channel in itself, has a tab for files shared in the chat and allows adding some extra apps as tabs (more limited options than in a channel, and apps available depend on your company).

Regarding some basic functionality, there’s a button to add more people and also for you to leave the chat if it’s not relevant anymore.

Menu with option to “Add people” or “Leave”.

You can also give a name to the DM group to make it easier to find later.

Popup to set a name to DM group chat.

Huddles

The replacement for Huddles is of course just a call. Teams gives you the option of start one with just audio as a separate button (see previous screenshots).

This is the most glaring example of Slack’s Marketing team being amazing, they took something very basic, relabelled it, added some nice backgrounds, elevator music, and sold it pretty well.

I guess no one will argue Teams has had this feature before Slack.

Channels

The main difference with Slack, as mentioned above, is that a channel exists within a Team.

There’s also the option of setting some channels as hidden by default to avoid crowding the channel list for people not directly involved in them.

Channels work almost the same as in Slack. But Teams provides tabs, where you can add a number of different apps to a channel, including Miro, and there’s also a generic website tab to render whatever you need, that’s not yet fully integrated with Teams.

Public channels

As in Slack, public channels can be created, but they exist within a Team and members are not controlled per channel.

Any person who’s a member of a given Team automatically has access to all public channels in the Team, and they can chose to hide or mute specific channels not relevant to them.

Private channels

As in Slack, private channels can be created. Essentially same behaviour.

Shared channels

This is one of the most interesting paradigm shifts Teams introduces when coming from Slack.

This feature is similar to Slack Connect. Although Slack’s feature is focused on working with external organisations.

Shared channels in Teams also overlaps in a way with Slack’s “User Groups”.

It provides the advantage of allowing you to add whole teams instead of just individuals to them. Which makes it easier to onboard new people and teams, instead of manually adding people one by one (or sending them an invite link so they join, one by one). And makes it much easier to keep everything tidy over time, people not too crowded with channels, channels not too crowded with people.

As far as I know, so far, this is the only way to do this kind of bulk operation, please let me know if I’m wrong.

This is also an alternative to creating a public Team with public channels for people from different squads/groups/etc to collaborate on a given topic.

Sadly this only partially papers over the missing “User Groups” feature from Slack. There will always be some Team or private channel where you need to add members manually too.

For more info see:

Huddles in channels

I don’t know of many companies/teams/people who widely use the Huddles feature in a channel, but if it’s part of your usual workflow, Teams got you covered.

Its channels have a button to start a meeting immediately or schedule one (which will turn into a meeting in the channel calendar).

These are often called “Channel meetings” and they behave differently to regular meetings, having some pros and cons of their own that I won’t get into this time around (maybe in the future I’ll update this post).

Please note: private channels don’t support scheduling of meetings.

Adding Bookmarks to channels

There’s not a simple 1:1 mapping for this. But the options available seem ot offer a more feature-rich experience than Slack’s feature.

We can use the following tabs to replicate that functionality (in no particular order):

  • OneNote.
  • Sharepoint.
  • Wiki.

Actions

Saving Messages and Reminders

Teams allows you to save messages too, but it doesn’t have the Reminder feature built in.

There’s a separate action to “Create a Task” from the message. Less seamless and a couple extra clicks but once created the reminders themselves provide more features than the Slack one. Here’s where the “Tasks by Planner and To Do” app kicks in.

It provides a number of amazing features, even some Trello-like functionality and nice stats and analytics when used in conjunction with Planner projects.

For more info go to Use the Tasks app in Teams — Microsoft Support.

There are also these really good YouTube tutorials from Leila Gharani on those tools.

(I might also write a post about this in the future)

Teams Context Menu including “Create task” and “Save message” options
Teams’ Context Menu for messages.

To find them later click on your face/initials at the top right of the app.

Teams’ Menu with “Saved” section
Teams’ Menu with “Saved” section.

Scheduling messages

Teams also supports Scheduling messages, although its UX is not as smooth as Slack’s.

Awkwardly it’s not clearly visible in the UI, and you need to:

  • Right click on the “Send” button,
  • Set your desired day and time,
  • Click Continue,
  • Click the Send button.
  • Done, it’s scheduled.

You can always go back and edit the message, the schedule or delete it before it’s sent.

Team and channel taxonomy

There are only two hard things in Computer Science: cache invalidation and naming things.

— Phil Karlton

See TwoHardThings by Martin Fowler.

Given how difficult it is to name stuff, here's a proposal I came up with on how to structure Team and channel names. In my current company we use the concept of domains, depending on how complex your company structure is you’ll find some of this not necessary.

For Teams

At team level we have very limited options and can only do drag and drop to reorder them, choose to hide them, or just leave a given team altogether.

Suggestion

<project_code> <domain_name> [<team_name>]

Why?

Having a common naming pattern for teams can help us find the ones we need quickly.

For Channels

For channels, until Microsoft Teams implements something similar to Slack's sidebar "Sections" feature, we need something to help us organise our pile of Pinned channels.

Suggestion

One suggestion is that we use the last segment of the MS Teams team name where the channel is being created to help with this.

Why?

So it's easier to organise pinned channels and avoid name clashes.

Examples

Let’s see how all the above would look with some imaginary project and domains:

Project: Mythic Quest.

Domains: Payments, Platform.

Teams: Tempest, Psyducks

# Project-level team
- MQ
- General
- Announcements
- Incidents
# Domain-level domain 1
- MQ Payments
- MQ Payments General
- MQ Payments Refunds
# Domain-level team 1
- MQ Payments Tempest
- Tempest General
- Tempest Backend
- Tempest Frontend
# Domain-level domain 2
- MQ Platform
- MQ Platform General
- (Shared channel) MQ Platform Support
# Domain-level team 2
- MQ Payments Psyducks
- Psyducks General
- Psyducks Backend
- Psyducks Frontend

# Your Pinned channels
- General
- MQ Payments General
- MQ Platform Support
- Tempest Backend
- Psyducks Backend

This way it’s much easier to keep our channels organised and remember which channel is for what.

In the example above every team has a General channel. If each was just called “General” then you’d have a hard time figuring out which one is which at a glance (granted, the Team name is rendered under the channel name, but the point stands).

One last thing before wrapping up.

Text Formatting

Teams supports most of the general Markdown features like headers, quotes, bold, italic, strikethrough, list, links, code blocks and code snippets (including language highlighting).

PS: For multi-line code blocks you need to type ``` and hit Space for it to kick in.

I just wanted to share this tip, because it took me months to figure this one out. Until then I was only doing single line code snippets or creating the equivalent of Slack snippets, only because that extra Space key hit being required.

For more info see: Use Markdown formatting in Microsoft Teams — Microsoft Support.

That was all. Just wanted to share what I’ve learnt so far in my own journey to get used to Teams. Hope it’s useful for other people too and maybe helps you get along better with Teams.

In the end it’s a really cool tool and all in all Microsoft seems to be getting close to really nailing it regarding integration with other products as well.

--

--

Fernando De Freitas

Principal Software Engineer and Engineering Manager. Specialty Coffee Enthusiast. I write about software development, management and other stuff occasionally.