I'm David Winterbottom, a minimalist software engineer living in London.

I'm Head of Engineering at Octopus Energy, a UK energy supplier. Previously, I was Head of Engineering at Yoyo Wallet, a mobile payments startup, and a Technical Director of Tangent Snowball, a digital agency.

I spend most of my free time hacking. I am the author of commandlinefu.com and the e-commerce framework django-oscar amongst other things.

I used to be a mathematician; I have a PhD in Mathematics from the University of Nottingham and an associated interest in cryptic crosswords, chess and bad puns.

More about me »


Monday, 23 November 2015
Octopus Energy

A modern, high-tech energy supplier

Friday, 2 October 2015
A useful template for commit messages

A simple heuristic for preferring the imperative mood

Wednesday, 2 September 2015
Copying Postgres output into a spreadsheet

Quick tip on tweaking the output of psql

Saturday, 2 May 2015
An SSH tip for modern AWS patrons

Slightly useful tip for SSHing onto EC2 instances

Saturday, 4 April 2015
All writing »


2 weeks, 1 day ago
“Don’t follow your boss into his/her/but-probably-his office like a puppy chasing a squirrel.”
2 weeks, 2 days ago
“How’s that new Javascript project coming along?”
“Fine” https://t.co/CUF1YuU55k
2 weeks, 3 days ago
RT @tqbf: Don’t work in game dev. https://t.co/kmhfG0qH75
2 weeks, 6 days ago
I need this, but for dishwashers https://t.co/ZPTIrpdrUA
2 weeks, 6 days ago
These days

$ ./manage.py makemigrations

takes so long to run, I have to use my “boo” script:
3 weeks ago
I prefer email to Slack
3 weeks ago
1. Write failing functional test
2. Write failing unit test
3. Make unit test pass then refactor
4. Repeat 2&3 until functional test passes
3 weeks ago
This is an excellent article on the elements of simple design:
3 weeks ago
Corollary: fat management commands are an anti-pattern
3 weeks ago
Django tip: management commands should be dumb (like views): they should translate CLI requests into domain requests - no business logic!
3 weeks, 1 day ago
RT @auditty: Root cause of bad code isn't apathy, ability, or changing reqs; it's fear. Fear of breaking things leads to bad choices @bryna
3 weeks, 1 day ago
The mascot for functional programming should be the goldfish as it’s (virtually) stateless.
3 weeks, 2 days ago
“Don’t cry, you can run bash on Windows 10 now”
3 weeks, 3 days ago
PS that’s a genuine advert by the circle line platform in Kings Cross station.
@codeinthehole »


2 weeks ago
Apr 21, 2016
2 weeks ago
Apr 21, 2016
Added Support for django-rq
9 commits with 196 additions and 97 deletions
2 weeks ago
Apr 21, 2016
django-rq Support
2 weeks ago
Apr 21, 2016
Added py.test and more tests
30 commits with 886 additions and 167 deletions
2 weeks ago
Apr 21, 2016
2 weeks ago
Apr 21, 2016
Fix headline
1 commit with 1 addition and 1 deletion
1 month, 1 week ago
Mar 25, 2016
codeinthehole commented on pull request codeinthehole/purl#26


1 month, 1 week ago
Mar 25, 2016
github.com/codeinthehole »

Selected projects

A few spare-time projects I've worked on:

  • commandlinefu.com - a mildly popular repository site for sharing linux one-liners. Grown men have been known to weep with joy when they discover sudo !!

Python packages on PyPI:

  • purl - an immutable URL class for python
  • foiegras - simple CSV loading for Postgres
  • csvfilter - like cut but for CSVs
  • pyvideo2quicktime - for downloading PyCon videos to your iPhone
  • unittest-xml - additional assertions for unit-testing XML documents with python's unittest library.

Oscar and related packages:

Other Django packages on PyPI

node.js packages on npm:

  • nurl - a simple URL library for node.js