---
id: wiki-2026-0508-automation-paradox
title: Automation Paradox
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Paradox of Automation, Bainbridge's Ironies, Lights-Out Fallacy]
duplicate_of: none
source_trust_level: A
confidence_score: 0.92
verification_status: applied
tags: [human-factors, automation, ai-safety, ergonomics, system-design]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
  language: n/a
  framework: human-factors / HRO
---

# Automation Paradox

## 매 한 줄
> **"매 자동화 의 better 일수록, human operator 의 role 의 critical 의 increase — skill atrophy 와 vigilance decrement 의 통한 catastrophic edge-case 의 amplification"**. Lisanne Bainbridge (1983) "Ironies of Automation" 의 origin, 2026 의 LLM agent + autonomous vehicle + algorithmic trading 의 era 의 acute relevance.

## 매 핵심

### 매 4 ironies (Bainbridge)
- **Designer 의 error**: automation 의 design 의 bug 의 operator 의 inherit
- **Skill atrophy**: routine-task 의 takeover 의 인해 human skill 의 decay → emergency 의 unable
- **Monitoring task**: vigilance 의 인해 의 unsuited 의 task 의 human 의 assign
- **Trust calibration**: under-trust (rejection) 또는 over-trust (complacency) 의 binary failure

### 매 mechanisms
- **Out-of-the-loop unfamiliarity (OOTLUF)** — automation handover 의 시 의 operator 의 context 의 lack
- **Mode confusion** — automation 의 current state 의 mismatch (Air France 447, Tesla autopilot)
- **Skill decay curve** — manual skill 의 disuse 의 인해 의 exponential degradation (~6 months)
- **Calibration drift** — automation 의 reliability 의 over-extrapolation

### 매 응용
1. Autonomous vehicle handover — Level 2/3 의 6-second take-over budget 의 unrealistic.
2. LLM coding agent — generated code 의 review 의 automation bias 의 인해 의 bug 의 miss.
3. Algorithmic trading kill-switch — flash-crash 의 인간 의 intervention 의 too late.
4. Aviation glass cockpit — Air France 447 (2009) 의 stall 의 mode confusion.

## 💻 패턴

### Trust calibration metric (TLX-derived)
```python
from dataclasses import dataclass

@dataclass
class TrustCalibration:
    perceived_reliability: float  # 0-1, operator estimate
    actual_reliability: float     # 0-1, measured
    
    @property
    def miscalibration(self) -> float:
        """Positive => over-trust, negative => under-trust."""
        return self.perceived_reliability - self.actual_reliability
    
    def risk_class(self) -> str:
        gap = self.miscalibration
        if gap > 0.15:  return "OVER_TRUST_DANGER"
        if gap < -0.15: return "REJECTION_DANGER"
        return "CALIBRATED"
```

### Vigilance decrement model
```python
import numpy as np

def vigilance_curve(t_minutes: np.ndarray, base_hit_rate: float = 0.95) -> np.ndarray:
    """Mackworth clock — 30-min decrement of ~0.2 in detection."""
    decay = 0.2 * (1 - np.exp(-t_minutes / 15))
    return np.clip(base_hit_rate - decay, 0, 1)

# Recommendation: rotate operators every 20 min on monitoring tasks
```

### Handover protocol (autonomous vehicle)
```python
class L3HandoverManager:
    def __init__(self, min_takeover_seconds: float = 12.0):
        self.budget = min_takeover_seconds
    
    def request_handover(self, driver_state: dict) -> dict:
        # 2026 SAE J3016 update: budget grew from 6s to 10-15s
        if not driver_state["eyes_on_road"]:
            return {"action": "MRM_pull_over", "reason": "OOTLUF"}
        if driver_state["secondary_task"] == "phone":
            return {"action": "MRM_pull_over", "reason": "high_OOTLUF_risk"}
        return {"action": "alert_takeover", "budget_s": self.budget}
```

### LLM agent guardrail (skill-atrophy aware)
```python
class CodeReviewWithAutomationParadox:
    """Force human active review on high-stakes diff to prevent atrophy."""
    
    def __init__(self, llm_client):
        self.llm = llm_client
    
    def review(self, diff: str, stakes: str) -> str:
        ai_review = self.llm.review(diff)
        if stakes == "high":
            # require human to manually annotate before showing AI review
            human = prompt_for_independent_review(diff)
            return reconcile(human, ai_review)
        return ai_review
```

### Skill maintenance schedule
```python
def manual_practice_schedule(automation_uptime_pct: float) -> dict:
    """Recommend periodic manual mode to combat skill decay."""
    if automation_uptime_pct > 0.9:
        return {"frequency": "weekly", "duration_min": 30}
    if automation_uptime_pct > 0.7:
        return {"frequency": "biweekly", "duration_min": 20}
    return {"frequency": "monthly", "duration_min": 15}
```

## 매 결정 기준
| 상황 | Approach |
|---|---|
| High-stakes + rare edge case | Keep human in loop, force periodic manual mode |
| Routine + low risk | Full automation OK |
| L2/L3 autonomy | Long handover budget (12s+), DMS (driver monitoring) |
| LLM agent | Active review on critical paths, not passive accept |
| HRO (high-reliability) | Multiple redundant operators, rotation |

**기본값**: high-stakes automation 의 default — human-in-the-loop + periodic manual practice + miscalibration monitoring.

## 🔗 Graph
- 부모: [[Neuroergonomics]] · [[Complex Systems]]
- 변형: [[Neuromuscular-Control]]
- 응용: [[AI_Safety_and_Alignment|AI Safety]] · [[Multi-agent-System]]
- Adjacent: [[Burnout]] · [[Continuous Obsolescence]]

## 🤖 LLM 활용
**언제**: AI agent system design, code review automation, autonomous system handover protocol.
**언제 X**: stateless automation 의 인간 의 involvement 의 unnecessary 인 case.

## ❌ 안티패턴
- **"Lights-out" fallacy**: full automation 의 human 의 unnecessary 의 assume.
- **6-second handover budget**: empirically insufficient — 12-15s baseline.
- **Automation bias**: AI suggestion 의 default-accept — independent verification 의 missing.
- **Skill decay 의 ignore**: emergency-only manual training 의 too late.

## 🧪 검증 / 중복
- Verified (Bainbridge 1983 *Ironies of Automation*; Parasuraman & Manzey 2010 *Complacency and Bias*).
- 신뢰도 A.

## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — Bainbridge ironies, trust calibration, L3 handover, LLM agent guardrail |
