Michal Cichra’s talk highlights the importance of capturing and documenting product decisions through tools like ADRs, PRDs, and BDD to maintain clarity and consistency for both humans and AI agents in product development. By combining design systems, executable specifications, and automated enforcement loops, teams can ensure uniformity, facilitate autonomous AI collaboration, and improve overall product quality and maintainability.
In the talk “BDD, ADR, PRD, WTF: Capturing Decisions for Humans and AI Alike,” Michal Cichra discusses the challenges of maintaining consistency and clarity in product development, especially when working with AI agents. He begins by illustrating how both humans and AI suffer from limited context and memory, leading to confusion about why certain decisions or workflows exist in a product. This problem becomes apparent over time as teams question the rationale behind features, code structure, and workflows, often without access to the original creators.
To address this, Michal introduces several key documentation and development practices. Architecture Decision Records (ADRs) capture the reasons behind architectural choices and how they are enforced, often including examples and linting rules to maintain consistency. Product Requirements Documents (PRDs) provide a lighter, user-focused explanation of why a feature exists and how users interact with it, serving as a reference for both humans and AI agents. Behavior-Driven Development (BDD), exemplified by tools like Cucumber, bridges the gap between specifications and executable tests by describing product behavior in human-readable language that can be directly linked to PRDs and user journeys.
Michal emphasizes the importance of design systems and pattern libraries in creating consistent user interfaces, especially when working with AI. By documenting UI components, their styles, and usage rules, teams can ensure uniformity across the product. These components are built from small pieces into larger ones, allowing for reuse and easier review by both humans and AI agents. This approach prevents chaos and maintains visual and functional consistency.
To enforce these practices and maintain consistency, Michal describes a reinforcement loop involving git hooks, continuous integration (CI), linters, and automated checks. This loop ensures that agents and developers adhere to rules by providing immediate feedback on commits, linking back to relevant documentation, and preventing rule violations before code is merged. Different skills and focuses can be applied within this loop depending on the task, such as architecture enforcement, UI iteration, or targeted testing, allowing for efficient and context-aware development cycles.
Finally, Michal acknowledges some challenges, such as the heavy context requirements for AI agents, but remains optimistic about the approach’s effectiveness. By recording decisions, describing product parts clearly, using executable specifications, and employing design systems alongside a robust enforcement loop, teams can achieve greater clarity and consistency. This methodology enables AI agents to work autonomously within defined rules, ultimately improving product quality and maintainability.