


3 on the record this issue
Demand Author Explanations for Generated Changes
Roman MartynenkoFullstack Software Engineer, Founding Engineer · Henry AIWe treated AI coding assistants as a risk-management problem rather than trying to label entire repositories as safe or unsafe. They were useful for bounded work like tests, refactors, UI components, boilerplate, migrations, and code that followed well-understood patterns. We were much more cautious around authentication, permissions, billing, data access, security-sensitive infrastructure, and core business logic, where a subtle mistake could have a large impact. In those areas, AI could still help with exploration or alternatives, but the engineer remained responsible for the design and implementation.
The policy that worked best was simple: AI-generated code had to meet exactly the same review bar as human-written code, and the author had to be able to explain every meaningful line they submitted. That made the boundary clear without adding a separate approval process. It also protected velocity because developers could use AI freely where it helped, while code review, tests, and ownership remained the safety mechanism rather than a long list of prohibited use cases.
Apply Least Privilege With Human Gates
Akanksha SharanSenior Software Engineer · MetaWhen deciding where AI coding assistants belong in an engineering workflow, I would not draw the boundary only around directories or repositories. I would draw it around three things: data sensitivity, blast radius, and reversibility.
AI can be very effective for bounded work such as generating tests, boilerplate, documentation, straightforward refactors, debugging suggestions, or implementing a well-defined change in an isolated component. The risk changes when the assistant can access customer data, credentials, proprietary datasets, security-sensitive systems, or production infrastructure. The same is true when an agent can take actions rather than simply suggest code.
The key principle is least privilege. An AI assistant should receive only the context and tools required for the task. It should not have broad access to secrets or production data simply because that would make prompting more convenient. More importantly, we should separate "AI can propose this" from "AI can execute this." An agent may help draft a database migration, infrastructure change, or operational command, but destructive or difficult-to-reverse actions such as deleting data, changing permissions, modifying production configuration, or deploying directly to production should require explicit human approval.
The review habit that makes this practical is simple: the engineer remains the owner of every AI-generated change. AI output goes through the same code review, testing, security, and deployment gates as human-written code, and higher-risk changes receive an explicit human checkpoint before execution. The reviewer is validating the behavior and failure modes, not whether the code simply "looks right."
That distinction keeps velocity healthy. If every AI-generated line needs extraordinary scrutiny, the tool becomes slower than writing the code yourself. If AI is allowed to operate without boundaries, one confident mistake can erase the productivity gains very quickly. Give the assistant freedom where mistakes are cheap and reversible. Add progressively stronger guardrails as access, sensitivity, and blast radius increase.
The goal is not to remove humans from the loop. It is to move human attention to the decisions where judgment actually matters.
Put Verification Before Every Pull Request
Leslie DanielSenior Cloud Application Architect AI/ML · Amazon Web Services Inc.We stopped drawing the boundary by code area and started drawing it by what we could verify. We first tried the obvious approach: a list of "AI-allowed" and "human-only" directories. It broke within weeks: every rule needed an exception, and the list went stale with every refactor. Worse, it treated the assistant as the risk, when the real risk was a change nobody could confirm was correct.
So the question became: for this change, can we prove behavior was preserved before anyone reads the diff? If yes, the assistant can go as deep as it likes. If no, the work slows down, and a human owns it end to end.
That reframing came out of modernizing legacy .NET applications with a multi-agent orchestrator. The most valuable agent wasn't the one writing new code but the one writing characterization tests against existing behavior before any modernization started, then re-running them afterward. Where those tests existed and passed, reviewers could approve large AI-generated changes quickly. Where they didn't, or where behavior was hard to pin down, the same change got far more scrutiny. The code itself wasn't in or out of bounds; the evidence was.
Human-only work clusters around authentication, authorization, and anything touching credentials; data migrations and schema changes; billing and money movement; and code with security or compliance implications where "the tests pass" is necessary but not sufficient. The assistant can still draft there, but a human writes the tests, decides the approach, and owns the merge. We carried the same pattern into AWS Transform, where a validation loop and human-in-the-loop checkpoints do the same job at scale: automation proves what it can, and a person decides what it can't.
The single habit that kept the guidance clear and velocity healthy: every AI-assisted pull request must show its verification before it shows its diff. The description opens with which tests ran, what behavior they cover, and what the author checked by hand. Reviewers read that section first. If it's thin, the review is thorough. If it's strong, the review is fast.
That one rule did more than any allow-list. Developers earn speed rather than have policy grant or revoke it. It made the boundary self-adjusting: as test coverage grew, more of the codebase became safely in-bounds without anyone updating a document. And it kept the focus on what matters: whether we can trust the change, not whether a machine touched it.
Document Approved Tools and Data Rules
A strong AI coding policy should clearly name the tools and models that teams may use. It should explain which types of company data can be entered into each tool. Source code, customer records, passwords, and security details often need stricter limits.
The policy should also state whether prompts and outputs are stored by the provider. Clear approval rules reduce confusion and help teams avoid accidental data exposure. Document the approved tools and data rules before broad adoption begins.
Add AI Disclosure to Commit Records
Teams should disclose meaningful AI assistance in commit metadata or another standard development record. This creates a useful trail when code needs review, repair, or security checks later. The disclosure does not need to shame developers or describe every small suggestion.
It should simply show when AI generated, changed, or strongly influenced code. Reviewers can then give the right level of attention to that change. Add a simple AI disclosure field to the team’s commit process.
Measure Outcomes, Not Assistant Usage
Productivity measures should not treat AI use as proof of better engineering work. Developers may avoid AI for complex bugs, private code, or tasks that require deep system knowledge. Good policies focus on outcomes such as quality, reliability, security, and delivery health.
They should avoid comparing workers by prompt counts, accepted suggestions, or AI-generated lines of code. Otherwise, people may use tools only to improve a metric instead of solving the real problem. Measure team outcomes fairly and protect thoughtful choices not to use AI.
Teach Developers to Vet Output and Licensing
Training should explain that AI output can be wrong, incomplete, or unsafe even when it sounds confident. Developers need to know how to review generated code, test it, and check it against project standards. Training should also cover attribution, because generated text or code may resemble outside material.
Licensing rules matter when teams reuse code, documentation, or examples from AI output. Clear guidance helps developers make careful decisions without slowing every task down. Provide practical AI training before asking teams to rely on these tools.
Empower Repository Owners to Set Restrictions
Sensitive repositories may need an opt-out from AI coding tools, even when those tools are allowed elsewhere. Security systems, regulated products, and unreleased work can carry risks that require extra care. A policy should let repository owners set clear restrictions based on the data and code involved.
These restrictions should be visible before a developer starts using an assistant in that project. The policy should also provide a safe way to request an exception when needed. Give repository owners a clear method to set and enforce AI limits.

