Highlights
Senior full-stack developer with nearly three decades of making computers do what they’re told. Started in the Netscape era when frames seemed like a good idea (they weren’t), survived the browser wars, and somehow still enjoy this.
I build features end-to-end, debug the production gremlins that make other developers suddenly remember they have meetings, and occasionally keep systems running at 2am when I’d really rather be unconscious.
What I'm good at
- Full-stack ownership: Taking features from vague requirements through UI, API, database, deployment, and monitoring—the whole stack, even the parts nobody wants to own (someone has to)
- Infrastructure: Building CI/CD pipelines, containerization, and observability so developers don’t have to think about it (until it breaks, then everyone thinks about it)
- Production debugging: Finding the gnarly bugs—race conditions, memory leaks, integration failures, that one API call that works everywhere except production (usually at 2am, rarely voluntarily)
- Legacy code archaeology: Reading unfamiliar codebases, understanding what past developers were thinking, and improving it without breaking production (success rate: higher than you’d expect)
- Code reviews: Catching bugs without being insufferable about semicolons, offering better approaches without the phrase “well actually,” and knowing when to just approve it (the trick is doing this while people still like you)
How I work
- Ask annoying questions: Turn vague asks into working software by asking “but what should happen if…” until we’ve actually thought it through (or until people start avoiding my Slack DMs)
- Write tests: So future-me doesn’t have to debug mysteries at 3am (past-me skipped this sometimes, which is exactly why present-me never does)
- Review code thoughtfully: Catch bugs without being insufferable about formatting—balance being helpful with being thorough (okay, sometimes I’m insufferable about formatting)
- Ship things: Fix production issues with urgency, focus on impact over perfection, and know when “good enough” beats “theoretically optimal” (hint: usually around the third refactor)
- Document everything: Write the docs I wish existed when I inherited this mess, because six months from now nobody remembers why we did it this way (me included)
Tech stack
The tools I use daily. Some by choice, others because legacy code made the decision for me.
- Languages: Java · C#/.NET · TypeScript/JavaScript · SQL · Springboot
- Front end: React · Vanilla JS · HTML · jQuery · Bootstrap · Accessibility · Tailwind
- Back end: REST APIs · Integrations · Background jobs · Auth · DB Migrations
- Ops: Docker · CI/CD · Observability · Performance · Debugging
Origin story
Got a Commodore 64 at age ten, monopolized the family TV for the next eight years, spent my teens on BBSes and early Swedish internet gateways building HTML for Lynx browsers. Been doing this professionally since 1998 when Framfab hired me to make websites for IE4.
I’m still recovering from IE4, but at least these days browsers mostly agree on how CSS works. Mostly.
More details
Places to learn more, judge my code, or see what happens when I have too much free time.