Languages
Core languages I use daily.
- Python
- General-purpose language for APIs, data and automation
- TypeScript
- Typed superset of JavaScript
- Bash
- Shell scripting and automation
- SQL
- Language for querying and shaping relational data
Vision first
I build AI skills, agents and Model Context Protocol (“MCP”) and CLI tools. I use AI to ship software that stays traceable, testable and easy to change.
“Don't chase the models. Build the scaffold they rise into.”
I co-founded Wordtracker in 1998, the first keyword research tool. We introduced the Keyword Effectiveness Index (KEI) to identify actionable keywords with high search volume and low competition.
It's still going 28 years on. I led its technology from two developers to around 25 and scaled turnover roughly 100× over a decade, never stepping away from the codebase.
As well as a founder-operator, I work in production Python. I wrote Wordtracker's back-end API in FastAPI and built its large-scale search-data pipelines. More recently I've gone deep into agentic engineering.
Since January 2026 I've built skills, agents and CLI (MCP tools) on Claude, along with a methodology, Stride, for shipping AI-built software that lasts. Remote-native, self-directed, available now.
“Always honest and highly innovative.”
“Mike has consistently demonstrated qualities of honesty, reliability, and care. He approaches tasks with diligence and attention to detail, ensuring that responsibilities are fulfilled to the best of his abilities.”
“Mike is a very trustworthy individual. I have known him for over 10 years and he has always been totally professional and considerate of others. I would recommend him to any potential clients.”
“Having known Mike for 20 years or more, I can safely say that he has looked after me, my home and my business, and truly cares about everyone he meets.”
The AI and agent stack leads, because that's where the work is now. The rest is the ground it stands on.
Core languages I use daily.
Production APIs and data systems.
Skills, agents and CLI (MCP tools) on Claude.
Modern React applications.
Large-scale data pipelines.
Provisioning and deployment.
Confidence before shipping.
Design for change.
Turning ambiguous ideas into products.
How I work.
Set the vision, then give each agent a bounded piece of work. I keep the board, constraints and checks in place so agents can move fast without losing the thread.
The job is orchestration. The whole system keeps moving towards the same destination.

Built Stride, a way to run a dev team on a Kanban board where the team is AI. Every card, every change, visible and accountable. Python provides the reliable layer underneath, gathering facts, checking constraints and verifying the work. Agents make the calls that need judgement. It gives AI-assisted development guard rails (traceable, reversible, tied to a Vision) so teams ship AI-built software that lasts past day 30, instead of vibe-coding software that collapses under its own debt.
It runs on Claude Code with Linear / Kanban delivery, atomic commits behind pull requests. Bounded pieces go to agents, and every change stays reviewable through the board.
Presented it in a 25-minute talk, "Stop building on quicksand — ship AI apps that last past day 30", at the AI Global Festival (Suffolk, 2026).
The talk argued against vibe coding and for staged agentic engineering: start with a shared Vision, telegraph work across the team, give agents bounded pieces to deliver, then keep every change reviewable through the board, commits and pull requests.
The same methodology delivered the smart-glasses spike below. It's the method in live use on paid client work, not just theory.

For an early-stage AI startup, ran a fixed-scope two-day go/no-go spike proving a Convex reactive-database web app could drive Even Realities G2 smart glasses with real-time two-way sync.
Built a test Convex app and demonstrated a clean round trip between the phone's companion app and the glasses lens. Because the client's platform runs on the same reactive database, the result carried straight to it.
Delivered remotely and asynchronously with a shared repo and a written findings note. (Client named on request, subject to NDA.)

When faced with two or more alternatives that deliver roughly the same value, take the path that makes future change easier.
— Andrew Hunt & David Thomas, The Pragmatic Programmer
I build Python systems that are easy to change. The method is simple: keep the cost of change low and do the simplest thing that works.
I use Kent Beck's test-driven development loop to shape the design as I build. Write a failing test, make it pass, then improve the design while everything stays green. The tests give me fast feedback and keep each step small.

