Every few years, a new abstraction arrives that makes the previous one feel embarrassing in retrospect. Raw SQL gave way to ORMs. Callback hell gave way to async/await. Manual memory management gave way to garbage collection. Each shift wasn't just about writing less code — it was about thinking differently about the problem. We're at one of those moments with AI. The way we learned to talk to LLMs Most AI-powered applications today follow the same pattern: Write a prompt string Interpolate some variables into it Call the API Parse the response (pray it's valid JSON) Map it to your data model Validate Handle the cases where it isn't valid Retry This is prompt-centric thinking. The prompt is the program. The data model is just a container waiting at the end of a pipeline. It works. But it's the callback hell of AI development — functional, verbose, and fragile in ways that only show up in production. What if we inverted the relationship?…