Skip to content

Investment Taxonomy

The canonical, fixed vocabulary for the Investment View. This page is the shared semantic source — both user-facing and developer docs link here instead of redefining terms.

  • Source of truth: src/dev_health_ops/investment_taxonomy.py (THEMES, SUBCATEGORIES, SUBCATEGORY_TO_THEME).
  • The taxonomy is fixed: no synonyms, no overrides, no per-team configuration.
  • Every WorkUnit gets a probability distribution over these keys — never a single hard label, and never "unknown". See the Investment Categorization Pipeline.

The key list below is generated from investment_taxonomy.py; run make docs:generate-taxonomy after changing the registry.


Themes (5, fixed)

Key Display name What it captures
feature_delivery Feature Delivery Building new capability and shipping value to users.
operational Operational / Support Keeping the lights on — incidents, on-call, and supporting users.
maintenance Maintenance / Tech Debt Keeping the codebase healthy — refactors, upgrades, paying down debt.
quality Quality / Reliability Making the product correct and dependable — testing, bug fixes, reliability.
risk Risk / Security Protecting the product and the business — security, compliance, vulnerabilities.

Theme probabilities are a deterministic roll-up of the subcategory probabilities below (sum of subcategories sharing the same prefix), normalized across the 5 themes.


Subcategories (15, fixed)

Each subcategory key is theme.subcategory. The theme is always the prefix before the dot.

Feature Delivery

Key Plain-language meaning
feature_delivery.customer Work driven by a specific customer ask or commitment.
feature_delivery.roadmap Planned roadmap features and enhancements.
feature_delivery.enablement Platform/tooling that enables others to build (internal enablement, SDKs, APIs).

Operational / Support

Key Plain-language meaning
operational.incident_response Responding to and resolving active incidents/outages.
operational.on_call On-call duties and operational toil outside named incidents.
operational.support Helping users — support tickets, questions, troubleshooting.

Maintenance / Tech Debt

Key Plain-language meaning
maintenance.refactor Restructuring existing code without changing behavior.
maintenance.upgrade Dependency/runtime/platform upgrades and migrations.
maintenance.debt Paying down accumulated technical debt.

Quality / Reliability

Key Plain-language meaning
quality.testing Adding or improving tests and test infrastructure.
quality.bugfix Fixing defects in delivered functionality.
quality.reliability Reliability, resilience, and stability improvements.

Risk / Security

Key Plain-language meaning
risk.security Proactive security hardening and controls.
risk.compliance Meeting compliance, regulatory, or audit requirements.
risk.vulnerability Remediating specific known vulnerabilities.

Canonical key list

The exact keys, as they appear in investment_taxonomy.py.

# THEMES
feature_delivery
operational
maintenance
quality
risk

# SUBCATEGORIES (theme.subcategory)
feature_delivery.customer
feature_delivery.roadmap
feature_delivery.enablement
operational.incident_response
operational.on_call
operational.support
maintenance.refactor
maintenance.upgrade
maintenance.debt
quality.testing
quality.bugfix
quality.reliability
risk.security
risk.compliance
risk.vulnerability

# SUBCATEGORY_TO_THEME
feature_delivery.customer -> feature_delivery
feature_delivery.roadmap -> feature_delivery
feature_delivery.enablement -> feature_delivery
operational.incident_response -> operational
operational.on_call -> operational
operational.support -> operational
maintenance.refactor -> maintenance
maintenance.upgrade -> maintenance
maintenance.debt -> maintenance
quality.testing -> quality
quality.bugfix -> quality
quality.reliability -> quality
risk.security -> risk
risk.compliance -> risk
risk.vulnerability -> risk

Guarantees

  • Subcategory keys are canonical and fixed; provider-native labels are inputs only and are normalized away.
  • Theme roll-up is deterministic via theme_of(subcategory).
  • Categorization always produces a distribution — it never returns "unknown".