Software Architecture

Using Async Effectively in LangGraph
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
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
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
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 …

Sudoku Series: Implementing the Single Candidate Rule
Sudoku Series: Implementing the Single Candidate Rule

This week, we hit a major milestone: our solver can now complete very easy Sudoku puzzles, thanks to the simplest rule of all — the single candidate rule. By writing code that parses the grid repeatedly and looks for opportunities to apply this rule, we’re able to solve some of the simplest …

Unit Testing Our Python Sudoku Solver
Unit Testing Our Python Sudoku Solver

This week we have a new topic for this blog, which is unit testing. While not as exciting as actually writing the functional code for a project, it is an important skill to have. By writing tests for your code, you get to check that it behaves the way you intended. Not only does this let you fix the …

First week implementing the Python Sudoku solver
First week implementing the Python Sudoku solver

This is the update post, a week after planning to build a Sudoku puzzle solver in Python. In this post, we’ll review the direction the project is going and discuss the setup steps involved in this new project.

If you like this post and you’d like to know more about how to plan and write …

Planning a Sudoku solver in Python
Planning a Sudoku solver in Python

Sudoku is one of those puzzles that captivates anyone who attempts to solve it. Sudoku puzzles can range from very easy to fiendishly difficult, despite the rules being relatively simple and unchanging.

To be valid, a Sudoku puzzle must have only a single solution — and this constraint actually …