All Articles
Explore a series
More articles
2026
2 Oct - (I Think Whilst) Writing With AI
24 Sep - Ship Like an Engineer Without Writing Any Code
24 Sep - Time To Hire An AI Head
21 Sep - Call It Machine Intelligence
16 Sep - AI Decisions Just Got 100 Times Cheaper
11 Sep - (I Am No Longer) Coding With AI
11 Sep - AI Progress Is Accelerating. Here Is Why It Feels Slow
10 Sep - Webinar: Make Your AI Rollout Stick
9 Sep - Prompt Evals Alone Are Useless
27 Aug - A Thousand Flowers Is Not Enough
19 Aug - Software Factories Can Handle UX
13 Aug - The Harness Is The Bottleneck
28 Jul - Intelligence Cost Is Collapsing
9 Jul - Webinar: What CEOs Must Do Next About AI
30 Jun - Don't Just Give Everyone an AI
23 Jun - Slice Your Job Into Skills
17 Jun - Skills Are Meant For Sharing
5 Jun - Stop Saving Tokens. Start Writing Scripts.
4 Jun - Webinar: Escape the Great AI Lock-In
19 May - I Don't Want an AI God
15 May - Open Models Are Ready
14 May - Webinar: Unblock Your Team
12 May - Polished Consensus Is Boring
10 May - Ralph In One Line, No Setup
7 May - Engineering in 2028
1 May - What To Put In Your AI Knowledge Base
22 Apr - How I Use AI to Code
17 Apr - Truman Would Have Taken Over AI by Now
10 Apr - Build An AI Knowledge Base From Scratch
8 Apr - Ralph Loops Live at AI Engineer Europe 2026
26 Mar - Webinar: AI Has a People Problem
20 Mar - Stop Prompting, Start Briefing
13 Mar - Feedback Is the New Bottleneck
9 Mar - The AI Leadership Lab at CTO Craft
5 Mar - Webinar: Let AI Do Your Work
26 Feb - Lockbox: Constrain Your Bots To Set Them Free
24 Feb - Code Review Is Dying
18 Feb - Your Bot Is Your Responsibility
5 Feb - AI Guardrails Do Not Work (Yet)
5 Feb - Webinar: Ship While You Sleep
3 Feb - Run Claude Code From Your Phone
3 Feb - Don't Let Your CEO Install OpenClaw
2 Feb - Dial-Up AI Is Ending
27 Jan - AI Must Be Line Managed
25 Jan - Skills Are Claude Code's Secret Weapon
21 Jan - AI Is Still Searching for a Home
16 Jan - Where Did My Day Go? A Claude Code Skill for Remembering
15 Jan - Stop AI Stealing From You
14 Jan - Running Ralph Loops Is Easy
13 Jan - Your Agent Orchestrator Is Too Clever
8 Jan - Webinar: Are We Behind in AI?
2025
31 Dec - My AI Predictions for 2026
15 Dec - See Three Kings Of Inference Spar
15 Dec - The Missing Peer Group for AI Leaders
12 Dec - ChatGPT Is Terraforming Earth
9 Dec - The Slow And Dangerous Loss Of Self
8 Dec - OpenAI's Code Red Is Your Window
4 Dec - Why AI-First Teams Still Ship Slowly
27 Nov - AI Slop Is Real. Model Collapse Isn't.
25 Nov - How to React to a New Frontier Model
6 Nov - Claude Code Is For Everything
23 Oct - Who wants a browser?
21 Oct - Which Coding Agent Is Best? (Head-to-Head Test)
16 Oct - Ditch Autocomplete
14 Oct - AI Teams Need Tortoises Not Hares
7 Oct - AgentKit Helps Its Competitors
2 Oct - Why Your AI Output Is Slop
19 Sep - AI Is Consistently Mediocre. That's Why It's Valuable.
4 Sep - How Not to Screw Up Your AI Rollout
29 Aug - Chatbots Are the Wrong Tool for AI Writing
28 Aug - Coding with AI: How To Do It Well And What It Means For The Industry
8 Aug - Independent Coding Agents Aren't Ready
7 Aug - Is AI Unshippable? (Lessons from Doing It)
6 Aug - Doing Real Work with AI Just Became 150x Cheaper
31 Jul - Parallel AI Agents Create Unusable Code
9 Jul - Beyond the Demo: Building LLM Applications That Actually Ship
2 Jul - You Should Kill Your Prompts
6 Jun - AI Needs More From You
5 Jun - The AI Tools Actually Worth Using
24 May - How I Make Complex AI Changes
15 May - Four Hours, One AI App, Many Lessons
12 May - AI Might Save Software Craft
6 May - Hiring Startup Engineers: a field manual
1 May - Graph RAG is the Future
24 Apr - I Built Kaijo to Fix Unreliable AI
22 Apr - The AI Agent Opportunity Is Too Big to Ignore
14 Apr - The AI Climate Panic Is Wrong
7 Apr - Rehearse Hard Conversations with AI
1 Apr - Always Be Unblocking
27 Mar - Why Time Units Beat Story Points Every Time
26 Mar - Startup Success Stories Are Flawed
25 Mar - How To Get Clarity With a New Tech Team
15 Feb - How to Rebrand Your Mobile App (Without Breaking Everything)
10 Feb - How To Avoid Bad Startup Culture
9 Feb - Prompting Sucks (And What We Can Do About It)
22 Jan - Founder mode is emergency surgery
2024
13 Dec - How to Build a Robust LLM Application
6 Dec - Why Hybrid Work Works
1 Dec - The Job Is Not To Build
25 Nov - Your Code Is A Liability
22 Nov - The First Thing A Startup CTO Must Do
19 Nov - Blogging again after a long hiatus
2017
30 Dec - A new adventure
19 Nov - Ealdorlight: A Kickstarter retrospective
6 Jun - Ealdorlight's Kickstarter is live at 4pm today
10 May - How Ealdorlight's story stands out
28 Apr - Ealdorlight Kickstarter on 6th June, Sol Trader 1.3 released
31 Mar - Introducing: Ealdorlight
22 Feb - What's next for Sol Trader and me
6 Jan - How to lead your life
2016
28 Jun - 5 ways I screwed up Sol Trader's launch: a post-mortem
4 May - Extreme YAGNI: How BDD nails your prototyping stage
9 Feb - Gossip: the best new Sol Trader feature for ages
28 Jan - The top 5 space games of 2015
25 Jan - Sol Trader at EGX Rezzed: 7-9 April 2016
12 Jan - The cunning plans of Sol Trader
1 Jan - Full disclosure: Sol Trader conversation upgrades
2015
24 Dec - The Sol Trader Christmas Eve update: moddable missions
2 Dec - New Sol Trader beta: the science of blame and unforgiveness
27 Nov - Modelling opinions and prejudices in Sol Trader
11 Nov - Sol Trader combat preview
2 Oct - Why (I hope) I will weather the Indiepocalypse
21 Sep - Sol Trader Kickstarter now live!
18 Sep - Three days to go
3 Sep - Gossip as a game mechanic
19 Aug - How to add live code reload to your game
1 Aug - Why I wrote Sol Trader's GUI code from scratch
22 Jul - Sol Trader will be at EGX in September!
18 Jul - 3 new screenshots of Sol Trader's new interface
17 Jul - Trailer: How it will feel to move around Sol Trader's cities
24 Jun - How Sol Trader uses information as currency
17 Jun - The difference review and planning makes to indie development
10 Jun - How to quickly add bloom to your game engine
3 Jun - The huge difference a good Entity System could make to your game
27 May - How tone of voice works in Sol Trader's dialogue system
20 May - Never, ever, ever, ever, ever give up
13 May - How dialogue works in Sol Trader
6 May - How face generation works in Sol Trader
28 Apr - How I'm using Proxemics in Sol Trader's game design
22 Apr - Why I ditched all the build tools in favour of a simple script
15 Apr - How to choose between realism and fun in game design
8 Apr - Your abstractions are a liability
1 Apr - How I doubled the speed of my game by giving up on C++
25 Mar - 4 things every space game must have
18 Mar - After a long journey, Sol Trader has been greenlit!
11 Mar - Why video game coders don't use TDD, and why it matters
7 Jan - 7 things I've learnt in 3 years coding my first indie game
7 Jan - New for 2015: Sol Trader now on Kickstarter
2014
2 Dec - Why you can scale agile with the right attitudes
4 Aug - Why BDD works solo, and why that matters for everyone
8 Jul - How not to check in temporary code
7 May - How to decide whether a tool is right for you
16 Apr - 4 questions to discover if you're *really* agile...
14 Apr - How to layer context into your features using Real Narrative
12 Feb - Make Cucumber features more readable with this one weird trick
2013
26 Nov - How to give BDD a chance
19 Nov - BDD Kickstart is dead. Long live...
11 Nov - How I learned to stop worrying and love (some) detailed Cucumber features
7 Oct - Use Markdown to send HTML email via Mutt: now working on iOS mail
19 Sep - The toolchain of dreams
2 Sep - Extreme isolation part 3: coding a CRUD app (with full example)
29 Aug - BDD: How to deal stories into features
9 Aug - Why Continuous Delivery and BDD play so nicely
6 Aug - Introducing Card Pirates
16 Jul - Extreme isolation part 2: separate the domain from the changes
17 Jun - Rack::Usermanual - Cucumber features as in-app user manual
14 May - Slides for "Leading software teams well"
9 May - Extreme isolation in web apps: part 1
26 Apr - Features are documentation, not tests
6 Mar - BDD without tools: testing shell script
7 Feb - The perils of curiosity
21 Jan - "Project velocity is a useless metric." Discuss.
16 Jan - That's not BDD, that's just Cucumber
10 Jan - Dependency injection != Inversion of Control
3 Jan - BDD Kickstart: London and 2013 plans
2012
11 Dec - Cucumber: keeping the build passing
23 Nov - Scenarios are not Acceptance Criteria
15 Nov - Cucumber: the integration testing trap
7 Nov - Should we store state in our steps?
30 Oct - How to write a great story
25 Oct - The simplest Cucumber project ever
4 Oct - Delegated tasks are a team anti-pattern
28 Sep - Your framework is a liability
27 Sep - OStatus: what I've learnt in 24 hours
26 Sep - OStatus: like Twitter, but open
25 Sep - Job titles are a team anti-pattern
21 Sep - Introducing Morning Pages
20 Sep - Never leave a failing test
19 Sep - Cucumber isn't a testing tool
18 Sep - The power of good naming
17 Sep - Showroom software
14 Sep - Task assignment is a team anti-pattern
13 Sep - The power of feedback
27 Jul - Kickstart your team on BDD
15 May - Waxing Lyrical on Pathfinding
14 May - Attempting validated learning with Sol Trader
2 May - Sol Trader now in Alpha
16 Apr - A fresh take on DCI with C++ (with example)
23 Mar - Sol Trader: a continuous deployment story
17 Feb - On coding defensively
14 Feb - Sol Trader: on lighting
2 Feb - Effective bloom in OpenGL for Sol Trader
16 Jan - Switching Sol Trader from Ruby to C++: one week on
8 Jan - Why I switched from Ruby back to C++
3 Jan - Introducing Sol Trader
2011
14 Dec - A cache-busting http server script in ruby
8 Dec - Feature writing: multiple actors
6 Dec - How I'm testing iPhone apps: part 2
1 Dec - How I'm testing iPhone apps: part 1
17 Oct - Your tests are lying to you
15 Sep - Layers of abstraction: writing great cucumber code
12 Sep - Kanogo: vapourware to beta in 24 hours
6 Sep - Pin in the map: customisable pin icons
5 Sep - Layers of abstraction: combining BDD and UX
30 Aug - e-petitions: handling traffic
22 Aug - Work with me
29 Jul - e-petitions: deconstructed
26 May - Lean code: slides and feedback
17 May - Don't miss your greatest achievement
9 May - The Principle of Scattered Work
6 May - On Flow, and Katas
4 May - On Office Politics
18 Apr - Cucumbers with personality
15 Apr - A formula of motivation
12 Apr - Are apprenticeships scalable?
5 Apr - The team is the atomic unit of success
5 Apr - Certification: recommendation mass produced
4 Apr - On the nature of time
1 Apr - Pomodoros help you refactor
31 Mar - Are coding katas really worth it?
30 Mar - Learning to say Yes
29 Mar - Truly indispensable people
28 Mar - Pomodoros done (hopefully) right
25 Mar - Eden Development has closed
2010
16 Nov - How to get Spork working NOW on Rails 3, Rspec 2 and Cucumber
2 Nov - How I'm writing my book using Vim, Git and Ruby
18 Oct - Call for coders: Children's Future International
29 Jul - My Polyphasic Sleep Experiment
22 Jul - Card Of The Day: Actually Do Retrospective Actions
12 Jul - 750words.com + GTD = Focus
23 May - How to test your node.js app
21 May - User Experience Is Everything
16 May - Leancamp Report
12 May - Every Ash Cloud Has A Silver Lining
29 Mar - Announcing edash
22 Mar - Multiple CI Joes with Rack and Passenger
22 Mar - Radiating status at Eden
17 Mar - Five things I learnt from Corey Haines
8 Mar - Archivey the Robot
7 Mar - Introducing Pushy - github notifications to google wave
21 Feb - BBC Talk on A Philosophy of Software
11 Feb - The Story Card Is Not The Story
27 Jan - Pairing works for everything
15 Jan - Driving out feature ambiguity
2009
29 Dec - Old blog articles from yesteryear
23 Dec - R.I.P. Web 1.0
20 Dec - Snakes and Ladders Kata
15 Dec - Craftsmanship vs. Apprenticeship
14 Dec - Jekyll, the blog engine of kings
14 Dec - Welcome
2006
24 Oct - SVG Planner
11 Apr - Spring Richclient ~ That's a wrap
1 Apr - Spring Richclient ~ A Journey
9 Mar - Spring Richclient ~ Session Eight ~ Such a bind
2 Mar - Spring Richclient ~ Session Seven ~ Beating the Command Framework into Submission
16 Feb - TDD ~ The Tortoise and the Hare
10 Feb - Spring Richclient ~ Session Six ~ The View
3 Feb - Spring Richclient ~ Session Five ~ Applications, windows, views
28 Jan - Spring Richclient ~ Session One ~ Beans, Shmeans and services
26 Jan - Spring Richclient ~ Session Three ~ How did that work then?
24 Jan - Spring Richclient ~ Session Two ~ Hello World
23 Jan - Spring Richclient ~ Session One ~ Making Petclinic work
23 Jan - Spring Richclient ~ Introduction