AI-Assisted Work
Use AI for exploration, implementation, and review while keeping the engineer in control.
AI assistance works best as a short feedback loop. The engineer defines the outcome and constraints; the tool proposes; the engineer checks reality.
A useful workflow
- Frame the task. State the user outcome, current behavior, constraints, and what must not change.
- Gather evidence. Read the relevant code, tests, logs, documentation, and recent decisions.
- Ask narrowly. Request one explanation, plan, test, or small change at a time.
- Inspect the proposal. Check assumptions, dependencies, error paths, security boundaries, and unnecessary changes.
- Verify behavior. Run focused tests, type checks, static analysis, and a real user path where appropriate.
- Own the result. Simplify the diff, update documentation, and explain the decision in your own words.
Vibe coding has a boundary
“Vibe coding” usually means steering from prompts and visible results without understanding every implementation detail. It can be useful for disposable prototypes, learning, or testing an idea in an isolated environment.
It is not a production acceptance standard. Before code reaches a shared branch, an engineer must understand its behavior, dependencies, failure modes, data access, and rollback. If nobody can explain the change, the change is not ready.
Good uses
- explain an unfamiliar module and identify where to verify the explanation;
- draft table-driven tests or edge cases for an understood contract;
- compare two designs with explicit constraints and trade-offs;
- perform a bounded refactor while preserving tests;
- summarize a diff for review, then check the summary against the diff; and
- draft documentation from verified behavior.
Weak uses
- choosing an architecture before the problem is understood;
- diagnosing production from a partial screenshot or one log line;
- generating a large feature across unfamiliar systems in one request;
- replacing a security, privacy, legal, or domain review; and
- writing more code or documentation only to make work appear complete.
Keep the diff reviewable
Ask the tool to preserve local conventions, avoid unrelated cleanup, state assumptions, and list verification commands. Reject generated abstractions that serve one call site, comments that repeat the code, and tests that only mirror the implementation.
A fast loop still needs a gate
Speed comes from reducing search and repetition—not from removing review, tests, or responsibility.