This is a part of #altswe series, where I describe ideas for an alternative approach to software engineering.

I've been a part of teams between 3 and around 20 software engineers; in companies between 3 and thousands of employees. I have used corporate messengers, IRC, Hangouts, Slack and many other IM tools. After all of that, I think they are generally counterproductive.

IM is just not good

IMs occupy this weird spot between face to face conversation and a nice well-written email.

Face to face conversation including video/phone-calls) has many strengths: it is instant, fluid, highly interactive, with high-bandwidth of information exchange including non-verbal ones. Its first major weakness is synchronicity: it has to be scheduled, everyone has to participate at the same time. It does not scale because every message is a broadcast message in a shared communication channel. That is why video-calls and meetings should be kept small – for a narrowly focused group of people. The second weakness is that conversations are naturally transient. People say many things, then move on and forget. There is no easy and natural way to search through what was said. People do try to solve that problem: keep recordings, meeting notes, etc. but in my opinion, it's all high-maintenance bandaid.

Email is like the opposite of the face to face communication. It performs best where the other one falls short. It is asynchronous. Due to this, it scales much better. Everyone can participate at their own pace and schedule. It is not necessarily slow, but it gives times to think and prepare the message. This again helps to communicate at scale. It is also naturally persistent – everybody gets their own personal copy. With a little bit of software help (mailing-lists, filters, etc.) all email communication can well-targeted, persistent and searchable.

Ignoring all technical warts, email is single-handed my favorite way of communication. To work well, in a bigger group, it requires some infrastructure and preparation, and possibly also maintaining a culture of mindful and efficient communication.

So what about IMs? In short... they combine the worst of both worlds while having the strength of none of them.

In theory, IMs are supposed to be fast (“instant”), but in practice typing takes enough time, to make instant messages much slower than simply talking. Ironically, the expectation of a fast response forces everyone to write short and rather poorly structured short phrases that are hard to understand, especially out of the context of current circumstances.

In theory, IM communication is persistent, but in practice because of lack of structure, intertwined topics, and insufficient metadata, what have been persisted is mostly useless. Searching through the history of a Slack room is difficult, and rarely useful.

IMs don't scale. While with email, every subject is akin to an ad-hoc “room”, and the subjects naturally “fade away”, with IMs rooms are much harder to manage. There is always too many rooms and in each room too many participants. Too many messages. Too many unread message counters. You try to coupe by “muting”, but then you miss messages. Argh... It's a nightmare.

There is also plenty of more or less subtle psychological problems. Mostly combinations of distractions, feeling of being “always online” and “implicit expectation of fast response”. I mean... just search online for rants about Slack.

Too many communication channels

IMs are just one more thing that the developer has to keep a track of. In my opinion, “less is more”, and being a needless source of distraction and mental effort is a good enough reason to stop using something.

Conclusion

If it was up to me, I would just not use IM at all. Email would be the primary channel of communication, with face to face conversations / video-calls being very liberally used when it makes sense.

I would use persistent, searchable mailing-list for team communication, and possibly other software and services to get as much as possible from strengths of email. Maybe Topicbox or some other solutions that are email-based.

Some conscious effort would be put into helping everyone efficiently manage email (filter rules, etc) and building a culture of efficient communication via emails.

I believe this would play well with other ways I'd like to organize the teamwork: with the general focus on agility, asynchronous, independence and ownership. But more on that another time.

Edit: Featured on Hacker News front page

I've noticed this post got featured on HN, so I'm just going to link to my comment addressing some common responses

I've also received recommendation to give Twist – asynchronous IM a try.