Bird
Raised Fist0
Software Engineeringknowledge~20 mins

Technical debt management in Software Engineering - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Technical Debt Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Understanding Technical Debt Causes

Which of the following is the most common cause of technical debt in software projects?

AWriting too many automated tests
BUsing the latest technology without testing
CHiring inexperienced developers only
DDeliberate shortcuts taken to meet tight deadlines
Attempts:
2 left
💡 Hint

Think about why teams might choose quick solutions over perfect ones.

📋 Factual
intermediate
2:00remaining
Identifying Technical Debt Types

Which type of technical debt is caused by outdated documentation and lack of knowledge sharing?

ADocumentation debt
BDesign debt
CCode debt
DTesting debt
Attempts:
2 left
💡 Hint

Think about what happens when information about the system is missing or old.

🚀 Application
advanced
2:00remaining
Evaluating Impact of Technical Debt

A team notices their software takes longer to add new features and has more bugs. What is the most likely impact of accumulated technical debt?

AImproved software performance
BLower maintenance costs
CReduced development speed and increased errors
DFaster deployment cycles
Attempts:
2 left
💡 Hint

Consider how messy or quick fixes affect future work.

🔍 Analysis
advanced
2:00remaining
Prioritizing Technical Debt Remediation

Given limited time, which technical debt should a team prioritize to fix first?

Options:

  • Debt causing frequent system crashes
  • Debt in rarely used features
  • Debt in documentation only
  • Debt related to cosmetic UI issues
ADebt causing frequent system crashes
BDebt in documentation only
CDebt in rarely used features
DDebt related to cosmetic UI issues
Attempts:
2 left
💡 Hint

Focus on what affects users and system stability the most.

❓ Reasoning
expert
3:00remaining
Balancing Technical Debt and Feature Delivery

A product manager wants to add many new features quickly, but the engineering team warns about increasing technical debt. What is the best approach to balance these needs?

AIgnore technical debt and focus only on features
BPlan regular time to address technical debt alongside feature development
COutsource technical debt fixes to a separate team without coordination
DStop all new features until all technical debt is fixed
Attempts:
2 left
💡 Hint

Think about sustainable development practices.

Practice

(1/5)
1. What is technical debt in software engineering?
easy
A. Shortcuts or problems in code that need fixing later
B. Money spent on buying software tools
C. The total number of lines of code in a project
D. The time taken to write documentation

Solution

  1. Step 1: Understand technical debt and compare options

    Technical debt refers to shortcuts or quick fixes in code that make future changes harder. Only "Shortcuts or problems in code that need fixing later" correctly describes technical debt as code problems needing fixing later.
  2. Final Answer:

    Shortcuts or problems in code that need fixing later -> Option A
  3. Quick Check:

    Technical debt = shortcuts needing future fixes [OK]
Hint: Think of debt as code shortcuts needing future repair [OK]
Common Mistakes:
  • Confusing technical debt with project cost
  • Thinking it means code size or documentation time
  • Assuming it is about hardware or tools
2. Which of the following is a correct practice in managing technical debt?
easy
A. Regularly identifying and prioritizing debt items
B. Ignoring code problems until the project ends
C. Adding more features without fixing existing issues
D. Deleting all old code without review

Solution

  1. Step 1: Identify good practices and evaluate options

    Managing technical debt means regularly finding and prioritizing problems to fix. Regularly identifying and prioritizing debt items describes this process correctly, while others ignore or worsen debt.
  2. Final Answer:

    Regularly identifying and prioritizing debt items -> Option A
  3. Quick Check:

    Good management = identify and prioritize [OK]
Hint: Good management means regular checks and prioritizing fixes [OK]
Common Mistakes:
  • Thinking ignoring problems is okay
  • Believing adding features solves debt
  • Assuming deleting code blindly helps
3. Consider this code snippet representing technical debt items with priorities:
debt = {"bug1": 3, "bug2": 1, "bug3": 2}
# Lower number means higher priority
sorted_debt = sorted(debt.items(), key=lambda x: x[1])
print([item[0] for item in sorted_debt])

What will be the output?
medium
A. ['bug1', 'bug3', 'bug2']
B. ['bug3', 'bug1', 'bug2']
C. ['bug2', 'bug3', 'bug1']
D. ['bug2', 'bug1', 'bug3']

Solution

  1. Step 1: Trace the sorting logic

    The dictionary has bug1=3, bug2=1, bug3=2 (lower number = higher priority). sorted() by value (x[1]) ascending orders: bug2 (1), bug3 (2), bug1 (3). List comprehension gets ['bug2', 'bug3', 'bug1'].
  2. Final Answer:

    ['bug2', 'bug3', 'bug1'] -> Option C
  3. Quick Check:

    Sorted by priority ascending = ['bug2', 'bug3', 'bug1'] [OK]
Hint: Sort by priority number ascending to find order [OK]
Common Mistakes:
  • Sorting in descending order by mistake
  • Confusing keys and values in sorting
  • Misreading priority meaning
4. This code tries to remove fixed technical debt items from a list:
debt = ["bug1", "bug2", "bug3"]
fixed = ["bug2"]
for item in fixed:
    debt.remove(item)
print(debt)

What is the output?
medium
A. ['bug3']
B. ['bug1', 'bug2', 'bug3']
C. Error: list.remove() called on missing item
D. ['bug1', 'bug3']

Solution

  1. Step 1: Trace the list removal

    Loop over fixed=["bug2"], remove "bug2" from debt=["bug1", "bug2", "bug3"], resulting in ["bug1", "bug3"], printed as ['bug1', 'bug3'].
  2. Final Answer:

    ['bug1', 'bug3'] -> Option D
  3. Quick Check:

    Removed fixed items = ['bug1', 'bug3'] [OK]
Hint: Removing fixed items updates list correctly [OK]
Common Mistakes:
  • Expecting no change in list
  • Thinking it causes an error
  • Removing wrong items by mistake
5. A team has a list of technical debt items with severity scores:
debt = {"bug1": 5, "bug2": 0, "bug3": 3, "bug4": 0}
# Severity 0 means no real issue
# They want to create a new dict with only real issues
real_issues = {k: v for k, v in debt.items() if v != 0}
print(real_issues)

What will be printed?
hard
A. {'bug1': 5, 'bug2': 0, 'bug3': 3, 'bug4': 0}
B. {'bug1': 5, 'bug3': 3}
C. {'bug2': 0, 'bug4': 0}
D. {}

Solution

  1. Step 1: Trace the dict comprehension filtering

    Keeps pairs where v != 0, excluding bug2:0 and bug4:0, resulting in {'bug1': 5, 'bug3': 3}.
  2. Final Answer:

    {'bug1': 5, 'bug3': 3} -> Option B
  3. Quick Check:

    Filtered dict excludes zero severity items [OK]
Hint: Filter out zero values to keep real issues [OK]
Common Mistakes:
  • Including zero severity items by mistake
  • Confusing keys and values in comprehension
  • Expecting empty dict instead
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard