Managing knowledge, both explicit (objective) and tacit (personal), is the key to software development. In Agile projects, management is facilitated by cross-functional, rather than role-based, teams, and daily Scrum meetings, retrospectives, pair programming and rotation and release iteration.
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Knowledge Management in Agile Projects
1. • Cognizant 20-20 Insights
Knowledge Management
in Agile Projects
Executive Summary but the knowledge held by the employees and
the development culture of an organization.
Software development is knowledge-intensive
Companies developing information systems
work and the main challenge is how to manage
have failed to learn effective means for problem
this knowledge. The Agile manifesto advocates
solving to such an extent that they have
“individuals and interaction over process and
learned to fail. The key drivers for companies
tools,” and hence it requires even more attention
to manage knowledge effectively in software
to manage knowledge in Agile projects.
development are:
This paper demarcates the types of knowledge
involved in the lifecycle of software projects and
• Reducing the effort spent in acquiring
required knowledge for project execution.
describes the mechanisms to effectively manage
them in Agile software development. It then • Improving reusability (i.e., avoiding
argues for the need to scale Agile development reinvention).
strategies in knowledge management to address • Reducing dependency on individuals for
the full delivery process. project success.
Knowledge Management in • Improving the overall team’s productivity.
Software Development Knowledge Types
Knowledge management is “a method that Typically, knowledge can be classified into two
simplifies the process of sharing, distribut- types, explicit and tacit.
ing, creating, capturing and understanding the
company knowledge.”1 Knowledge itself “is a fluid Explicit knowledge is knowledge that is articulable
mix of framed experience, values, contextual and transmittable in formal, systematic language.
information and expert insight that provide a This can include grammatical statements, math-
framework for evaluation and incorporating new ematical expressions, specifications, manuals
experience and new information.”2 Furthermore, and so forth. Such knowledge can be transmitted
“knowledge passes through different modes of formally among individuals with ease.
conversion, which makes the knowledge more
refined and spreads it across different layers in Tacit knowledge is personal and context-specific,
an organization.”3 and is therefore difficult to formalize and commu-
nicate. It is embedded in individual experience and
The main assets of software development are not involves intangible factors such as personal belief,
manufacturing plants, buildings and machines perspectives and value systems. Tacit knowledge
cognizant 20-20 insights | january 2012
2. is difficult to communicate and share in an organi- projects? What should be the relative levels of
zation and thus must be converted into words or focus on explicit knowledge vs. tacit knowledge?
other forms of explicit knowledge. This paper will address these queries.
The Knowledge Lifecycle in Knowledge Management in Traditional
Software Projects Software Development
The knowledge life cycle in software projects can Traditional software development approaches
be described in five steps. organize the required knowledge sharing based
on different roles following a Tayloristic4 mind-set:
1. Gather available explicit knowledge. people involved in the development process are
Generally, this happens during the start of assigned specific roles (e.g., business analyst,
the project whereby available knowledge is software architect, lead designer, programmer,
captured and made available in knowledge tester, etc.) that are associated with specific
bases, marketing, different departments, etc. stages in the development process (requirements
2. Personalize explicit knowledge. The gathered analysis, high-level design, low-level design,
information/knowledge needs to be converted coding, testing, etc.).
by the individuals involved in the projects into
Limitations
tacit knowledge.
Knowledge sharing between each of the stages
3. Application of the acquired knowledge.
is primarily document based (i.e., through explicit
Converted tacit knowledge will be applied to
knowledge). One role produces a document (e.g.,
the project execution.
requirements specifications, design documents,
4. Learning from the project. There could be source code, test plans, etc.) and hands it off to
some learning, innovations or new methods or the people responsible for the next stage in the
techniques uncovered during the execution of development process.
the project which will be in the form of tacit
knowledge. Assuming merely 5% of relevant information is
lost in each transfer between the stages, nearly
5. Convert to explicit knowledge. The learning
a quarter of the information does not reach the
needs to be converted into explicit knowledge
coder (who has to encode the domain knowledge
and added to the repository for future
into software) in a Tayloristic development
reference.
process. The results are even worse if more than
There are many questions related to knowledge 5% is lost in each stage.
management, especially in Agile projects: How
Another problem resulting from the long commu-
different is it to manage knowledge in Agile
nication chains in Tayloristic software organiza-
tions is a tendency to over-document. Informa-
The Knowledge Circle tion is useful only when it is new to the receiver;
providing a known fact to somebody is old, boring
news. In fact, such repetition makes it more
difficult to find the relevant “gems” of information
1
Convert the in a document and hence increases knowledge
Learning to
Available transfer costs. People involved in the early stages
Explicit
5 Knowledge
Explicit
Knowledge
of software development do not (and cannot)
for Future know what information is already known to the
Reference
coders. Relevance of information is completely
Learning from
2 subjective in the sense that it depends on the
Personalize the
the Project in the Explicit Knowledge
Form of Tacit
current knowledge of the information receiver.
i.e., Convert to
Knowledge Tacit Knowledge
Application Knowledge Management in
of Acquired
Knowledge to Agile Software Development
4 Project Execution
Agile software development relies on direct com-
3 munication — i.e., synchronized and osmotic com-
munications between customers and developers
for knowledge sharing. This reduces the informa-
Figure 1 tion loss due to long communication chains and
cognizant 20-20 insights 2
3. it ensures that only questions that the developer Pair programming involves two developers
(who writes the code) has are answered. working in front of a single computer designing,
coding and testing the software together. It is a
Transferring and sharing required knowledge in a very social process characterized by informal and
team is a difficult task that in the traditional model spontaneous communications. During a pair pro-
was tackled by introducing rigorous processes gramming session, knowledge of various kinds,
and more and more structured and formalized some explicit but mostly tacit, is shared between
representations. While there are merits to that the pair. This includes task-related knowledge,
approach, the recent trend towards Agile software contextual knowledge and social resources.
processes focuses on a less formal, “fuzzier”
style. It replaces “logical” representations by • Examples of task-related knowledge include
approximations – approximations that are “good system knowledge, coding convention, design
enough” for humans to proceed with develop- practices, technology knowledge and tool
ment but rely on the sharing of tacit knowledge usage tricks.
to actually do so. • Contextual knowledge is knowledge by which
facts are interpreted and used. For instance,
In Agile processes, knowledge sharing is knowing from past experiences or “war
encouraged by several practices: stories” whether or not to use a particular
• Release and iteration planning. design pattern in different coding scenarios.
• Pair programming and pair rotation. • Examples of social resources include personal
contacts and referrals. Developers tend not to
• Daily Scrum meetings.
document these types of knowledge for many
• Cross-functional teams. reasons, such as being overburdened with
other tasks or deeming what they know to
• Retrospectives.
be irrelevant or of no interest to others. Such
Release and iteration planning are used to share knowledge is often only uncovered via informal
knowledge on system requirements and the and casual conversation.
business domain between on-site customers
and developers. In a release planning meeting The social nature of pair programming make it
arranged at the beginning of a project, the project a great facilitator for eliciting and sharing tacit
timeline is broken down into small development knowledge. To ensure knowledge shared among a
iterations and releases. pair is accessible to the entire team, it is recom-
mended to rotate pairs from time to time. As a
At the beginning of an iteration (a short, side effect of tapping tacit knowledge, the social
time-boxed development effort that runs usually nature of pair programming helps to create and
two to six weeks), the development team and the strengthen networks of personal relationships
customer representatives discuss what should within a team, and to nurture an environment
be done in the next few weeks. The discussions of trust, reciprocity, shared norms and values.
refine the initial requirements to a level that the These are critical to sustain an ongoing culture of
development team is able to estimate the develop- knowledge sharing.
ment effort for each feature. Further requirement
details are discussed with on-site customer repre- While pair programming sessions facilitate com-
sentatives while a developer actually works on the munication within a pair, daily Scrum meetings
implementation of a feature. The close interaction facilitate communication among the entire team.
between developers and on-site customer repre- During a daily Scrum meeting, team members
sentatives usually leads to increased trust and report their work progress since the last meeting,
better understanding. This direct feedback loop state their goals for the day and voice problems/
allows a developer to express a good approxima- suggestions related to their tasks or to their
tion of the requirements in his head faster than colleagues’ tasks. Such meetings provide visibility
document-centric information exchange could. of one’s work to the rest of the team; raise
Quickly developed software can be demonstrated everyone’s awareness of who has worked on or
immediately to the customer representative and is knowledgeable about specific parts of the
allows her to directly catch misunderstandings. system; and encourage communications among
cognizant 20-20 insights 3
4. team members who may not talk to each other retrospective meeting and ensure that this is
regularly. Team members learn whom to contact converted into explicit knowledge (through docu-
when they work on parts of the system that they mentation) and published in a common area that
are unfamiliar with. everyone can access. The common area could be
a lightweight collaboration Website like a Wiki
To reduce the communication cost among the which should act as a collaborative knowledge
various roles that are involved in software devel- repository for the team.
opment — such as business analysts, developers
and testers — Agile methods recommend the use The majority of the information captured in tradi-
of cross-functional teams instead of role-based tional specification documents, such as require-
teams. A role-based team contains only members ments specifications, architecture specifica-
in the same role. By contrast, a cross-func- tions or design specifications, can be captured
tional team draws together individuals of all as “executable specifications” in the form of
defined roles. Experiences indicate that cross- tests. When you take a test-driven development
functional teams facilitate better collaboration (TDD) approach, you effectively write detailed
and knowledge sharing, which leads to reduced specifications on a just-in-time (JIT) basis. With
product development time. TDD, you write a test, either at the customer/
acceptance level or the developer level, before
Continuous learning is supported by some Agile writing sufficient code/functionality to fulfill that
methods in the form of project retrospectives. test. The tests accomplish two purposes: they
Retrospectives are in essence post-mortem specify the requirements/architecture/design and
reviews on what happened during development, they validate your work. This is an example of the
except that they are conducted not only at the practice of single source information.
end of a project but also during it. Retrospec-
tives facilitate the identification of any success Make it a practice to create needy documents —
factors and obstacles of the current management i.e., if and only if they fulfill a clear, important, and
and development process. In cases where team immediate goal of overall project efforts. Don’t
members face obstacles of the current process, forget that this purpose may be short-term or
such as lengthy stand-up meetings, retrospec- long-term; it may directly support software devel-
tives provide the opportunity for these issues to opment efforts or it may not. Also, remember
be raised, discussed, and dealt with during the that each system has its own unique documen-
project rather than at the end of the project. tation needs, that one size does not fit all. The
implication is that you’re not going to be able to
Limitations follow a “repeatable process” and leverage the
Although the concept of learning is embedded same set of documentation templates on every
in various Agile software development practices, project, at least not if you’re interested in actually
as shown above, these practices only address being effective.
knowledge sharing within a team. They do not
address issues of knowledge sharing across team Conclusion
boundaries. In a large organization, there may Traditionally, software development teams follow
exist multiple teams that work on similar tasks, the Tayloristic approach favoring division of labor;
face common problems or have overlapping hence, the use of role-based teams. Role-based
interests in specific knowledge areas. In short, teams with handoffs between job functions have
there is a lack of explicit support for organiza- the inherent problem of amplifying the problem
tional learning. Also, there will be instances where of miscommunication due to indirect and long
Agile teams are distributed due to the nature communication paths (i.e., knowledge sharing
of business, which also makes tacit knowledge through explicit knowledge).
sharing difficult.
Agile development teams address this problem by
To address this, we need to have lightweight using cross-functional teams, which encourages
mechanisms to convert tacit knowledge into direct communication through release and
explicit knowledge in Agile software development. iteration planning, pair programming and pair
Some of the mechanisms are as follows. rotation, and daily stand-ups and retrospectives
— all of which reduces the likelihood of miscom-
Agile teams should make it a practice to capture munication. They rely on various practices which
learns in a particular Sprint as part of every emphasize approximate knowledge sharing by
cognizant 20-20 insights 4