Agentic Coding Adoption
Adopting agentic coding with tooling, prompts, and review practices.
Agentic Coding Adoption
We adopt agentic coding (AI-assisted development) in a structured way: tooling, prompts, and review practices so the whole team benefits consistently.
Agentic Coding Adoption
We adopt agentic coding in a structured way: shared tooling, prompts, and review practices so the whole team benefits consistently.
Tooling
Cursor, Copilot, or equivalent, with shared configs and conventions. Everyone uses the same baseline so we can share tips and debug issues.
Example: we keep a shared snippet for “new component” so AI gets the same imports and structure:
// Our standard component shell (shared in team docs)
import { cn } from '@/lib/cn';
interface Props {
className?: string;
}
export function ComponentName({ className }: Props) {
return <div className={cn('base-styles', className)} />;
}Prompts
Reusable prompt patterns and examples (see Talent Prompting with MasterFabric) so the team gets consistent, high-quality assistance. We iterate on prompts and document what works.
Review: same bar for AI output
All code is reviewed; AI-generated code is held to the same standards as human-written code. We treat AI as a pair programmer, not a replacement for judgment.
Checklist for AI-assisted PRs
When reviewing code that was generated or heavily edited by AI, we still check:
- Correctness — Logic and edge cases; tests if applicable.
- Security — No hardcoded secrets, safe handling of inputs.
- Style — Matches our lint rules and naming conventions.
- Dependencies — No unnecessary or outdated packages.
- Documentation — Non-obvious behavior is explained.
Good vs poor AI-assisted code
Clear, testable, and aligned with our style:
// Validates and normalizes; single responsibility
export function parsePageSize(input: unknown): number {
const n = Number(input);
if (!Number.isFinite(n) || n < 1 || n > 100) {
throw new Error('pageSize must be a number between 1 and 100');
}
return Math.floor(n);
}- Single responsibility, explicit contract, throws on invalid input.
- Easy to unit test and to reason about in reviews.
Vague, untestable, or inconsistent:
// What is the contract? What if input is null?
function parsePageSize(input: any) {
return Math.max(1, Math.min(100, parseInt(input) || 10));
}anyhides types;parseIntbehavior with null/undefined can surprise.- Silent coercion (e.g.
null→ 10) can hide bugs. We prefer explicit validation and clear errors.
We don’t accept “AI wrote it” as an excuse for unclear or unsafe code. Refine the prompt or edit the output until it meets the bar.
Human in the loop
We keep a human in the loop for design decisions, security-sensitive changes, and production deployments.