Are you facing the following situations in your day to day work:
  1. You have a critical release and your lead back end developer is on emergency leave.
  2. The only QA in the team needs to test everything right from feature testing, integration testing, regression testing, production testing and automate the tests and every sprint he/she gets only 1 or 2 days for completing testing.
  3. You are making release for testing one day before scrum demo and worst case in the same day as demo.
  4. You have back to back customer demos planed but your only business analyst has already put paper and its hard to keep him/her still motivated to give 100% output due to longer notice period.
  5. There is no time for creating detail documents and sharing knowledge due to strict delivery time lines.
  6. Getting necessary and timely help from consultants who may work with the team for only a limited period of time.

If your answer is yes for few or all of the above, good news you are not alone. I would like to highlight few key aspects which can be considered for mitigating the knowledge management risk in agile development process by building a systematic knowledge management system.
Why do we need knowledge management system in place when we follow scrum?
The scrum guide recommends http://www.scrumguides.org/scrum-guide.htmlscrum teams should be cross functional and self organizing, capable of achieve scrum goal independently within the team. But in reality can everyone is enabled to perform any task within the scrum team assuming we have people having different skill sets is possible or just a dream? When we say any task its just any task, like front end developer should be able to do back end coding, provide design feedback, write automation tests so and so on. In ideal world this is just close to impossible. In typical scrum teams people still work together in building separate blocks (front end/back end/database) in silo and finally do integration and makes it ready for testing and release by integrating all blocks. All is well when everyone knows what to do and everyone is available all the time otherwise we all know what can happen and that is reality. All the time goal is to deliver and risk goes in back seat. Generally no one compromise on delivery but the team needs to go through lots of stress by putting unnecessary extra hours/weekends which is just a routine for many of us. Lets explore more on knowledge management and see if that can help us to overcome some of the challenges mentioned above.

Knowledge management system is the process of creating, sharing, using and managing knowledge inside an organization. A solid knowledge management system can help employees, customer as well as business growth. The techniques of learning and knowledge management are the core of modern software development processes, known as knowledge driven, heavily dependent on team interactions and knowledge sharing activities within the organization. Detail documentation and processes are key part of waterfall model of software development, but in agile world we are moving to light weight and just necessary documentation version of the same. Most of the cases knowledge comes from skills, ideas and experiences reside in human brain and used by the specific specialized person only in need basis. This kind of knowledge is difficult to transfer or share until and unless we have a system and process that facilitating the same, in place.

How to create knowledge management system:
  • Identify and link of organization goal and culture into the kind of knowledge repository you would like to build.
  • Identify the of types of knowledge to be part of the system - technical/domain/process/best practices
  • Build user to skill database - who knows what's, years of experience, area of interest to learn etc.
  • Build project to technology/domain database
  • Build interfaces for sharing and usage of knowledge.
  • Identify infrastructure and tools/software needs

How to roll out knowledge management process: Once knowledge management system is in place, next important step is to roll out the process for sharing and using the same. Here are some ways of doing it:
  • Encourage knowledge sharing organization wide by providing common platform like intranet/blogs/discussion forums
  • Arrange regular tech talks and provide opportunity to employees to share and learn from the same.
  • Arrange internal/external training sessions (technical/non technical)
  • Reward/recognize those who are sharing knowledge frequently
  • Create back up resource for each running project with following responsibilities:
- Promote working in peer programming/peer testing mode with flexibility of selecting the like-minded buddy resource.
- Primary resource should be responsible for ownership and backup resource should be responsible for enhancing documentation.
- Each member in the scrum team should be ready to play two roles - enable his/her backup resource and prepare him/herself as a backup for someone else. In this way everyone will get equal chances for contributing to project as well as leaning new skill/technology.
  • Arrange cross team review sessions for both development and testing work
  • Arrange cross team exploratory testing sessions.
  • Record important meetings/knowledge sharing sessions which can be accessible later via knowledge management system.
I just added few areas I felt can be beneficial for creating a fully equipped cross functional agile team. It might not so easy as I wrote above, because it needs a open mindset and flexibility to share knowledge and workload between scrum teams. Sometime company policy may be bottle neck or sometime people's attitude to accept the way we work. But end of the day, if we see the long-time benefit we should be able to overcome the initial heck-ups. Feel free to share your experience on the same line so that we all can learn from each other.