Edge Functions in Practice
Edge functions promise faster responses by running code near your users. Here's what works at the edge, what doesn't, and when the latency matters.
How I build and run software: architecture, choosing boring technology on purpose, accessibility, logging, and lessons from rewrites.
Edge functions promise faster responses by running code near your users. Here's what works at the edge, what doesn't, and when the latency matters.
Publishing what I learn has compounded into the most valuable habit of my engineering career. Here's how it works and why you should start.
Accessibility isn't a feature you bolt on at the end. Here's how to build ARIA-compliant UI components without relying on a component library.
Feature flags aren't just for A/B tests. They're a deployment safety net, a debugging tool, and the key to shipping faster with less risk.
Side projects aren't just hobbies. They're the fastest way to learn new skills, build a portfolio, and open doors that your day job can't.
The most reliable systems I've built use the most boring tools. Here's why proven technology beats shiny frameworks, especially for solo devs and small teams.
Moving from console.log to structured, queryable logs transformed how I investigate production issues. Here's the practical shift and why it matters.
Most engineers have more to share than they realize. Here's how to start writing technical content that's clear, useful, and actually gets read.
Retrieval-augmented generation is the default architecture for knowledge-grounded AI. But it fails in ways most teams don't anticipate until production.
Tool calls are the most fragile part of agentic LLM workflows. Here are patterns that make them predictable: schema design, validation, and retries.
Thin wrappers around LLM APIs aren't defensible products. Here's why they fail and what to build instead.
Prompts are production artifacts. They deserve version control, testing, review processes, and deployment strategies, just like any other code you ship.
Most teams ship LLM features without systematic evaluation. Here's when evals matter, how to keep them lightweight, and how to catch regressions early.
Why debugging AI systems is less about fixing errors and more about auditing decision-making.
How I rebuilt my personal site from the ground up with a custom design system and a component-driven workflow.
What I learned designing an agentic AI system to prioritize and forecast spending, with guardrails that keep it explainable, auditable, and context-aware.
Why I moved from a serverless SvelteKit backend to a standalone Go service, and what I gained from the split.
Exploring the tradeoff between single-prompt convenience and step-based control when designing LLM-powered features.
A look back at the AI side projects I built in 2025 and the technologies that shaped how I think about shipping AI into production.
Learn how to build a more maintainable, testable, and resilient software system using Onion Architecture.
Growth as a software engineer comes from running toward the unknown. Here's how I take ownership of hard problems and break them into steps.
Explore the aromatic world of coffee in software engineering, from the allure of fresh brews to the corporate dramas over the coffee machine.