Esc
  • Design SystemsFrom Figma Variables to Tailwind, Without the Copy-PasteDesign tokens only help if design and code read from the same source. Here's how I set up a pipeline where Figma variables become Tailwind theme values and React props, and what I learned about naming along the way.
  • Next.jsBuilding a Like Button, From Database to DelightThe heart at the bottom of every article on this site is a tiny full-stack feature. Here's how it works, from the SQLite table and API route to optimistic updates and batched requests.
  • AnimationA Friendly Introduction to Spring PhysicsSprings make interfaces feel alive. Instead of picking a duration and an easing curve, you describe how something should move, and physics does the rest. Let's build an intuition for stiffness and damping with a live playground.
  • UI DesignDesigning Dashboards People Can Actually ScanData-heavy screens fail when every number shouts at once. A practical guide to hierarchy, tables, filters and progressive disclosure for dashboards that engineers and analysts use all day.
  • CSSUnderstanding Flexbox Alignment, Visuallyjustify-content or align-items? Main axis or cross axis? If you still guess which property to use, this interactive guide will fix that for good.
  • BrandA Brand System Is More Than a LogoA logo is the smallest part of a brand. What makes a brand recognizable is the system around it, from type and color to iconography, voice and the way the product itself behaves. Here's how I approach building one that survives contact with real products.
Career

How I Keep Side Projects Shippable

I used to have a graveyard of half-finished side projects. These days I actually ship most of them. Nothing changed about my motivation. I changed how I scope, plan and finish.

2 min read…

For a long time, my side projects followed the same arc. Huge excitement in week one. A beautiful architecture by week two. Then life got busy, and the repo quietly joined the graveyard.

At some point I realised the problem wasn't motivation. It was scope. Here's what I do differently now.

Write the announcement first

Before I write any code, I write the short post I'd publish on launch day. Two or three sentences: what it is, who it's for, why it's useful.

If I can't write that post, I don't understand the project yet. And if the post describes ten features, I cut it down until it describes one.

Pick a ship date, not a feature list

Features expand to fill whatever time you give them. A date doesn't. I give each project a deadline, usually four to six weekends away, and I ship whatever exists on that date.

A small thing that's live beats a big thing that's almost done.

This forces healthy prioritisation. When the deadline is close, "nice to have" features get cut without any agonising.

Use boring technology

Side projects are a great place to learn new tools, but learning and shipping pull in opposite directions. I now pick one new thing per project at most. Everything else is a stack I already know well.

Leave breadcrumbs for future you

Most projects stall because coming back after a break is painful. You've forgotten where you were and what came next. So I end every session by writing a single line at the top of a NOTES.md file:

markdown
NEXT: wire the signup form to the /api/subscribe route

Next time, I don't have to think. I just start.

Define "done" up front

"Done" for me means three things:

  1. It's deployed at a real URL.
  2. It has a README with one screenshot.
  3. I've shared it with at least one person.

Polishing, refactoring and new features can come later, as version two. Most of the time, version one turns out to be enough.

The compound effect

Shipping small things regularly has done more for my career than any single big project. Each one is a story for an interview, a new skill, and proof that I can finish what I start.

So pick your smallest idea, give it a date, and ship it. Future you will be glad you did.

Want to know when I publish something new?

I send a short email when there's a new article or project, usually a couple of times a month. No spam, and you can unsubscribe whenever you like.