Documentation / The Unbroken Method

The Unbroken Method

A Framework for Successful Human-AI Collaboration

The Unbroken Method is a systematic approach to human-AI collaboration that maximizes productivity and quality by maintaining continuous context, demanding complete ownership, and learning from documented failures. Developed during the creation of SAM (Synthetic Autonomic Mind), this methodology enabled the rapid development of a fully-functional native macOS AI assistant with multi-provider support, voice I/O, image generation, document processing, and a comprehensive tool system.

The core insight: The secret to successful AI collaboration isn't waiting for smarter models. It's implementing better methodology.


Table of Contents

  1. Why AI Collaboration Fails
  2. The Seven Pillars
  3. Implementation Guide
  4. For Different Audiences
  5. Quick Reference
  6. Comparison with Industry Models
  7. SAM Development Results

Why AI Collaboration Fails

Most people experience AI collaboration as a series of disconnected conversations. You start fresh, explain your context, get partway through a task, and then, through session limits, context loss, or simple confusion, you have to start over.

Common Failure Modes

1. The Fresh Start Problem - Every new session loses accumulated context - You spend 20% of each session re-explaining your project - The AI forgets decisions made in previous conversations - Progress resets to zero

2. The Partial Solution Trap - AI provides "basic implementations" that need expansion - "Good enough for now" becomes permanent technical debt - Edge cases left as "exercise for the reader" - You end up doing more work fixing partial solutions

3. The Symptom Patch Pattern - AI adds try-catch blocks instead of fixing underlying issues - Problems suppressed rather than solved - Code becomes increasingly fragile - Root causes remain hidden

4. The Scope Escape - AI identifies an issue: "This is a separate problem" - Issues deferred indefinitely - Technical debt accumulates - Problems discovered during work never get fixed

5. The Assumption Cascade - AI assumes how your code works without reading it - Solutions based on assumptions break in unexpected ways - Time wasted debugging incorrect implementations - Trust erodes, collaboration becomes adversarial

What These Failures Have in Common

Every failure mode above stems from broken continuity: - Context breaks between sessions - Ownership breaks when issues are "out of scope" - Quality breaks when solutions are partial - Trust breaks when assumptions replace investigation

The Unbroken Method addresses each of these by establishing protocols that maintain continuity across every dimension of collaboration.

Traditional AI Collaboration (Broken)

flowchart LR
    A[🚀 Start] --> B[📝 Explain<br/>Context]
    B --> C[đŸ’ģ Work]
    C --> D[🐛 Issue<br/>Found]
    D --> E[đŸšĢ Out of<br/>Scope]
    E --> F[đŸ“Ļ Partial<br/>Solution]
    F --> G[âšī¸ Session<br/>Ends]
    G --> H[💨 Context<br/>Lost]
    H -.->|Repeat| A

    style E fill:#ff6b6b,color:#fff
    style F fill:#ff6b6b,color:#fff
    style H fill:#ff6b6b,color:#fff

The Unbroken Method (Continuous)

flowchart LR
    A[🚀 Start] --> B[📂 Load<br/>Context]
    B --> C[🔍 Investigate]
    C --> D[✋ Checkpoint]
    D --> E[đŸ’ģ Implement]
    E --> F{🐛 Issue?}
    F -->|Yes| G[✅ Own & Fix]
    G --> E
    F -->|No| H[đŸ“Ļ Complete<br/>Solution]
    H --> I[✓ Validate]
    I --> J{End?}
    J -->|No| C
    J -->|Yes| K[📋 Handoff]
    K --> L[💾 Context<br/>Preserved]
    L -.->|Next Session| A

    style G fill:#51cf66,color:#fff
    style H fill:#51cf66,color:#fff
    style L fill:#51cf66,color:#fff

The Seven Pillars

The Seven Pillars form the foundation of The Unbroken Method. Each addresses a specific failure mode and provides concrete guidance for maintaining productive collaboration.

graph TB
    subgraph P1[" "]
        C1[🔄 1. Continuous Context<br/>Never break the conversation]
    end
    subgraph P2[" "]
        C2[đŸŽ¯ 2. Complete Ownership<br/>Find it, fix it]
    end
    subgraph P3[" "]
        C3[🔍 3. Investigation First<br/>Understand before acting]
    end
    subgraph P4[" "]
        C4[🌱 4. Root Cause Focus<br/>Problems, not symptoms]
    end
    subgraph P5[" "]
        C5[đŸ“Ļ 5. Complete Deliverables<br/>Finish what you start]
    end
    subgraph P6[" "]
        C6[📋 6. Structured Handoffs<br/>Perfect context transfer]
    end
    subgraph P7[" "]
        C7[📚 7. Learning from Failure<br/>Codified anti-patterns]
    end

    C1 --> C2
    C2 --> C3
    C3 --> C4
    C4 --> C5
    C5 --> C6
    C6 --> C7
    C7 -.->|Improve| C1

Pillar 1: Continuous Context

Principle: Never break the conversation. Context is your most valuable asset.

The Problem It Solves: Traditional AI sessions end when you close the chat or hit token limits. Each new session starts from zero, forcing you to re-explain everything.

The Solution: Implement programmatic collaboration checkpoints that preserve context within sessions and structured handoffs that transfer context between sessions.

How It Works:

Within a session: - Use a collaboration tool (script, macro, or protocol) that creates checkpoints - Share findings, propose approaches, and get confirmation before major work - The AI stays in the same context rather than you responding and breaking flow

Between sessions: - Create comprehensive handoff documents before ending - Include everything the next session needs: completed work, pending tasks, discoveries, lessons learned - The handoff document IS the context. It should be standalone and complete

The Key Insight:

flowchart LR T1[Session] --> T2[Context Lost] --> T3[New Session] --> T4[Re-explain] --> T5[Work] U1[Session] --> U2[Checkpoint] --> U3[Continue] --> U4[Checkpoint] --> U5[Handoff] --> U6[New Session] --> U7[Context Intact] --> U8[Work] subgraph Traditional T1 & T2 & T3 & T4 & T5 end subgraph Unbroken U1 & U2 & U3 & U4 & U5 & U6 & U7 & U8 end style T2 fill:#ff6b6b,color:#fff style T4 fill:#ff6b6b,color:#fff style U7 fill:#6bcf7f,color:#000

Pillar 2: Complete Ownership

Principle: If you find it, you fix it. There is no "out of scope."

The Problem It Solves: AI assistants often identify issues and then punt them: "This appears to be a separate issue." The issue never gets fixed because no one owns it.

The Solution: Establish absolute ownership of everything discovered during a work session. The current session owns all discovered issues.

What This Means in Practice:

❌ Not Allowed: - "This is a separate issue for another session" - "This is out of scope for the current task" - "Should I investigate this further?" (just do it) - "Would you like me to fix this?" (just fix it)

✅ Required: - "I found issue X while working. I will fix it by doing Y." - "Discovered blocker Z. Proposing solution A, proceeding with implementation." - Work continues until ALL discovered issues are resolved

The Ownership Chain:

flowchart LR A[Task Assigned] --> B[Work Begins] B --> C[Issue Discovered] C --> D[Issue OWNED] D --> E[Issue Fixed] E --> F[Work Continues] C -.->|NEVER| G[Out of scope] C -.->|NEVER| H[Separate issue] style G fill:#ff6b6b,color:#fff style H fill:#ff6b6b,color:#fff
AI assistants often jump to implementation based on assumptions about how things work. These assumptions are frequently wrong, leading to wasted time and broken solutions.

The Solution: Mandate investigation before implementation. Read, search, test, and verify before writing.

The Investigation Protocol:

  1. Read the relevant existing code/content/documents
  2. Search for patterns and precedents in the project
  3. Test current behavior to confirm the issue
  4. Share findings via collaboration checkpoint
  5. Propose approach and wait for confirmation
  6. Implement only after investigation is complete

Real Example from SAM Development:

User Report: "The model picker shows 'Downloads' as an option"

Wrong Approach (Assumption): "I'll add a filter to hide 'Downloads' in the UI picker code."

Right Approach (Investigation): 1. Read LocalModelManager.swift to understand model detection 2. Search for where Downloads directory is created 3. Discover: Downloads folder is INSIDE the models directory 4. Root cause: Downloads are detected AS models because of location 5. Solution: Move staging directory OUTSIDE models directory 6. Result: Downloads never appear because they're never detected

The investigative approach found a permanent architectural solution. The assumption approach would have created a fragile UI hack.


Pillar 4: Root Cause Focus

Principle: Solve problems, not symptoms. Every fix should address the underlying cause.

The Problem It Solves: Quick fixes that address symptoms create fragile systems. The same problems resurface in different forms.

The Solution: Require root cause analysis for every fix. Ask "why?" until you reach the fundamental issue.

Symptom vs. Root Cause Examples:

Symptom Bad Fix Root Cause Good Fix
Error message appears Add try-catch to suppress Invalid input not validated Add input validation
UI flickers during update Add 100ms delay Multiple refresh calls Remove duplicate calls
Feature doesn't work Add special case handling Architecture doesn't support feature Refactor architecture
Content inconsistency Fix this instance No style guide Create and apply style guide

The Five Whys Technique:

flowchart TD A[Problem: Messages appear twice in the chat] --> B[Why? ChatWidget is creating messages
AND MessageBus is creating messages] B --> C[Why? ChatWidget was designed to create
messages from streaming chunks] C --> D[Why? Original architecture did not
have MessageBus] D --> E[Why? Streaming was added before
centralized message management] E --> F[Root Cause: Multiple sources of truth
for message creation] F --> G[Solution: Make MessageBus the single
source of truth, ChatWidget read-only] style A fill:#ff6b6b,color:#fff style F fill:#ffd93d,color:#000 style G fill:#6bcf7f,color:#000

Pillar 5: Complete Deliverables

Principle: Finish what you start. No partial solutions that need expansion later.

The Problem It Solves: "I'll implement a basic version first" creates technical debt that accumulates forever. Partial implementations become permanent because "it works." The MVP mindset, while valuable for market validation, becomes counterproductive in AI collaboration where "minimum viable" outputs rarely get improved.

The Solution: Demand complete implementations within their defined scope. Handle edge cases, add error handling, follow patterns.

What "Complete" Means:

✅ Complete Within Scope: - All specified requirements working - Edge cases for THIS feature handled - Error handling in place - Follows existing project patterns - Tested and verified

❌ Not Acceptable: - "Basic implementation, expand later" - "Handles the common case" - "Good enough for now" - Hardcoded values when dynamic values are available - Missing error handling

The Completeness Checklist:

□ All requirements addressed
□ Edge cases identified and handled
□ Error handling comprehensive
□ Follows existing patterns/style
□ Tested with realistic data
□ Documentation updated if needed
□ No TODO comments added
□ No "temporary" code

Pillar 6: Structured Handoffs

Principle: Perfect context transfer. The next session should start as if it never stopped.

The Problem It Solves: Session transitions lose critical context. The next session makes different assumptions, contradicts previous decisions, or duplicates completed work.

The Solution: Create structured handoff documents that capture complete context for continuation.

The Four-Document Handoff Protocol:

When a session must end (token limits, work phase complete, user request):

CRITICAL PREREQUISITE: Documentation MUST be current

Before creating handoff documents, ensure ALL technical documentation is up-to-date:

  1. Subsystem Documentation: If you modified a component, update its subsystem doc. Include architecture changes, new APIs, usage examples.
  2. Flow Documentation: If you changed data flows or processes, update flow diagrams. Use Mermaid sequenceDiagram or flowchart.
  3. Specifications: If you completed a feature from a spec, mark it complete. Update spec if implementation differs from plan.

Rule: Documentation is NOT optional. Code without docs is incomplete work.

Then create the four handoff documents:

  1. CONTINUATION_PROMPT.md
  2. Complete standalone context for the next session
  3. What was accomplished (detailed summary)
  4. All commits/changes made with descriptions
  5. Files modified and why
  6. Documentation updated (list what was updated)
  7. Testing performed and results
  8. Known issues remaining
  9. Build/project status
  10. Lessons learned
  11. Clear starting instructions
  12. NO external references. This document IS the context

  13. AGENT_PLAN.md

  14. Remaining priorities (detailed breakdown)
  15. Investigation steps for each priority
  16. Success criteria for each task
  17. Time estimates if applicable
  18. Dependencies between tasks

  19. SESSION_HANDOFF.md

  20. Historical record of the session
  21. Decisions made and rationale
  22. Approaches tried and results
  23. What worked and what didn't

  24. FEATURES.md / CHANGELOG.md

  25. For external consumers (website, release notes)
  26. User-facing feature descriptions
  27. Change log in standard format

The Handoff Test:

Can someone start a completely new session with only the CONTINUATION_PROMPT.md and immediately continue productive work?

If yes, the handoff is complete. If no, add more context.


Pillar 7: Learning from Failure

Principle: Codify mistakes into anti-patterns. Never make the same mistake twice.

The Problem It Solves: Without documented anti-patterns, the same mistakes recur. Each session might repeat errors that previous sessions learned to avoid.

The Solution: Maintain an evolving catalog of anti-patterns with concrete examples of what NOT to do.

Anti-Pattern Structure:

### Anti-Pattern: [Name]

**What It Looks Like:**
[Concrete example of the bad pattern]

**Why It's Wrong:**
[Explanation of the problem it causes]

**What To Do Instead:**
[Correct approach with example]

**Real Example:**
[Actual instance from project history]

Building Your Anti-Pattern Catalog:

  1. Document failures immediately when they occur
  2. Categorize by type (architecture, communication, process)
  3. Include real examples from your project
  4. Review regularly and add to instructions
  5. Share anti-patterns with all collaborators

The Evolution Cycle:

Failure Occurs → Document Anti-Pattern → Add to Catalog → Include in Instructions → Prevent Recurrence

Implementation Guide

Setting Up Your Collaboration Tool

The collaboration tool is the heart of The Unbroken Method. It's what maintains continuous context within a session.

Requirements: - Pauses AI execution for human input - Displays context clearly - Captures human response - Enables continuation

Simple Bash Implementation:

#!/bin/bash
# collaboration.sh

MESSAGE="${1:-Press Enter to continue}"

echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "CHECKPOINT"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo -e "$MESSAGE"
echo ""
read -p "Response: " response

if [ -n "$response" ]; then
    echo "User response: $response"
fi

echo "Continuing..."

Python Implementation:

#!/usr/bin/env python3
# collaboration.py

import sys

def checkpoint(message="Press Enter to continue"):
    print("\n" + "━" * 50)
    print("CHECKPOINT")
    print("━" * 50 + "\n")
    print(message)
    print()
    response = input("Response: ")
    if response:
        print(f"User response: {response}")
    print("Continuing...")
    return response

if __name__ == "__main__":
    message = sys.argv[1] if len(sys.argv) > 1 else "Press Enter to continue"
    checkpoint(message)

Creating Your Instructions File

The instructions file is your methodology codified. It tells the AI how to behave according to The Unbroken Method.

Key Sections to Include:

  1. Ownership Requirements
  2. All discovered issues must be fixed
  3. No "out of scope" or "separate issue" allowed
  4. Session ends only after user validation

  5. Investigation Protocol

  6. Read existing code/content first
  7. Search for patterns before creating new ones
  8. Share findings before implementing

  9. Collaboration Requirements

  10. Use collaboration tool before major work
  11. Share findings after investigation
  12. Get validation before ending

  13. Quality Standards

  14. Complete implementations only
  15. No partial solutions or TODOs
  16. Error handling required
  17. Testing required

  18. Anti-Pattern Catalog

  19. Document each failure as it occurs
  20. Include real examples
  21. Update regularly

For Different Audiences

For Software Developers

Key Practices: - Run builds after EVERY change - Test immediately, don't batch - Check logs yourself, don't assume success - Commit frequently (every 30 minutes minimum) - Use proper logging, never print statements

Developer-Specific Anti-Patterns: - Using swift build when Makefile exists (missing dependencies) - Background processes for commands that should block - Commenting out code instead of deleting it - Hardcoding when metadata is available

For Technical Writers

Key Practices: - Review existing content before proposing changes - Document style decisions as they're made - Complete sections fully before moving on - Verify citations and references during writing

Writer-Specific Anti-Patterns: - Inconsistent terminology across sections - Style changes without updating previous content - "Draft" sections that never get finished - References to non-existent sections

For Researchers

Key Practices: - Document methodology as you develop it - Verify sources before citing - Follow tangents within scope (ownership principle) - Complete analysis before drawing conclusions

Researcher-Specific Anti-Patterns: - Drawing conclusions before investigation complete - Citing sources without verification - Stopping at surface-level findings - Ignoring contradictory evidence


Quick Reference

THE UNBROKEN METHOD - QUICK REFERENCE

BEFORE STARTING WORK
□ Read existing code/content
□ Search for patterns
□ Test current behavior
□ Share findings via collaboration tool

DURING WORK
□ Fix ALL discovered issues (no "out of scope")
□ Implement complete solutions (no "basic version")
□ Test after each change
□ Commit/save frequently

BEFORE ENDING
□ All discovered issues resolved
□ Work tested and verified
□ Changes committed/saved
□ User validation via collaboration tool

COLLABORATION CHECKPOINTS
â€ĸ Before major implementation
â€ĸ After investigation (share findings)
â€ĸ After implementation (share results)
â€ĸ Before ending (validation required)

THE SEVEN PILLARS
1. Continuous Context - Never break conversation
2. Complete Ownership - Find it, fix it
3. Investigation First - Understand before acting
4. Root Cause Focus - Problems, not symptoms
5. Complete Deliverables - Finish what you start
6. Structured Handoffs - Perfect context transfer
7. Learning from Failure - Codified anti-patterns

Comparison with Industry Models

How does The Unbroken Method compare to established AI/ML development methodologies? This analysis highlights key differences in approach and philosophy.

Methodology Comparison

Aspect Unbroken Method Agile AI/ML Google MLOps CRISP-DM Agentic AI
Context Handling Explicit preservation via checkpoints and handoffs Sprint boundaries can break context Documentation-dependent Phase transitions can lose context Fragments across agents
Issue Ownership Mandatory - discovered issues must be fixed Team-distributed, can dilute Process-dependent Phase-based ownership Agent-scoped, limited
Investigation Rigor Required before implementation Varies by team Documentation standards Strong data investigation Task-dependent
Root Cause Focus Mandated - no symptom patches Varies by team culture Incident response varies Process-focused Often superficial
Completeness Scope-complete deliverables MVP-oriented, iterative Production-focused Deliverable-focused Task completion varies
Knowledge Transfer Structured 4-document protocol Retrospectives, wikis Runbooks, documentation Reports, handoffs Limited between agents
Learning Codification Anti-pattern catalog required Retrospectives Post-mortems Lessons learned Minimal

When to Use Each Approach

The Unbroken Method works best when: - Quality and reliability matter more than speed - Context preservation across sessions is critical - You need sustainable long-term collaboration - Technical debt must be minimized

Agile AI/ML works best when: - Rapid experimentation is the priority - Requirements are highly uncertain - Team velocity matters most - Quick pivots are expected

Google MLOps works best when: - Production scale is the primary concern - Monitoring and reliability are paramount - Team has strong documentation culture - Infrastructure is the bottleneck

CRISP-DM works best when: - Data investigation is the core challenge - Stakeholder communication is critical - Process compliance is required - Traditional project management is preferred

Agentic AI Workflows work best when: - Parallelization and automation are priorities - Tasks are well-defined and repeatable - Human oversight is available for quality control - Scale matters more than individual task depth


SAM Development Results

The Unbroken Method was developed and refined during the creation of SAM, a native macOS AI assistant. In a few short months, the methodology enabled building a production-ready application from scratch.

What SAM Delivers:

Multi-Provider AI Support Connect to OpenAI, Anthropic, GitHub Copilot, DeepSeek, or run models locally with MLX and llama.cpp. Switch providers without restarting.

Voice Input/Output Wake word detection, speech recognition, and text-to-speech for hands-free operation.

AI Image Generation Stable Diffusion integration with CoreML optimization, multiple model architectures (SD 1.5, SDXL, Z-Image), community model support via CivitAI and HuggingFace.

Comprehensive Tool System File operations, terminal execution, web research, memory management, document processing, git integration, and image generation all through a unified MCP framework.

Intelligent Memory Vector RAG with semantic search, conversation-scoped and topic-scoped memory, context archival with recall capabilities, YaRN context compression for handling massive documents.

Native macOS Experience SwiftUI interface, keyboard shortcuts, dark mode, persistent conversations, diagram rendering.

Key insight: This breadth of functionality was achieved not by working with a more advanced AI, but by implementing a methodology that eliminated the common failure modes.


