Technical debt and methods for assessing it

Technical Debt

Technical debt is one of the primary issues hindering the steady and dynamic development of a project. Many teams do not assess their technical debt and struggle to answer what technical debt is and how to measure it. In this stream, we will look at a simple point-based assessment method, which involves a set of binary assessments (one assessment equals one point).

In this stream, we will define technical debt as a set of accumulated problems within a project that have a technical nature (code, infrastructure, architecture), or those that affect technical decisions (management).

Since different people in an organization are responsible for different areas related to development, it is better to divide the assessment of technical debt according to these areas of responsibility and address the issues within each area separately.

  • Management (technical leads, managers, consultants, etc.);
  • Project infrastructure (DevOps, architects);
  • Code infrastructure (architects);
  • Codebase (programmers, architects);

Causes:

  • Incorrect assessment of project maturity;
  • Micromanagement;
  • Overcomplicated architecture;
  • Following "trendy" tendencies;
  • Neglecting development technologies;
  • Weak team;
  • Lack of experience.

Strategic Planning (goals):

  • Tactical planning (tasks);
  • Priorities;
  • Effort estimation and resource management;
  • Task optimization (don’t try to cover too much at once);
  • Deadline control;
  • Evolution (as the project grows, management methods improve, and evaluation systems for efficiency develop).

Development Technology:

  • Training (improving employee qualifications);
  • Team practices (pair programming, code reviews, etc.);
  • Fair distribution of responsibilities and the principle of "equal qualification";
  • Task rotation within the group (avoid narrow specialization where possible; exceptions may apply).

Infrastructure:

  • Security;
  • Backup;
  • Monitoring;
  • Logging (auditing actions);
  • CI/CD;
  • Fault tolerance;
  • Development technology;
  • Versioning cleanliness;
  • Complete infrastructure for solving tasks (dev/stage/prod).

Codebase Infrastructure Checklist:

  • Versioning cleanliness;
  • The principle of minimal dependency is implemented;
  • Architectural isolation (e.g., custom wrappers or architectural boundaries);
  • Patent, license cleanliness;
  • Replacement strategy;
  • Exclusion of "golden/divine" employees.

Codebase Checklist:

  • Documentation;
  • Design;
  • Versioning;
  • Static analysis (manual/automated);
  • Testing;
  • Modeling;
  • Research.

Comments

Popular posts from this blog

Books Every Developer Should Read (In My Opinion)

TypeScript: Why It's Needed and Why It's So Popular

Reactive Architecture at the Code Level