1<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Engineering Blog | Ship, Learn, Repeat</title><meta name="description" content="Notes on engineering leadership, delivery, and practical software work."><link rel="canonical" href="https://borimir.com/"><meta property="og:site_name" content="Engineering Blog"><meta property="og:title" content="Engineering Blog | Ship, Learn, Repeat"><meta property="og:description" content="Notes on engineering leadership, delivery, and practical software work."><meta property="og:url" content="https://borimir.com/"><meta property="og:type" content="website"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="Engineering Blog | Ship, Learn, Repeat"><meta name="twitter:description" content="Notes on engineering leadership, delivery, and practical software work."><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600&display=swap" rel="stylesheet"><link rel="stylesheet" href="/_astro/BaseLayout.BGHb92ny.css"></head><body><div class="mx-auto flex min-h-screen max-w-5xl flex-col px-5 pt-8 pb-12"><header class="mb-5 flex items-center justify-end gap-4 pt-4 pb-2"><nav aria-label="Primary"><ul class="m-0 flex list-none gap-3 p-0"><li><a class="px-2 py-1 font-semibold text-slate-900" href="/" aria-current="page">Home</a></li><li><a class="px-2 py-1 font-semibold text-slate-500 hover:text-slate-900" href="/about">About</a></li><li><a class="px-2 py-1 font-semibold text-slate-500 hover:text-slate-900" href="/posts">Thoughts</a></li><li><a class="px-2 py-1 font-semibold text-slate-500 hover:text-slate-900" href="/resume">Résumé</a></li></ul></nav></header><main class="flex-1"><div class="max-w-3xl"><!-- Header section with better vertical spacing --><section class="mt-8 mb-12"><p class="mb-2 text-xs font-medium tracking-[0.15em] text-slate-500 uppercase">Behind the notebook</p></section><!-- Introduction with improved typography --><section class="mb-20"><div class="space-y-6"><p class="text-xl leading-[1.6] font-light tracking-[-0.01em] text-slate-700 md:text-2xl">I'm an engineer and team lead working at the intersection of product, engineering, and delivery, with a focus on clarity, quality, and trust. I've spent the last 15+ years working across startups, biotech, and SaaS.</p><p class="text-base leading-[1.7] text-slate-600">If you want the full story, you can read my <a href="/about" class="text-blue-600 underline decoration-blue-300 underline-offset-2 transition-all duration-200 hover:text-blue-700 hover:decoration-blue-500">about page</a>. And if you'd like to get in touch, you can always <a href="mailto:[email protected]" class="text-blue-600 underline decoration-blue-300 underline-offset-2 transition-all duration-200 hover:text-blue-700 hover:decoration-blue-500">email me</a>.</p></div></section><!-- Recent thoughts with better spacing --><section><h2 class="mb-6 text-xs font-semibold tracking-[0.15em] text-slate-500 uppercase">Recent thoughts</h2><div class="grid gap-1"><article class="group grid py-3.5"><div class="flex flex-col items-start justify-between gap-2 text-sm text-slate-500 sm:flex-row sm:items-center"><time datetime="2026-04-04" class="font-medium tracking-tight tabular-nums">Apr 4, 2026</time><!--<div class="flex gap-2"> 2 {post.tags.map((tag) => ( 3 <span 4 class="inline-flex items-center rounded-full bg-slate-200 px-3 py-1 text-xs font-bold tracking-[0.05em] text-slate-900" 5 aria-label={`Tag: ${tag}`} 6 > 7 {tag} 8 </span> 9 ))} 10 </div>--></div><div class="grid gap-1.5"><h3 class="m-0 text-lg leading-tight font-semibold text-slate-900"><a href="/posts/building-a-serverless-voice-notes-app-on-aws" class="transition-colors duration-200 ease-in-out group-hover:text-blue-600">Building a Serverless Voice Notes App on AWS</a></h3></div></article><article class="group grid py-3.5"><div class="flex flex-col items-start justify-between gap-2 text-sm text-slate-500 sm:flex-row sm:items-center"><time datetime="2026-03-12" class="font-medium tracking-tight tabular-nums">Mar 12, 2026</time><!--<div class="flex gap-2"> 11 {post.tags.map((tag) => (
12 <span 13 class="inline-flex items-center rounded-full bg-slate-200 px-3 py-1 text-xs font-bold tracking-[0.05em] text-slate-900" 14 aria-label={`Tag: ${tag}`} 15 > 16 {tag} 17 </span> 18 ))} 19 </div>--></div><div class="grid gap-1.5"><h3 class="m-0 text-lg leading-tight font-semibold text-slate-900"><a href="/posts/delegating-projects-accountability-without-control" class="transition-colors duration-200 ease-in-out group-hover:text-blue-600">Delegating Projects: Accountability Without Control</a></h3></div></article><article class="group grid py-3.5"><div class="flex flex-col items-start justify-between gap-2 text-sm text-slate-500 sm:flex-row sm:items-center"><time datetime="2026-01-31" class="font-medium tracking-tight tabular-nums">Jan 31, 2026</time><!--<div class="flex gap-2"> 20 {post.tags.map((tag) => ( 21 <span 22 class="inline-flex items-center rounded-full bg-slate-200 px-3 py-1 text-xs font-bold tracking-[0.05em] text-slate-900" 23 aria-label={`Tag: ${tag}`} 24 > 25 {tag} 26 </span> 27 ))} 28 </div>--></div><div class="grid gap-1.5"><h3 class="m-0 text-lg leading-tight font-semibold text-slate-900"><a href="/posts/sweet-spot-ai-augments-em-leadership" class="transition-colors duration-200 ease-in-out group-hover:text-blue-600">The Sweet Spot: How AI Augments (Not Replaces) Engineering Leadership</a></h3></div></article><article class="group grid py-3.5"><div class="flex flex-col items-start justify-between gap-2 text-sm text-slate-500 sm:flex-row sm:items-center"><time datetime="2025-12-17" class="font-medium tracking-tight tabular-nums">Dec 17, 2025</time><!--<div class="flex gap-2"> 29 {post.tags.map((tag) => ( 30 <span 31 class="inline-flex items-center rounded-full bg-slate-200 px-3 py-1 text-xs font-bold tracking-[0.05em] text-slate-900" 32 aria-label={`Tag: ${tag}`} 33 > 34 {tag} 35 </span> 36 ))} 37 </div>--></div><div class="grid gap-1.5"><h3 class="m-0 text-lg leading-tight font-semibold text-slate-900"><a href="/posts/knowing-when-to-fix-and-when-to-escalate" class="transition-colors duration-200 ease-in-out group-hover:text-blue-600">Knowing when to fix and when to escalate</a></h3></div></article><article class="group grid py-3.5"><div class="flex flex-col items-start justify-between gap-2 text-sm text-slate-500 sm:flex-row sm:items-center"><time datetime="2025-12-01" class="font-medium tracking-tight tabular-nums">Dec 1, 2025</time><!--<div class="flex gap-2"> 38 {post.tags.map((tag) => ( 39 <span 40 class="inline-flex items-center rounded-full bg-slate-200 px-3 py-1 text-xs font-bold tracking-[0.05em] text-slate-900" 41 aria-label={`Tag: ${tag}`} 42 > 43 {tag} 44 </span> 45 ))} 46 </div>--></div><div class="grid gap-1.5"><h3 class="m-0 text-lg leading-tight font-semibold text-slate-900"><a href="/posts/launching-engineering-blog" class="transition-colors duration-200 ease-in-out group-hover:text-blue-600">Starting Again</a></h3></div></article></div></section></div></main><footer class="mt-8 flex flex-row items-start justify-between gap-4 py-5 leading-normal text-slate-500 sm:items-center"><p class="m-0 font-semibold text-slate-900">Ship, Learn, Repeat.</p><p class="m-0 font-semibold text-slate-500">© 2026</p></footer></div>
46<script async src="https://scripts.simpleanalyticscdn.com/latest.js"></script>
46<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"5b88616e04f84cd49905cceab9bd64d7","r":1,"spa":2}' crossorigin="anonymous"></script>
46 47</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.