Writing

Eight years of shipping software: what I'd do differentlyDec 1, 2025

Eight years of production code, from medical school to senior engineer. Not a lessons-learned list. More honest than that.

9 min read2 comments
FastAPI for a Node.js developer: the Python backend I didn't expect to enjoyOct 14, 2025

I picked it up for a specific project. I kept using it because it's genuinely good.

7 min read
Custom hooks I copy between every React projectSep 15, 2025

A small collection of hooks that I've written once and used on every project since.

7 min read2 comments
Building a multilingual mobile app for 70 countriesAug 5, 2025

i18n is the easy part. RTL layout, locale-specific formatting, and building for users who have never used a smartphone before: that's where it gets interesting.

8 min read
Moving from Express to NestJS: the switch we made and whyJun 17, 2025

Express is flexible. NestJS is opinionated. At a certain team size, opinionated wins.

6 min read2 comments
React Native's new architecture: what changed in our production appApr 9, 2025

JSI, Fabric, TurboModules. Here's what actually changed after migrating a production app.

7 min read
The mental model for React Server ComponentsFeb 10, 2025

Server Components aren't SSR. The distinction matters more than most explanations suggest.

8 min read2 comments
Building P2P systems with Hyperswarm and HyperbeeFeb 3, 2025

Most P2P JavaScript tutorials use WebRTC. The Holepunch stack is different and more capable.

10 min read
AWS for mobile backends: what I actually useDec 11, 2024

Most tutorials show you all the services. Experience narrows it down fast.

8 min read
How I test React components: a practical strategyOct 14, 2024

Not everything needs a test. Here's how I decide what to test, how to test it, and when to skip it.

9 min read3 comments
Testing React Native apps without losing your mindOct 1, 2024

The testing toolchain is fragmented. Here's the setup that's worked across multiple projects.

7 min read
Learning Go as a Node.js developer: what surprised meAug 7, 2024

Go is different in ways that aren't obvious from the syntax. The concurrency model took the longest to internalise.

8 min read
Using React Suspense for data fetching: what works and what doesn'tJun 22, 2024

Suspense has been "coming soon" for data fetching for years. Here's where it actually stands and how I use it today.

8 min read1 comment
How we built real-time interpreter matching on mobileJun 18, 2024

Connecting a hospital to an available interpreter in under 30 seconds, reliably, at 3am. Here's how the system works.

10 min read2 comments
Kafka vs RabbitMQ: when I reach for eachMay 14, 2024

Both are message systems. They solve different problems and the overlap is smaller than the marketing suggests.

7 min read
Error boundaries in production React: beyond the basicsMar 18, 2024

Every React app needs error boundaries. Most implementations miss the parts that matter in production.

7 min read2 comments
Designing offline-first mobile appsMar 6, 2024

In markets where connectivity is unreliable, offline-first isn't a feature. It's a requirement.

9 min read
React Native performance: the changes that actually moved the needleJan 20, 2024

There's a long list of things you can try. These are the ones that made a measurable difference.

8 min read2 comments
Profiling React performance: the tools and techniques I useDec 5, 2023

React is fast by default. When it isn't, here's how I find and fix the problem.

9 min read3 comments
Docker for Node.js services: the setup that actually works in productionSep 25, 2023

Small images, non-root users, multi-stage builds, graceful shutdowns. Here's the Dockerfile pattern I've converged on.

7 min read1 comment
Building forms in React without a form libraryAug 30, 2023

React Hook Form and Formik are good tools. You don't always need them.

7 min read2 comments
PostgreSQL or MongoDB: how I actually decideJul 9, 2023

The real question isn't relational vs document. It's about your query patterns and how much your schema will change.

6 min read
Solidity security: the patterns worth internalisingMay 17, 2023

Audits find what you missed. Understanding the patterns means missing less.

9 min read
Migrating a production Next.js app from Pages to App RouterMay 14, 2023

We migrated a 40-page Next.js app to the App Router. It took three weeks. Here's what went smoothly and what didn't.

11 min read2 comments
React Navigation v6: the patterns I actually useMar 2, 2023

The docs show you what's possible. Experience shows you what's practical.

6 min read1 comment
WebSockets in Node.js: getting it right for productionJan 14, 2023

Socket.io gets you started. It doesn't handle reconnections, horizontal scaling, or graceful degradation without additional work.

8 min read
Medicine and code: why my path was never really a career switchNov 30, 2022

I started coding in medical school, shipped production software by third year, and worked full-time as an engineer throughout. The path was never linear.

7 min read3 comments
Component patterns I actually use in production ReactSep 22, 2022

Not every pattern from the docs is worth using. These are the ones that have survived contact with real codebases.

10 min read3 comments
React Native Android debugging: the patterns I keep coming back toSep 8, 2022

Android-specific bugs are their own category of pain. These are the tools and approaches that actually help.

5 min read
Migrating a React Native codebase to TypeScript mid-projectJul 22, 2022

We did this while the app was in active development. It was rough for a week and smooth after that.

9 min read2 comments
The Node.js event loop: what I actually needed to understandMay 11, 2022

Most explanations stop at "it's non-blocking I/O." Here's what I wish someone had told me when I started hitting real concurrency issues.

8 min read
State management in React: when useState stops being enoughApr 10, 2022

useState works until it doesn't. Here's how I think about when to reach for something else, and what to reach for.

8 min read2 comments
Writing my first production smart contract: what I got wrongMar 4, 2022

The Solidity docs are fine. The problem is everything around the contract: gas estimation, deployment scripts, and why your tests pass locally but the contract behaves differently on testnet.

7 min read1 comment
Setting up React Native in 2022: what nobody tells youJan 18, 2022

The documentation gets you to Hello World. It doesn't tell you about the four days you'll spend fighting Gradle.

6 min read2 comments