Motivation, inertia, and daft names
I think it's fair to say that this site really didn't get as many updates as I was intending it to during the latter part of last year. The reasons why, however, are common to many solo personal development projects, so it's worth taking a look at them here.
Three reasons conspired to slow me down; time, motivation, and code blockage. In June, I started a new job with an independent agency, for which the working hours were rather longer than the previous one. This was also a rather more technical role; the company took clean code, testing and compliance seriously, and also had rather tighter dealines. As such, it both fulfilled my need for daily technical practice and left me rather less time and energy than I'd been used to.
One of the problems for personal coding projects when you've a full time job is that you're always taking the time for it from the margins between the job, the commute, eating, sleeping, housework and socialising. The stereotype, of course, is that many of the more "hardcore" developers skip the last few elements of that list - maybe that's how they find the time! But, more seriously, it's always the case that if you add, say, just 10% to the time you've spent on the other activities, youre project time can vanish completely. This, I suspect, is why open-source coders who're not paid for their projects tend to fade in and out of the scene.
Fading back in can be tricky, once you've lost momentum. The job only lasted 14 weeks (the employer "downsized" the team I'd join to cut costs) and I found myself looking for another role. Somehow this turned into even more of a full-time job than the job itself. I'll leave my speculations on why this was for a later post, but suffice to say that it left me somewhat demotivated.
And I needed some motivation. The next step of the project (leaving aside toys like the digital clock) was the CMS; a large element for which I felt I needed "a bit of a run-up" and plenty of contiguous coding time. I've written this code before in InfinitePenguins, but wanted to redo it cleanly and more efficiently; after all, everything on this site is immediately released for public scrutiny! (I'd wondered some time back if this might cause delays, but to tell the truth I don't think it's really a key issue here - I just want to get this code right!)
So, the project (if not my learning) stalled a little, although I did find myself doing a lot of reading. Fortunately, the situation turned itself around somewhat; partly due to circumstance, partly due to determination.
The employer that had "downsized" me lost their other tech, and shortly hired me back as a freelancer (at suitably inflated rates). This both reassured me that *someone* valued my technical ability, and directed some money back into my account.
Another potential employer held a talk and recruitment event which I attended, and subsequently sen my CV to them. I won't say who it was yet, as I'm currently going through the recruitment procedure, but it's a fascinating role which might finally use the full range of my technical skills.
I took the plunge and, deciding that I'd soon either have adequate money or excess time, bought a Powerbook, both to help me learn OSX and Darwin, and to have a genuinely portable, fully functional laptop that can act both as development system and test server. At the moment, as I sit on a broken-down train typing this with a "mere" half-battery left, giving me 2 hours to think and work, this seems to be paying off. And, in yet another promise for a future post, I'll be writing a fair bit about this fantastic bit of kit.
The above occurences motivated me to restart my technical projects, and step up my technical reading. One of the books I picked up was "Extreme Programming explained". Despite what I maintain to be an utterly daft name, I'd picked up an interest in "XP" from other members of the PHP-London group, and resolved to learn more about it as time permitted. In fact the book proved very readable and I finished it in a day, with a good measure of recognition of common sense, and realisations of just why a certain project at a past employer had tanked quite so badly.
I'm sure I'll write more on XP later on, and possibly add a full review of the book, but for now I'll settle for recommending this title, and picking out one aspect of XP that's given me a route to restart the coding on this project.
One of the key tenets of XP is daily realease of working code. This means that you don't just write reams of code with the intention of making something that works at the end, but you split the code down in such a way as to have something functional and testable at each stage. Obviously the first element of this is going to bear little resemblance to the finished product, so the key is to work out just how small a functionality block you can create as part of the project - even if it seems trivial!
With this new mindset, I managed to break down the CMS into minimal functional elements, using the "omnigraffle" tool that comes with OSX. I've dropped the output of that into a separate page, in which you can see just how small the elements are that I've split it into, despite the fact that I want the CMS eventually to have some fairly smart functionality. These steps may take only a few minutes each, and the larger ones may be suitable for breaking down further. You'll also note that I've planned in the two next key elements of this project - the RSS display code, and the book lister which will interface with Amazon's web services. Both of these have also been written before, and as such I've got a pretty clear idea of where to go with them.
Well, the train's moving again now and I think that what I've written serves as a fair introduction as to what I intend to do next, so I think I'll sign off here and eagerly anticipate a late lunch.