Cannot agree more than what you said, especially for the “knowledge sharing” part. Not many manage to see the interplay between “teamwork” and “knowledge sharing” that takes the work of software devs to the next step.
I am a big fan of seeking methods how to share knowledge, and have been experimenting with methods to facilitate this. Using analogies is a very effective way and so I have been working on this method that helps you harness analogies for knowledge sharing:
Your feedback is more than welcome!