Zapier was working fine. Replacing a reliable webhook with a long prompt did not make the system more intelligent; it made a deterministic job probabilistic.

The problem is not that large language models lack capability. It is that we often assign them work conventional software already handles more reliably: state management, strict rules, data routing, exact formatting, and execution.

Combining all of those responsibilities into one “god prompt” creates a fragile system. Every additional step introduces another opportunity for error, and those errors compound across the workflow.

A stronger architecture separates responsibilities:

  • Let the model reason, interpret, and choose a route.
  • Let conventional code own state and deterministic execution.
  • Connect the two through strict, typed tool interfaces.
  • Give specialist agents narrow responsibilities that can be tested in isolation.
  • Test generated work and repair failures before they reach the main system.

The strategic principle is simple: embed LLMs inside sound software systems. Do not treat them as a substitute for software engineering.