code-modernization: COCOMO is a complexity index, never a modernization timeline

COCOMO's constants encode human-team productivity; presenting its
person-months as how long an agentic modernization will take (or cost) is
a claim we should not make. Reframe COCOMO everywhere as a RELATIVE
complexity/scale index for ranking and sequencing systems only:

- assess: capture COCOMO as a complexity index; explicitly ignore scc's
  'Estimated Schedule Effort' and cost-in-dollars; ASSESSMENT 'Effort
  Estimation' section becomes 'Relative Scale' with a not-a-timeline note;
  portfolio heat-map column renamed Complexity (COCOMO index).
- brief: phase plan uses relative T-shirt sizing, not person-months/weeks;
  phases render as a dependency flowchart, not a gantt (gantt = calendar).
- portfolio-assess.js: field cocomoPm -> complexityIndex; return label
  carries the not-a-duration caveat.
- README: 'A note on COCOMO' explains the index framing and points at
  better intrinsic-complexity proxies.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Morgan Westlee Lunt
2026-06-09 21:21:50 +00:00
parent d44da81146
commit e5939029ec
5 changed files with 46 additions and 20 deletions

View File

@@ -82,17 +82,22 @@ if (failed.length) {
}
// COCOMO-II basic, computed here so every row uses the identical formula:
// PM = 2.94 × (KSLOC)^1.10 (nominal scale factors).
// 2.94 × (KSLOC)^1.10 (nominal scale factors). This is a RELATIVE
// complexity/scale index for ranking systems — NOT a duration or cost.
// The calling command must render it as an index and never convert it to
// person-months / weeks / dates (agentic transformation breaks COCOMO's
// human-team productivity assumptions).
for (const r of surveyed) {
const ksloc = r.sloc / 1000
r.cocomoPm = Math.round(2.94 * Math.pow(ksloc, 1.1) * 10) / 10
r.complexityIndex = Math.round(2.94 * Math.pow(ksloc, 1.1) * 10) / 10
}
surveyed.sort((a, b) => b.cocomoPm - a.cocomoPm)
surveyed.sort((a, b) => b.complexityIndex - a.complexityIndex)
return {
parentDir,
rows: surveyed,
unmeasured: failed,
formula: 'PM = 2.94 × (KSLOC)^1.10 (COCOMO-II basic, nominal scale factors) — computed by the workflow, not estimated by agents',
complexityIndexFormula:
'2.94 × (KSLOC)^1.10 (COCOMO-II basic, nominal scale factors) — a RELATIVE complexity/scale index for ranking systems, computed by the workflow. NOT a duration or cost: do not render it as person-months/weeks/dates; agentic transformation does not follow COCOMO human-team productivity.',
}