In my last article I showed that automation is more beneficial than documentation and if there is no way to avoid documents, wiki pages are a good way to keep them. In this article I will continue with two more techniques we use to share knowledge.
7. Version control
We keep our code in Git repositories. This allows us to keep track of all code changes history. You can always figure out which developer or a pair of developers implemented a specific code. By looking at commit messages or branch names you can often find out why a given code change was made. This information is available even if a programmer who implemented it is not present or these code changes were done several months ago, and the people who implemented this code don't remember it anymore. Comments in code may be sometimes useful to explain why the code was implemented in a specific way, but they can get deleted or not make any sense after some time, same as any other documentation.
Here is a sample snapshot of a Git history displayed by Gitx:

8. Whole team
The practices I mentioned so far help mostly with sharing information about a current state of a code and implemented functionality.
You often need to know why certain design or architecture decisions have been made and why other solutions were rejected.
We ensure that this knowledge is shared by having a transparent environment.
All team members attend user story workshops. This guarantees that everyone is aware of customer's requirements, their priorities and reasons behind these requirements.
We also plan our work as a whole team at iteration planning meetings. Every team member understands what we want to achieve by the end of an iteration. We commit to the same goal together and we take an equal responsibility.
All architecture decisions and most of design decisions are discussed during "mob (whole team) design sessions". We gather as a whole team, we present the problem and then we brainstorm possible solutions and their consequences. This guarantees that everyone is aware, why the given decision was made and why it was the best option.
