Recently I came across this tweet from 2015 that sparked some interesting replies on how to manage knowledge in software development. You can read the entire conversation on Twitter.
Survey: How do you manage knowledge in your company / projects / for yourself?
@paulstovell: we talk to each other :)
@ploeh: Talking is nice, but is biased, interruptive, doesn’t scale, and doesn’t retain knowledge.
@nikosbaxevanis: Also talking about technical stuff doesn’t have a URL! :)
@bradwilson: It does if you do it in a chat room.
@ploeh: Not saying that taling can’t work; just saying that I’ve seen it not working. My preference for communicating knowledge is describe in point 8 here http://bit.ly/1BK2mXP. Also this: basing knowledge sharing on talking leads to meetings.
@bradwilson: My problem with “recording” information is that it’s out of date the almost immed. It’s fighting tribal knowledge vs. useless knowledge, usually. The “expense” of “talking” is dramatically reduced by team rooms / chat rooms.
@ploeh: AFAICT, this discussion shows that the correct answer is http://bit.ly/1BK4qiv The point being that the original question is flawed in its assumptions (sorry). Knowledge is personal, and can’t be managed.
@cyberzeddk: we do internal sessions every friday to inspire people, if we do complex parts we make sure to pair…that’s the easy ones
Today, I try to create a wiki page in Azure DevOps as an entry point for every software project my team is working on. This may include information about external dependencies like customer systems, VPN access or credentials’ location and anything else a developer proficient with the project’s technology stack might need to know. I found that tactical use of face-to-face conversations, VOIP calls and, to a lesser extent, chat sessions are still very efficient ways to clarify complex issues.
Other than that I agree with Mark on the importance of documenting your reasoning. If you create self-documenting code you are facilitating the maintenance and the dissemination of knowledge stored in that codebase, which is part of the definition of knowledge management.