Writing
Notes on problems I encounter while building and maintaining products.
Featured
Sep 24, 2026
•Engineering note
Choosing a single source of truth in React
Separate server facts, user choices, and derived values to avoid inconsistent interface state.
Sep 24, 2026
•Engineering note
Where to put the client boundary in Next.js
Place client components around interactivity while keeping data ownership and browser JavaScript in view.
Sep 24, 2026
•Engineering note
Choosing Adapter and Strategy at the right boundaries
Use Adapter and Strategy where behavior needs to vary, without adding unnecessary layers.
Feb 17, 2026
•Engineering note
Planning a maintainable first release in Next.js
Choose a useful first scope, keep the main workflows clear, and prepare for changes after launch.
Feb 08, 2026
•Engineering note
Rendering, metadata, and SEO in Next.js
Check that rendered content, page titles, canonical URLs, and language variants describe the same page.
Feb 08, 2026
•Engineering note
Keeping code readable during production changes
Clear ownership and data flow help a team make changes while a product is in use.
All posts
Sep 24, 2026
•Engineering note
Making production errors easier to investigate
Connect a failed action to a request ID and useful context, while keeping sensitive data out of logs.
Sep 24, 2026
•Engineering note
Preventing duplicate actions when requests are retried
Use stable action identifiers and database constraints to handle retries without repeating a write.
Sep 24, 2026
•Engineering note
Recovering from failed optimistic updates
Choose suitable actions for optimistic feedback and plan what happens when the server rejects a change.
Sep 24, 2026
•Engineering note
Loading, empty, and error states in React
Show what is happening during a request and give users a clear next step when it finishes or fails.
Sep 24, 2026
•Engineering note
Choosing cache freshness in Next.js
Define how current each page’s data needs to be, then choose caching and invalidation rules to match.
Feb 16, 2026
•Engineering note
Keeping admin dashboards usable as they grow
Organize internal tools around daily workflows, with clear actions and enough context to investigate problems.
Feb 15, 2026
•Engineering note
Building a support chat users can follow
Message history, read states, and response expectations that help users and support teams follow a conversation.
Feb 14, 2026
•Engineering note
Designing a contact form that starts a useful conversation
Ask for the context you need, make optional questions clear, and keep each request easy to follow.
Feb 08, 2026
•Engineering note
Reducing repetitive work in admin tools
Find repeated tasks, reuse the information a team already has, and keep the result easy to check.