Blog
Notes on AI engineering
Practical articles on AI agents, RAG, LLM integrations, evals and security — from real projects, no fluff.
Modernizing legacy code with AI: migrations, upgrades and rewrites that actually ship
How to use LLMs and coding agents for legacy modernization: what Google, Airbnb and AWS learned from large AI-assisted migrations, combining agents with OpenRewrite, characterization tests and a strangler-fig rollout.
AI-generated unit tests: how to get tests that catch bugs, not tests that just pass
A practical guide to generating unit tests with LLMs: lessons from Meta's TestGen-LLM, mutation testing as the quality gate, characterization tests for legacy code, and prompts and workflows for Java, Kotlin and TypeScript.
Securing AI-generated code: vulnerabilities, hallucinated packages and the controls that work
What research shows about the security of code written with AI assistants, how slopsquatting and hallucinated dependencies work, and a layered set of controls for teams shipping AI-generated code.
AI code review for pull requests: what it catches, what it misses and how to set it up
How to add an LLM reviewer to your pull request workflow: realistic expectations, configuration, prompts and rules, noise control and metrics that show whether it actually helps.
Agentic coding best practices: how to work with Claude Code, Codex and Copilot agents
A practical workflow for coding agents: context files, plan-then-execute, tests as guardrails, permissions, subagents and how to review agent-written code without drowning in diffs.