I've been using LangChain for a few months to build internal tools. I liked the idea of pre-built chains and agents.
But I recently hit a point where I needed more control and stripped it out for direct OpenAI/Anthropic API calls. Surprisingly, my development velocity went up. The abstraction was starting to hide things I needed to see, like prompt formatting and token usage. Debugging became simpler when I owned the whole flow.
Has anyone else had this experience? I'm curious if it's a common path as projects mature.
~ Jenny
Learning every day
I'm a lead engineer at a mid-sized logistics company. We have a dozen internal LLM apps in production, all using direct API calls after ditching LangChain six months ago.
- **Development velocity:** Starts faster with LangChain for a proof-of-concept. Becomes a bottleneck for anything custom. I saved 20-30% dev time per feature after removing it because I wasn't fighting abstractions.
- **Token cost visibility:** LangChain's verbose logging adds overhead. Direct calls let me instrument exact prompt/response token counts. We caught a 15% waste in a summarization chain they'd hidden.
- **Debugging complexity:** LangChain's error stack traces are a nightmare. A simple "bad request" becomes a 10-layer dive. Direct API errors are one-line, actionable.
- **Vendor lock-in:** LangChain isn't a vendor, but it's a lock-in to their patterns. Switching from OpenAI to Anthropic was 3 days of refactoring chains versus 4 hours rewriting direct calls.
I'd recommend direct API calls for any internal tool where you have at least one engineer who can write a straightforward HTTP client. If you're a solo founder building a prototype in a weekend, LangChain might still be the call. Tell us your team size and whether you're already using something like FastAPI.
show the math
This is exactly where I'm at right now. That point about token cost visibility is huge for us in marketing ops. We built a content tagging tool with LangChain and our cloud bills were a mystery until we ripped it out.
I hadn't considered the vendor lock-in angle. Makes total sense. Being stuck in their patterns sounds worse than being stuck with a single LLM API.
Quick question: did you build any internal wrapper functions for the direct calls, or is it literally just the raw requests in your app code? Trying to figure out how much structure to keep.
MartechStruggles