Note on Risk Management
• Risk management is the process of identifying, analyzing, and addressing potential risks
that might impact the success of a project.
• Risks, unlike existing problems, are potential future issues that can harm cost, schedule,
technical performance, or team morale.
• Effective risk management involves classifying risks, understanding their impact, and
proactively implementing strategies to mitigate them.
Three Main Classifications of Risks in Software Projects
1. Project Risks : Risks related to budget, schedule, personnel, resources, and customer
expectations.
o Example: Delays in delivery timelines due to resource unavailability.
2. Technical Risks : Risks linked to the technology and methods used in the project.
o Example: The development team faces challenges adapting to a new technology
stack.
3. Business Risks: Risks associated with the business aspects of the project.
o Example: Investing in a product that fails to attract target customers.
Other Risk Categories in Software Projects
1. Known Risks : Risks identified after analyzing the project, its business and technical
environment, and available data.
o Examples : Unrealistic delivery deadlines, Limited technical expertise within the
team.
2. Predictable Risks : Risks inferred from previous project experiences or trends.
o Examples : Employee turnover based on historical data, Delays in approvals due to
organizational hierarchy.
3. Unpredictable Risks : Risks that are unexpected and difficult to foresee.
o Examples : Sudden changes in government regulations, Natural disasters affecting
operations.
Risk Management Activities in Software Projects
1. Risk Assessment
Objective: To rank risks based on their potential impact on the project.
• Approach:
o Rate each risk on two factors:
▪ Probability (r): Likelihood of the risk occurring.
▪ Severity (s): Magnitude of loss if the risk occurs.
o Calculate priority (p) using the formula: p=r×sp = r \times sp=r×s
Outcome: High-priority risks are addressed first to minimize potential loss.
2. Risk Identification
Objective: Early detection of potential risks to reduce their impact through proactive planning.
• Categories of Risks:
1. Technology Risks: Issues with software or hardware technologies.
2. People Risks: Problems related to team members (e.g., skill gaps or turnover).
3. Organizational Risks: Challenges from the development environment.
4. Tools Risks: Limitations or failures of software tools used.
5. Requirement Risks: Risks arising from changes in customer requirements.
6. Estimation Risks: Risks due to inaccurate resource and time estimates.
3. Risk Analysis
Objective: Assess the probability and severity of identified risks.
• Risk Probability Bands:
o Very Low: 0-10%
o Low: 10-25%
o Moderate: 25-50%
o High: 50-75%
o Very High: 75%+
• Risk Impact Levels:
1. Catastrophic: Threatens the project’s survival.
2. Serious: Causes significant delays.
3. Tolerable: Delays within contingency allowances.
4. Insignificant: Minimal or negligible impact.
Outcome: A qualitative understanding of which risks need immediate attention.
4. Risk Control
Objective: Manage risks to achieve project goals and minimize negative impacts.
• Methods:
o Avoid the Risk: Modify project requirements or processes to eliminate the risk.
▪ Example: Reducing project scope to meet deadlines.
o Transfer the Risk: Delegate or outsource the risky components.
▪ Example: Buying insurance or subcontracting.
o Risk Reduction: Minimize the impact of the risk through mitigation plans.
▪ Example: Recruiting backup staff to address potential turnover.
Risk Mitigation, Monitoring, and Management (RMMM) Plan
• The RMMM plan is an essential risk management technique that organizes efforts to
mitigate, monitor, and manage risks during a software project.
• This plan ensures risks are identified, analyzed, and addressed systematically to minimize
their impact on the project.
Components of RMMM
1. Risk Mitigation : Reduce or eliminate the likelihood of risk occurrence.
Steps:
1. Identify risks that could impact the project.
2. Remove the causes leading to risk creation.
3. Maintain and update project documents.
4. Conduct regular reviews to ensure timely progress.
• Example (High Staff Turnover):
i. Analyze reasons for turnover (e.g., work conditions, compensation).
ii. Address controllable causes before the project begins.
iii. Prepare for turnover by:
1. Dispersing knowledge through team collaboration.
2. Establishing documentation standards.
3. Assigning backup personnel for critical roles.
2. Risk Monitoring : Continuously track risks and assess their likelihood and impact.
Key Activities:
1. Verify if predicted risks are occurring.
2. Ensure risk mitigation steps are applied effectively.
3. Collect data for future risk analyses.
4. Monitor the root causes of problems and link them to specific risks.
• Example (High Staff Turnover Monitoring):
i. Monitor team morale and relationships under project pressures.
ii. Assess compensation issues and job market conditions.
3. Risk Management : Handle risks when they become reality despite mitigation efforts.
Activities:
1. Execute contingency plans prepared during the risk analysis phase.
2. Adjust project schedules and refocus resources.
3. Support onboarding and training for new team members.
• Example (High Staff Turnover):
i. Utilize backup staff and well-maintained documentation to continue
progress.
ii. Reallocate team focus temporarily to maintain productivity.
Drawbacks of RMMM
1. Additional Costs: Implementing RMMM requires extra budget allocation.
2. Time-Consuming: The effort to design and execute the plan can slow project timelines.
3. Complexity: In large projects, managing RMMM can become a significant overhead.
4. No Guarantee: Even with RMMM, unforeseen risks can emerge post-project delivery.
Software Maintenance
• Software maintenance is a crucial part of the Software Development Life Cycle (SDLC),
aimed at updating and modifying software applications after their delivery.
• Its primary focus is to ensure the software remains functional, relevant, and efficient as
real-world needs and conditions evolve.
Why Software Maintenance is Needed
1. Error Correction
2. Evolving User Requirements
3. Hardware/Software Changes
4. Improving System Efficiency
5. Code Optimization
6. Component Updates
7. Minimizing Side Effects
Types of Software Maintenance
1. Corrective Maintenance
o Focus: Fixing errors in specifications, design, coding, testing, or documentation.
o Goal: Restore software functionality as expected.
2. Adaptive Maintenance
o Focus: Modifying software to match changes in the environment (e.g., new
operating systems, hardware).
o Goal: Ensure compatibility with updated systems or user contexts.
3. Preventive Maintenance
o Focus: Preventing potential future problems.
o Goal: Increase software reliability and reduce the risk of major failures.
4. Perfective Maintenance
o Focus: Enhancing software to improve performance and usability.
o Goal: Add new features, optimize code, and make the system easier to maintain.
Challenges in Software Maintenance
1. Lack of Traceability
2. Inadequate Code Comments
3. Obsolete Legacy Systems
Addressing Software Maintenance Issues
1. Improved Documentation: Ensure life cycle documents and detailed comments are
produced and maintained.
2. Adopting Modern Standards: Use updated design and coding practices to enhance
maintainability.
3. Regular Code Reviews: Continuously evaluate and refactor code to remove unnecessary
or outdated components.
4. Legacy System Reengineering: Use reverse engineering and modern technologies to
upgrade legacy systems while retaining core functionalities.
Software Maintenance Process
• The software maintenance process involves a series of steps to ensure that software
systems remain functional, efficient, and up-to-date after their initial deployment.
• These steps are essential for addressing issues, adapting to new requirements, and
maintaining software quality. Below are the key phases of the software maintenance
process:
1. Program Understanding
• Objective: The first step in software maintenance is understanding the existing program.
• Importance: It helps in forming a solid foundation for making effective updates and
modifications.
2. Generating a Particular Maintenance Problem
• Objective: After understanding the program, the next phase is to define the specific.
• Importance: A clear maintenance plan ensures that the right problems are addressed
efficiently.
3. Ripple Effect
• Objective: This phase accounts for the ripple effect of changes within the program.
• Importance: Understanding and managing the ripple effect prevents new problems from
being introduced during maintenance.
4. Modified Program Testing
• Objective: Once the modifications are made, the next phase involves testing the updated
program.
• Importance: Rigorous testing is crucial to verify that the changes have not compromised
the software’s functionality or quality.
Maintainability
• Objective: The final phase of the process ensures that the software is maintainable over
time.
• Importance: Good maintainability makes future updates, bug fixes, and changes easier
and more cost-effective.
Business Process Re-engineering (BPR)
• Business Process Re-engineering (BPR) is a strategic management tool aimed at
improving organizational performance by redesigning and optimizing business processes.
• It focuses on making radical changes to core business processes to achieve substantial
improvements in efficiency, quality, and customer satisfaction.
• Below is an in-depth look at BPR and its components:
Objectives of BPR
1. Improving Organizational Performance: BPR aims to streamline and transform business
processes to align with the organization's strategic goals.
2. Optimizing Processes: The goal is to eliminate inefficiencies, bottlenecks, and waste in
existing processes to improve productivity.
3. Customer-Centric Approach: BPR focuses on designing processes that add maximum
value to customers, enhancing their satisfaction.
4. Efficiency and Quality: BPR reduces cycle times, cuts costs, and enhances the quality of
outputs.
Benefits of BPR
1. Reduced Costs: By eliminating unnecessary steps and inefficiencies.
2. Increased Productivity: Streamlined processes lead to faster execution and better
resource utilization.
3. Improved Quality: Better-designed processes ensure higher consistency and quality of
outputs.
4. Faster Time-to-Market: Streamlined operations can speed up delivery and product
launches.
5. Greater Customer Satisfaction: BPR ensures that processes are aligned with customer
needs, improving the overall customer experience.
Challenges in BPR
1. Complexity: BPR involves a deep analysis and significant changes to the way a business
operates, which can be time-consuming and resource-intensive.
2. Resistance to Change: Employees and managers may resist the dramatic changes
involved in BPR.
3. Risk of Failure: Many BPR projects fail due to a lack of proper planning, understanding of
the existing processes, and failure to engage key stakeholders effectively.
Phases of BPR
• According to Peter F. Drucker, "Re-engineering is new, and it has to be done."
• There are 7 different phases for BPR.
• All the projects for BPR begin with the most critical requirement, i.e., communication
throughout the organization.
1. Begin Organizational Change
2. Build the Re-engineering Organization
3. Identify BPR Opportunities
4. Understand the Existing Process
5. Reengineer the Process
6. Blueprint the New Business System
7. Perform the Transformation
Reverse Engineering
• Definition: Software Reverse Engineering is the process of recovering the design,
requirement specifications, and functions of a product from an analysis of its code.
• It builds a program database and generates information from this.
• The purpose of reverse engineering is to facilitate maintenance work by improving the
understandability of a system and producing the necessary documents for a legacy
system.
Reverse Engineering Goals:
1. Cope with Complexity
2. Recover Lost Information
3. Detect Side Effects
4. Synthesis Higher Abstraction
5. Facilitate Reuse
Reverse Engineering to Understand Data
Reverse engineering of data occurs at different levels of abstraction and is often the first
reengineering task.
1. Program Level: Analyzing the code as part of an overall reengineering effort.
2. System Level: Analyzing object-oriented database systems and global data structures.
3. Internal Data Structures: Reverse engineering internal program data structures involves
grouping related program variables.
4. Database Structures: Reverse engineering one database schema into another by
understanding objects and their relationships.
Steps for Reverse Engineering of Data:
• Build an initial object model.
• Determine candidate keys.
• Refine the tentative classes.
• Define generalizations.
Reverse Engineering to Understand Processing
The goal is to understand procedural abstractions represented by the source code by analyzing
the code at varying levels of abstraction:
• System Level
• Program Level
• Component Level
• Pattern Level
• Statement Level
Reverse Engineering Tools
Reverse engineering, if done manually, is time-consuming and labor-intensive. Therefore,
automated tools are necessary to assist in the process. Some popular tools include:
• Rigi: A visual software understanding tool.
• Bunch: A software clustering/modularization tool.
• CIAO and CIA: A graphical navigator for software and web repositories, along with a
collection of reverse engineering tools.
• GEN++: An application generator supporting the development of analysis tools for the C++
language.
• PBS: Software Bookshelf tools for extracting and visualizing program architecture.