My take on Sandi Metz's 99 Bottles OO exercise puts that to work: polymorphism instead of conditionals, methods of five lines or fewer, each class with a single reason to change. The 0, 1 and 6 cases become subclasses that override only what differs.
Composition is usually the better default. Here inheritance is exactly the right tool: each special bottle number has the same shape, with one small behaviour changed.
Sandi Metz's flocking rules drive the refactor:
class BottleNumber:
@classmethod
def from_number(cls, number):
return {
0: BottleNumber0(number),
1: BottleNumber1(number),
6: BottleNumber6(number),
}.get(number, BottleNumber(number))
def __init__(self, number):
self.number = number
def quantity(self):
return str(self.number)
def container(self):
return "bottles"
def successor(self):
return BottleNumber.from_number(self.number - 1)
class BottleNumber0(BottleNumber):
def quantity(self):
return "no more"
def successor(self):
return BottleNumber.from_number(99)
Codetidy is a standalone Python toolkit for inspecting and tidying repositories. It checks Markdown links, compares repos, flags poor names, and validates docstrings and return types.
Codetidy's Python checks start with CodeBlock, a small wrapper around Python's built-in representation of a program's structure. Each check is a small function that answers one question, while CodeBlock handles the shared work of reading and walking the file.
class CodeBlock:
@classmethod
def from_file(cls, filename: str) -> Self:
with open(filename, "r") as f:
return cls(f.read())
def __init__(self, code: str):
self.code = code
@property
def tree(self) -> ast.Module:
return ast.parse(self.code)
@property
def lines(self) -> list[str]:
return self.code.splitlines()
@property
def nodes(self) -> list[ast.AST]:
return list(ast.walk(self.tree))
@property
def func_defs(self) -> list[ast.FunctionDef]:
return [
node
for node in self.nodes
if isinstance(node, ast.FunctionDef)
]
def match_all_cond(
self, fn: ast.FunctionDef, checks: list[Callable]
) -> bool:
return all(
check(fn, self.lines)
for check in checks
)
def find_matching_functions(
self, checks: list[Callable]
) -> list[str]:
return [
function.name
for function in self.func_defs
if self.match_all_cond(function, checks)
]
I use a modular MVC-style architecture for FastAPI backends. Separation of concerns is built into the structure. Each domain owns its models, controllers, routes, services and schemas. The modules work together, but each manages its own scope.
Models own the database schema and operations. Controllers validate requests and stay thin. Services hold the business logic. Routes expose versioned endpoints, with OpenAPI and Swagger documentation generated by FastAPI.
modules/
shipping/
src/
models/
controllers/
routes/
services/
schemas/
The same discipline carries into AI. Python gathers facts and enforces the rules. Models handle the judgement.
| Layer | Role |
|---|---|
| Deterministic scaffold | Python gathers facts, scores evidence and enforces constraints. |
| Model judgement | Agents interpret the evidence and handle decisions that resist fixed rules. |
| Self-correcting workflow | Tests, reviews and verification feed results back into the next pass. |
/restructure skillHere's a concrete one. I built a /restructure skill this year. It reorganises code that's grown too big and broken the Single Responsibility Principle.
Instead of the model reading a whole codebase and guessing where to act, Python scans the file system and scores every file for "tension": AST analysis for size and coupling, git history for churn, a test-coverage safety multiplier. The model gets hard data on where the tension actually sits, complexity times impact, and spends its judgement on the restructuring, not on hunting for the problem.
Deterministic code finds the facts. The model does the thinking. I've built a library of patterns like it since.
The same skill uses lexicographic rules for classification: order cues by importance and act on the first one that discriminates. That gives the model a simple, robust steer without forcing new cases into a fixed pattern taxonomy.
/commit skillI built the /commit skill to turn committing into a deterministic engineering workflow. It separates changes into atomic commits, then runs dedicated passes for content, standards, independent review and post-commit verification. The model makes the judgements; the workflow ensures none of the checks are skipped.

