Notes on building software with intent.
Longer-form thinking on the craft of engineering — clarity, systems, performance, and the decisions that quietly shape a product.
Backend & data systems
APIs, analytical data, migrations, and the performance decisions underneath a product.
-
What Do You Lose When You Filter Logs Before Export?
Cloudflare Logpush Transformers move filtering before delivery. Learn how to preserve incident evidence, useful metrics, and visibility when transforms fail.
6 min Read more -
ClickHouse Stream Analytics: Duplicates, Late Events, and Replay
Design ClickHouse stream analytics around stable event identity, late arrivals, replay, and verifiable aggregate results.
12 min Read more -
A Cursor Is a Position, Not a Page Number
Design cursor pagination with a unique order, precise continuation boundaries, query-bound tokens, and an honest contract for changing data.
6 min Read more -
Event Schema Versioning: A Developer Guide
Use event schema versioning to evolve analytics safely without breaking dashboards, funnels, destinations, or historical data.
10 min Read more -
What AI Code Review Taught Us About Analytics Contracts
An analytics UI review cycle showed how filters, timezones, and pagination depend on clear API contracts, scope keys, and boundary tests.
7 min Read more -
Purchase Event Deduplication: A Developer Guide
Prevent duplicate revenue by defining purchase identity across browser, server, and retry paths.
7 min Read more -
Database Scope Is a Product Contract
Define database scope through ownership, access, time, and lifecycle boundaries, with a practical multi-tenant API example.
12 min Read more -
The Server-Side Delivery Checklist: From Event to Evidence
Verify server-side event delivery from collection to destination with a practical checklist for states, testing, evidence, and recovery.
5 min Read more -
How to Build Conversion Data Everyone Can Reproduce
Build reliable conversion data with clear event contracts, stable IDs, observable deduplication, and end-to-end validation.
6 min Read more -
What scaling an ASP.NET Core backend actually requires
Learn how to scale ASP.NET Core backends with explicit boundaries, caching, database discipline, timeouts, retries, and observable failure handling.
13 min Read more -
Designing real-time analytics with ClickHouse
Design ClickHouse real-time analytics with event schemas, tenant scope, query performance, aggregation, freshness, and late-event handling.
13 min Read more -
Database migrations should have a road back
Design reversible database migrations with expand-migrate-contract, safe backfills, compatibility windows, rollback plans, and observability.
11 min Read more -
Dashboard performance is a product problem
Improve dashboard performance through useful paint, data readiness, stable loading states, efficient queries, caching, and honest freshness.
12 min Read more
AI systems
Reliable AI applications built around evidence, boundaries, evaluation, and recovery.
-
How Many Tools Should Your Agent Run at Once?
AI SDK now lets you limit concurrent tool calls. Choose a policy around dependencies, shared capacity, and the behavior users actually need.
6 min Read more -
Typed AI Decisions Need an Engineering Contract
Build observable AI decisions with explicit contracts, measured confidence, fallback policies, and a trace from evidence to action and outcome.
10 min Read more -
What Actually Stops When You Stop an AI Agent?
Trace an AI agent's Stop button through browser requests, model streams, tool execution, and completed actions, with practical cancellation decisions.
6 min Read more -
Agent Orchestration Is Product Infrastructure
Design auditable AI agent workflows by tracing context, actions, verification, approval, and product outcomes—not just whether an agent ran.
8 min Read more -
How I Organize AI Agents Across a Complex Software System
How I organize AI agents, choose models, define responsibilities, and validate AI-assisted work in a large software project.
7 min Read more -
How to Measure AI-Assisted Engineering Without Reducing It to a Productivity Score
Measure AI-assisted engineering with evidence from quality, delivery, rework, reliability, cost, and developer experience—not one score.
13 min Read more -
Reliable AI Agents Need SLOs, Not Just a Success Rate
Design reliable AI agents with workflow SLOs for correctness, latency, safety, recovery, and evidence—not a single success rate.
13 min Read more -
An AI Visibility Audit That Marketing and Engineering Can Both Trust
Run an AI visibility audit that makes report scope, agent confidence, page activity, and next actions clear to both marketing and engineering.
6 min Read more -
When AI can approve a pull request
What AI pull request approval changes about governance, ownership, permissions, evidence, and safe software delivery.
15 min Read more -
AI-assisted code analysis you can actually trust
Design AI-assisted code analysis with repository scope, evidence links, calibrated confidence, reproducible results, and human review.
13 min Read more -
Designing reliable AI agents
Design reliable AI agents with tool contracts, durable state, idempotency, approvals, loop prevention, recovery, and observability.
14 min Read more -
Why long context does not equal understanding
Understand why long context fails: context dilution, irrelevant retrieval, ordering, chunking, provenance, and context budgeting.
12 min Read more -
Model routing is a product decision, not only a cost optimization
Optimize LLM model routing with workload classes, quality gates, fallback, caching, latency budgets, and cost observability.
12 min Read more -
AI-assisted developer tools need a smaller promise
Build trustworthy AI developer tools with bounded tasks, evidence, structured output, privacy controls, evaluation, and human review.
13 min Read more
Engineering practice
Testing, observability, API design, and system boundaries for systems that keep changing.
-
Branch protection nedir, neden ve nasıl kullanılır?
GitHub’da main dalını korumak için pull request, kod incelemesi ve CI kontrollerini nasıl zorunlu kılacağınızı öğrenin.
5 dk Read more -
What Changed When We Took Developer Testing Seriously
How we test changes before QA, verify real product behavior, and prepare clearer handoffs with evidence from an analytics tracker migration.
7 min Read more -
Backend Test Cases: A Practical API Testing Matrix
Design backend test cases for authentication, validation, scope, pagination, retries, and failures using a practical API testing matrix.
12 min Read more -
Backend Database Testing: Fixtures, Isolation, and Real Queries
Build backend database tests with deterministic fixtures, isolated state, real queries, and clear assertions for scope and persistence.
13 min Read more -
Make Time an Explicit Dependency
Make time-based rules easier to test by passing the current instant explicitly, checking boundaries, and separating timestamps from elapsed durations.
6 min Read more -
Testing is a boundary design problem
Design backend tests around contracts, scope boundaries, failure paths, and observable behavior instead of only testing individual methods.
12 min Read more -
Observability is a product contract
Design observability around the decisions people need to make, connecting logs, metrics, traces, freshness, and user-visible failure states.
12 min Read more -
API design that survives change
Design APIs that can evolve safely through explicit contracts, stable errors, scoped inputs, compatibility windows, and honest response states.
13 min Read more -
System boundaries are design decisions
Make software systems easier to change by designing explicit boundaries for ownership, data, failure, authorization, and deployment.
12 min Read more