---
id: wiki-2026-0508-power-creep
title: Power Creep
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Power Creep, 파워 크립, 밸런스 인플레이션]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [game-design, balance, live-ops, monetization]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
  language: design
  framework: live-ops
---

# Power Creep

## 매 한 줄
> **"매 새 content는 매 old content보다 강해야 매 sells"**. Power creep은 매 live-service game에서 매 신규 unit/card/weapon이 매 기존보다 점진적으로 강해지는 매 balance drift 현상. 매 monetization pressure와 매 player engagement 사이 매 tension에서 발생.

## 매 핵심

### 매 발생 mechanism
- **매 economic incentive**: 매 신규 hero pull 유도 위해 매 stronger stats 부여.
- **매 numeric inflation**: 매 HP/DMG 절댓값이 매 patch마다 매 5–15% 상승.
- **매 ability complexity**: 매 신규 unit이 매 더 많은 keyword (cleave + lifesteal + immunity).
- **매 retroactive obsolescence**: 매 old roster가 매 PvE/PvP에서 매 unviable.

### 매 증상 vs 매 healthy iteration
- **Creep**: 매 new > old (strict dominance) → roster 축소.
- **Sidegrade**: 매 new ≠ old (matchup-dependent) → roster 확장.
- **매 Rotation**: 매 old를 매 explicitly retire (Hearthstone Standard).

### 매 응용
1. Hearthstone Standard rotation (yearly Set retire).
2. Genshin Impact 5-star sidegrade (element-niche).
3. League of Legends VGU + item rework.

## 💻 패턴

### Numeric drift detection
```python
# Patch-over-patch stat inflation tracker
import pandas as pd

def detect_creep(units_df: pd.DataFrame, baseline_patch: str) -> pd.DataFrame:
    base = units_df[units_df.patch == baseline_patch].set_index("name")
    latest = units_df.groupby("name").last()
    delta = (latest[["hp", "dmg"]] - base[["hp", "dmg"]]) / base[["hp", "dmg"]]
    return delta[(delta.hp > 0.1) | (delta.dmg > 0.1)].sort_values("dmg", ascending=False)
```

### Sidegrade design constraint
```python
# Enforce no strict dominance in unit pool
def is_sidegrade(new_unit, pool):
    for old in pool:
        dominated = all(getattr(new_unit, s) >= getattr(old, s) for s in ["hp", "dmg", "speed"])
        strictly = any(getattr(new_unit, s) > getattr(old, s) for s in ["hp", "dmg", "speed"])
        if dominated and strictly:
            return False
    return True
```

### Rotation calendar
```yaml
# rotation.yaml — Standard format
sets:
  - name: Core
    rotates: never
  - name: Eternal_2024
    rotates: 2026-Q3
  - name: Voyage_2025
    rotates: 2027-Q3
```

### Catch-up mechanic
```python
# Older units gain free re-tuning each major patch
def catchup_buff(unit, age_patches):
    if age_patches >= 4 and unit.pickrate < 0.02:
        unit.dmg = round(unit.dmg * 1.08)
```

### ELO-weighted balance
```python
# Buff units underperforming at high ELO only
def needs_buff(stats):
    return stats.high_elo_winrate < 0.47 and stats.low_elo_winrate > 0.50
```

## 매 결정 기준
| 상황 | Approach |
|---|---|
| Live PvP game | Sidegrade + rotation |
| Gacha PvE | Controlled creep + catch-up banners |
| Collectible TCG | Annual Standard rotation |
| Single-player RPG | Creep OK (no competitive frame) |

**기본값**: Sidegrade design + 매 rotation/catch-up safety net.

## 🔗 Graph
- 부모: [[Game-Balance]] · [[Live-Ops]]
- 변형: [[Sidegrade-Design]] · [[Rotation-Format]] · [[Catch-Up-Mechanic]]
- 응용: [[Hearthstone]] · [[Genshin-Impact]] · [[League-of-Legends]]
- Adjacent: [[Monetization]] · [[Retention-Curve]] · [[Meta-Game]]

## 🤖 LLM 활용
**언제**: balance patch note 분석, stat-drift detection, 매 design review.
**언제 X**: 매 single-player narrative game (creep is acceptable).

## ❌ 안티패턴
- **매 Mudflation 무시**: 매 절댓값 inflation을 매 무한 허용.
- **매 Pay-to-skip-only-creep**: 매 신규 unit을 매 paywall 뒤에서만 강하게.
- **매 No retire path**: 매 old roster를 매 영구 obsolete 상태로 방치.
- **매 매 patch마다 power 5%↑**: 매 compound inflation으로 매 design space 고갈.

## 🧪 검증 / 중복
- Verified (Schreiber & Romero "Game Balance" 2021, Riot dev blogs 2024–2025).
- 신뢰도 A.

## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — power creep mechanism + sidegrade/rotation patterns |
