Python
Querying Precisely: Type-Safe GraphQL in Python with Strawberry
Connecting client applications to database records requires a clear, reliable communication contract. For years, Representative State Transfer (REST) has served as the default architecture for modern web applications. If you read my previous guide, Building Modern APIs with FastAPI and Python, you …
Connecting LangGraph Agents to FastMCP Servers
Connecting large language models (LLMs) to local tools and system resources has historically required a lot of custom integration work. This friction makes agentic systems difficult to scale and maintain. Fortunately, the Model Context Protocol (MCP) provides a standard way to expose tools, …
From Insight to Production: Software Engineering Habits for Data Scientists
If you come from a data science background, your core strength lies in translating complex, messy datasets into actionable business insights. You are likely a master of statistical modelling, feature engineering, and extracting patterns from noise. However, a common bottleneck arises when you need …
Building Agentic System Tools with FastMCP and Python
If you have spent any time building agentic systems recently, you have likely encountered the integration bottleneck. Connecting large language models (LLMs) to local tools, internal databases, or system utilities has historically meant writing custom APIs for every single integration. This …
Building Modern APIs with FastAPI and Python
If you’re starting a new Python backend project today, you’re almost certainly going to use FastAPI. It has rapidly displaced older frameworks to become the industry standard for API development. The reasons are simple: it’s fast, it embraces modern Python type hints, and it does a …
Beyond Graphs: An Introduction to Google's Agent Development Kit (ADK)
If you’ve spent any time building agentic systems lately, you’re likely familiar with LangGraph. It’s a powerful framework that treats agents as nodes in a graph, connected by edges that define the flow of execution and state. It’s robust, explicit, and extremely capable once …
Streaming State and Tokens in LangGraph
If you’ve been following the earlier posts in this series, you’ll have built graphs that gather data, call tools, and produce structured output.
Every one of those examples used .invoke(), which means the caller waits in silence until the entire graph finishes and then receives the final …
Using Async Effectively in LangGraph
In Seven Tips for Performant Async Python I focused on plain asyncio.
That’s the right place to start, because LangGraph doesn’t replace Python’s event loop or make blocking code magically concurrent.
If an async LangGraph node calls a blocking library, the graph still waits.
If …
Vector Databases: What They Are and How To Use Them
In an earlier post we generated embeddings and searched them by computing cosine similarity across a small in-memory list. That approach is perfect for learning and prototyping, but it doesn’t scale. When your corpus grows to hundreds of thousands or millions of documents, iterating over every …
Seven Tips for Performant Async Python
Adding async and await to a Python function feels like an easy win.
You’ve heard it makes code faster, so you sprinkle the keywords in, run your program, and it seems to work.
But async Python has a habit of looking correct while quietly running no better or even worse than the synchronous …
Building a Pipeline in LangGraph
The earlier posts in this series built self-contained graphs: one graph, one task, one run. But real workflows often span multiple stages, where each stage produces output that the next stage needs. The pipeline pattern I describe here isn’t an official LangGraph pattern — it’s an …
Concurrent Nodes in LangGraph
Real-world agents rarely do one thing at a time. They fetch data from multiple sources, run independent checks in parallel, and combine the results before moving on. LangGraph supports this natively with concurrent nodes, but there is a subtle catch when those nodes all write to the same piece of …











