Archive
🏷️ By Tags
-
90% of software engineering is knowing what not to write
As AI makes code output cheap, the irreplaceable engineer is the one who designs, scopes, and decides what not to build — not the one who writes the most code.
-
My Short-Lived Experiment with Readwise and Reader
I spent a few months trying Readwise and Reader to fix my doomscrolling habit. Here's what worked, what didn't, and why I ultimately moved on.
-
Default Apps 2026
My current default app stack for 2026, covering everything from mail and calendars to notes, reading, and development tools.
-
Lightroom CC to Google Photos
How I automated my workflow from editing in Lightroom CC to syncing finished photos into Google Photos without manual JPEG exports.
-
Four Computers
I run four computers — an iPhone, an iPad, a MacBook Air, and a Mac mini — and somehow each one has earned its own irreplaceable niche.
-
How I use AI
An honest look at how I actually use AI day-to-day — where it adds real value, where it gets in the way, and what I've stopped using it for.
-
My Backbone Apps
The small set of apps I keep coming back to year after year — not because they're flashy, but because they match how my brain actually works.
-
The problem with VC model
VC funding expects portfolio companies to subsidise all the bets that didn't pan out — which quietly shapes products in ways users rarely see.
-
Balancing strategic vs tactical work in software engineering
In software engineering there's a constant tension between long-term strategic work and short-term tactical priorities — and switching between them is harder than it looks.
-
Circuit Breakers For Your Life
Just like electrical circuits use breakers to prevent overloads, we need personal circuit breakers — intentional limits that protect our energy, focus, and wellbeing.
-
Fix Git Branch Prefix Uppercasing
Why your git branch prefix might suddenly be uppercased on macOS and the one-line fix to stop it happening again.
-
Make Next DNS work with Arc Browser
A quick fix to make NextDNS work properly inside Arc browser, which routes traffic through its own infrastructure and bypasses system DNS settings.
-
Contributor vs Maintainer Mentality
The quality of technical decisions on a shared codebase often comes down to whether someone thinks like a contributor or a maintainer — and they are very different mindsets.
-
Code Review Principles
A concise set of principles for conducting better code reviews — focused on the reviewer's mindset, not just the mechanics of raising a PR.
-
On Note Taking Tools
Years of trying every popular note-taking app and what I've learned: the tool matters less than the system, but some tools do get out of the way better than others.
-
Daily Routine
How a deliberate daily routine — built during the pandemic — became a cornerstone of my mental health, productivity, and relationships.
-
Software Is Not A Race
Good software isn't about shipping one tiny fragment at a time. It's about understanding the whole before touching any part — and then moving decisively.
-
Equality Checks in Kotlin With Unstructured Data
A short guide to equality checks in Kotlin when one of the objects contains arbitrary or unstructured data, and why the usual == can mislead you.
-
Dynamodb Gotchas
A collection of DynamoDB quirks and gotchas I hit in production — from capacity modes to query patterns — with Kotlin code examples.
-
Building a Reactive Oauth Client App with SpringBoot and Kotlin Coroutines
A walkthrough of building a reactive OAuth2 client with Spring Boot, Kotlin coroutines, and WebFlux — tying together social login and async data streams.
-
Right Way To Shadow Jar When Using Jetty With Http4k
The correct way to build a fat jar with ShadowJar when using Jetty and Http4k — and why the naive approach silently breaks your app at runtime.
-
Brows3r - Pure Kotlin S3 Browser
Brows3r is a small S3 browser built entirely in Kotlin, using Http4k for the server and a minimal web frontend — a weekend project that taught me a lot.
-
Test Multipart/Form Data with WebTestClient
How to write integration tests for multipart/form-data endpoints in Spring Boot using WebTestClient, which is surprisingly under-documented.
-
Simple Oembed Service Using Http4k
Building a lightweight oEmbed service in Kotlin using Http4k — a functional, modular HTTP library that makes server code feel like pure functions.
-
Post Boot Actions Using Application Events
How to run code after a Spring Boot application finishes starting up, using application events instead of fragile workarounds.
Last updated: