Chris Parsons
Services
Articles
LinkedIn
BlueSky
X (Twitter)
Index
adn
e-petitions: handling traffic
Aug 2011
e-petitions: deconstructed
Jul 2011
agents
Kill Your Prompts: Build Agents That Actually Work
Jul 2025
agile
Why Time Units Beat Story Points Every Time
Mar 2025
Your Code Is A Liability
Nov 2024
Why you can scale agile with the right attitudes
Dec 2014
Why BDD works solo, and why that matters for everyone
Aug 2014
4 questions to discover if you're *really* agile...
Apr 2014
Make Cucumber features more readable with this one weird trick
Feb 2014
How to give BDD a chance
Nov 2013
Your framework is a liability
Sep 2012
Job titles are a team anti-pattern
Sep 2012
Attempting validated learning with Sol Trader
May 2012
Sol Trader now in Alpha
May 2012
Layers of abstraction: writing great cucumber code
Sep 2011
Layers of abstraction: combining BDD and UX
Sep 2011
e-petitions: handling traffic
Aug 2011
Work with me
Aug 2011
e-petitions: deconstructed
Jul 2011
Cucumbers with personality
Apr 2011
Card Of The Day: Actually Do Retrospective Actions
Jul 2010
Radiating status at Eden
Mar 2010
The Story Card Is Not The Story
Feb 2010
Pairing works for everything
Jan 2010
ai
Kill Your Prompts: Build Agents That Actually Work
Jul 2025
Master Prompt Stacking: The Secret to Making AI Code Like You Do
Jun 2025
The Huge List of AI Tools: What's Actually Worth Using in June 2025?
Jun 2025
Unlocking Real Leverage with AI Delegation
Jun 2025
How I Make Complex AI Changes
May 2025
Building AI Cheatsheet Generator Live: Lessons from a Four-Hour Stream
May 2025
AI: The New Dawn of Software Craft
May 2025
Why Graph RAG is the Future
May 2025
Introducing Kaijo: AI functions that just work
Apr 2025
Building the Future
Apr 2025
The Reality of AI Power Usage
Apr 2025
AI Therapists: Self Reflection With AI
Apr 2025
Coding with AI: How To Do It Well And What This Means
Mar 2025
Prompting Sucks (And What We Can Do About It)
Feb 2025
How to Build a Robust LLM Application
Dec 2024
ambiguity
Driving out feature ambiguity
Jan 2010
anti-pattern
How to decide whether a tool is right for you
May 2014
4 questions to discover if you're *really* agile...
Apr 2014
Delegated tasks are a team anti-pattern
Oct 2012
Job titles are a team anti-pattern
Sep 2012
Task assignment is a team anti-pattern
Sep 2012
apprenticeship
Are apprenticeships scalable?
Apr 2011
Are coding katas really worth it?
Mar 2011
BBC Talk on A Philosophy of Software
Feb 2010
Driving out feature ambiguity
Jan 2010
Craftsmanship vs. Apprenticeship
Dec 2009
architecture
AI: The New Dawn of Software Craft
May 2025
ashcloud
Every Ash Cloud Has A Silver Lining
May 2010
automation
Unlocking Real Leverage with AI Delegation
Jun 2025
bdd
Extreme YAGNI: How BDD nails your prototyping stage
May 2016
Why you can scale agile with the right attitudes
Dec 2014
Why BDD works solo, and why that matters for everyone
Aug 2014
How not to check in temporary code
Jul 2014
How to decide whether a tool is right for you
May 2014
4 questions to discover if you're *really* agile...
Apr 2014
How to layer context into your features using Real Narrative
Apr 2014
Make Cucumber features more readable with this one weird trick
Feb 2014
How to give BDD a chance
Nov 2013
BDD Kickstart is dead. Long live...
Nov 2013
The toolchain of dreams
Sep 2013
BDD: How to deal stories into features
Aug 2013
Why Continuous Delivery and BDD play so nicely
Aug 2013
Rack::Usermanual - Cucumber features as in-app user manual
Jun 2013
Features are documentation, not tests
Apr 2013
BDD without tools: testing shell script
Mar 2013
The perils of curiosity
Feb 2013
"Project velocity is a useless metric." Discuss.
Jan 2013
That's not BDD, that's just Cucumber
Jan 2013
Dependency injection != Inversion of Control
Jan 2013
BDD Kickstart: London and 2013 plans
Jan 2013
Cucumber: keeping the build passing
Dec 2012
Scenarios are not Acceptance Criteria
Nov 2012
Cucumber: the integration testing trap
Nov 2012
Should we store state in our steps?
Nov 2012
How to write a great story
Oct 2012
The simplest Cucumber project ever
Oct 2012
Cucumber isn't a testing tool
Sep 2012
The power of feedback
Sep 2012
Kickstart your team on BDD
Jul 2012
Feature writing: multiple actors
Dec 2011
How I'm testing iPhone apps: part 2
Dec 2011
How I'm testing iPhone apps: part 1
Dec 2011
Your tests are lying to you
Oct 2011
Layers of abstraction: writing great cucumber code
Sep 2011
Layers of abstraction: combining BDD and UX
Sep 2011
bddkickstart
BDD Kickstart is dead. Long live...
Nov 2013
BDD Kickstart: London and 2013 plans
Jan 2013
How to write a great story
Oct 2012
The simplest Cucumber project ever
Oct 2012
Kickstart your team on BDD
Jul 2012
bloom
How to quickly add bloom to your game engine
Jun 2015
Effective bloom in OpenGL for Sol Trader
Feb 2012
business
Introducing Kaijo: AI functions that just work
Apr 2025
Building the Future
Apr 2025
Startup Success Stories Are Flawed
Mar 2025
Founder mode is emergency surgery
Jan 2025
How to Build a Robust LLM Application
Dec 2024
Why Hybrid Work Works
Dec 2024
The Job Is Not To Build
Dec 2024
The First Thing A Startup CTO Must Do
Nov 2024
Blogging again after a long hiatus
Nov 2024
A new adventure
Dec 2017
5 ways I screwed up Sol Trader's launch: a post-mortem
Jun 2016
Why (I hope) I will weather the Indiepocalypse
Oct 2015
7 things I've learnt in 3 years coding my first indie game
Jan 2015
New for 2015: Sol Trader now on Kickstarter
Jan 2015
BDD Kickstart is dead. Long live...
Nov 2013
Cucumber isn't a testing tool
Sep 2012
Showroom software
Sep 2012
Attempting validated learning with Sol Trader
May 2012
Kanogo: vapourware to beta in 24 hours
Sep 2011
The Principle of Scattered Work
May 2011
On Office Politics
May 2011
Are apprenticeships scalable?
Apr 2011
The team is the atomic unit of success
Apr 2011
Certification: recommendation mass produced
Apr 2011
Eden Development has closed
Mar 2011
User Experience Is Everything
May 2010
R.I.P. Web 1.0
Dec 2009
c++
How to add live code reload to your game
Aug 2015
Why I wrote Sol Trader's GUI code from scratch
Aug 2015
How to quickly add bloom to your game engine
Jun 2015
Your abstractions are a liability
Apr 2015
How I doubled the speed of my game by giving up on C++
Apr 2015
A fresh take on DCI with C++ (with example)
Apr 2012
Sol Trader: on lighting
Feb 2012
Effective bloom in OpenGL for Sol Trader
Feb 2012
Switching Sol Trader from Ruby to C++: one week on
Jan 2012
Why I switched from Ruby back to C++
Jan 2012
career
A new adventure
Dec 2017
Eden Development has closed
Mar 2011
certification
Certification: recommendation mass produced
Apr 2011
charity
Call for coders: Children's Future International
Oct 2010
chef
e-petitions: deconstructed
Jul 2011
cherrypick
How to Build a Robust LLM Application
Dec 2024
Why Hybrid Work Works
Dec 2024
chicago
Every Ash Cloud Has A Silver Lining
May 2010
cijoe
Multiple CI Joes with Rack and Passenger
Mar 2010
climate
The Reality of AI Power Usage
Apr 2025
code
Coding with AI: How To Do It Well And What This Means
Mar 2025
How to Build a Robust LLM Application
Dec 2024
Your Code Is A Liability
Nov 2024
The Sol Trader Christmas Eve update: moddable missions
Dec 2015
New Sol Trader beta: the science of blame and unforgiveness
Dec 2015
Modelling opinions and prejudices in Sol Trader
Nov 2015
Sol Trader combat preview
Nov 2015
How to add live code reload to your game
Aug 2015
Why I wrote Sol Trader's GUI code from scratch
Aug 2015
The difference review and planning makes to indie development
Jun 2015
How to quickly add bloom to your game engine
Jun 2015
The huge difference a good Entity System could make to your game
Jun 2015
How tone of voice works in Sol Trader's dialogue system
May 2015
How dialogue works in Sol Trader
May 2015
How face generation works in Sol Trader
May 2015
How I'm using Proxemics in Sol Trader's game design
Apr 2015
Why I ditched all the build tools in favour of a simple script
Apr 2015
Your abstractions are a liability
Apr 2015
How I doubled the speed of my game by giving up on C++
Apr 2015
Why video game coders don't use TDD, and why it matters
Mar 2015
7 things I've learnt in 3 years coding my first indie game
Jan 2015
How not to check in temporary code
Jul 2014
The toolchain of dreams
Sep 2013
Extreme isolation part 3: coding a CRUD app (with full example)
Sep 2013
Extreme isolation part 2: separate the domain from the changes
Jul 2013
Rack::Usermanual - Cucumber features as in-app user manual
Jun 2013
Extreme isolation in web apps: part 1
May 2013
BDD without tools: testing shell script
Mar 2013
Dependency injection != Inversion of Control
Jan 2013
Cucumber: keeping the build passing
Dec 2012
Your framework is a liability
Sep 2012
Never leave a failing test
Sep 2012
The power of good naming
Sep 2012
Kickstart your team on BDD
Jul 2012
Waxing Lyrical on Pathfinding
May 2012
A fresh take on DCI with C++ (with example)
Apr 2012
On coding defensively
Feb 2012
Sol Trader: on lighting
Feb 2012
Effective bloom in OpenGL for Sol Trader
Feb 2012
Switching Sol Trader from Ruby to C++: one week on
Jan 2012
Why I switched from Ruby back to C++
Jan 2012
Introducing Sol Trader
Jan 2012
A cache-busting http server script in ruby
Dec 2011
Feature writing: multiple actors
Dec 2011
How I'm testing iPhone apps: part 2
Dec 2011
How I'm testing iPhone apps: part 1
Dec 2011
Your tests are lying to you
Oct 2011
Kanogo: vapourware to beta in 24 hours
Sep 2011
Pin in the map: customisable pin icons
Sep 2011
e-petitions: handling traffic
Aug 2011
Work with me
Aug 2011
e-petitions: deconstructed
Jul 2011
Lean code: slides and feedback
May 2011
Pomodoros help you refactor
Apr 2011
Call for coders: Children's Future International
Oct 2010
How to test your node.js app
May 2010
Every Ash Cloud Has A Silver Lining
May 2010
Five things I learnt from Corey Haines
Mar 2010
Archivey the Robot
Mar 2010
Introducing Pushy - github notifications to google wave
Mar 2010
conference
Sol Trader will be at EGX in September!
Jul 2015
Slides for "Leading software teams well"
May 2013
Waxing Lyrical on Pathfinding
May 2012
Leancamp Report
May 2010
config
Use Markdown to send HTML email via Mutt: now working on iOS mail
Oct 2013
continuous delivery
BDD Kickstart is dead. Long live...
Nov 2013
The toolchain of dreams
Sep 2013
Why Continuous Delivery and BDD play so nicely
Aug 2013
continuous integration
Why I ditched all the build tools in favour of a simple script
Apr 2015
The toolchain of dreams
Sep 2013
Multiple CI Joes with Rack and Passenger
Mar 2010
craftsmanship
AI: The New Dawn of Software Craft
May 2025
Coding with AI: How To Do It Well And What This Means
Mar 2025
How to Build a Robust LLM Application
Dec 2024
Extreme isolation part 2: separate the domain from the changes
Jul 2013
crud
Extreme isolation part 3: coding a CRUD app (with full example)
Sep 2013
cto
Hiring Startup Engineers: a field manual
May 2025
Always Be Unblocking
Apr 2025
Why Time Units Beat Story Points Every Time
Mar 2025
How To Get Clarity With a New Tech Team
Mar 2025
Founder mode is emergency surgery
Jan 2025
How to Build a Robust LLM Application
Dec 2024
Why Hybrid Work Works
Dec 2024
The Job Is Not To Build
Dec 2024
The First Thing A Startup CTO Must Do
Nov 2024
cucumber
Extreme YAGNI: How BDD nails your prototyping stage
May 2016
Why BDD works solo, and why that matters for everyone
Aug 2014
How to layer context into your features using Real Narrative
Apr 2014
Make Cucumber features more readable with this one weird trick
Feb 2014
BDD Kickstart is dead. Long live...
Nov 2013
How I learned to stop worrying and love (some) detailed Cucumber features
Nov 2013
Extreme isolation part 3: coding a CRUD app (with full example)
Sep 2013
BDD: How to deal stories into features
Aug 2013
Extreme isolation part 2: separate the domain from the changes
Jul 2013
Rack::Usermanual - Cucumber features as in-app user manual
Jun 2013
Extreme isolation in web apps: part 1
May 2013
Features are documentation, not tests
Apr 2013
That's not BDD, that's just Cucumber
Jan 2013
Dependency injection != Inversion of Control
Jan 2013
Cucumber: keeping the build passing
Dec 2012
Scenarios are not Acceptance Criteria
Nov 2012
Cucumber: the integration testing trap
Nov 2012
Should we store state in our steps?
Nov 2012
How to write a great story
Oct 2012
The simplest Cucumber project ever
Oct 2012
Cucumber isn't a testing tool
Sep 2012
Kickstart your team on BDD
Jul 2012
Feature writing: multiple actors
Dec 2011
Your tests are lying to you
Oct 2011
Layers of abstraction: writing great cucumber code
Sep 2011
Pin in the map: customisable pin icons
Sep 2011
Layers of abstraction: combining BDD and UX
Sep 2011
Cucumbers with personality
Apr 2011
How to get Spork working NOW on Rails 3, Rspec 2 and Cucumber
Nov 2010
Driving out feature ambiguity
Jan 2010
culture
Always Be Unblocking
Apr 2025
How To Avoid Bad Startup Culture
Feb 2025
cursor
Master Prompt Stacking: The Secret to Making AI Code Like You Do
Jun 2025
dci
A fresh take on DCI with C++ (with example)
Apr 2012
development
AI: The New Dawn of Software Craft
May 2025
Coding with AI: How To Do It Well And What This Means
Mar 2025
diy planner
SVG Planner
Oct 2006
e-petitions
e-petitions: handling traffic
Aug 2011
e-petitions: deconstructed
Jul 2011
ealdorlight
Ealdorlight: A Kickstarter retrospective
Nov 2017
Ealdorlight's Kickstarter is live at 4pm today
Jun 2017
How Ealdorlight's story stands out
May 2017
Ealdorlight Kickstarter on 6th June, Sol Trader 1.3 released
Apr 2017
Introducing: Ealdorlight
Mar 2017
eden
Eden Development has closed
Mar 2011
Radiating status at Eden
Mar 2010
The Story Card Is Not The Story
Feb 2010
egx
Sol Trader will be at EGX in September!
Jul 2015
email
Use Markdown to send HTML email via Mutt: now working on iOS mail
Oct 2013
engineering
Kill Your Prompts: Build Agents That Actually Work
Jul 2025
Master Prompt Stacking: The Secret to Making AI Code Like You Do
Jun 2025
The Huge List of AI Tools: What's Actually Worth Using in June 2025?
Jun 2025
Unlocking Real Leverage with AI Delegation
Jun 2025
How I Make Complex AI Changes
May 2025
Building AI Cheatsheet Generator Live: Lessons from a Four-Hour Stream
May 2025
Hiring Startup Engineers: a field manual
May 2025
Why Graph RAG is the Future
May 2025
Always Be Unblocking
Apr 2025
How to Rebrand Your Mobile App (Without Breaking Everything)
Feb 2025
How To Avoid Bad Startup Culture
Feb 2025
How to Build a Robust LLM Application
Dec 2024
estimation
Why Time Units Beat Story Points Every Time
Mar 2025
extreme isolation
Extreme isolation part 3: coding a CRUD app (with full example)
Sep 2013
Extreme isolation part 2: separate the domain from the changes
Jul 2013
Extreme isolation in web apps: part 1
May 2013
feedback
"Project velocity is a useless metric." Discuss.
Jan 2013
The power of feedback
Sep 2012
flow
How to lead your life
Jan 2017
On Flow, and Katas
May 2011
founders
Founder mode is emergency surgery
Jan 2025
fun
Introducing Card Pirates
Aug 2013
Waxing Lyrical on Pathfinding
May 2012
Snakes and Ladders Kata
Dec 2009
functional programming
Your abstractions are a liability
Apr 2015
Why video game coders don't use TDD, and why it matters
Mar 2015
The perils of curiosity
Feb 2013
That's not BDD, that's just Cucumber
Jan 2013
game design
5 ways I screwed up Sol Trader's launch: a post-mortem
Jun 2016
Gossip: the best new Sol Trader feature for ages
Feb 2016
The top 5 space games of 2015
Jan 2016
The cunning plans of Sol Trader
Jan 2016
Full disclosure: Sol Trader conversation upgrades
Jan 2016
The Sol Trader Christmas Eve update: moddable missions
Dec 2015
New Sol Trader beta: the science of blame and unforgiveness
Dec 2015
Modelling opinions and prejudices in Sol Trader
Nov 2015
Sol Trader combat preview
Nov 2015
Three days to go
Sep 2015
Gossip as a game mechanic
Sep 2015
How Sol Trader uses information as currency
Jun 2015
How to quickly add bloom to your game engine
Jun 2015
The huge difference a good Entity System could make to your game
Jun 2015
How tone of voice works in Sol Trader's dialogue system
May 2015
How dialogue works in Sol Trader
May 2015
How face generation works in Sol Trader
May 2015
How I'm using Proxemics in Sol Trader's game design
Apr 2015
How to choose between realism and fun in game design
Apr 2015
4 things every space game must have
Mar 2015
game development
Ealdorlight: A Kickstarter retrospective
Nov 2017
Ealdorlight's Kickstarter is live at 4pm today
Jun 2017
How Ealdorlight's story stands out
May 2017
Ealdorlight Kickstarter on 6th June, Sol Trader 1.3 released
Apr 2017
Introducing: Ealdorlight
Mar 2017
What's next for Sol Trader and me
Feb 2017
5 ways I screwed up Sol Trader's launch: a post-mortem
Jun 2016
Gossip: the best new Sol Trader feature for ages
Feb 2016
The cunning plans of Sol Trader
Jan 2016
Full disclosure: Sol Trader conversation upgrades
Jan 2016
The Sol Trader Christmas Eve update: moddable missions
Dec 2015
New Sol Trader beta: the science of blame and unforgiveness
Dec 2015
Modelling opinions and prejudices in Sol Trader
Nov 2015
Sol Trader combat preview
Nov 2015
Sol Trader Kickstarter now live!
Sep 2015
Three days to go
Sep 2015
Gossip as a game mechanic
Sep 2015
How to add live code reload to your game
Aug 2015
Why I wrote Sol Trader's GUI code from scratch
Aug 2015
Sol Trader will be at EGX in September!
Jul 2015
3 new screenshots of Sol Trader's new interface
Jul 2015
Trailer: How it will feel to move around Sol Trader's cities
Jul 2015
How Sol Trader uses information as currency
Jun 2015
The difference review and planning makes to indie development
Jun 2015
How to quickly add bloom to your game engine
Jun 2015
The huge difference a good Entity System could make to your game
Jun 2015
How tone of voice works in Sol Trader's dialogue system
May 2015
Never, ever, ever, ever, ever give up
May 2015
How dialogue works in Sol Trader
May 2015
How face generation works in Sol Trader
May 2015
How I'm using Proxemics in Sol Trader's game design
Apr 2015
Why I ditched all the build tools in favour of a simple script
Apr 2015
How to choose between realism and fun in game design
Apr 2015
Your abstractions are a liability
Apr 2015
How I doubled the speed of my game by giving up on C++
Apr 2015
4 things every space game must have
Mar 2015
After a long journey, Sol Trader has been greenlit!
Mar 2015
Why video game coders don't use TDD, and why it matters
Mar 2015
7 things I've learnt in 3 years coding my first indie game
Jan 2015
New for 2015: Sol Trader now on Kickstarter
Jan 2015
Introducing Card Pirates
Aug 2013
Sol Trader: on lighting
Feb 2012
Effective bloom in OpenGL for Sol Trader
Feb 2012
Switching Sol Trader from Ruby to C++: one week on
Jan 2012
Why I switched from Ruby back to C++
Jan 2012
Introducing Sol Trader
Jan 2012
git
The toolchain of dreams
Sep 2013
How I'm writing my book using Vim, Git and Ruby
Nov 2010
google wave
Archivey the Robot
Mar 2010
Introducing Pushy - github notifications to google wave
Mar 2010
government
e-petitions: handling traffic
Aug 2011
e-petitions: deconstructed
Jul 2011
gower street
A new adventure
Dec 2017
gtd
A formula of motivation
Apr 2011
SVG Planner
Oct 2006
heroku
Kanogo: vapourware to beta in 24 hours
Sep 2011
hiring
Hiring Startup Engineers: a field manual
May 2025
howto
Use Markdown to send HTML email via Mutt: now working on iOS mail
Oct 2013
Multiple CI Joes with Rack and Passenger
Mar 2010
index cards
Card Of The Day: Actually Do Retrospective Actions
Jul 2010
indie games
Ealdorlight: A Kickstarter retrospective
Nov 2017
Ealdorlight's Kickstarter is live at 4pm today
Jun 2017
How Ealdorlight's story stands out
May 2017
Ealdorlight Kickstarter on 6th June, Sol Trader 1.3 released
Apr 2017
Introducing: Ealdorlight
Mar 2017
What's next for Sol Trader and me
Feb 2017
Gossip: the best new Sol Trader feature for ages
Feb 2016
The top 5 space games of 2015
Jan 2016
Sol Trader at EGX Rezzed: 7-9 April 2016
Jan 2016
The cunning plans of Sol Trader
Jan 2016
Full disclosure: Sol Trader conversation upgrades
Jan 2016
The Sol Trader Christmas Eve update: moddable missions
Dec 2015
New Sol Trader beta: the science of blame and unforgiveness
Dec 2015
Modelling opinions and prejudices in Sol Trader
Nov 2015
Sol Trader combat preview
Nov 2015
Why (I hope) I will weather the Indiepocalypse
Oct 2015
Never, ever, ever, ever, ever give up
May 2015
How to choose between realism and fun in game design
Apr 2015
4 things every space game must have
Mar 2015
After a long journey, Sol Trader has been greenlit!
Mar 2015
Why video game coders don't use TDD, and why it matters
Mar 2015
New for 2015: Sol Trader now on Kickstarter
Jan 2015
information radiator
Announcing edash
Mar 2010
Radiating status at Eden
Mar 2010
ios
Use Markdown to send HTML email via Mutt: now working on iOS mail
Oct 2013
How I'm testing iPhone apps: part 2
Dec 2011
How I'm testing iPhone apps: part 1
Dec 2011
java
Dependency injection != Inversion of Control
Jan 2013
Spring Richclient ~ That's a wrap
Apr 2006
Spring Richclient ~ A Journey
Apr 2006
Spring Richclient ~ Session Eight ~ Such a bind
Mar 2006
Spring Richclient ~ Session Seven ~ Beating the Command Framework into Submission
Mar 2006
Spring Richclient ~ Session Six ~ The View
Feb 2006
Spring Richclient ~ Session Five ~ Applications, windows, views
Feb 2006
Spring Richclient ~ Session One ~ Beans, Shmeans and services
Jan 2006
Spring Richclient ~ Session Three ~ How did that work then?
Jan 2006
Spring Richclient ~ Session Two ~ Hello World
Jan 2006
Spring Richclient ~ Session One ~ Making Petclinic work
Jan 2006
Spring Richclient ~ Introduction
Jan 2006
javascript
A cache-busting http server script in ruby
Dec 2011
How to test your node.js app
May 2010
jenkins
Sol Trader: a continuous deployment story
Mar 2012
jobs
Why Hybrid Work Works
Dec 2024
kaijo
Introducing Kaijo: AI functions that just work
Apr 2025
kanban
The Story Card Is Not The Story
Feb 2010
kano analysis
Kanogo: vapourware to beta in 24 hours
Sep 2011
kanogo
Kanogo: vapourware to beta in 24 hours
Sep 2011
karate
Are coding katas really worth it?
Mar 2011
katas
Are coding katas really worth it?
Mar 2011
Driving out feature ambiguity
Jan 2010
Snakes and Ladders Kata
Dec 2009
kickstart
BDD Kickstart is dead. Long live...
Nov 2013
Why Continuous Delivery and BDD play so nicely
Aug 2013
kickstarter
Ealdorlight: A Kickstarter retrospective
Nov 2017
Ealdorlight's Kickstarter is live at 4pm today
Jun 2017
How Ealdorlight's story stands out
May 2017
Ealdorlight Kickstarter on 6th June, Sol Trader 1.3 released
Apr 2017
Sol Trader Kickstarter now live!
Sep 2015
Three days to go
Sep 2015
Gossip as a game mechanic
Sep 2015
7 things I've learnt in 3 years coding my first indie game
Jan 2015
New for 2015: Sol Trader now on Kickstarter
Jan 2015
leadership
Always Be Unblocking
Apr 2025
Why Time Units Beat Story Points Every Time
Mar 2025
How To Get Clarity With a New Tech Team
Mar 2025
How To Avoid Bad Startup Culture
Feb 2025
Why you can scale agile with the right attitudes
Dec 2014
How to give BDD a chance
Nov 2013
Slides for "Leading software teams well"
May 2013
Delegated tasks are a team anti-pattern
Oct 2012
learning
How to lead your life
Jan 2017
Attempting validated learning with Sol Trader
May 2012
legacy
Pin in the map: customisable pin icons
Sep 2011
liability
Your Code Is A Liability
Nov 2024
Your abstractions are a liability
Apr 2015
Your framework is a liability
Sep 2012
life
Blogging again after a long hiatus
Nov 2024
How to lead your life
Jan 2017
Introducing Morning Pages
Sep 2012
Introducing Sol Trader
Jan 2012
Work with me
Aug 2011
Don't miss your greatest achievement
May 2011
The Principle of Scattered Work
May 2011
A formula of motivation
Apr 2011
On the nature of time
Apr 2011
Are coding katas really worth it?
Mar 2011
Learning to say Yes
Mar 2011
Pomodoros done (hopefully) right
Mar 2011
Eden Development has closed
Mar 2011
My Polyphasic Sleep Experiment
Jul 2010
750words.com + GTD = Focus
Jul 2010
lighting
Sol Trader: on lighting
Feb 2012
livestream
Building AI Cheatsheet Generator Live: Lessons from a Four-Hour Stream
May 2025
management
How To Get Clarity With a New Tech Team
Mar 2025
How to give BDD a chance
Nov 2013
Delegated tasks are a team anti-pattern
Oct 2012
markdown
Use Markdown to send HTML email via Mutt: now working on iOS mail
Oct 2013
marketing
5 ways I screwed up Sol Trader's launch: a post-mortem
Jun 2016
Sol Trader will be at EGX in September!
Jul 2015
After a long journey, Sol Trader has been greenlit!
Mar 2015
meta
Work with me
Aug 2011
Old blog articles from yesteryear
Dec 2009
Jekyll, the blog engine of kings
Dec 2009
Welcome
Dec 2009
mobile
How to Rebrand Your Mobile App (Without Breaking Everything)
Feb 2025
motivation
How to lead your life
Jan 2017
Never, ever, ever, ever, ever give up
May 2015
mutt
Use Markdown to send HTML email via Mutt: now working on iOS mail
Oct 2013
node.js
How to test your node.js app
May 2010
object oriented
Your abstractions are a liability
Apr 2015
How I doubled the speed of my game by giving up on C++
Apr 2015
The perils of curiosity
Feb 2013
open data
OStatus: what I've learnt in 24 hours
Sep 2012
OStatus: like Twitter, but open
Sep 2012
open source
OStatus: what I've learnt in 24 hours
Sep 2012
OStatus: like Twitter, but open
Sep 2012
opengl
How to quickly add bloom to your game engine
Jun 2015
Sol Trader: on lighting
Feb 2012
Effective bloom in OpenGL for Sol Trader
Feb 2012
ostatus
OStatus: what I've learnt in 24 hours
Sep 2012
OStatus: like Twitter, but open
Sep 2012
pairing
Task assignment is a team anti-pattern
Sep 2012
Pomodoros help you refactor
Apr 2011
Every Ash Cloud Has A Silver Lining
May 2010
Five things I learnt from Corey Haines
Mar 2010
Pairing works for everything
Jan 2010
paypal
Your framework is a liability
Sep 2012
personal
Introducing Morning Pages
Sep 2012
750words.com + GTD = Focus
Jul 2010
personas
Cucumbers with personality
Apr 2011
peter drucker
R.I.P. Web 1.0
Dec 2009
pininthemap
Pin in the map: customisable pin icons
Sep 2011
pomodoros
A formula of motivation
Apr 2011
On the nature of time
Apr 2011
Pomodoros help you refactor
Apr 2011
pragprowrimo
How I'm writing my book using Vim, Git and Ruby
Nov 2010
process
Why you can scale agile with the right attitudes
Dec 2014
Why BDD works solo, and why that matters for everyone
Aug 2014
How to decide whether a tool is right for you
May 2014
4 questions to discover if you're *really* agile...
Apr 2014
Make Cucumber features more readable with this one weird trick
Feb 2014
"Project velocity is a useless metric." Discuss.
Jan 2013
Cucumber: keeping the build passing
Dec 2012
Delegated tasks are a team anti-pattern
Oct 2012
Task assignment is a team anti-pattern
Sep 2012
Card Of The Day: Actually Do Retrospective Actions
Jul 2010
product
Introducing Kaijo: AI functions that just work
Apr 2025
Building the Future
Apr 2025
How to Rebrand Your Mobile App (Without Breaking Everything)
Feb 2025
The Job Is Not To Build
Dec 2024
productivity
AI Therapists: Self Reflection With AI
Apr 2025
Prompting Sucks (And What We Can Do About It)
Feb 2025
How to lead your life
Jan 2017
How to add live code reload to your game
Aug 2015
The difference review and planning makes to indie development
Jun 2015
Never, ever, ever, ever, ever give up
May 2015
"Project velocity is a useless metric." Discuss.
Jan 2013
Delegated tasks are a team anti-pattern
Oct 2012
Introducing Morning Pages
Sep 2012
Task assignment is a team anti-pattern
Sep 2012
Don't miss your greatest achievement
May 2011
The Principle of Scattered Work
May 2011
On Flow, and Katas
May 2011
A formula of motivation
Apr 2011
On the nature of time
Apr 2011
Learning to say Yes
Mar 2011
Truly indispensable people
Mar 2011
Pomodoros done (hopefully) right
Mar 2011
My Polyphasic Sleep Experiment
Jul 2010
750words.com + GTD = Focus
Jul 2010
Pairing works for everything
Jan 2010
SVG Planner
Oct 2006
products
Ealdorlight: A Kickstarter retrospective
Nov 2017
Ealdorlight's Kickstarter is live at 4pm today
Jun 2017
How Ealdorlight's story stands out
May 2017
Ealdorlight Kickstarter on 6th June, Sol Trader 1.3 released
Apr 2017
Introducing: Ealdorlight
Mar 2017
What's next for Sol Trader and me
Feb 2017
5 ways I screwed up Sol Trader's launch: a post-mortem
Jun 2016
The perils of curiosity
Feb 2013
Introducing Morning Pages
Sep 2012
Showroom software
Sep 2012
Attempting validated learning with Sol Trader
May 2012
Sol Trader now in Alpha
May 2012
Sol Trader: a continuous deployment story
Mar 2012
Sol Trader: on lighting
Feb 2012
Effective bloom in OpenGL for Sol Trader
Feb 2012
Switching Sol Trader from Ruby to C++: one week on
Jan 2012
Why I switched from Ruby back to C++
Jan 2012
Introducing Sol Trader
Jan 2012
Kanogo: vapourware to beta in 24 hours
Sep 2011
Pin in the map: customisable pin icons
Sep 2011
prompting
Prompting Sucks (And What We Can Do About It)
Feb 2025
psychology
AI Therapists: Self Reflection With AI
Apr 2025
How I'm using Proxemics in Sol Trader's game design
Apr 2015
rag
The Huge List of AI Tools: What's Actually Worth Using in June 2025?
Jun 2025
Why Graph RAG is the Future
May 2025
rails
The toolchain of dreams
Sep 2013
Your tests are lying to you
Oct 2011
Kanogo: vapourware to beta in 24 hours
Sep 2011
How to get Spork working NOW on Rails 3, Rspec 2 and Cucumber
Nov 2010
refactoring
Your abstractions are a liability
Apr 2015
How not to check in temporary code
Jul 2014
Extreme isolation part 2: separate the domain from the changes
Jul 2013
Extreme isolation in web apps: part 1
May 2013
The power of good naming
Sep 2012
retrospectives
How To Get Clarity With a New Tech Team
Mar 2025
Card Of The Day: Actually Do Retrospective Actions
Jul 2010
revelation games
Ealdorlight: A Kickstarter retrospective
Nov 2017
richclient
Spring Richclient ~ That's a wrap
Apr 2006
Spring Richclient ~ A Journey
Apr 2006
Spring Richclient ~ Session Eight ~ Such a bind
Mar 2006
Spring Richclient ~ Session Seven ~ Beating the Command Framework into Submission
Mar 2006
Spring Richclient ~ Session Six ~ The View
Feb 2006
Spring Richclient ~ Session Five ~ Applications, windows, views
Feb 2006
Spring Richclient ~ Session One ~ Beans, Shmeans and services
Jan 2006
Spring Richclient ~ Session Three ~ How did that work then?
Jan 2006
Spring Richclient ~ Session Two ~ Hello World
Jan 2006
Spring Richclient ~ Session One ~ Making Petclinic work
Jan 2006
Spring Richclient ~ Introduction
Jan 2006
rspec
Your tests are lying to you
Oct 2011
How to get Spork working NOW on Rails 3, Rspec 2 and Cucumber
Nov 2010
ruby
How I learned to stop worrying and love (some) detailed Cucumber features
Nov 2013
The toolchain of dreams
Sep 2013
Extreme isolation part 3: coding a CRUD app (with full example)
Sep 2013
Extreme isolation part 2: separate the domain from the changes
Jul 2013
Extreme isolation in web apps: part 1
May 2013
Features are documentation, not tests
Apr 2013
Dependency injection != Inversion of Control
Jan 2013
BDD Kickstart: London and 2013 plans
Jan 2013
Should we store state in our steps?
Nov 2012
Your framework is a liability
Sep 2012
Kickstart your team on BDD
Jul 2012
On coding defensively
Feb 2012
Switching Sol Trader from Ruby to C++: one week on
Jan 2012
Why I switched from Ruby back to C++
Jan 2012
A cache-busting http server script in ruby
Dec 2011
Kanogo: vapourware to beta in 24 hours
Sep 2011
Pin in the map: customisable pin icons
Sep 2011
How to get Spork working NOW on Rails 3, Rspec 2 and Cucumber
Nov 2010
How I'm writing my book using Vim, Git and Ruby
Nov 2010
sc2012
Waxing Lyrical on Pathfinding
May 2012
scaling
e-petitions: handling traffic
Aug 2011
scrum
Why Time Units Beat Story Points Every Time
Mar 2025
shell script
BDD without tools: testing shell script
Mar 2013
sinatra
Your framework is a liability
Sep 2012
sleep
My Polyphasic Sleep Experiment
Jul 2010
social
OStatus: what I've learnt in 24 hours
Sep 2012
OStatus: like Twitter, but open
Sep 2012
software craftsmanship
Waxing Lyrical on Pathfinding
May 2012
sol trader
The Job Is Not To Build
Dec 2024
Ealdorlight: A Kickstarter retrospective
Nov 2017
Ealdorlight's Kickstarter is live at 4pm today
Jun 2017
How Ealdorlight's story stands out
May 2017
Ealdorlight Kickstarter on 6th June, Sol Trader 1.3 released
Apr 2017
What's next for Sol Trader and me
Feb 2017
5 ways I screwed up Sol Trader's launch: a post-mortem
Jun 2016
Gossip: the best new Sol Trader feature for ages
Feb 2016
Sol Trader at EGX Rezzed: 7-9 April 2016
Jan 2016
The cunning plans of Sol Trader
Jan 2016
Full disclosure: Sol Trader conversation upgrades
Jan 2016
The Sol Trader Christmas Eve update: moddable missions
Dec 2015
New Sol Trader beta: the science of blame and unforgiveness
Dec 2015
Modelling opinions and prejudices in Sol Trader
Nov 2015
Sol Trader combat preview
Nov 2015
Why (I hope) I will weather the Indiepocalypse
Oct 2015
Sol Trader Kickstarter now live!
Sep 2015
Three days to go
Sep 2015
Gossip as a game mechanic
Sep 2015
How to add live code reload to your game
Aug 2015
Why I wrote Sol Trader's GUI code from scratch
Aug 2015
Sol Trader will be at EGX in September!
Jul 2015
3 new screenshots of Sol Trader's new interface
Jul 2015
Trailer: How it will feel to move around Sol Trader's cities
Jul 2015
How Sol Trader uses information as currency
Jun 2015
The difference review and planning makes to indie development
Jun 2015
How to quickly add bloom to your game engine
Jun 2015
The huge difference a good Entity System could make to your game
Jun 2015
How tone of voice works in Sol Trader's dialogue system
May 2015
How dialogue works in Sol Trader
May 2015
How face generation works in Sol Trader
May 2015
How I'm using Proxemics in Sol Trader's game design
Apr 2015
Why I ditched all the build tools in favour of a simple script
Apr 2015
How to choose between realism and fun in game design
Apr 2015
How I doubled the speed of my game by giving up on C++
Apr 2015
4 things every space game must have
Mar 2015
After a long journey, Sol Trader has been greenlit!
Mar 2015
Why video game coders don't use TDD, and why it matters
Mar 2015
7 things I've learnt in 3 years coding my first indie game
Jan 2015
New for 2015: Sol Trader now on Kickstarter
Jan 2015
Extreme isolation part 2: separate the domain from the changes
Jul 2013
Rack::Usermanual - Cucumber features as in-app user manual
Jun 2013
Extreme isolation in web apps: part 1
May 2013
Features are documentation, not tests
Apr 2013
The perils of curiosity
Feb 2013
Attempting validated learning with Sol Trader
May 2012
Sol Trader now in Alpha
May 2012
A fresh take on DCI with C++ (with example)
Apr 2012
Sol Trader: a continuous deployment story
Mar 2012
Sol Trader: on lighting
Feb 2012
Effective bloom in OpenGL for Sol Trader
Feb 2012
Switching Sol Trader from Ruby to C++: one week on
Jan 2012
Why I switched from Ruby back to C++
Jan 2012
Introducing Sol Trader
Jan 2012
spork
How to get Spork working NOW on Rails 3, Rspec 2 and Cucumber
Nov 2010
spring
Spring Richclient ~ That's a wrap
Apr 2006
Spring Richclient ~ A Journey
Apr 2006
Spring Richclient ~ Session Eight ~ Such a bind
Mar 2006
Spring Richclient ~ Session Seven ~ Beating the Command Framework into Submission
Mar 2006
Spring Richclient ~ Session Six ~ The View
Feb 2006
Spring Richclient ~ Session Five ~ Applications, windows, views
Feb 2006
Spring Richclient ~ Session One ~ Beans, Shmeans and services
Jan 2006
Spring Richclient ~ Session Three ~ How did that work then?
Jan 2006
Spring Richclient ~ Session Two ~ Hello World
Jan 2006
Spring Richclient ~ Session One ~ Making Petclinic work
Jan 2006
Spring Richclient ~ Introduction
Jan 2006
startup
Always Be Unblocking
Apr 2025
How To Avoid Bad Startup Culture
Feb 2025
Founder mode is emergency surgery
Jan 2025
How to Build a Robust LLM Application
Dec 2024
The Job Is Not To Build
Dec 2024
Your Code Is A Liability
Nov 2024
The First Thing A Startup CTO Must Do
Nov 2024
Extreme YAGNI: How BDD nails your prototyping stage
May 2016
The power of feedback
Sep 2012
Attempting validated learning with Sol Trader
May 2012
Sol Trader now in Alpha
May 2012
startups
Startup Success Stories Are Flawed
Mar 2025
state
Your abstractions are a liability
Apr 2015
Extreme isolation part 3: coding a CRUD app (with full example)
Sep 2013
Extreme isolation part 2: separate the domain from the changes
Jul 2013
Extreme isolation in web apps: part 1
May 2013
Features are documentation, not tests
Apr 2013
Should we store state in our steps?
Nov 2012
steam
After a long journey, Sol Trader has been greenlit!
Mar 2015
stories
How to layer context into your features using Real Narrative
Apr 2014
BDD: How to deal stories into features
Aug 2013
strategy
Startup Success Stories Are Flawed
Mar 2025
svg
SVG Planner
Oct 2006
talks
Lean code: slides and feedback
May 2011
BBC Talk on A Philosophy of Software
Feb 2010
tdd
Why video game coders don't use TDD, and why it matters
Mar 2015
That's not BDD, that's just Cucumber
Jan 2013
Scenarios are not Acceptance Criteria
Nov 2012
Cucumber: the integration testing trap
Nov 2012
Never leave a failing test
Sep 2012
The power of feedback
Sep 2012
How I'm testing iPhone apps: part 2
Dec 2011
How I'm testing iPhone apps: part 1
Dec 2011
Work with me
Aug 2011
Pomodoros help you refactor
Apr 2011
How to test your node.js app
May 2010
TDD ~ The Tortoise and the Hare
Feb 2006
team
Hiring Startup Engineers: a field manual
May 2025
Why Time Units Beat Story Points Every Time
Mar 2025
How To Get Clarity With a New Tech Team
Mar 2025
Your Code Is A Liability
Nov 2024
A new adventure
Dec 2017
Extreme YAGNI: How BDD nails your prototyping stage
May 2016
Why you can scale agile with the right attitudes
Dec 2014
Why BDD works solo, and why that matters for everyone
Aug 2014
How to give BDD a chance
Nov 2013
Slides for "Leading software teams well"
May 2013
Delegated tasks are a team anti-pattern
Oct 2012
Job titles are a team anti-pattern
Sep 2012
Cucumber isn't a testing tool
Sep 2012
Task assignment is a team anti-pattern
Sep 2012
On Office Politics
May 2011
The team is the atomic unit of success
Apr 2011
Truly indispensable people
Mar 2011
tech
The Huge List of AI Tools: What's Actually Worth Using in June 2025?
Jun 2025
technology
The Reality of AI Power Usage
Apr 2025
testing
Why video game coders don't use TDD, and why it matters
Mar 2015
How I learned to stop worrying and love (some) detailed Cucumber features
Nov 2013
Extreme isolation part 3: coding a CRUD app (with full example)
Sep 2013
Extreme isolation part 2: separate the domain from the changes
Jul 2013
Extreme isolation in web apps: part 1
May 2013
The perils of curiosity
Feb 2013
Cucumber: keeping the build passing
Dec 2012
Scenarios are not Acceptance Criteria
Nov 2012
Cucumber: the integration testing trap
Nov 2012
Never leave a failing test
Sep 2012
Cucumber isn't a testing tool
Sep 2012
tools
The Huge List of AI Tools: What's Actually Worth Using in June 2025?
Jun 2025
Why I ditched all the build tools in favour of a simple script
Apr 2015
How to decide whether a tool is right for you
May 2014
4 questions to discover if you're *really* agile...
Apr 2014
The toolchain of dreams
Sep 2013
training
BDD Kickstart is dead. Long live...
Nov 2013
How I learned to stop worrying and love (some) detailed Cucumber features
Nov 2013
Work with me
Aug 2011
travel
Every Ash Cloud Has A Silver Lining
May 2010
tutorial
Spring Richclient ~ That's a wrap
Apr 2006
Spring Richclient ~ A Journey
Apr 2006
Spring Richclient ~ Session Eight ~ Such a bind
Mar 2006
Spring Richclient ~ Session Seven ~ Beating the Command Framework into Submission
Mar 2006
Spring Richclient ~ Session Six ~ The View
Feb 2006
Spring Richclient ~ Session Five ~ Applications, windows, views
Feb 2006
Spring Richclient ~ Session One ~ Beans, Shmeans and services
Jan 2006
Spring Richclient ~ Session Three ~ How did that work then?
Jan 2006
Spring Richclient ~ Session Two ~ Hello World
Jan 2006
Spring Richclient ~ Session One ~ Making Petclinic work
Jan 2006
Spring Richclient ~ Introduction
Jan 2006
ux
Layers of abstraction: writing great cucumber code
Sep 2011
Layers of abstraction: combining BDD and UX
Sep 2011
Cucumbers with personality
Apr 2011
User Experience Is Everything
May 2010
R.I.P. Web 1.0
Dec 2009
wardley maps
Startup Success Stories Are Flawed
Mar 2025
Coding with AI: How To Do It Well And What This Means
Mar 2025
webinar
Kill Your Prompts: Build Agents That Actually Work
Jul 2025
Master Prompt Stacking: The Secret to Making AI Code Like You Do
Jun 2025
How I Make Complex AI Changes
May 2025
Building AI Cheatsheet Generator Live: Lessons from a Four-Hour Stream
May 2025
windows
Sol Trader: a continuous deployment story
Mar 2012
workflow
How I Make Complex AI Changes
May 2025
writing
Introducing Morning Pages
Sep 2012
How I'm writing my book using Vim, Git and Ruby
Nov 2010
750words.com + GTD = Focus
Jul 2010
xp
The Story Card Is Not The Story
Feb 2010
Pairing works for everything
Jan 2010