using AI as a software engineer
← back to notes
The pattern: AI is great at typing and summarizing. You’re responsible for the physics of production systems.
| Category | Use AI freely | Use AI with guardrails | Do manually (AI can assist, but you drive) |
|---|---|---|---|
| API work | handler/controller scaffolds, DTOs, validation boilerplate, OpenAPI drafts | error mapping, pagination/filter semantics, partial updates, backwards compatibility | API contracts, semantics, versioning strategy, breaking-change decisions |
| Data layer | simple queries, ORM mapping code, repository patterns | complex SQL, query tuning, index suggestions | data modeling, invariants, transaction boundaries, consistency decisions |
| Reliability | basic timeouts/retry snippets, circuit breaker skeletons | retry policies, idempotency, ordering guarantees, backpressure | SLOs/SLAs, failure-mode design, incident playbooks |
| Security | basic input validation patterns, safe string handling reminders | auth flows (OAuth/JWT usage), threat modeling brainstorm | authz model, permissions, secret handling, crypto choices, security review |
| Performance | micro-optimizations suggestions | caching strategy, hot-path tuning, connection pooling | profiling/benchmarking in your env, capacity planning |
| Ops/Infra | Dockerfile templates, k8s manifests drafts | resource limits, autoscaling, rollout strategy | production rollout plan, canary/rollback, cost tradeoffs |
| Testing | unit tests, table-driven tests, fuzz/property ideas | integration tests with real deps | what to test (risk-based), acceptance criteria, test data strategy |