Your company’s Kubernetes cluster is an asset. It required capital to build—cloud spend, engineering time, tooling. It generates value by running production workloads. But unlike the servers in your finance team’s depreciation schedule, this asset is invisible on the balance sheet.
That’s a problem. Because like any asset, it’s losing value every day.
The Invisible Depreciation ¶
In accounting, depreciation spreads an asset’s cost over its useful life. A $50,000 server might depreciate over 5 years—$10,000 per year hitting the P&L. Everyone understands: assets wear out, and you need to budget for replacement.
Kubernetes clusters depreciate too. But this depreciation is invisible:
- No line item in the budget
- No scheduled replacement cost
- No CFO asking “when do we need to refresh this?”
So leadership assumes: if it’s running, it’s fine. If it ain’t broke, don’t fix it.
Meanwhile, the cluster is rotting.
The Depreciation Timeline ¶
Here’s what happens to a Kubernetes cluster if you “just keep it running”:
| Age | Status | What’s Happening |
|---|---|---|
| 0 months | Current | Fully supported, latest security patches |
| 4 months | n-1 | One minor version behind, still supported |
| 8 months | n-2 | Two versions behind, approaching end of support |
| 12 months | n-3 | Out of standard support window |
| 18 months | Legacy | Ecosystem moving on, tools dropping support |
| 24 months | Liability | Upgrade is now a project, not a task |
| 36 months | Crisis | Major security risk, compliance issues, engineers refuse to touch it |
Kubernetes releases three minor versions per year. Each version is supported for roughly 14 months. Stand still for a year, and you’re outside the support window.
But the real depreciation isn’t just version numbers—it’s everything that accumulates.
The Components of Cluster Depreciation ¶
1. Security Depreciation ¶
Every day your cluster ages, the attack surface grows:
CVEs disclosed against your version: accumulating
Patches available: not applicable to your version
Compliance auditors: increasingly concerned
A CVE against Kubernetes 1.27 might be patched in 1.27.8. But if you’re on 1.25, that patch doesn’t exist for you. You’re exposed until you upgrade.
Cost: Security incidents average $4.45M (IBM 2023). Even near-misses cost audit cycles, executive attention, and engineering firefighting.
2. Ecosystem Depreciation ¶
The Kubernetes ecosystem doesn’t wait for you:
Helm charts: "Requires Kubernetes 1.26+"
Operators: "Dropping support for 1.25 in next release"
Service mesh: "New features only available on 1.27+"
Cloud provider: "EKS 1.24 end of support: March 2024"
At first, you work around it. Pin old versions. Fork charts. Skip features. But workarounds compound:
| Months Behind | Workarounds Required |
|---|---|
| 6 | Occasional, minor |
| 12 | Regular, annoying |
| 18 | Constant, blocking new tools |
| 24 | Ecosystem has moved on |
Cost: Engineering time on workarounds, inability to adopt new tools, vendor support limitations.
3. API Depreciation ¶
Kubernetes deprecates APIs on a schedule. What works today may not work tomorrow:
# This worked in 1.21
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
# Required since 1.22
apiVersion: networking.k8s.io/v1
kind: Ingress
Skip one version? You update your manifests. Skip three versions? You’re updating hundreds of manifests, Helm charts, operators, and hoping nothing breaks.
Cost: The “API deprecation cliff”—upgrades become migrations, migrations become projects, projects need quarters.
4. Knowledge Depreciation ¶
Your team’s knowledge has a half-life too:
- Engineers learn the current ecosystem, not your legacy version
- New hires have never seen your old patterns
- Stack Overflow answers assume recent versions
- Training materials move on
Cost: Onboarding time, tribal knowledge dependencies, reduced hiring pool.
5. Talent Depreciation ¶
Engineers don’t want to work on legacy infrastructure:
“What version of Kubernetes are you running?” “1.24.” “…I have another offer.”
Your cluster’s age signals technical culture. Modern cluster = modern practices. Legacy cluster = red flag.
Cost: Hiring difficulty, retention risk, salary premium for “legacy” work.
Upgrade Debt: The Hidden Liability ¶
Technical debt is a familiar concept. Upgrade debt is its infrastructure cousin:
Upgrade debt = the accumulated cost of deferred upgrades
Like financial debt, it accrues interest:
| Upgrade Frequency | Effort per Upgrade | Annual Effort |
|---|---|---|
| Every 4 months | 2 days | 6 days |
| Every 8 months | 1 week | 6.5 days |
| Every 12 months | 2 weeks | 10 days |
| Every 24 months | 1-2 months | 15-30 days |
| Every 36 months | Quarter-long project | 40+ days |
The math is counterintuitive: upgrading more often costs less total time.
Why? Because upgrade complexity isn’t linear:
1 version jump: Minor API changes, quick testing
2 version jumps: Multiple deprecations, moderate testing
3 version jumps: Breaking changes stack, extensive testing
4+ version jumps: Essentially a migration project
Deferring upgrades feels like saving time. It’s actually borrowing time at high interest.
The “If It Ain’t Broke” Fallacy ¶
When leadership says “if it ain’t broke, don’t fix it,” they’re making an accounting error. They see:
Upgrade cost: $X (visible)
Current state: Working (visible)
Conclusion: Don't spend $X
They don’t see:
Security exposure: Accumulating (invisible)
Ecosystem drift: Accumulating (invisible)
Upgrade debt interest: Accumulating (invisible)
Talent risk: Accumulating (invisible)
Future upgrade cost: Growing (invisible)
The cluster looks fine because the depreciation hasn’t hit the P&L yet. But it will—as a security incident, a failed audit, a blocked feature, a departed engineer, or a crisis upgrade project.
Quantifying Cluster Depreciation ¶
Here’s a framework to make depreciation visible:
Security Risk Cost ¶
Annual CVE exposure probability: 20% (estimate for unsupported versions)
Average incident cost: $500K (your estimate—could be much higher)
Expected annual cost: $100K
Ecosystem Drift Cost ¶
Engineering hours on workarounds: 10 hrs/month
Fully-loaded engineer cost: $150/hr
Annual cost: $18K
Upgrade Debt Interest ¶
Current upgrade effort: 1 week (if done now)
Upgrade effort in 12 months: 1 month
Additional cost: 3 weeks × $6K/week = $18K
Talent Risk Cost ¶
Probability of losing engineer due to legacy stack: 10%
Replacement cost: $50K (recruiting, onboarding, ramp-up)
Expected annual cost: $5K per engineer
Team of 5: $25K
Total Annual Depreciation ¶
Security risk: $100K
Ecosystem drift: $18K
Upgrade debt: $18K
Talent risk: $25K
─────────────────────────
Total: $161K/year
This is a rough model—your numbers will vary. The point isn’t precision; it’s visibility. Now depreciation has a number. Now it can be budgeted.
The Continuous Upgrade Model ¶
The alternative to crisis upgrades is continuous upgrades:
Traditional: Upgrade when forced (every 18-24 months)
Continuous: Upgrade on schedule (every 4-6 months)
What Continuous Looks Like ¶
| Activity | Frequency | Effort |
|---|---|---|
| Minor version upgrade | Every 4 months | 1-2 days |
| Test suite run | Every upgrade | Automated |
| API deprecation fixes | As encountered | Hours |
| Ecosystem updates | Continuous | Part of normal work |
The Investment Case ¶
Continuous upgrade cost: 6 days/year
Crisis upgrade cost: 20-40 days/year (amortized)
Net savings: 14-34 days/year
Plus avoided costs:
- Security incidents
- Ecosystem workarounds
- Talent churn
- Compliance findings
Continuous upgrades aren’t overhead—they’re maintenance capex that prevents much larger costs.
Making the Business Case ¶
When requesting upgrade budget, don’t say:
“We need to upgrade Kubernetes because we’re behind.”
Say:
“Our cluster is a depreciating asset. Every quarter we defer upgrades costs us approximately $40K in accumulated risk, engineering workarounds, and growing upgrade debt. I’m requesting 6 engineering days per year to maintain the asset and avoid a $150K+ crisis project in 18 months.”
Frame it in terms leadership understands:
| Technical Term | Business Term |
|---|---|
| “We’re on an old version” | “The asset is past its useful life” |
| “We have upgrade debt” | “We have deferred maintenance liability” |
| “We might have security issues” | “We have unquantified risk exposure” |
| “Engineers don’t like it” | “We have talent retention risk” |
| “We should upgrade” | “We should service the asset before it fails” |
The Depreciation Schedule ¶
Just like finance depreciates servers, create a depreciation schedule for your cluster:
Asset: Production Kubernetes Cluster
Useful life: 12 months (3 minor versions)
Depreciation method: Straight-line
Maintenance requirement: Quarterly upgrades
Q1: Upgrade to 1.29 (2 days)
Q2: Upgrade to 1.30 (2 days)
Q3: Upgrade to 1.31 (2 days)
Q4: Upgrade to 1.32 (2 days)
Annual maintenance budget: 8 engineering days
Alternative (deferred): 30+ day project in 2 years
Put it in the infrastructure budget. Review it quarterly. Treat it like any other asset maintenance.
When Standing Still Makes Sense ¶
To be fair, there are cases where deferring upgrades is rational:
- End-of-life workload: The system is being decommissioned anyway
- Compliance freeze: Auditors require stability during assessment period
- Resource constraints: Genuinely no capacity (but count the cost)
- Risk window: Approaching a critical business period (holiday traffic)
But these should be explicit decisions with explicit costs, not default inaction.
Summary ¶
Your Kubernetes cluster is an asset. Assets depreciate. The depreciation is real whether you account for it or not.
| Aspect | Visible | Invisible (but real) |
|---|---|---|
| Cloud spend | ✓ | |
| Engineering salaries | ✓ | |
| Security risk | ✓ | |
| Ecosystem drift | ✓ | |
| Upgrade debt | ✓ | |
| Talent risk | ✓ |
The choice isn’t whether to pay for depreciation. It’s whether to pay incrementally (continuous upgrades) or all at once (crisis project).
Continuous upgrades cost less total effort, avoid crisis projects, reduce security exposure, keep the ecosystem accessible, and make your infrastructure attractive to talent.
Make the depreciation visible. Budget for it. Maintain the asset.
Because “if it ain’t broke” is just “the depreciation hasn’t hit the P&L yet.”