Mitchell Hashimoto details his gradual, pragmatic journey toward effectively integrating AI into his software engineering workflow. He describes moving through phases of inefficiency and adequacy before finally achieving meaningful workflow improvements.

Hashimoto breaks his AI adoption into six steps:

  1. Drop the Chatbot: Hashimoto quickly realized that using chat interfaces (like ChatGPT) for coding was highly inefficient. Instead, he advocates using agents—LLMs that can read files, execute code, and operate in a loop.
  2. Reproduce Your Own Work: To genuinely understand AI capabilities, he forced himself to reproduce his manual coding work using agents. Though initially excruciating, this process taught him what agents excel at, what they fail at, and how to break tasks into clear, actionable sessions.
  3. End-of-Day Agents: To boost efficiency without interrupting his daily flow, he began spinning up agents at the end of the day to handle tasks like deep research, triage, and exploring vague ideas, giving him a “warm start” the next morning.
  4. Outsource the Slam Dunks: Having learned the AI’s strengths, Hashimoto started delegating high-confidence tasks to background agents while he focused on deep, manual work. Crucially, he disabled agent notifications to avoid context switching.
  5. Engineer the Harness: To minimize agent mistakes, he began “harness engineering.” This involves updating instructions (like AGENTS.md) and writing scripts/tools specifically designed to help the agent verify its work and avoid repeating past errors.
  6. Always Have an Agent Running: His current goal is to keep an agent running continuously in the background to handle delegatable tasks, though he admits he currently achieves this only 10–20% of the day.

Ultimately, Hashimoto views AI as just another tool in the software craftsman’s belt—one that requires upfront friction and workflow adjustments to truly pay dividends.