L'etat, c'est moi
Mere Complexities sells the consulting and development services of me, Paul Wilson.
Conferences
Archive
Who is that handsome devil?
I’ve just noticed that I’m the face of technology on the JP Morgan Glasgow jobs site. It’s also quite a good illustration of male pattern baldness.
Free WiFi in Edinburgh
Richard Cross has started a list of Edinburgh cafes and pubs with free WiFi. While you’re there check out his web-design and photographic portfolio.
I’ve suggested he adds Black Medicine and the Traverse Theatre Bar.
Disclosure: Richard’s my sister-in-law’s partner. Boyfriend-in-law?
Angry words
Last week I sent an angry email. I did consider changing the words and tone but I was furious and, as Esther Derby said, “sometimes anger is the appropriate response”; I thought toning down the message would be a super-reasonable stance.
What didn’t occur to me until much later is that the most direct way to convey anger is to say “I am very angry”. It would also be more congruent to state the reason for anger; otherwise the other person might be left guessing. In future I’m going to try and use the following template:
I am very angry about …… because …..”
Ruby on Rails – 4 Days total immersion

We’re half-way through our Geek Retreat, coding Ruby On Rails in an Ayrshire Cottage. A lot of us have been coding / learning rails in near-isolation, so it’s been great to be able to discuss issues and share techniques. Alan’s been writing about it, here for instance.
I’m feeling better about <a “http://en.wikipedia.org/wiki/Test_driven_development”>test-driving the controller / view side of things: previously I’ve been uncomfortable with the lack of orthogonality I’ve perceived in the standard functional tests; I’ve started experimenting with a more DSL style. Sneak preview:
when_succesfully_getting(:cities)
the_page_contains_a_table(:a_table) do |t|
t.row "City", "Country"
t.row "Edinburgh", "Scotland"
t.row "Glasgow!!a[href='/buckfast']", "Scotland"
t.row "San Francisco", "USA"
end
there_is_a_form(:new_city) do |f|
f.there_is "input#city_name"
f.there_is "input#city_country"
end
Reserved Words in Domain Driven Design
I’m just over-hearing a discussion about some applications’s design: one of their models is a table, which I find confusing in a database application; matrix would be better. Both retail and trading applications often have the concept of a transaction. Maybe there should be a list of reserved words that should be banned from a ubiquitous language. For a start I suggest
- table
- transaction
- browser
- fixture
- node
Technical User Stories are a nasty hack
Sometimes you just need a nasty hack. I’ve added stories to an iteration like “As a developer I want to bring the build time to under 10 minutes, so that I’m not afraid to check in.” I figure that’s ok as long as the team knows that it’s an ugly and dangerous practice.
The danger lies in the slippery slope – if we don’t hold our noses a little when adding the (very occasional) technical stories, then we end up with a stack of things like “refactor the database layer”, and “abstract out the process orchestration”. We lose business focus; the project begins to make great progress to nowhere in particular.
CV update
I’ve uploaded a new copy of my CV here. Feedback (or consulting / coaching contracts) welcome.
Update: Formatting changes: thanks to Richie for pointing out that my CV looked a bit funny using Adobe and Windows.
Apple (i?)Phone 3rd Party Software
Jason Snell from MacWorld and John Gruber, Daring Fireball chat about how high the barriers are going to be set for 3rd party developers wanting to write for the Apple iPhone here.
Answer: this high, or maybe this high; this high would be good.
Apple iPhone – a new software market?
If you switch to a Mac you’ll probably start buying software. There’s a lot of great and inexpensive applications out there and you’re going to want some. No, you really are. Quite a few small companies and individual developers seem to make a reasonable living from Cocoa apps. I’m not too sure what’s different in the Windows world (but Rob blames Eric Raymond).
I talking without any data, but I don’t think there’s a thriving market for individual developers writing mobile phone applications just now. I imagine testing on 5 (?) different platforms with multiple OS versions and hundreds of different phones is a tad tricky. The iPhone promises a sizeable community of users, a single hardware and software platform, and a fantastic user interface to exploit. Now might be a good time to get into Cocoa.
Ok, its official that Apple aren’t going to allow an iPhone software free-market, for now anyway. Oh well, back to Ruby on Rails – hey it’s not so bad.
Blog moved
My website was getting a bit dated, so I’ve moved this blog over and merged it with the main (only) page. For now, I’ve hacked some css from Open Source Web Web Design. I’m not that happy with the look and it seems a bit crowded. I may have another fiddle with it when I’ve a bit of time.
Buying silver bullets
Joel wrote about journalists periodically being taken in by product vendors’ claims that their product is going to make coding child’s play: what they hear is “programming is going to be easier.” Usually there’s some kind of Lego allusion.
Like journalists, corporate buyers are a big believers in alchemy. Extract Transform Load tools, for instance, are great for suckering the non-technical IT manager. The project needs data from external feeds and the Stone Soup vendor shows a nice-looking GUI that maps between source and destination by drawing a few lines.

“Great,” the manager says. “The business analysts can do the mapping – we don’t need to rely on those programmers that I neither understand or trust.” In the real world, the mappings end up being too complicated to effectively represent on the GUI:

- and there are a load of extra business rules that need scripting
- and there are look-ups to be coded for missing data
- and it’s a nightmare to test and next to impossible to add to continuous integration
- and you need to train a cadre of developers in the product
- and operations have yet another external product to support in production
Joel ends quoting Brooks “building software will always be hard. There is inherently no silver bullet.”.
This blog's web feed is moving
I’m going to be moving my blog around. In preparation, the feed’s going first. The new feed url is
A political aside
Trying to solve your political problems with military action is like trying to solve your business problems with technology.
Kayaking upstream

One way to get upstream in a kayak is to point your bow that way and paddle like hell. Chances are that you’ll soon run out of steam, though.
Eddies are where the flow is reversed in sheltered parts of the river, normally next to the banks. Stoppers are vertical eddies, caused by water flowing over an obstruction. Kayaking upstream take less effort if you use the water flowing your way. Of course it takes lots of experience to read the river; breaking in and out of eddies takes skill; you have to be very good to use a stopper.
Lessons:
- with enough resources you can still make it work the hard way
- the easy way takes a lot of experience and skill
- even when heading upstream, it’s better to go (mostly) with the flow
