ROI, NPV, IRR, payback period, and total cost of ownership analysis for investment decisions. Use when building financial justification for projects, evaluating SaaS investments, or comparing alternatives.
View on GitHubFebruary 4, 2026
Select agents to install to:
npx add-skill https://github.com/yonatangross/skillforge-claude-plugin/blob/main/plugins/ork/skills/business-case-analysis/SKILL.md -a claude-code --skill business-case-analysisInstallation paths:
.claude/skills/business-case-analysis/# Business Case Analysis
Financial frameworks for justifying investments, evaluating projects, and comparing alternatives.
## Key Financial Metrics
### Return on Investment (ROI)
Simple measure of profitability relative to cost.
```
ROI = (Net Benefits - Total Costs) / Total Costs × 100%
```
**Example:**
```
Project cost: $500,000
Annual benefits: $200,000 over 5 years
Total benefits: $1,000,000
ROI = ($1,000,000 - $500,000) / $500,000 × 100% = 100%
```
**Limitation:** Does not account for time value of money.
### Net Present Value (NPV)
Gold standard for project evaluation—discounts future cash flows to present value.
```
NPV = Σ (Cash Flow_t / (1 + r)^t) - Initial Investment
```
Where:
- `t` = time period
- `r` = discount rate (cost of capital)
**Example:**
```python
def calculate_npv(
initial_investment: float,
cash_flows: list[float],
discount_rate: float = 0.10 # 10% typical
) -> float:
npv = -initial_investment
for t, cf in enumerate(cash_flows, start=1):
npv += cf / ((1 + discount_rate) ** t)
return npv
# Example: $500K investment, $200K/year for 5 years
npv = calculate_npv(500_000, [200_000] * 5, 0.10)
# NPV = $258,157 (positive = good investment)
```
**Decision Rule:**
- NPV > 0: Accept (creates value)
- NPV < 0: Reject (destroys value)
- NPV = 0: Indifferent
### Internal Rate of Return (IRR)
The discount rate at which NPV equals zero.
```python
def calculate_irr(cash_flows: list[float]) -> float:
"""
cash_flows[0] is initial investment (negative)
Returns the IRR as a decimal
"""
from scipy.optimize import brentq
def npv_at_rate(r):
return sum(cf / (1 + r) ** t for t, cf in enumerate(cash_flows))
return brentq(npv_at_rate, -0.99, 10.0)
# Example: -$500K initial, then $200K/year for 5 years
irr = calculate_irr([-500_000, 200_000, 200_000, 200_000, 200_000, 200_000])
# IRR ≈ 28.6%
```
**Decision Rule:**
- IRR > hurdle rate (cost of capital): Accept
- IRR < hurdle rate: