This article discusses various forms of 'debt' in software systems—technical, cognitive, and intent debt—and introduces a 'Tri-System theory of cognition' involving humans and AI. It highlights how AI's increasing role in coding shifts the focus from writing code to verification, emphasizing the need for robust testing and a re-organization around validation to ensure system correctness and quality.
Read original on Martin FowlerThe article introduces a framework for understanding system health by categorizing different types of "debt" that accumulate during software development. These debts hinder a system's evolution and a team's ability to reason about and change it effectively. Recognizing these distinct forms of debt is crucial for architects and engineering leaders to develop targeted strategies for mitigation and ensure long-term system maintainability and adaptability.
Extending Kahneman's "Thinking Fast and Slow" model, which describes human System 1 (intuition) and System 2 (deliberation), a new paper introduces AI as "System 3." This concept differentiates between two modes of AI interaction: cognitive offloading (strategic delegation to AI for deliberation) and cognitive surrender (uncritical reliance on AI, bypassing human deliberation). System designers should aim to facilitate cognitive offloading through clear API contracts, structured inputs, and understandable outputs, while guarding against cognitive surrender by integrating validation layers.
Designing for AI Integration
When integrating AI-generated components or code, design verification mechanisms to prevent cognitive surrender. This includes robust testing frameworks, clear monitoring dashboards, and human-in-the-loop review processes to ensure AI outputs meet quality and correctness criteria.
With LLMs increasingly generating code, the critical activity in software development shifts from writing code to verification. The challenge lies in defining "correctness" which is often context-dependent and multifaceted, especially in complex, distributed systems. This reorientation requires organizational changes, moving from tracking code output to tracking the validation of that output.