Architecture knowledge mining has always been a crucial and unsolved problem. Teams make their most important decisions in meetings, but the gap between what they decided and what they documented keeps widening. Writing decisions down is tedious, so many teams eventually stop trying. That gap snowballs into larger organizational visibility and documentation problems, where the longer a team goes without recorded decisions, the more these problems compound:
- Tribal knowledge takes over and critical context lives in a few people's heads, so every departure takes a piece of the architecture with it.
- Engineers relearn old trade-offs the hard way and burn sprints re-debating settled questions and repeating past mistakes.
- Legacy code becomes untouchable and teams build workarounds around it, because nobody remembers why it works the way it does.
- Tech debt piles up and engineers lose their precious deep work hours to fixing bad code and swelling budgets.
LLMs can finally close that gap. They can turn meeting transcripts directly into living architecture knowledge, then use it to catch violations before they ship. Each extracted decision becomes a plain-language rule, and on every pull request an LLM checks the diff against the relevant rules and flags changes that contradict them, along with the decision they break and the reasoning behind it.
This article shows how, using architecture harvesting, a system design agent, and LLM-powered fitness functions.
The need for knowledge mining: Why architecture knowledge gets lost in meetings
Architecture knowledge disappears for a handful of predictable reasons:
- Architects spend most of their time in meetings, design discussions, team syncs, incident reviews, and “quick 15-minute calls” that run for an hour are where architecture takes shape, yet almost none of it reaches the documentation since it lives in people's heads.
- Teams skip Architecture Decision Records (ADRs) and the
/docs/adrfolder goes quiet after a few entries in the first month, because writing up the context, options, and consequences always loses to the next ticket in the sprint. - Decisions change in meetings people miss, like a Postgres-to-DynamoDB migration or an OAuth flow swapped for SSO, and anyone who wasn't there keeps building against outdated service boundaries and API contracts.
- Non-functional requirements come up once in passing and vanish, so p99 latency targets, SLOs, RTO/RPO, and threat-model assumptions never land in a place where a team can find them.
- Recordings go unwatched, so architectural decisions stay buried in hours of Zoom and Teams video that nobody will ever rewatch or search.
- Contradictions surface late, when someone ships a change that breaks an undocumented decision and the problem appears in code review, a failed deploy, or a production incident with a rollback.
The solution: Architecture harvesting and knowledge discovery with AI
The tedious part of architecture documentation is listening, extracting, structuring, and keeping knowledge current. That is exactly the kind of work we can now delegate to LLMs. Instead of asking architects to write up decisions after the fact, AI turns the meetings that already happen into a source of structured knowledge.
We built an architecture harvesting agentic harness to store meeting transcripts and extract architectural knowledge. It's built on GitHub Copilot CLI and guided by a rule file for each knowledge bucket. Each rule file defines what should be extracted and, just as important, what doesn't qualify. The workflow includes:
- Harvesting architecture knowledge from meetings: The harness listens to meeting transcripts from the past day and extracts architectural knowledge automatically, sorting it into five buckets: system design changes, guideline updates, non-functional requirements, technical debt and improvements, and attention items.
- Grounding system design in real decisions: A system design agent generates new designs with the harvested knowledge base as context, so they align with existing ADRs and constraints from the start instead of failing review later.
- Reinventing fitness functions: Classic fitness functions only worked for things we could express in code, such as dependency rules, layering, and performance thresholds. LLMs extend the concept to natural-language rules like "services don't share databases" or "this ADR supersedes that one," and check them against designs and code.