Engineering methodology for building software systems that autonomously manage themselves through explicit architectural separation and formal guarantees
Scanned 9/11/2026
Install to Claude Code
npx -y skills add curiositech/windags-skills --skill self-adaptive-systems --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Self Adaptive Systems?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/curiositech-self-adaptive-systems)More formats (shields.io, HTML) on the badges page.
---
license: Apache-2.0
name: self-adaptive-systems
description: Engineering methodology for building software systems that autonomously manage themselves through explicit architectural separation and formal guarantees
category: Research & Academic
tags:
- self-adaptive
- autonomous-systems
- feedback-loops
- architecture
- resilience
---
# Self-Adaptive Systems Engineering
Engineering methodology for building software systems that autonomously manage themselves through explicit architectural separation and formal guarantees.
## Decision Points
### System Property Assessment → Adaptation Strategy Selection
| System Property | Choose Strategy | Implementation |
|-----------------|----------------|----------------|
| **Single goal, predictable dynamics** | Simple feedback control (PID-style) | Monitor → Calculate error → Proportional/Integral/Derivative response |
| **Multiple conflicting goals** | Formal goal specifications with utility functions | Define weighted objectives → Multi-objective optimization → Synthesize controller |
| **>10 interacting components** | Hierarchical feedback loops | Reactive (ms-s) → Deliberative (min-hr) → Reflective (days) layers |
| **High environmental uncertainty** | Probabilistic models + runtime updates | Maintain confidence intervals → Detect model drift → Trigger re-identification |
| **Millisecond adaptation required** | Pre-computed policy tables | Offline synthesis → Lookup-based execution → Background policy updates |
### Uncertainty Type → Model Selection
```
IF confidence > 90% AND drift < threshold
THEN incremental model update (recursive least squares)
ELSE IF abrupt change detected OR confidence < 50%
THEN trigger re-identification experiments
ELSE IF formal guarantees required
THEN use model checking on policies before deployment
ELSE
THEN fallback to conservative policy + alert operators
```
### Architecture Decision Tree
```
Does current system have scattered adaptation logic?
├─ YES → Extract to explicit managing/managed separation
│ └─ Can you draw clear boundary between domain logic and adaptation logic?
│ ├─ NO → Refactor with MAPE-K pattern first
│ └─ YES → Proceed with formal goal specification
└─ NO → Is this new system design?
└─ YES → Start with single feedback layer
└─ Expected to grow beyond 10 components?
├─ YES → Design hierarchical from start
└─ NO → Single layer, plan evolution path
```
## Failure Modes
### 1. Oscillation Death Spiral
**Detection Rule**: If system alternates between opposing states (scale up → scale down → scale up) with increasing frequency
**Symptom**: Thrashing behavior, degrading performance despite "working" adaptation
**Root Cause**: Controller gain too aggressive OR conflicting timescales in single layer
**Fix**: Reduce proportional gain by 50%, add derivative term to dampen, OR separate into reactive/deliberative layers
### 2. Uncertainty Blindness
**Detection Rule**: If adaptation confidence remains constant despite changing conditions OR no confidence tracking exists
**Symptom**: Mysterious failures in production, adaptation working in test but not reality
**Root Cause**: Models assume certainty, no drift detection, point estimates treated as truth
**Fix**: Add probabilistic models with confidence intervals → Track model prediction accuracy → Trigger re-learning when confidence drops below threshold
### 3. Goal Ambiguity Paralysis
**Detection Rule**: If team debates "is the adaptation working?" OR cannot define success criteria OR has conflicting informal goals
**Symptom**: Endless tuning, stakeholder disagreements, no objective success metrics
**Root Cause**: Informal goals ("fast and reliable") cannot drive automated decisions
**Fix**: Formalize as executable specifications: P≥0.95[responseTime ≤ 200ms] AND cost ≤ $X/hour → Verify policies against formal goals before deployment
### 4. Single-Layer Complexity Explosion
**Detection Rule**: If adaptation component has >1000 lines OR >20 configuration parameters OR debugging requires system-wide tracing
**Symptom**: Adding adaptation features breaks existing ones, emergent behaviors, impossible to predict changes
**Root Cause**: Forcing different timescales into single control loop
**Fix**: Decompose into hierarchical layers: Reactive handles immediate responses, Deliberative optimizes patterns, Reflective evolves strategy
### 5. Verification Avoidance
**Detection Rule**: If adaptation policies deployed based on intuition OR testing only happy path scenarios OR discovering issues only in production
**Symptom**: "It worked in staging but failed in production", unpredictable behavior under load
**Root Cause**: Adaptation space is exponential, manual testing insufficient
**Fix**: Model check policies before deployment → Use statistical verification for probabilistic properties → Runtime monitoring of guarantee violations
## Worked Examples
### Example: E-commerce Platform Auto-scaling
**Scenario**: Online retailer needs adaptive resource management balancing response time (<200ms for 95% requests), availability (99.9% uptime), and cost (<$500/hour infrastructure).
**Step 1: Architecture Decision**
- Multiple conflicting goals → Formal specifications needed
- 15+ microservices → Hierarchical feedback required
- High traffic uncertainty → Probabilistic models essential
**Step 2: Formal Goal Specification**
```
Primary: P≥0.95[responseTime ≤ 200ms]
Secondary: availability ≥ 99.9%
Constraint: cost ≤ $500/hour
```
**Step 3: Hierarchical Design**
- **Reactive Layer (1-10s)**: Handle immediate failures, shed load, restart containers
- **Deliberative Layer (5-60min)**: Learn traffic patterns, optimize resource allocation, update reactive policies
- **Reflective Layer (daily)**: Evaluate if adaptation strategy achieving business goals, update models
**Step 4: Controller Synthesis**
Deliberative layer models relationship: `responseTime = f(activeServers, requestRate, cpuUtilization)`
From experimental data: `responseTime ≈ 50 + (requestRate/activeServers) * 0.8 + cpuNoise`
Synthesize controller: `targetServers = requestRate/targetThroughputPerServer + safetyMargin`
**Expert vs Novice Differences**:
- **Novice**: Hand-codes "if CPU > 80% add server" rules
- **Expert**: Models system dynamics, synthesizes controller with stability guarantees, monitors model accuracy
**Result**: System maintains goals under 3x traffic spikes, reduces cost 40% during low-traffic periods, provides formal guarantees on response time distribution.
## Quality Gates
Task complete when all conditions verified:
- [ ] Clear architectural boundary exists between managed system (domain logic) and managing system (adaptation logic)
- [ ] All adaptation goals specified in executable format with explicit tradeoff weights when goals conflict
- [ ] If >5 adaptation concerns, hierarchical layers designed with explicit timescale separation (reactive/deliberative/reflective)
- [ ] Uncertainty explicitly modeled with confidence tracking and drift detection thresholds defined
- [ ] Controller synthesis or formal verification performed before deployment of adaptation policies
- [ ] Runtime monitoring in place for all formal guarantees with alerting when violations detected
- [ ] Fallback policies defined for when models become unreliable (low confidence scenarios)
- [ ] Success metrics defined and measurable for each adaptation goal (not just "faster" but "P≥0.95[responseTime ≤ Xms]")
- [ ] Team can explain why current adaptation approach was chosen over alternatives (decision rationale documented)
## NOT-FOR Boundaries
**Do NOT use this skill for**:
- Simple scaling that works with basic rules → Use standard auto-scaling policies instead
- Systems where adaptation changes are rare (monthly+) → Use manual operations procedures instead
- Purely reactive systems without learning requirements → Use `event-driven-architecture` instead
- When formal guarantees are not required → Use `resilient-system-design` for simpler fault tolerance
- Real-time systems where control loops add unacceptable latency → Use `real-time-systems` instead
- When uncertainty is negligible and models are stable → Use traditional control systems approaches
**Delegate to other skills**:
- For basic feedback loops: Use `control-theory-for-software`
- For formal verification techniques: Use `formal-methods`
- For architecture patterns: Use `software-architecture-patterns`
- For monitoring and observability: Use `system-observability`Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!