From Custom Orchestration to LangGraph: Why the Framework Didn't Change My Architecture
Two Implementations, One System I didn't plan to build this twice. The custom version came first — discovery.py, 1,497 lines of async Python. Playwright browsers, if/else routing, try/except error ...

Source: DEV Community
Two Implementations, One System I didn't plan to build this twice. The custom version came first — discovery.py, 1,497 lines of async Python. Playwright browsers, if/else routing, try/except error handling, state passed around as dicts. It grew organically over weeks of running against real company websites, handling every weird edge case the internet threw at it. Parked domains. JavaScript-only navigation. Sites that redirect /careers to a login page. It works. It's ugly in places. It processes thousands of companies. Then I started looking at LangGraph. Not because the custom version was broken, but because I was curious whether the framework would actually give me anything I didn't already have, or if it was just another abstraction layer to learn. So I rebuilt the whole cascade as a StateGraph. 9 nodes, conditional edges, typed state. Same Playwright browsers underneath. Same scoring functions. Same output format. At runtime, you pick which one runs: if os.getenv("VERIFIER_USE_LANG