I spent the day building out some wood framing, ready for plasterboard with my Dad. It’s always good, learning skills that are so different to everything I do just sat on a computer. I also got to learn about the difference between joinery, and cabinetry.

It’s supposed to be the programmer way to strive for ideal code. DRY, SOLID, a million other acronyms to make this infinitely scaleable, bug-free, perfect code. If there’s one thing I’ve learnt in business after Uni, it’s that perfect is truly the enemy of done. Code that is perfect will always be beaten by code that’s out there and making someone else money.

I had to screw some noggins in between vertical beams. A little chunk of wood, horizontally secured between to stop things moving. I’d screwed it in and it twisted slightly (keyboard fingers are not good at gripping wood like a vice).

I wanted to twist it right, but Dad rightly pointed out that soon it will be behind a plasterboard, never to be seen again. It hadn’t twisted out of true between the beams, it wasn’t standing proud, it was just slightly… not perfect.

This was the difference between joinery and cabinetry. Cabinetry is for show. Every grain chosen, every angle precise. It’s the code that’s on display, where people can endlessly critique it.

Joinery is the meat and potatoes. It’s in all the walls and floors and ceilings. It has rough edges, splinters, holes not perfectly aligned. That’s not to say it’s chip-shop, slap-dash, badly done. It’s just… functional.

Sometimes it’s ok to write a script that’s functional. Sometimes it’s nice to make a type-based pure function. Each has their use.

Be a carpenter. Work with both.