
The non‑negotiable coding habits I use on client and personal projects—testing, git hygiene, documentation and performance.
Before touching code, I write down three things:
This gives me a simple decision filter:
Code is only “good” inside the context of the problem it solves.
I’d rather have:
than:
Patterns I use a lot:
If a new dev can’t guess where a file lives, the structure needs work.
I use TypeScript as a design tool, not just a safety net:
! everywhere.zod or similar runtime validation at boundaries.This reduces:
Strong types are a free specification your future self will thank you for.
My rules:
Examples:
feat: add RSVP guest limit with validationfix: debounce search to reduce API callschangesfix stuffGood history lets you:
I don’t test everything blindly. I test:
I prefer:
And I always:
The goal is confidence, not 100 % coverage for its own sake.
Style debates waste human energy. Tools don’t argue.
I use:
This means:
Once the rules are agreed, the tools do the enforcement.
Instead of “this feels fast enough”, I:
On portfolios and landing pages, I care most about:
I optimise:
Performance is a feature, not a nice-to-have.
I ask: “When this breaks in production, how will we know why?”
So I:
This turns “it’s broken” into:
It saves hours of guesswork when things inevitably go wrong.
When I touch old code, I try to:
I don’t rewrite everything. I just improve the area I already have open.
Over time, this:
The best code can still fail a project if communication is poor.
My habits:
Examples:
Good developers ship code; great developers build trust.
These 10 practices are simple, but they compound:
If you’re reading this as a potential client or teammate, this is the standard I bring to every project on this portfolio.