CPSA Risk Management and Technical Debt 1 — Questions and Answers
Question 1: What is the primary definition of technical debt in software architecture?
- The financial cost of software licenses accumulated over time
- The cost of rework caused by choosing an expedient solution now instead of a better approach (Correct answer)
- The number of unresolved bugs in a system
- The time required to train new developers on the codebase
Correct answer: The cost of rework caused by choosing an expedient solution now instead of a better approach
Technical debt refers to the implied cost of future rework required when a quick or suboptimal solution is chosen over a better long-term approach.
Question 2: Which of the following is an example of INTENTIONAL technical debt?
- A developer unknowingly violates an architectural rule due to lack of experience
- Duplicate code introduced by a contractor who was unaware of existing modules
- A team deliberately skips unit tests to meet a release deadline with a plan to add them later (Correct answer)
- Security vulnerabilities introduced because developers did not read the documentation
Correct answer: A team deliberately skips unit tests to meet a release deadline with a plan to add them later
Intentional technical debt is knowingly incurred, such as skipping tests to meet a deadline, with the explicit plan to address it later.
Question 3: What is architectural risk in the context of software architecture?
- The probability that a project will exceed its budget
- Uncertainty about whether the architecture will satisfy required quality attributes under real-world conditions (Correct answer)
- The risk that a developer will leave the project before completion
- The chance that requirements will change after development begins
Correct answer: Uncertainty about whether the architecture will satisfy required quality attributes under real-world conditions
Architectural risk specifically concerns uncertainty about whether the chosen architecture can meet the system's quality attribute requirements.
Question 4: What is architecture erosion?
- The process of deliberately removing outdated components from a system
- A planned simplification of a complex architecture over multiple releases
- The gradual divergence between the intended architecture and the implemented system (Correct answer)
- The reduction of system performance due to increased load over time
Correct answer: The gradual divergence between the intended architecture and the implemented system
Architecture erosion occurs when the actual implemented system drifts away from the originally designed and documented architecture.
Question 5: Which tool or method is most commonly used to assess and quantify technical debt in a codebase?
- Gantt charts
- Static code analysis tools such as SonarQube (Correct answer)
- Network diagrams
- Entity-Relationship diagrams
Correct answer: Static code analysis tools such as SonarQube
Static code analysis tools like SonarQube measure code quality metrics, rule violations, and provide a technical debt ratio to quantify accumulated debt.
Question 6: What is a 'Big Ball of Mud' in software architecture?
- A design pattern for highly scalable distributed systems
- A haphazardly structured system with no discernible architecture, often the result of accumulated technical debt (Correct answer)
- A database schema with many redundant tables
- A microservices architecture with too many services
Correct answer: A haphazardly structured system with no discernible architecture, often the result of accumulated technical debt
A Big Ball of Mud describes a system that has grown without a coherent architecture, typically due to years of unmanaged technical debt and ad-hoc changes.
Question 7: Which strategy is BEST for systematically reducing technical debt without disrupting ongoing feature development?
- Halt all feature development until all debt is resolved
- Ignore the debt and let it resolve itself over time
- Allocate a fixed percentage of each sprint or iteration to debt reduction activities (Correct answer)
- Rewrite the entire system from scratch on a fixed deadline
Correct answer: Allocate a fixed percentage of each sprint or iteration to debt reduction activities
Allocating a consistent portion of each iteration to debt reduction balances new feature delivery with gradual improvement of the codebase.
What is the primary definition of technical debt in software architecture?