Case Studies

Case Study 1: MessageBus Refactoring

Problem: Chat streaming at 11 tokens per second with UI flicker and duplicate messages.

Investigation Phase: 1. Read ChatWidget.swift and found multiple message creation points 2. Read MessageBus.swift and found it was underutilized 3. Traced message flow and discovered circular updates 4. Identified root cause: Multiple sources of truth for messages

Solution Implemented: - Made MessageBus the single source of truth - ChatWidget became read-only observer - Removed duplicate message creation - Eliminated circular updates

Results:

Metric Before After Improvement
Streaming Speed 11 TPS 41 TPS 3.7x
UI Re-renders Excessive Minimal 10x reduction
Duplicate Messages Frequent Zero 100% eliminated
Message Flicker Present None Eliminated

Methodology Applied: - Investigation first (read code, trace flow) - Root cause analysis (multiple sources of truth) - Complete solution (architectural refactor, not patch) - User validation (tested with real conversations)

Case Study 2: Scroll Bounce Fix

Problem: Long conversations (88+ messages) experienced scroll "bounce" where the view would jump to older messages during streaming.

Investigation Phase: 1. Reproduced issue consistently 2. Identified pattern: bounce always to message 74 (5,392 chars) 3. Analyzed scroll behavior during content updates 4. Root cause: scrollTo(message.id) targets content that changes during streaming

Bad Approach (Symptom Patch):

// Add delay to "fix" bounce - WRONG
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
    proxy.scrollTo(message.id, anchor: .bottom)
}

This would have added latency and not solved the underlying issue.

Good Approach (Root Cause Fix):

// Add stable anchor that never changes
Color.clear.frame(height: 1).id("scroll-bottom-anchor")

// Scroll to stable anchor instead of changing message
proxy.scrollTo("scroll-bottom-anchor", anchor: .bottom)

Results: - Bounce completely eliminated - Works for conversations of any length - No added latency - Solution is permanent and stable

Case Study 3: Per-Conversation Storage Migration

Problem: Single monolithic conversations.json file became slow as conversation count grew.

Investigation Phase: 1. Profiled save operations with 100+ conversations 2. Found full-file rewrites on every message 3. Identified scaling issue: O(n) save time where n = total messages across all conversations

Solution Implemented:

~/Library/Application Support/SAM/conversations/
├── {UUID}/
│   ├── conversation.json    # Single conversation
│   ├── tasks.json           # Agent todo list
│   └── .vectorrag/          # Conversation-scoped RAG
├── active-conversation.json
└── backups/

Results: - Save time reduced from O(n) to O(1) for conversation size - Backward-compatible migration from legacy format - Legacy file automatically moved to backups - Automatic cleanup on conversation deletion


Getting Started

  1. Create your collaboration tool using the templates above
  2. Write your instructions file with ownership and quality requirements
  3. Design your handoff protocol for session transitions
  4. Start your anti-pattern catalog and add to it as you learn
  5. Apply the Seven Pillars to every AI interaction

The methodology will evolve as you use it. Document what works, what doesn't, and what you learn. The anti-pattern catalog is never complete. It grows with experience.


Conclusion

The Unbroken Method transforms AI collaboration from a series of disconnected, frustrating sessions into a continuous, productive partnership. The key principles are simple:

  1. Maintain context - Never let it break
  2. Own everything - No escape hatches
  3. Investigate first - Understand before acting
  4. Fix root causes - Not symptoms
  5. Complete deliverables - Finish what you start
  6. Perfect handoffs - Seamless transitions
  7. Learn from failures - Never repeat mistakes

The methodology works because it eliminates the common failure modes of AI collaboration. It's not about having a smarter AI. It's about having a better system.

This methodology is language-agnostic, tool-agnostic, and domain-agnostic. Whether you're writing code, documents, research, or any other knowledge work, The Unbroken Method will improve your AI collaboration.

Welcome to The Unbroken Method. There are no shortcuts, and that's the point.


Related Documentation: - Templates - Ready-to-use prompts, handoffs, and tools - Quick Start Prompt - Get started in 5 minutes - Developers Guide - Building and extending SAM - Contributing Guide - How to contribute to SAM - Architecture - System design and components