I was pairing with my friend Vernon at work last week, on a tool I've been developing. He was smiling broadly as I talked him through what I'd done because we've been here before.
The tool facilitates a task that's time-consuming, inefficient, error-prone, tiresome, and important to get right. Vern knows that those kinds of factors trigger me to change or build something, and that's why he was struggling not to laugh out loud.
He held himself together and asked a bunch of sensible questions about the need, the desired outcome, and the approach I'd taken. Then he mentioned a talk by Daniel Terhorst-North, called The Best Programmer I Know, and said that much of it paralleled what he sees me doing.
It was my turn to laugh then, because I am not a good programmer, and I thought he knew that already. What I do accept, though, is that I am focussed on the value that programs can give, and getting some of that value as early as possible.
He sent me a link to the talk later on. Of course he was right, and I see that I have heuristics in common with those Dan North describes. I've pulled out a few bullets to summarise what spoke to me:
- Your job is to get the job done
- ... and to do that you need to start
- ... so just get over yourself and start somewhere.
- It will help if you accept that you don't and won't know stuff
- ... which means leaving your ego at the door
- ... and finding out what you need to know as you go.
- Iterate, iterate, iterate
- ... because that's how you get to try things for size
- ... and choose a good fit.
- Remember that you are building a product
- ... and the benefit that the product brings to its users is key
- ... but your code is not key.
- Solve for today
- ... and solve the actual problem
- ... and don't solve the general problem, for the ages, in general.
- Solve the problem without code and you win BIG.
- Understand enough of the domain
- ... where "enough" is very contextual
- ... but is usually more than nothing.
- On the same basis, understand enough about the users
- ... even if you work away from the users.
- Choose the right tool for the product not the team
- ... because teams can learn
- .. and data outlives your code, your team, and probably your org.
- Choose a tool that reduces the distance between your model and the solution space.
- See what's actually in front of you
- ... not what you want to see
- ... and be prepared to reframe for better solutions.
- Spike and stablise
- ... it's like throwing darts at a wall and then drawing the target around them.
- Choose simple over easy
- ... as defined by Rich Hickey
- Dogfood your stuff
- ... by reading your README and consuming your API
- ... then use embarrassment-driven refactoring to make it good enough for others.
- Be a polyglot
- ... by knowing something of many languages
- ... because that means many perspectives
- ... and get another by being outside of the code sometimes
- ... for example to fix bad process.
I've written a few things that reflect aspects of the overlap I see here, including:
- Fix Up, Look Sharp: a love letter to Ron Jeffries' book, Extreme Programming Adventures in C#
- How to Test Anything: heuristics for testing, including starting testing
- Great Shot Kid: take a million shots and choose the one that hits
- Heuristics for Working: various posts trying to draw out useful practices from my experience
Image: Dan North's talk
Comments
Post a Comment