# Knowledge Sharing?
11 Apr 2023
“  Hard times create strong men, strong men create good times, good times create weak men, and weak men create hard times.  ”
G. Michael Hopf
One of the most challenging things in software development is setting up and supporting information pipelines/flows. How people communicate is the key to any successful product and team. By success, I mean not only the profit that you bring to the company, but also how much enjoyment you derive from your work, and how much easier you make life for yourself and your teammates. If you think that profit is the only thing that matters, then I guess you would not enjoy the rest of this article. It's okay. It's okay to be a soulless bastard. I have been working as a software developer for more than 6 years, I worked in different types of companies and teams in terms of size and scale and how those teams operate. What is common about those companies/teams is that they absolutely sucked at knowledge sharing, or even at establishing sources of knowledge and rules of how to access the information required for the work. I have gathered all the hideous, horrible, and just the worst practices of knowledge sharing that I have experienced in my career. I will try to share them and suggest some alternatives. Whether you would agree or disagree with me, it doesn't change the fact that I am right. Let's start.
## 1. Meetings It's the worst way to share knowledge, it's a crime against humanity. In each team, we have very few "experts" who possess the most knowledge about the systems and how everything is coordinated in the messy architecture. Usually, those experts are forced by management to conduct knowledge sharing sessions once per week, two weeks, or just occasionally, and they always suggest that this activity should be done by gathering people together in one place (physical or virtual) at one time. Moreover, those experts agree with them, as it's the laziest and easiest way to do the job. It also allows them to maintain their importance and safeguard their sacred knowledge, and of course, it does not make other people less dependent on them. It sounds counterintuitive, as it's supposed to be knowledge sharing, right? How can it be so ineffective? Let me explain in more details. Those knowledge sharing sessions are usually recorded, so that we can return to them if we forgot something. And it sounds really good, doesn't it? Well... have you ever listened to those recordings? I did it once just to make an experiment... Let me share my obervations. So, we were sitting in a session that lasted 1 hour and a half. 7 people in one Zoom room, quick math shows that the meeting cost 10 and a half hours. The day after the session, I decided to take notes by listening to the recording. It took me 3 hours to extract all the information, simply because I had to rewind many times to the important moments, and it's not that easy, since in the video you cannot search by keywords, like you would do easily in the text. Especially if the presenter makes huge pauses and there are a lot of distractions during the session. Then I decided to read all the notes that I took... You know how much time it took me to read them? 3 minutes! How much time do you need to sit down and write a text that's 3 minutes long? I would estimate it at a maximum of 30 minutes. So, 10.5 hours + 3 hours = 13.5 hours versus 30 minutes. So yeah, meetings are a very effective way to share knowledge, aren't they? For me, it's like spitting in your face and saying, "You know what? I could write this information in about 15-30 minutes. But I would prefer to spend everyone's time and just show how important I am, and why it's cool to listen to me." But do I really care about the company's time and being effective? Of course not! If the company does not care, why the f*** should I? But it's not about being efficient, it's about enjoying the process. Do you think anyone asked any questions at the end of the session? I'm pretty sure half of the team was falling asleep and just wanted it to be finished already. Do you think anyone after that would spend more hours to rewatch the session? At best, you may remember only 5-10% of all the shared information after a week or so. What do you do when you want to clarify something? That's right, you're going to ask that expert again and again the same questions. Do you really like to be dependent on people, or you would like to have a quick access to the information you need? What should you do as a team? I think you should demand tutorials, manuals in the written format on different topics from those experts. It's not easy, you have to be brave, but it's the only way to make your job more sustainable.
## 2. Private Slack Messages/One on One Calls When you have a question or need some clarification, you usually ask around to find out who can help. Then, you move the conversation to a private channel with that person in order to avoid distracting others, which is the right thing to do. But, what if the information that you discussed privately could be useful for other people in the future? And what if you also need that information again in the future? Is it enjoyable to search through tons of messages or share those messages with someone? I don't think so. Furthermore, what if during your private discussion, you need clarification from someone else? Or what if someone could have corrected something in that private conversation? Is this the best approach to ask questions and get accurate answers? I highly doubt it. What's the alternative? I am convinced that every team must have some sort of private StackOverflow just for their team or company (actually such a thing exists). But you can build or use similar tools. Imagine that whenever you have a question and you can ask it there. Imagine you can even do it anonymously, so you can feel more free, open and less stressed. And anyone can answer your questions, or correct something. Now you would get a collection of easily accessible answers or series of disscussions on specific questions or topics. You can easily share links to those discussions, and revisit them whenever needed. And again, you will be less and less dependant on other people. Also it would make your life easier. Whenever a newcommer comes to you with a question, there is a big chance that question was already addressed by someone in the past. All you need to do is share a link.
## 3. Documentation That's right. Those dead documents which are outdated and make no sense, nobody really needs or reads them. They are too formal, too boring, too difficult to read and maintain. Documentation must be treated not as a goal but rather as a tool. What's the alternative? I would suggest a blog or just an archive with rather short tutorials or manuals with real examples and written for humans, not robots. - What should I consider when I create a database migration? - Well, let's find a manual! - What should I consider when I add a new endpoint? - Well, let's read a tutorial that includes real examples with real code! - How can I deploy new version on stage? - Let's find out in a tutorial and just follow the steps! - How can I run and test the app locally? - Let's find a manual on that! You got the idea. You need practical manuals, and if you find some inaccuracies and errors in those manuals, you can easily fix them or ask an advice in a separate thread in StackOverflow, giving everyone a chance to help you.
## Summary A happier person is a freer person. If you eliminate meetings, slack communication, it would create a foundation that prevents monopolies of knowledge keepers. They just cannot exist in such environment. Is it difficult? Hell Yeah! Is it worth it? Totally!
[Reddit Comments](https://www.reddit.com/user/gyen/comments/12j1wh4/3_sins_of_knowledge_sharing/) / [Medium Comments](https://medium.com/@guseynism/3-sins-of-knowledge-sharing-7df09df466d8)