Software Architecture

MySQL, PostgreSQL, and SQL Server: Choosing the Right Relational Database
MySQL, PostgreSQL, and SQL Server: Choosing the Right Relational Database

TL;DR TL;DR — Quick Summary & Key Takeaways

Choosing between MySQL, PostgreSQL, and Microsoft SQL Server requires matching database architectural strengths to organizational constraints. Evaluating concurrency models, JSON capabilities, and cloud ecosystems …

Beyond Graphs: An Introduction to Google's Agent Development Kit (ADK)
Beyond Graphs: An Introduction to Google's Agent Development Kit (ADK)

TL;DR TL;DR — Quick Summary & Key Takeaways

Google’s Agent Development Kit (ADK) introduces a hierarchical, code-first approach to building multi-agent AI applications. By adopting an “agents all the way down” philosophy and providing a …

Streaming State and Tokens in LangGraph
Streaming State and Tokens in LangGraph

TL;DR TL;DR — Quick Summary & Key Takeaways

Forcing users to wait for a complex, multi-node agent graph to finish executing leads to poor perceived latency and unresponsive UIs. LangGraph’s streaming modes allow applications to stream intermediate …

Why DynamoDB Feels Magical Until You Learn the Trade-Offs
Why DynamoDB Feels Magical Until You Learn the Trade-Offs

TL;DR TL;DR — Quick Summary & Key Takeaways

Amazon DynamoDB delivers single-digit millisecond latency and hands-off serverless scaling, but demands a fundamental shift in data modelling. Understanding its rigid access-pattern trade-offs prevents expensive …

Using Async Effectively in LangGraph
Using Async Effectively in LangGraph

TL;DR TL;DR — Quick Summary & Key Takeaways

Scaling LangGraph workflows for real-time web applications requires transitioning from synchronous graph calls to fully asynchronous execution. Leveraging ainvoke(), astream(), and async tool definitions unlocks …

Vector Databases: What They Are and How To Use Them
Vector Databases: What They Are and How To Use Them

TL;DR TL;DR — Quick Summary & Key Takeaways

When text embedding collections expand beyond simple in-memory arrays, brute-force linear search introduces severe latency bottlenecks. Vector databases solve this challenge using approximate nearest neighbour …

Seven Tips for Performant Async Python
Seven Tips for Performant Async Python

TL;DR TL;DR — Quick Summary & Key Takeaways

Sprinkling async and await keywords across Python code does not automatically guarantee high performance or concurrency. Avoiding common asynchronous pitfalls ensures your services handle heavy I/O loads without …

Building a Pipeline in LangGraph
Building a Pipeline in LangGraph

TL;DR TL;DR — Quick Summary & Key Takeaways

Monolithic agent graphs become difficult to reason about, debug, and test as workflow stages multiply. Composing separate, specialized LangGraph graphs into a multi-stage pipeline provides clear operational …

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 …