I co-founded Wordtracker in 1998 and helped grow it into an internationally recognised keyword research platform serving customers worldwide. It put keyword research at the centre of digital marketing, turning search demand from guesswork into something businesses could measure and act on.
Financial Times
“Brothers’ fast-track to success is being hot in the pursuit of words…”
Read article →
A constant for nearly two decades
Wordtracker has been that constant for me — dependable, insightful, and backed by a team that truly understands the needs of digital marketers.
The most relevant keywords without the complexity
Your tool is truly amazing because your engineers figured out how to get the most relevant keywords for each topic without all the unnecessary complexity that causes distraction.
Stands the test of time
This tool has had nothing but a positive impact on our business and helps us tend to our clients everyday. Our entire SEO department uses Wordtracker daily and we find it an indispensable tool — selected because of its dependability over time and results.
Less expensive than Ahrefs for basic SEO
You rock and look forward to using you guys for the foreseeable future. Thanks for being less expensive than Ahrefs for my basic SEO needs.
| Year | Title | Where |
|---|---|---|
| November 2008 | Five Powerful Ways to Use Keywords | Ken McCarthy's System Seminar |
| June 2017 | Get Noticed! (The Art of Getting Attention) | Marketing piece |
| 2026 | Stop building on quicksand — ship AI apps that last past day 30 | Talk — AI Global Festival, Suffolk |
| Years | Institution | Study |
|---|---|---|
| 1993–1996 | Reading University | BA (Hons) Film & Drama, 2:1. |
| 1991–1992 | Bristol University | Computer Science & Maths (two terms). |
| 1986–1991 | Mill Hill School | A-levels in Economics, Maths, Physics and English Literature; 12 GCSEs, including English, Physics and Computer Studies at grade A. |
| Term | Detail |
|---|---|
| Availability | Immediately, remote, UK-based. |
| Contract | Part-time or full-time, ongoing or three- or six-month terms. |
| Employment | Part-time or full-time, equally welcome. |
| Right to work | Eligible to work in the UK. |
| How I work | Remote-native and self-directed. Happy to lead a team of coders and agents, or embed in yours. |
| Experience | 25+ years shipping production software; Wordtracker co-founder and technology lead. |
Worth a conversation? I'll give you the live tour: Stride and the tension-score script. Available now for contract work, or for part-time or full-time employment.
Same instinct, different medium. Building a live show or directing an agent comes down to the same thing: a clear vision, fast feedback and practice until it sticks.
I've put whole productions together, from the first idea to the audience seeing it. So when I'm working on one part, I know how it fits with all the others. That's what I bring to a project. I don't just finish the task in front of me. I make sure it serves the whole thing.
Ran the Wam Bam Club for 10 years — a West End burlesque cabaret at The Café de Paris (Leicester Square) and The Bloomsbury Ballroom (Holborn); comedy, cabaret and controlled chaos, engineered to leave the room buzzing (TripAdvisor reviews).
Don't Let Him In (2011) — Horror feature film. A nerve‑bludgeoning, slow‑burning psychological horror/slasher in which a rural weekend getaway turns into a deadly double date when a charming stranger may be the serial killer known as “The Tree Surgeon.” Released internationally (incl. US Jan 2012; UK Oct 2012) and sold in major retail (incl. Walmart).
A filmmaker too — Burning Man | Release! (2015).
Across these projects I've worked as a film editor — now specialising in AI, with tools like Seedance 2.5 and Kling — as well as camera operator, director of photography and producer.
Wow. Watching your film now. The music and imagery is SUBLIME brother. Wow. Mediated ecstasy. Love it.
— Jason Silva, Shots Of Awe
I run a second brain. It's the Tiago Forte idea: capture what you learn, get it back when you need it, and action it now. I can pull a detail from a conversation months old and use it today.
That's context management, the same skill the agent work rests on. Wherever I'm working, it's the edge. Work gets done better and faster, with the best knowledge to hand. And I don't keep it to myself. I coach people to set up their own, so this AI-powered way of working spreads through the company and lifts everyone it touches.
I run it on Cmux and Obsidian. Cmux holds several second brains at once. Obsidian's where I read them. So I've got multiple knowledge bases, all talking to each other.
So the right knowledge lands just in time, for the exact job in front of me.
I'm AI-native too. I'll run several Claude, Codex and Gemini CLI jobs at once, not one at a time.
For the hard calls I lean on more than one model. OpenRouter's Fusion fires a prompt at a panel of models in parallel, with web search. A judge weighs the answers, and my model writes a better one off the back of it.
I do the same with documents. Fan one out to several frontier models and pull back a synthesised critique, a build on Karpathy's llm-council.

Four areas I've worked in and know well.
| Industry | Focus |
|---|---|
| Trading | Commodities, options, crypto. Markets run on data, and I like building the tools that read it. |
| Marketing | Landing pages, advertising, media buying. I built my own MDX system, lander, to keep content and design apart, so a page stays quick to change. |
| Search, AEO and GEO | The same ground I've worked for 28 years, now shifting to AI answers. I know how people find things, and how that's changing. |
| Ecommerce | Sites include Surfboard Racks, Boardbags and Nature's Own Essence, selling surf gear and essential oils online. |
| Work | The work |
|---|---|
| Agentic systems | Building skills, agents and CLI (MCP tools) so a team can focus on what only people are good at. |
| Data analysis | Crunch and analyse large volumes of data to detect patterns (Redshift, BigQuery). |
| Trading | Writing trading systems. |
| APIs | Writing APIs (FastAPI / Pydantic) which serve valuable data. |
| Creative problems | Solving interesting creative problems, like the two-way sync between Convex and the Even Realities glasses. |