Every engineer eventually starts a blog. The usual reasons: "I want to share what I'm learning," "I'll document my projects," "this will help other people." Those are all true for me too. But the real reason is simpler.
I build things, and I think about what I'm building. Writing forces that thinking to be legible -- to me first, then maybe to you. This blog is where I externalize that process.
What to Expect
Most posts will be technical. I work at the intersection of AI engineering and production systems -- LLMs, agents, retrieval pipelines, the scaffolding that makes them reliable in the real world. I'll write about patterns that work, patterns that don't, and the specific problems I ran into that I couldn't find good answers for anywhere else.
Some posts will be about the craft of building things. Not framework tutorials -- there are enough of those. More about the judgment calls: when to abstract, when to stay concrete, how to ship something that's maintainable six months from now when you've forgotten why you made every decision.
A Note on Format
I write in plain language. No fluff, no unnecessary hedging. If something is complicated, I'll say it's complicated. If I don't know something, I'll say that too.
Code samples will be real -- pulled from actual projects, not invented for the sake of illustration. Like this one:
def parse_frontmatter(content: str) -> tuple[dict, str]:
"""Extract YAML frontmatter from markdown content."""
if not content.startswith("---"):
return {}, content
end = content.find("---", 3)
if end == -1:
return {}, content
import yaml
frontmatter = yaml.safe_load(content[3:end])
body = content[end + 3:].lstrip()
return frontmatter, body
That's the kind of thing I write about -- small, specific, useful.
Posts will ship when they're ready. No promises on frequency. When I have something worth saying, I'll say it here.