I'm the person between the problem and the system that fixes it.
Twelve years winning the work, designing it and building it. Sixteen years with a customer in front of me, and leading the people who build the rest since 2020. Four years as one company's only technical voice, and still the call when it breaks. These days the systems are agentic, and I run mine in production every day.
Set what your role needs, and I'll show you where I sit
Every role calls for something different, so rather than make you pick a title, set what you actually need.
Move the sliders to say how much your role needs that capability. The dashed shape is what you asked for; the solid shape is me. Where mine sits outside yours you're covered; where it sits inside, you'd be stretching me.
160+ projects sold and built. Account executive and engineer on every one.
Four years as the only technical voice at an asset-management company. One domain model, multiple services.
My depth is owning systems end to end for small and mid-sized businesses.
A self-hosted "second brain" built using Claude, running scheduled agents, and supporting ongoing personal and work-related tasks.
21 years of coding experience. Paid to write code since 2014.
Lead developer within six months, training juniors. I wrote the task we screened candidates with.
I owned the decisions, built the thing, and led the people doing the rest
Nine roles across two continents, and eighteen years described by the shape of the work rather than the titles.
Drag across the chart, or use the slider, to read any year and view the different axes of my track record.
Independent, then part-time CTO
Went independent and picked up NAS. The technology call became entirely mine: architecture, security, roadmap.
Hiring for a specific role?
Each page show evidence for the role, and each has a one-page version you can forward.
Engineering Manager
Coaching was my first profession. Engineering came second, and this role is where the two meet.
Open role page →Strong matchAI Enablement Lead
Getting an organisation to actually use AI, and writing the rules that let it move fast safely.
Open role page →Strong matchSolutions Architect
The first technical voice a customer hears. Discovery, demos, architecture, business case.
Open role page →Strong matchForward Deployed Engineer
Embedded with the customer, owning the technical call from first conversation to production.
Open role page →ProvenSenior Engineer
Twelve years of it. I still want the keyboard, and I want a say in what gets built with it.
Open role page →What could end this, and what only looks like it could
The constraints, up front rather than in week three.
Red is a genuine blocker with no way around it. Green is a fact people sometimes read as a problem, with the reason it isn't.
The working language has to be English
My Swedish is basic. I understand a fair amount; pronunciation has always been the struggle. If your team works in Swedish, I'm not your candidate.
AnsweredI'm in Australia for weeks at a time, most years
My family is in Sydney and I go back for extended stretches, most often around Christmas.
I can work remotely while I'm there.The rest of the year I want the office - the environment, the collaborating, being amongst colleagues.
AnsweredNo university degree
I don't have one.
And it hasn't been the gate.Eighteen years and nine roles hired on evidence, including a regulated fintech and a part-time CTO seat. The work is the qualification, and it's all on this site.
AnsweredMost of my career is self-employed, not corporate
I've run my own business for more of my career than I've been an employee.
Which is exactly why I'm useful.Nobody else was doing the selling, delivery, support, hiring or cashflow, so I had to do all of them. Most people at my level have only done one side of that table.
AnsweredI started out as a coach, not an engineer
Coaching was my profession from 2010. I didn't write software for money until 2014, and the two overlapped while I wound the coaching down.
It's the discovery skill.Coaching is getting someone with a messy situation to a decision they'll act on. It's why an architecture review and a nervous CFO are the same conversation to me.
AnsweredMy CTO title is part-time, at a small company
It runs on a retainer, not a full-time seat at scale.
Four years, sole technical voice, still the call when it breaks.Accountability and duration are the proof here, not headcount.
The full record, one page at a time
Dive deeper into my work, my skills, my experience, and my certifications.
Work
Every project with the technologies, the constraints and what it produced.
Built and operatedAI practice
The agentic tooling I run daily, published tools I've authored, and what I actually use them for.
9 roles · 2008 → PresentExperience
The full timeline, every role, and the achievements attached to each of them.
TemperamentAbout me
Who I am, how I behave under pressure, what I'm still learning, and what the personality tests make of me.
16 certificationsCredentials
What I have, what I don't, and every credential linked back to the issuer.
PrintableOne-pager
The scannable printable version, for a fast skim.
Pick the one closest to your week
Each is a real engagement, with the decision I made and what came of it.
I traced where the cash was getting stuck before I drew a single schema.
A customer brings a truck that needs work, NAS finds a mechanic, the mechanic reports back. All of it lived in phone calls and spreadsheets. What exists now is one domain model with three surfaces on it: internal operations, a customer portal and a contractor portal. I argued the security, integrity and roadmap decisions in front of a CEO measured on fleet uptime, not architecture, and I'm still the one who gets called when it breaks.
I ran the reviews, then wrote the task we screened candidates with.
Six months in I was made lead developer, with a team of juniors to bring up. The code review became the training: retrospectives, workshops, and a written standard in the company knowledge base. I sat in with the CTO on hiring and wrote the coding task every candidate worked through, so they all met the same bar. I built the KPI app the team tracked itself with, and before I left I was brought into the group that set the company's direction.
Almost everyone has run an agent. Almost nobody has run one unattended for months.
That gap is the whole engineering problem, and it's where I've spent this year. My own knowledge base is wired to Claude through a self-hosted MCP server on a VPS I administer, encrypted at rest, with skills and workflows that do the everyday work and hold state across sessions. Explicit tool scopes, guardrails, per-task model selection, definitions under version control, and scheduled headless runs with nobody watching. When a scheduled run collided with sync and split twelve files, I found it and fixed it.
Customers arrive with a solution already chosen. The job is finding the problem it was meant to solve.
Every project started with me in a room arguing a proposal against agencies with more people and better decks. I quoted work, lost some of it, and learned why, because scoping to win is how you lose money on delivery. And there was no handover to a delivery team: what I promised in the room is what I then had to make exist, which is a very effective discipline on what you promise. Over a million of that came from one client who kept renewing.
It takes an idea to a working MVP, and picks up where it left off.
A Claude Code skill that runs discovery, then planning, then implementation, so anyone can get an idea to a working MVP instead of one-shotting it at a blank prompt. State persists between sessions, so a build resumes where it stopped. Six hours from method to published skill. It allows anyone to build an advanced tool or application in order to test an idea and ship faster
It rewrote every row on every run. I made it write only the rows that had changed.
Every run pulled the whole source and then overwrote the whole database, so every row was rewritten whether anything about it had changed or not. The run took about three hours. I kept the pull, cached it and compared it against what was already stored, which left only the writes that were a real change.
