Incremental Change Impact
Overview
Identify full impact scope before making changes. Trace dependencies, enumerate affected
components, and assess cascading effects. Prevents blind changes that break unrelated systems.
REQUIRED: superpowers:verification-before-completion
When to Use
- User proposes changes, refactoring, or feature additions
- User asks "what will this affect?" or "what needs testing?"
- Before structural changes (renaming, moving, deleting)
- Before configuration changes (timeouts, thresholds, limits)
- When reviewing change proposals for impact
Core Workflow
- Identify change type (rename, add, modify, delete, config)
- Trace direct dependencies (callers, imports, references)
- Trace indirect dependencies (reflection, serialization, dynamic loading)
- Identify affected tests (unit, integration, e2e)
- Check non-code impacts (docs, configs, external APIs)
- Assess cascading effects (timeouts, retries, error handling)
- Provide risk assessment (breaking vs non-breaking, severity)
- Recommend verification approach
See references/dependency-analysis.md, references/impact-matrix.md,
and references/tooling.md for detailed techniques.
Quick Reference
| Change Type |
Typical Impact Areas |
| Method rename |
Callers, tests, reflection, serialization, docs, APIs |
| Add caching |
Invalidation points, transactions, all consumers |
| Config change |
Cascading timeouts, retries, health checks |
| Schema change |
Data access, migrations, backward compatibility |
| Delete component |
All dependents, error handling, fallback paths |
Red Flags - STOP
- "It's just a rename/config change"
- "IDE/compiler will catch it"
- "Tests will tell us if it breaks"
- "Too urgent to analyze"
- "Already done, let's ship"
All mean: Apply skill to identify full impact before proceeding.
Rationalizations Table
| Excuse |
Reality |
| "It's just a simple rename" |
Dynamic usage, reflection, external APIs make renames risky. |
| "IDE will catch all usages" |
IDE misses reflection, serialization, config files, docs. |
| "Tests will fail if broken" |
Tests may not cover all paths. Identify impact before, not after. |
| "This is an internal change" |
Internal changes cascade through timeouts, retries, monitoring. |
| "Too urgent to analyze" |
5-minute analysis prevents hours of production debugging. |
| "Already done, just ship" |
Sunk cost fallacy. Identify impact before deployment. |
Evidence Checklist
Dependency Tracing Commands
.NET (C#)
# Find all references to a type/method using dotnet CLI
dotnet build --no-incremental 2>&1 | grep "error CS"
# Using grep for direct references
grep -rn "ClassName" --include="*.cs" src/
# Using Roslyn analyzers (via dotnet format)
dotnet format analyzers --diagnostics=IDE0051 # Find unused members
# NuGet dependency graph
dotnet list package --include-transitive
TypeScript/JavaScript
# Find imports of a module
grep -rn "from ['\"].*moduleName" --include="*.ts" --include="*.tsx" src/
# Using madge for dependency graph
npx madge --circular src/ # Find circular deps
npx madge --depends-on src/utils/helper.ts src/ # Find dependents
# TypeScript compiler for unused exports
npx ts-prune # Find unused exports
Python
# Find imports using grep
grep -rn "^from module import\|^import module" --include="*.py" src/
# Using pipdeptree for package dependencies
pipdeptree --reverse --packages mypackage
# Using vulture for dead code
vulture src/ # Find unused code
# AST-based analysis
python -c "import ast; print(ast.dump(ast.parse(open('file.py').read())))"
Go
# Find package usages
go list -f '{{.ImportPath}} {{.Imports}}' ./... | grep "target/package"
# Reverse dependencies
go mod why -m github.com/org/package
# Find all callers of a function
grep -rn "FunctionName(" --include="*.go" .
Java
# Using jdeps for module dependencies
jdeps --module-path mods -s myapp.jar
# Gradle dependencies
./gradlew dependencies --configuration compileClasspath
# Find class references
grep -rn "ClassName" --include="*.java" src/
Recording Findings Template
# Impact Analysis: [Change Description]
**Date**: YYYY-MM-DD
**Analyst**: [Name]
**Change Type**: [rename|add|modify|delete|config]
## Summary
[1-2 sentence description of the proposed change]
## Direct Dependencies
| File | Line | Usage Type | Risk |
| --------------------------- | ---- | --------------------- | ------ |
| src/api/UserController.cs | 42 | Method call | Medium |
| src/services/AuthService.cs | 118 | Constructor injection | High |
## Indirect Dependencies
| Category | Finding | Risk |
| ------------- | ---------------------------------- | ------ |
| Reflection | Used in DI container registration | High |
| Serialization | JSON property name in API response | Medium |
| Configuration | Referenced in appsettings.json | Low |
## Affected Tests
| Test Category | Count | Files |
| ------------- | ----- | ----------------------------- |
| Unit | 12 | tests/unit/UserTests.cs, ... |
| Integration | 3 | tests/integration/ApiTests.cs |
| E2E | 1 | tests/e2e/LoginFlow.spec.ts |
## Non-Code Impacts
- [ ] API documentation needs update
- [ ] README references this component
- [ ] External API consumers may be affected
## Risk Assessment
**Breaking Change**: Yes/No
**Severity**: High/Medium/Low
**Recommended Approach**: [Incremental migration with feature flag / Direct replacement / etc.]
## Verification Plan
1. Run affected unit tests: `dotnet test --filter "Category=User"`
2. Run integration tests: `dotnet test --filter "Category=Integration"`
3. Manual verification: [specific steps]
1---2name: incremental-change-impact3description: Use when user proposes changes, refactoring, or feature additions; asks about impact, affected components, or what needs testing; or before making structural changes. Identifies blast radius and cascading effects.4metadata:5 type: Process6 priority: P37---89# Incremental Change Impact1011## Overview1213Identify full impact scope **before** making changes. Trace dependencies, enumerate affected14components, and assess cascading effects. Prevents blind changes that break unrelated systems.1516**REQUIRED:** superpowers:verification-before-completion1718## When to Use1920- User proposes changes, refactoring, or feature additions21- User asks "what will this affect?" or "what needs testing?"22- Before structural changes (renaming, moving, deleting)23- Before configuration changes (timeouts, thresholds, limits)24- When reviewing change proposals for impact2526## Core Workflow27281. **Identify change type** (rename, add, modify, delete, config)292. **Trace direct dependencies** (callers, imports, references)303. **Trace indirect dependencies** (reflection, serialization, dynamic loading)314. **Identify affected tests** (unit, integration, e2e)325. **Check non-code impacts** (docs, configs, external APIs)336. **Assess cascading effects** (timeouts, retries, error handling)347. **Provide risk assessment** (breaking vs non-breaking, severity)358. **Recommend verification approach**3637See `references/dependency-analysis.md`, `references/impact-matrix.md`,38and `references/tooling.md` for detailed techniques.3940## Quick Reference4142| Change Type | Typical Impact Areas |43| ---------------- | ----------------------------------------------------- |44| Method rename | Callers, tests, reflection, serialization, docs, APIs |45| Add caching | Invalidation points, transactions, all consumers |46| Config change | Cascading timeouts, retries, health checks |47| Schema change | Data access, migrations, backward compatibility |48| Delete component | All dependents, error handling, fallback paths |4950## Red Flags - STOP5152- "It's just a rename/config change"53- "IDE/compiler will catch it"54- "Tests will tell us if it breaks"55- "Too urgent to analyze"56- "Already done, let's ship"5758**All mean: Apply skill to identify full impact before proceeding.**5960## Rationalizations Table6162| Excuse | Reality |63| ---------------------------- | ----------------------------------------------------------------- |64| "It's just a simple rename" | Dynamic usage, reflection, external APIs make renames risky. |65| "IDE will catch all usages" | IDE misses reflection, serialization, config files, docs. |66| "Tests will fail if broken" | Tests may not cover all paths. Identify impact before, not after. |67| "This is an internal change" | Internal changes cascade through timeouts, retries, monitoring. |68| "Too urgent to analyze" | 5-minute analysis prevents hours of production debugging. |69| "Already done, just ship" | Sunk cost fallacy. Identify impact before deployment. |7071## Evidence Checklist7273- [ ] Change type identified explicitly74- [ ] All direct dependencies listed with file paths75- [ ] Indirect dependencies checked (reflection, serialization, configs)76- [ ] Affected tests identified by category (unit, integration, e2e)77- [ ] Non-code impacts included (docs, external APIs, configs)78- [ ] Cascading effects assessed if applicable79- [ ] Risk assessment provided (breaking/non-breaking, severity)80- [ ] Verification approach recommended8182## Dependency Tracing Commands8384### .NET (C#)8586```bash87# Find all references to a type/method using dotnet CLI88dotnet build --no-incremental 2>&1 | grep "error CS"8990# Using grep for direct references91grep -rn "ClassName" --include="*.cs" src/9293# Using Roslyn analyzers (via dotnet format)94dotnet format analyzers --diagnostics=IDE0051 # Find unused members9596# NuGet dependency graph97dotnet list package --include-transitive98```99100### TypeScript/JavaScript101102```bash103# Find imports of a module104grep -rn "from ['\"].*moduleName" --include="*.ts" --include="*.tsx" src/105106# Using madge for dependency graph107npx madge --circular src/ # Find circular deps108npx madge --depends-on src/utils/helper.ts src/ # Find dependents109110# TypeScript compiler for unused exports111npx ts-prune # Find unused exports112```113114### Python115116```bash117# Find imports using grep118grep -rn "^from module import\|^import module" --include="*.py" src/119120# Using pipdeptree for package dependencies121pipdeptree --reverse --packages mypackage122123# Using vulture for dead code124vulture src/ # Find unused code125126# AST-based analysis127python -c "import ast; print(ast.dump(ast.parse(open('file.py').read())))"128```129130### Go131132```bash133# Find package usages134go list -f '{{.ImportPath}} {{.Imports}}' ./... | grep "target/package"135136# Reverse dependencies137go mod why -m github.com/org/package138139# Find all callers of a function140grep -rn "FunctionName(" --include="*.go" .141```142143### Java144145```bash146# Using jdeps for module dependencies147jdeps --module-path mods -s myapp.jar148149# Gradle dependencies150./gradlew dependencies --configuration compileClasspath151152# Find class references153grep -rn "ClassName" --include="*.java" src/154```155156## Recording Findings Template157158```markdown159# Impact Analysis: [Change Description]160161**Date**: YYYY-MM-DD162**Analyst**: [Name]163**Change Type**: [rename|add|modify|delete|config]164165## Summary166167[1-2 sentence description of the proposed change]168169## Direct Dependencies170171| File | Line | Usage Type | Risk |172| --------------------------- | ---- | --------------------- | ------ |173| src/api/UserController.cs | 42 | Method call | Medium |174| src/services/AuthService.cs | 118 | Constructor injection | High |175176## Indirect Dependencies177178| Category | Finding | Risk |179| ------------- | ---------------------------------- | ------ |180| Reflection | Used in DI container registration | High |181| Serialization | JSON property name in API response | Medium |182| Configuration | Referenced in appsettings.json | Low |183184## Affected Tests185186| Test Category | Count | Files |187| ------------- | ----- | ----------------------------- |188| Unit | 12 | tests/unit/UserTests.cs, ... |189| Integration | 3 | tests/integration/ApiTests.cs |190| E2E | 1 | tests/e2e/LoginFlow.spec.ts |191192## Non-Code Impacts193194- [ ] API documentation needs update195- [ ] README references this component196- [ ] External API consumers may be affected197198## Risk Assessment199200**Breaking Change**: Yes/No201**Severity**: High/Medium/Low202**Recommended Approach**: [Incremental migration with feature flag / Direct replacement / etc.]203204## Verification Plan2052061. Run affected unit tests: `dotnet test --filter "Category=User"`2072. Run integration tests: `dotnet test --filter "Category=Integration"`2083. Manual verification: [specific steps]209```