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.