Decreasing time and cost and increasing quality. Organizations constantly need to decrease software projects' development time and costs. Avoiding mistakes reduces rework; repeating successful processes increases productivity and the likelihood of further success. So, organizations need to apply process knowledge gained in previous projects to future projects. Unfortunately, the reality is that development teams do not benefit from existing experience and they repeat mistakes even though some individuals in the organization know how to avoid them. Project team members acquire valuable individual experience with each project—the organization and individuals could gain much more if they could share this knowledge.
Making better decisions. In software development, every person involved constantly makes technical or managerial decisions. Most of the time, team members make decisions based on personal knowledge and experience or knowledge gained using informal contacts. This is feasible in small organizations, but as organizations grow and handle a larger volume of information, this process becomes inefficient. Large organizations cannot rely on informal sharing of employees' personal knowledge. Individual knowledge must be shared and leveraged at project and organization levels. Organizations need to define processes for sharing knowledge so that employees throughout the organization can make correct decisions.
Acquiring knowledge about new technologies. The emergence of new technologies makes software development more efficient, but at the same time, they can be a project manager's worst nightmare. It is difficult for developers to become proficient with a new technology and managers to understand its impact and estimate a project's cost when using it. When developers or project managers use a technology that a project's team members are unfamiliar with, engineers often resort to the "learning by doing" approach, which can result in serious delays. So, organizations must quickly acquire knowledge about new technologies and master them.
Accessing domain knowledge. Software development requires access to knowledge not only about its domain and new technologies but also about the domain for which software is being developed. An organization must acquire new domain knowledge either by training or by hiring knowledgeable employees and spreading it throughout the team.
Sharing knowledge about local policies and practices. Every organization has its own policies, practices, and culture, which are not only technical but also managerial and administrative. New developers in an organization need knowledge about the existing software base and local programming conventions. Unfortunately, such knowledge typically exists as organizational folklore. Experienced developers often disseminate it to inexperienced developers through ad hoc informal meetings; consequently, not everyone has access to the knowledge they need. Passing knowledge informally is an important aspect of a knowledge-sharing culture that should be encouraged. Nonetheless, formal knowledge capturing and sharing ensures that all employees can access it. So, organizations must formalize knowledge sharing while continuing informal knowledge sharing.
Capturing knowledge and knowing who knows what. Software organizations depend heavily on knowledgeable employees because they are key to the project's success. However, accessing these people can be difficult. Software developers apply just as much effort and attention determining whom to contact in an organization as they do getting the job done. 3 These knowledgeable people are also very mobile. When a person with critical knowledge suddenly leaves an organization, it creates severe knowledge gaps—but probably no one in the organization is even aware of what knowledge they lost. Knowing what employees know is necessary for organizations to create a strategy for preventing valuable knowledge from disappearing. Knowing who has what knowledge is also a requirement for efficiently staffing projects, identifying training needs, and matching employees with training offers.
Collaborating and sharing knowledge. Software development is a group activity. Group members are often geographically scattered and work in different time zones. Nonetheless, they must communicate, collaborate, and coordinate. Communication in software engineering is often related to knowledge transfer. Collaboration is related to mutual sharing of knowledge. Group members can coordinate independently of time and space if they can easily access their work artifacts. So, group members need a way to collaborate and share knowledge independently of time and space.
1. Originate/create knowledge. Members of an organization develop knowledge through learning, problem solving, innovation, creativity, and importation from outside sources.
2. Capture/acquire knowledge. Members acquire and capture information about knowledge in explicit forms.
3. Transform/organize knowledge. Organizations organize, transform, or include knowledge in written material and knowledge bases.
4. Deploy/access knowledge. Organizations distribute knowledge through education, training programs, automated knowledge-based systems, or expert networks.
5. Apply knowledge. The organization's ultimate goal is applying the knowledge—this is the most important part of the life cycle. KM aims to make knowledge available whenever it is needed.
• Loss of knowledge due to attrition
• Lack of knowledge and an overly long time to acquire it due to steep learning curves
• People repeating mistakes and performing rework because they forgot what they learned from previous projects
• Individuals who own key knowledge becoming unavailable
Document management. A software development project involves a variety of document-driven processes and activities. The work frequently focuses on authoring, reviewing, editing, and using these documents, which become the organization's assets in capturing explicit knowledge. Therefore, document management is a basic activity toward supporting an organization's implementation of a knowledge management system. DM systems enable employees throughout the organization to share documented knowledge. Many commercial tools support DM, such as Hyperwave, Microsoft Sharepoint, Lotus Domino, and Xerox DocuShare (see " The Experience Factory Organization" sidebar), and include features such as defining process workflows and finding experts.
Competence management and expert identification. Far from all of an organization's tacit knowledge can be made explicit, and far from all explicit knowledge can be documented. So, an organization must track who knows what to fully utilize undocumented knowledge. An elaborate solution to this problem is competence management, or skills management. As we noted earlier, a common problem that knowledge management addresses is expert identification. Competence management systems, such as SkillScape and SkillView, include tools that let experts generate and edit their own profiles. Other tools, such as KnowledgeMail, automatically generate competence profiles by assuming that peoples' emails and documents reflect their expertise. These tools analyze email repositories and documents and build keyword-based profiles that characterize each employee. Software organizations can use them to identify experts in various technical areas, such as specific programming languages, database technologies, or operating systems.
Software reuse. There are endless stories about how programmers continuously implement the same solutions in slightly different ways. Software reuse approaches attempt to reduce this rework by establishing a reuse repository. Programmers submit software they believe would be useful to others. The software development process must change so that instead of developing all software from scratch, a programmer first searches the repository for reusable parts. Only if the programmer found nothing useful would he or she write the software from scratch. This same concept can apply to all software engineering artifacts.
• Technology issues. Software technology supports KM, but it is not always possible to integrate all the different subsystems and tools to achieve the planned level of sharing. Security is a requirement that the available technology does not often provide satisfactorily.
• Organizational issues. It is a mistake for organizations to focus only on technology and not on methodology. It is easy to fall into the technology trap and devote all resources to technology development, without planning for KM implementation.
• Individual issues. Employees often do not have time to input or search for knowledge, do not want to give away their knowledge, and do not want to reuse someone else's knowledge.
Sharing experience with customers. Organizations learn not only from their own experiences but also from external sources, typically technology vendors. Several software vendors provide online knowledge bases, such as Microsoft's Knowledge Base, Oracle's Support Center, and Perl's FAQ. Such knowledge bases are often open to the public and let software engineers search for knowledge. These knowledge bases resulted from capturing vendor representatives' product knowledge and making it available to the vendors' customers.
Industry-wide knowledge sharing and education. At the software industry level, committees or groups of experts identify patterns (such as software design patterns) and generate handbooks and standards (such as those from the IEEE and ISO) that are generally applicable to software development, to leverage the experience and knowledge of all software development organizations. This is not something any individual or organization can perform, because it takes much effort and requires a considerable amount of SE knowledge and access to project data.
An example of the numerous industry-wide knowledge initiatives is the Software Engineering Body of Knowledge (SWEBOK). It defines the knowledge that a practicing software engineer needs to master on a daily basis. Another example is ISO15504, a comprehensive collection of software engineering knowledge that describes processes related to SE.
Projects whose goal is to build knowledge bases include the Center for Empirically Based Software Engineering and ViSEK (Virtual SE Competence Center). They accumulate empirical models to provide validated guidelines for selecting techniques and models, recommend areas for research, and support SE education.
Ioana Rus is a scientist at Fraunhofer Center for Empirical Software Engineering, Maryland. Her research interests include experience and knowledge management, software process modeling and simulation, process improvement, measurement, and empirical studies in software development. She has a PhD in computer science and Engineering and is a member of the IEEE Computer Society and ACM. Contact her at firstname.lastname@example.org.
Mikael Lindvall is a scientist at Fraunhofer Center for Experimental Software Engineering, Maryland. He specializes in work on experience and knowledge management in software engineering. He is currently working on ways of building experience bases to attract users to both contribute and use experience bases. He received his PhD in computer science from Linköpings University, Sweden. His PhD work was based on a commercial development project at Ericsson Radio and focused on the evolution of object-oriented systems. Contact him at email@example.com.