Saturday, December 29, 2007

Don't Involve Yourself

I loathe and detest DIY. And owning a new house which needs work has help me pinpoint some reasons why: it's primarily the differences between DIY and software development that make it so frustrating for me.

1. Inaccuracy

When writing a piece of code, I can make it unfailingly correct and absolutely precise. When complete it's a thing of beauty which perfectly fits the task for which it was intended, smoothly sliding into the software without touching any sides.

When I try to mark a straight, horizontal line on a wall, measure and mark off some screw points and drill them out, it just seems impossible to achieve anything close to precision.

For one thing, in our house, the walls aren't even perfectly straight (it's an old house). Then there's the process of marking things with a pencil (whose lead has a thickness and which must run alongside a rule - both sources of inaccuracy). Then there's the drilling itself - trying to hold a heavy vibrating machine completely still while it both hammers and twists itself around isn't easy, especially working off a ladder. And then there's the structural integrity of the wall - being composed of a combination of soft and hard material at unpredictable points so that the drill will move very rapidly through the soft before striking something hard which causes it to jolt off course.

All of these factors conspire to result in drilling holes which:
a) don't go straight into the wall, which makes putting the screws in difficult.
b) aren't in the right place, which makes putting the screws in impossible.

2. Lack of Undo or Source Control

When coding, if I do something wrong, I hit Ctrl-Z to undo. And because I always set my undo buffer size to something enormous, I can successively undo changes a long way back. If I want to retrieve an earlier version of some code, I can usually go and find it in Source Control.

When I drill a hole (or worse, a series of them!) in the wrong place, there's no recourse to any such convenience. Moving a curtain pole means unscrewing it from the wall and starting over. And hopefully it's being moved up and not down, because otherwise the result is unsightly rawlplug holes who staring at you accusingly from above the pole. The only thing to do then is pray that you're planning on decorating soon (my advice for new homeowners: drill and screw and install every single thing you're every going to need, and only then decorate the entire place).

3. How long everything takes

Now I've been doing it for a while, I can make software happen pretty fast. Modern IDEs and SDKs are well-streamlined, and knowledge of where to find your tools allows solutions to come together with relative ease.

Doing even simple DIY tasks seems to take me ages. And I'm not even talking about the extra time to minimise the inaccuracy (which in my case is considerable). I just mean locating the right tools, putting them in the right place, and swapping between them as required.

In fairness, what I have in software development is the equivalent of a work-shop, with all my tools arranged tidily where I can find them and with plenty of space to do things. But (also in fairness) a real-life work-shop wouldn't be a lot of use in a number of the DIY tasks around the house, where tools need to be brought into the field. The worst is drilling and screwing up a ladder on your own, where you have to come up and down the ladder to exchange tools.

I was thinking that perhaps a decent tool-belt might be a solution, but to take the example of switching between electric hammer drill and electric screwdriver, this just isn't feasible, so I guess what I'm really waiting for is some kind of hand held multi-tool from Star Trek.

4. Lack of a Community

I'm working on some code, and I'm stuck. Maybe I don't have any idea how to achieve what I want, or I'm aware of a range of solutions and don't know which to choose, or else I've chosen a solution and it doesn't seem to be working for me. Either way, I switch to a browser window, do a search, and can usually turn up some useful advice in minutes. Failing that there are email lists full of wise people who always seem happy to help their fellow developer.

In contrast, when working on a DIY project, I feel as alone as Samus in an alien cave. I've searched, and the internet isn't so full of helpful DIY advice as it is for programming. I think one reason is that the medium isn't text-based like code, so it's harder both to give advice in that form and to search for it. But mainly I think it's because the people with all the wisdom - the DIY mavens - aren't on the internet doling it out like they should be.

5. Bad Tools

Where DIY is concerned I'm happy to describe myself as a bad workman - in fact I'm rubbish. But that doesn't disprove the existence of bad tools.

In software there are bad tools too, but this is mitigated considerably by the existence of a strong community who are constantly refining their tools and and sharing them on the internet. Not happy with the standard c++ String clases? So head over to CodeProject and consider one of the many alternatives.

Actually the reusable tools of DIY like hammers and screwdrivers aren't the focus of my ire here - oh sure, the hammer drill isn't the most accurate of beasts, but at least it fundamentally works.

No I'm talking more about things like curtain rails or plumbing components, which seem to be suffering from underdesign. Plumbing in particular doesn't seem to have moved forward much since the Romans - it's 2007 and we're still having to hacksaw up bits of plastic to make them fit together before employing a combination of various sticky sealant solutions and blind faith in order to tame the water. By the 21st century, I'd have expected plumbing to be no more complex than Lego by now, but apparently not. I think there are two reasons why this is the case:

1) The key stakeholders (like plumbers) have little to gain from making their trade accessible to the wider public.

2) Whereas the internet serves as the mechanism for software tools to be constantly improved upon and then fed back into the development community, no such mechanism (or indeed community) exists for trades like plumbing.

6. Lack of Reusability

This point is perhaps a bit flippant, but apart from keeping out of the cold and the rain, one of the nice things about being a software developer is that the requirement to repeat the same tasks over and over again is fairly limited. Once you have a piece of code in your toolshed you can wheel it out over and over whenever it's needed, repurposing as required.

Unfortunately, when you need to drill holes in walls, or sand floorboards, or repair toilet cisterns, you actually have to do it each time. Bah!

7. Underwhelming End Result

My final issue with DIY is that the requirement for the work is usually in order to achieve something utterly mundane. If all the misery of sawing, drilling, glueing and screwing was aimed at creating some kind of adventure-playground funhouse-wonderland for some children, well! I still wouldn't enjoy doing it, but at least it would give me a sense of gritty determination knowing that the end result would be worth it.

I just don't get that from towel rails.


glo-bot said...

1, Inaccuracy is a good thing. It might seem frustrating now but with the learning of a few tricks and a creative, relaxed approach you soon find that you can 'get away with' stuff that wouldnt work in an absolute precice enviroment.

2, Filler! Get some filler.

3, You should see how long it take sme to write a simple bit of action script. Also, a good quality 18v Cordles drill, Say a DeWalt, will indeed serve as an exelent hammer-drill and screwdriver.

4, Damian Nelson.

5, You are doing your own plumming?! You deserve everything that comes to you!

6, But you get allot better at it.

7, Is this coming from the same man who sent me a proud photo of said towel-rail? Busted!! You love DIY. Happy New Year.

Jenna said...

I can so relate to this. Especially when I watch DIY TV and I see what people do to their houses in the name of "decorating." I think to myself are they really qualified enough to be doing that to their house?!?!?!

DIY scares me just a little... so you code doesn't work, hell it even freezes you computer.... at the worst you can unplug it and look at it later. :) I dunno though if you make a hole... in the wall.... eeekkss

ChrisIW said...

Its just what you known about really, that makes it easy........or hard.

Mr Paul said...

Being in software makes the real world seem like a miserable place. There's nothing close to the perfection of a single pixel. My advice is to get out whilst you still can. After a while the real world starts to become less frustrating and dare I say it - more enjoyable...