Prices the cost of software complexity and how AI adoption changes engineering cost over time.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Complexity Cost Calculator API key. Get a free key at https://complexity-cost-calculator.beamercloud.com/account
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Calculate what software complexity costs an engineering organization per feature, per quarter and per year, how AI adoption changes that cost over the coming quarters, and (Pro) which levers lower it.
Teams in the organization (not more than engineers)
Engineers in the organization
Hours a typical change would take in a perfectly modular system
How many other modules usually change along with it (a count)
Hours of meetings, threads and reviews the change causes
Pro. Levers that put people back in the loop, or automate, where AI makes a cost worse: human_interfaces (people design and review every change that crosses a module boundary), explain_before_merge, safety_net (contract tests, monitoring, canary releases with automatic rollback) and decision_rights (decisions move to the teams that own the code). Each has its own cost. On Pro the response also has a plan with the cheapest mix of levers for every AI level.
AI adoption for every team. Leave it out for no AI.
Cost of one engineering hour; adds dollar amounts to the results
Pro. Different AI levels per group of teams; the team counts must add up to teams. Use instead of ai_adoption.
Pro. Your own AI values instead of the starting values
People outside the teams who take part in a typical cross-team decision (default 2)
Teams a typical change crosses (not more than teams)
Features shipped per year (default 20)
Pro. Your own values for the levers instead of the starting values
Pro. Past changes with their actual hours, to fit the interdependence factor. Use instead of interdependence_factor.
Hours an incident costs; give it together with incident_likelihood
Chance that a change causes an incident; give it together with incident_cost_hours
Quarters to project (default 12)
How strongly coupled modules drag work along (default 0.5)
Maintenance hours per quarter
Infrastructure hours per quarter
Pro. Planned change in coupling per quarter (negative when you decouple)
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http complexity-cost-calculator https://mcp.complexity-cost-calculator.beamercloud.com/mcp \ --header 'X-API-Key: YOUR_X_API_KEY'
Headers
X-API-Key (required): Complexity Cost Calculator API key. Get a free key at https://complexity-cost-calculator.beamercloud.com/accountTool list last changed Nov 6, 2026.
Calculate what software complexity costs an engineering organization per feature, per quarter and per year, how AI adoption changes that cost over the coming quarters, and (Pro) which levers lower it.
| Argument | Type | Description |
|---|---|---|
| teams* | integer | Teams in the organization (not more than engineers) |
| levers | object | Pro. Levers that put people back in the loop, or automate, where AI makes a cost worse: human_interfaces (people design and review every change that crosses a module boundary), explain_before_merge, safety_net (contract tests, monitoring, canary releases with automatic rollback) and decision_rights (decisions move to the teams that own the code). Each has its own cost. On Pro the response also has a plan with the cheapest mix of levers for every AI level. |
| engineers* | integer | Engineers in the organization |
| ai_adoption | object | AI adoption for every team. Leave it out for no AI. |
| hourly_rate | number | Cost of one engineering hour; adds dollar amounts to the results |
| team_adoption | array | Pro. Different AI levels per group of teams; the team counts must add up to teams. Use instead of ai_adoption. |
| vacuum_effort* | number | Hours a typical change would take in a perfectly modular system |
| ai_assumptions | object | Pro. Your own AI values instead of the starting values |
| decision_people | number | People outside the teams who take part in a typical cross-team decision (default 2) |
| teams_per_change | integer | Teams a typical change crosses (not more than teams) |
| features_per_year | number | Features shipped per year (default 20) |
| lever_assumptions | object | Pro. Your own values for the levers instead of the starting values |
| connascence_degree* | number | How many other modules usually change along with it (a count) |
| coordination_hours* | number | Hours of meetings, threads and reviews the change causes |
| calibration_changes | array | Pro. Past changes with their actual hours, to fit the interdependence factor. Use instead of interdependence_factor. |
| incident_cost_hours | number | Hours an incident costs; give it together with incident_likelihood |
| incident_likelihood | number | Chance that a change causes an incident; give it together with incident_cost_hours |
| projection_quarters | integer | Quarters to project (default 12) |
| interdependence_factor | number | How strongly coupled modules drag work along (default 0.5) |
| maintenance_hours_per_quarter | number | Maintenance hours per quarter |
| infrastructure_hours_per_quarter | number | Infrastructure hours per quarter |
| connascence_degree_change_per_quarter | number | Pro. Planned change in coupling per quarter (negative when you decouple) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"vacuum_effort",
"connascence_degree",
"coordination_hours",
"engineers",
"teams"
],
"properties": {
"teams": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Teams in the organization (not more than engineers)",
"exclusiveMinimum": 0
},
"levers": {
"type": "object",
"properties": {
"safety_net": {
"type": "boolean"
},
"decision_rights": {
"type": "boolean"
},
"human_interfaces": {
"type": "boolean"
},
"explain_before_merge": {
"type": "boolean"
}
},
"description": "Pro. Levers that put people back in the loop, or automate, where AI makes a cost worse: human_interfaces (people design and review every change that crosses a module boundary), explain_before_merge, safety_net (contract tests, monitoring, canary releases with automatic rollback) and decision_rights (decisions move to the teams that own the code). Each has its own cost. On Pro the response also has a plan with the cheapest mix of levers for every AI level."
},
"engineers": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Engineers in the organization",
"exclusiveMinimum": 0
},
"ai_adoption": {
"type": "object",
"required": [
"level"
],
"properties": {
"level": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
}
],
"description": "AI adoption level: 0 none, 1 coding help, 2 AI does all the coding, 3 AI does coding, checks, reviews and monitoring"
},
"quarters_at_level": {
"type": "number",
"minimum": 0,
"description": "Quarters the teams have been at this level"
}
},
"description": "AI adoption for every team. Leave it out for no AI."
},
"hourly_rate": {
"type": "number",
"description": "Cost of one engineering hour; adds dollar amounts to the results",
"exclusiveMinimum": 0
},
"team_adoption": {
"type": "array",
"items": {
"type": "object",
"required": [
"teams",
"level",
"quarters_at_level"
],
"properties": {
"level": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
}
],
"description": "AI adoption level: 0 none, 1 coding help, 2 AI does all the coding, 3 AI does coding, checks, reviews and monitoring"
},
"teams": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"quarters_at_level": {
"type": "number",
"minimum": 0
}
}
},
"minItems": 1,
"description": "Pro. Different AI levels per group of teams; the team counts must add up to teams. Use instead of ai_adoption."
},
"vacuum_effort": {
"type": "number",
"description": "Hours a typical change would take in a perfectly modular system",
"exclusiveMinimum": 0
},
"ai_assumptions": {
"type": "object",
"properties": {
"levels": {
"type": "object",
"properties": {
"1": {
"type": "object",
"properties": {
"ai_speedup": {
"type": "number",
"minimum": 0,
"description": "Share of own work time AI saves",
"exclusiveMaximum": 1
},
"review_share": {
"type": "number",
"minimum": 0,
"description": "Review time added, as a share of own work"
},
"event_response": {
"type": "number",
"minimum": 0,
"description": "Share of incident cost AI's reaction to events saves",
"exclusiveMaximum": 1
},
"automation_saving": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of maintenance and infrastructure work AI automates"
},
"understanding_kept": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of code understanding a team keeps for code AI writes"
}
}
},
"2": {
"type": "object",
"properties": {
"ai_speedup": {
"type": "number",
"minimum": 0,
"description": "Share of own work time AI saves",
"exclusiveMaximum": 1
},
"review_share": {
"type": "number",
"minimum": 0,
"description": "Review time added, as a share of own work"
},
"event_response": {
"type": "number",
"minimum": 0,
"description": "Share of incident cost AI's reaction to events saves",
"exclusiveMaximum": 1
},
"automation_saving": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of maintenance and infrastructure work AI automates"
},
"understanding_kept": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of code understanding a team keeps for code AI writes"
}
}
},
"3": {
"type": "object",
"properties": {
"ai_speedup": {
"type": "number",
"minimum": 0,
"description": "Share of own work time AI saves",
"exclusiveMaximum": 1
},
"review_share": {
"type": "number",
"minimum": 0,
"description": "Review time added, as a share of own work"
},
"event_response": {
"type": "number",
"minimum": 0,
"description": "Share of incident cost AI's reaction to events saves",
"exclusiveMaximum": 1
},
"automation_saving": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of maintenance and infrastructure work AI automates"
},
"understanding_kept": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of code understanding a team keeps for code AI writes"
}
}
}
}
},
"decision_penalty": {
"type": "number",
"minimum": 0
},
"incident_penalty": {
"type": "number",
"minimum": 0
},
"coordination_penalty": {
"type": "number",
"minimum": 0
},
"code_turnover_per_quarter": {
"type": "number",
"maximum": 1,
"exclusiveMinimum": 0
}
},
"description": "Pro. Your own AI values instead of the starting values"
},
"decision_people": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "People outside the teams who take part in a typical cross-team decision (default 2)"
},
"teams_per_change": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Teams a typical change crosses (not more than teams)",
"exclusiveMinimum": 0
},
"features_per_year": {
"type": "number",
"description": "Features shipped per year (default 20)",
"exclusiveMinimum": 0
},
"lever_assumptions": {
"type": "object",
"properties": {
"safety_net": {
"type": "object",
"properties": {
"cost_cut": {
"type": "number",
"minimum": 0,
"exclusiveMaximum": 1
},
"test_share": {
"type": "number",
"minimum": 0
},
"likelihood_cut": {
"type": "number",
"minimum": 0,
"exclusiveMaximum": 1
},
"build_hours_per_team": {
"type": "number",
"minimum": 0
},
"upkeep_hours_per_team_per_quarter": {
"type": "number",
"minimum": 0
}
}
},
"decision_rights": {
"type": "object",
"properties": {
"people_removed": {
"type": "number",
"maximum": 1,
"minimum": 0
},
"record_hours_per_change": {
"type": "number",
"minimum": 0
}
}
},
"human_interfaces": {
"type": "object",
"properties": {
"review_share": {
"type": "number",
"minimum": 0
},
"incident_share": {
"type": "number",
"maximum": 1,
"minimum": 0
},
"understanding_kept": {
"type": "number",
"maximum": 1,
"minimum": 0
}
}
},
"explain_before_merge": {
"type": "object",
"properties": {
"speedup_given_up": {
"type": "number",
"maximum": 1,
"minimum": 0
},
"understanding_recovered": {
"type": "number",
"maximum": 1,
"minimum": 0
}
}
}
},
"description": "Pro. Your own values for the levers instead of the starting values"
},
"connascence_degree": {
"type": "number",
"minimum": 0,
"description": "How many other modules usually change along with it (a count)"
},
"coordination_hours": {
"type": "number",
"minimum": 0,
"description": "Hours of meetings, threads and reviews the change causes"
},
"calibration_changes": {
"type": "array",
"items": {
"type": "object",
"required": [
"vacuum_effort",
"connascence_degree",
"coordination_hours",
"actual_hours"
],
"properties": {
"actual_hours": {
"type": "number",
"minimum": 0
},
"vacuum_effort": {
"type": "number",
"exclusiveMinimum": 0
},
"connascence_degree": {
"type": "number",
"minimum": 0
},
"coordination_hours": {
"type": "number",
"minimum": 0
}
}
},
"minItems": 1,
"description": "Pro. Past changes with their actual hours, to fit the interdependence factor. Use instead of interdependence_factor."
},
"incident_cost_hours": {
"type": "number",
"minimum": 0,
"description": "Hours an incident costs; give it together with incident_likelihood"
},
"incident_likelihood": {
"type": "number",
"minimum": 0,
"description": "Chance that a change causes an incident; give it together with incident_cost_hours",
"exclusiveMaximum": 1
},
"projection_quarters": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Quarters to project (default 12)"
},
"interdependence_factor": {
"type": "number",
"minimum": 0,
"description": "How strongly coupled modules drag work along (default 0.5)"
},
"maintenance_hours_per_quarter": {
"type": "number",
"minimum": 0,
"description": "Maintenance hours per quarter"
},
"infrastructure_hours_per_quarter": {
"type": "number",
"minimum": 0,
"description": "Infrastructure hours per quarter"
},
"connascence_degree_change_per_quarter": {
"type": "number",
"description": "Pro. Planned change in coupling per quarter (negative when you decouple)"
}
}
}Health check for the Complexity Cost Calculator API. No API key required.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 6, 2026.
What changed in this server's tools since we started watching, newest first. Each change is scanned again.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"vacuum_effort",
"connascence_degree",
"coordination_hours",
"engineers",
"teams"
],
"properties": {
"teams": {
"type": "integer",
"description": "Teams in the organization (not more than engineers)",
"exclusiveMinimum": 0
},
"levers": {
"type": "object",
"properties": {
"safety_net": {
"type": "boolean"
},
"decision_rights": {
"type": "boolean"
},
"human_interfaces": {
"type": "boolean"
},
"explain_before_merge": {
"type": "boolean"
}
},
"description": "Pro. Levers that put people back in the loop, or automate, where AI makes a cost worse: human_interfaces (people design and review every change that crosses a module boundary), explain_before_merge, safety_net (contract tests, monitoring, canary releases with automatic rollback) and decision_rights (decisions move to the teams that own the code). Each has its own cost. On Pro the response also has a plan with the cheapest mix of levers for every AI level.",
"additionalProperties": false
},
"engineers": {
"type": "integer",
"description": "Engineers in the organization",
"exclusiveMinimum": 0
},
"ai_adoption": {
"type": "object",
"required": [
"level"
],
"properties": {
"level": {
"enum": [
0,
1,
2,
3
],
"type": "number",
"description": "AI adoption level: 0 none, 1 coding help, 2 AI does all the coding, 3 AI does coding, checks, reviews and monitoring"
},
"quarters_at_level": {
"type": "number",
"minimum": 0,
"description": "Quarters the teams have been at this level"
}
},
"description": "AI adoption for every team. Leave it out for no AI.",
"additionalProperties": false
},
"hourly_rate": {
"type": "number",
"description": "Cost of one engineering hour; adds dollar amounts to the results",
"exclusiveMinimum": 0
},
"team_adoption": {
"type": "array",
"items": {
"type": "object",
"required": [
"teams",
"level",
"quarters_at_level"
],
"properties": {
"level": {
"$ref": "#/properties/ai_adoption/properties/level"
},
"teams": {
"type": "integer",
"exclusiveMinimum": 0
},
"quarters_at_level": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"minItems": 1,
"description": "Pro. Different AI levels per group of teams; the team counts must add up to teams. Use instead of ai_adoption."
},
"vacuum_effort": {
"type": "number",
"description": "Hours a typical change would take in a perfectly modular system",
"exclusiveMinimum": 0
},
"ai_assumptions": {
"type": "object",
"properties": {
"levels": {
"type": "object",
"properties": {
"1": {
"type": "object",
"properties": {
"ai_speedup": {
"type": "number",
"minimum": 0,
"description": "Share of own work time AI saves",
"exclusiveMaximum": 1
},
"review_share": {
"$ref": "#/properties/maintenance_hours_per_quarter",
"description": "Review time added, as a share of own work"
},
"event_response": {
"type": "number",
"minimum": 0,
"description": "Share of incident cost AI's reaction to events saves",
"exclusiveMaximum": 1
},
"automation_saving": {
"$ref": "#/properties/lever_assumptions/properties/human_interfaces/properties/understanding_kept",
"description": "Share of maintenance and infrastructure work AI automates"
},
"understanding_kept": {
"$ref": "#/properties/lever_assumptions/properties/human_interfaces/properties/understanding_kept",
"description": "Share of code understanding a team keeps for code AI writes"
}
},
"additionalProperties": false
},
"2": {
"$ref": "#/properties/ai_assumptions/properties/levels/properties/1"
},
"3": {
"$ref": "#/properties/ai_assumptions/properties/levels/properties/1"
}
},
"additionalProperties": false
},
"decision_penalty": {
"type": "number",
"minimum": 0
},
"incident_penalty": {
"type": "number",
"minimum": 0
},
"coordination_penalty": {
"type": "number",
"minimum": 0
},
"code_turnover_per_quarter": {
"type": "number",
"maximum": 1,
"exclusiveMinimum": 0
}
},
"description": "Pro. Your own AI values instead of the starting values",
"additionalProperties": false
},
"decision_people": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "People outside the teams who take part in a typical cross-team decision (default 2)"
},
"teams_per_change": {
"type": "integer",
"description": "Teams a typical change crosses (not more than teams)",
"exclusiveMinimum": 0
},
"features_per_year": {
"type": "number",
"description": "Features shipped per year (default 20)",
"exclusiveMinimum": 0
},
"lever_assumptions": {
"type": "object",
"properties": {
"safety_net": {
"type": "object",
"properties": {
"cost_cut": {
"type": "number",
"minimum": 0,
"exclusiveMaximum": 1
},
"test_share": {
"$ref": "#/properties/maintenance_hours_per_quarter"
},
"likelihood_cut": {
"type": "number",
"minimum": 0,
"exclusiveMaximum": 1
},
"build_hours_per_team": {
"$ref": "#/properties/maintenance_hours_per_quarter"
},
"upkeep_hours_per_team_per_quarter": {
"$ref": "#/properties/maintenance_hours_per_quarter"
}
},
"additionalProperties": false
},
"decision_rights": {
"type": "object",
"properties": {
"people_removed": {
"$ref": "#/properties/lever_assumptions/properties/human_interfaces/properties/understanding_kept"
},
"record_hours_per_change": {
"$ref": "#/properties/maintenance_hours_per_quarter"
}
},
"additionalProperties": false
},
"human_interfaces": {
"type": "object",
"properties": {
"review_share": {
"$ref": "#/properties/maintenance_hours_per_quarter"
},
"incident_share": {
"$ref": "#/properties/lever_assumptions/properties/human_interfaces/properties/understanding_kept"
},
"understanding_kept": {
"type": "number",
"maximum": 1,
"minimum": 0
}
},
"additionalProperties": false
},
"explain_before_merge": {
"type": "object",
"properties": {
"speedup_given_up": {
"$ref": "#/properties/lever_assumptions/properties/human_interfaces/properties/understanding_kept"
},
"understanding_recovered": {
"$ref": "#/properties/lever_assumptions/properties/human_interfaces/properties/understanding_kept"
}
},
"additionalProperties": false
}
},
"description": "Pro. Your own values for the levers instead of the starting values",
"additionalProperties": false
},
"connascence_degree": {
"type": "number",
"minimum": 0,
"description": "How many other modules usually change along with it (a count)"
},
"coordination_hours": {
"type": "number",
"minimum": 0,
"description": "Hours of meetings, threads and reviews the change causes"
},
"calibration_changes": {
"type": "array",
"items": {
"type": "object",
"required": [
"vacuum_effort",
"connascence_degree",
"coordination_hours",
"actual_hours"
],
"properties": {
"actual_hours": {
"type": "number",
"minimum": 0
},
"vacuum_effort": {
"type": "number",
"exclusiveMinimum": 0
},
"connascence_degree": {
"type": "number",
"minimum": 0
},
"coordination_hours": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"minItems": 1,
"description": "Pro. Past changes with their actual hours, to fit the interdependence factor. Use instead of interdependence_factor."
},
"incident_cost_hours": {
"$ref": "#/properties/maintenance_hours_per_quarter",
"description": "Hours an incident costs; give it together with incident_likelihood"
},
"incident_likelihood": {
"type": "number",
"minimum": 0,
"description": "Chance that a change causes an incident; give it together with incident_cost_hours",
"exclusiveMaximum": 1
},
"projection_quarters": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Quarters to project (default 12)"
},
"interdependence_factor": {
"type": "number",
"minimum": 0,
"description": "How strongly coupled modules drag work along (default 0.5)"
},
"maintenance_hours_per_quarter": {
"type": "number",
"minimum": 0,
"description": "Maintenance hours per quarter"
},
"infrastructure_hours_per_quarter": {
"$ref": "#/properties/maintenance_hours_per_quarter",
"description": "Infrastructure hours per quarter"
},
"connascence_degree_change_per_quarter": {
"type": "number",
"description": "Pro. Planned change in coupling per quarter (negative when you decouple)"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"vacuum_effort",
"connascence_degree",
"coordination_hours",
"engineers",
"teams"
],
"properties": {
"teams": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Teams in the organization (not more than engineers)",
"exclusiveMinimum": 0
},
"levers": {
"type": "object",
"properties": {
"safety_net": {
"type": "boolean"
},
"decision_rights": {
"type": "boolean"
},
"human_interfaces": {
"type": "boolean"
},
"explain_before_merge": {
"type": "boolean"
}
},
"description": "Pro. Levers that put people back in the loop, or automate, where AI makes a cost worse: human_interfaces (people design and review every change that crosses a module boundary), explain_before_merge, safety_net (contract tests, monitoring, canary releases with automatic rollback) and decision_rights (decisions move to the teams that own the code). Each has its own cost. On Pro the response also has a plan with the cheapest mix of levers for every AI level."
},
"engineers": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Engineers in the organization",
"exclusiveMinimum": 0
},
"ai_adoption": {
"type": "object",
"required": [
"level"
],
"properties": {
"level": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
}
],
"description": "AI adoption level: 0 none, 1 coding help, 2 AI does all the coding, 3 AI does coding, checks, reviews and monitoring"
},
"quarters_at_level": {
"type": "number",
"minimum": 0,
"description": "Quarters the teams have been at this level"
}
},
"description": "AI adoption for every team. Leave it out for no AI."
},
"hourly_rate": {
"type": "number",
"description": "Cost of one engineering hour; adds dollar amounts to the results",
"exclusiveMinimum": 0
},
"team_adoption": {
"type": "array",
"items": {
"type": "object",
"required": [
"teams",
"level",
"quarters_at_level"
],
"properties": {
"level": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
}
],
"description": "AI adoption level: 0 none, 1 coding help, 2 AI does all the coding, 3 AI does coding, checks, reviews and monitoring"
},
"teams": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"quarters_at_level": {
"type": "number",
"minimum": 0
}
}
},
"minItems": 1,
"description": "Pro. Different AI levels per group of teams; the team counts must add up to teams. Use instead of ai_adoption."
},
"vacuum_effort": {
"type": "number",
"description": "Hours a typical change would take in a perfectly modular system",
"exclusiveMinimum": 0
},
"ai_assumptions": {
"type": "object",
"properties": {
"levels": {
"type": "object",
"properties": {
"1": {
"type": "object",
"properties": {
"ai_speedup": {
"type": "number",
"minimum": 0,
"description": "Share of own work time AI saves",
"exclusiveMaximum": 1
},
"review_share": {
"type": "number",
"minimum": 0,
"description": "Review time added, as a share of own work"
},
"event_response": {
"type": "number",
"minimum": 0,
"description": "Share of incident cost AI's reaction to events saves",
"exclusiveMaximum": 1
},
"automation_saving": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of maintenance and infrastructure work AI automates"
},
"understanding_kept": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of code understanding a team keeps for code AI writes"
}
}
},
"2": {
"type": "object",
"properties": {
"ai_speedup": {
"type": "number",
"minimum": 0,
"description": "Share of own work time AI saves",
"exclusiveMaximum": 1
},
"review_share": {
"type": "number",
"minimum": 0,
"description": "Review time added, as a share of own work"
},
"event_response": {
"type": "number",
"minimum": 0,
"description": "Share of incident cost AI's reaction to events saves",
"exclusiveMaximum": 1
},
"automation_saving": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of maintenance and infrastructure work AI automates"
},
"understanding_kept": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of code understanding a team keeps for code AI writes"
}
}
},
"3": {
"type": "object",
"properties": {
"ai_speedup": {
"type": "number",
"minimum": 0,
"description": "Share of own work time AI saves",
"exclusiveMaximum": 1
},
"review_share": {
"type": "number",
"minimum": 0,
"description": "Review time added, as a share of own work"
},
"event_response": {
"type": "number",
"minimum": 0,
"description": "Share of incident cost AI's reaction to events saves",
"exclusiveMaximum": 1
},
"automation_saving": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of maintenance and infrastructure work AI automates"
},
"understanding_kept": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of code understanding a team keeps for code AI writes"
}
}
}
}
},
"decision_penalty": {
"type": "number",
"minimum": 0
},
"incident_penalty": {
"type": "number",
"minimum": 0
},
"coordination_penalty": {
"type": "number",
"minimum": 0
},
"code_turnover_per_quarter": {
"type": "number",
"maximum": 1,
"exclusiveMinimum": 0
}
},
"description": "Pro. Your own AI values instead of the starting values"
},
"decision_people": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "People outside the teams who take part in a typical cross-team decision (default 2)"
},
"teams_per_change": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Teams a typical change crosses (not more than teams)",
"exclusiveMinimum": 0
},
"features_per_year": {
"type": "number",
"description": "Features shipped per year (default 20)",
"exclusiveMinimum": 0
},
"lever_assumptions": {
"type": "object",
"properties": {
"safety_net": {
"type": "object",
"properties": {
"cost_cut": {
"type": "number",
"minimum": 0,
"exclusiveMaximum": 1
},
"test_share": {
"type": "number",
"minimum": 0
},
"likelihood_cut": {
"type": "number",
"minimum": 0,
"exclusiveMaximum": 1
},
"build_hours_per_team": {
"type": "number",
"minimum": 0
},
"upkeep_hours_per_team_per_quarter": {
"type": "number",
"minimum": 0
}
}
},
"decision_rights": {
"type": "object",
"properties": {
"people_removed": {
"type": "number",
"maximum": 1,
"minimum": 0
},
"record_hours_per_change": {
"type": "number",
"minimum": 0
}
}
},
"human_interfaces": {
"type": "object",
"properties": {
"review_share": {
"type": "number",
"minimum": 0
},
"incident_share": {
"type": "number",
"maximum": 1,
"minimum": 0
},
"understanding_kept": {
"type": "number",
"maximum": 1,
"minimum": 0
}
}
},
"explain_before_merge": {
"type": "object",
"properties": {
"speedup_given_up": {
"type": "number",
"maximum": 1,
"minimum": 0
},
"understanding_recovered": {
"type": "number",
"maximum": 1,
"minimum": 0
}
}
}
},
"description": "Pro. Your own values for the levers instead of the starting values"
},
"connascence_degree": {
"type": "number",
"minimum": 0,
"description": "How many other modules usually change along with it (a count)"
},
"coordination_hours": {
"type": "number",
"minimum": 0,
"description": "Hours of meetings, threads and reviews the change causes"
},
"calibration_changes": {
"type": "array",
"items": {
"type": "object",
"required": [
"vacuum_effort",
"connascence_degree",
"coordination_hours",
"actual_hours"
],
"properties": {
"actual_hours": {
"type": "number",
"minimum": 0
},
"vacuum_effort": {
"type": "number",
"exclusiveMinimum": 0
},
"connascence_degree": {
"type": "number",
"minimum": 0
},
"coordination_hours": {
"type": "number",
"minimum": 0
}
}
},
"minItems": 1,
"description": "Pro. Past changes with their actual hours, to fit the interdependence factor. Use instead of interdependence_factor."
},
"incident_cost_hours": {
"type": "number",
"minimum": 0,
"description": "Hours an incident costs; give it together with incident_likelihood"
},
"incident_likelihood": {
"type": "number",
"minimum": 0,
"description": "Chance that a change causes an incident; give it together with incident_cost_hours",
"exclusiveMaximum": 1
},
"projection_quarters": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Quarters to project (default 12)"
},
"interdependence_factor": {
"type": "number",
"minimum": 0,
"description": "How strongly coupled modules drag work along (default 0.5)"
},
"maintenance_hours_per_quarter": {
"type": "number",
"minimum": 0,
"description": "Maintenance hours per quarter"
},
"infrastructure_hours_per_quarter": {
"type": "number",
"minimum": 0,
"description": "Infrastructure hours per quarter"
},
"connascence_degree_change_per_quarter": {
"type": "number",
"description": "Pro. Planned change in coupling per quarter (negative when you decouple)"
}
}
}