One of my improvements for the last few weeks has been to get a side-project up and running. As a programmer by trade this shouldn't present any particular difficulty, but software has this uncanny knack of making things slightly more complicated than they really should be.
This is the story of the last few weeks. The end result of which is that there is still no actual visible side-project. On the bright side, with so much behind-the-scenes work going on, something must break through soon to take centre-stage and the undoubted rapturous applause and adulation that such a journey deserves.
So sit back and enjoy the story of the Yak, the Alligator and the Bike-shed. I hope it is more fun to read than it was to live (and, in the end to write, too!)
Any apparently useless activity which, by allowing you to overcome intermediate difficulties, allows you to solve a larger problem. --Wiktionary
You can usually tell a yak-shaving story because its introduction will contain the words "all I wanted to do was". And that, in a nutshell, is what yak-shaving describes. It's the seemingly endless progression of annoying but vital intermediate tasks that need to be done before the final, important task can be completed.
Software development is particularly prone to this due to the plethora of versions, platforms and products which leads to a dazzling array of possibilities of things that can go wrong. This in turn leads to the multitude of things that need to be fixed.
But my story is not solely or even particularly software focused. Instead, it's just based around me trying to get something done.
Let's deploy a web app
I want to deploy a web app. It's nothing special - it's the equivalent of 'Hello World' for web apps. It might even actually say 'Hello World'.
I go to my current hosting provider of choice and create an account. They want some billing details - so I give them what they want, eager to get things up and running - I am already imagining sharing the link to this new web app in under an hour. I click 'submit'! Job done?
Let's sort out my credit card
But my billing details are rejected. My card has been declined. No doubt for some arbitrary reason because I have had the gall to purchase something from two different continents within the timespan of a few hours. Ah well, such is life, security is good to have after all. The credit card company phone me up automatically with their robot voice and ask me to confirm some recent transactions. No problem! Job done?
But I can't for the life of me understand what the robot is trying to tell me. I swear it deliberately mangles the names of the companies I purchase from just to make things more difficult. I squint and strain as I try to make out the weird metallic utterances, but after a number of retries I declare defeat. Not to worry - I have the relevant receipts in my email, so I can just look them up there and translate them into robot-speak! Job done?
Let's log into my email account
But I'm not actually logged into the correct email account at the moment. I have a few false starts, trying to change the account before going Incognito and just logging in again. Oh - but I've enabled two-factor authentication. Good for me - security is vital in this day and age after all! I'll just type that code in and that'll be that! Job done?
But I need my phone for that all-important code. And for whatever reason, my phone is not with me. Not a problem - there's only a few places it can be. A quick search and I find it (that was a lucky escape - the yak could have got a lot more shorn if I hadn't). Right then - just enter in the code. Job done?
Let's resurrect my phone
But the phone has no charge and has powered itself off. Oops. That was a bit careless of me. No problem though. Just plug it into the laptop and we'll be off and running. Job done?
But the wire isn't here either. Cue a hunt for the elusive wire that looks just like every other wire but is subtly different just about everywhere. It's probably in a bag somewhere, for safe-keeping. And sure enough it is - tangled around its coiled siblings. A few tugs and twists and it's free! Job done?
But the phone doesn't just work even with a wire. Oh no. It needs time to wake up and get its act together it seems. So I have to wait what seems like an age but is more likely just five or ten minutes for the phone to respond to my increasingly insistent button presses that enquire 'Are you alive yet?'. Still, it eventually stirs. Job done?
Let's try and remember what we were trying to do
And the great news is that yes, that job is done, and the whole chain rolls right back up again, provided I can remember what I was doing at each stage.
I think there was something about getting a web host. That was definitely mentioned...
Forget, when up to one's neck in alligators, that the mission is to drain the swamp
To lose sight of one's initial objective, becoming caught up in subtasks or in tasks only tangentially/orthogonally related to the initial objective. --Wiktionary
Web apps are great. Really they are - I'm a big fan! Using web apps has been a huge step forwards in so many ways. Productivity has sky-rocketed.
Writing web apps is terrible. There's so many things to think about that, to be honest, you don't really need to think about and shouldn't really be thinking about at all.
But, when you spend an hour just trying to sign up for a web host to put your new world-changing app, you get time to think about other things that would also be amazing to do.
Things like creating a Twitter account. Everyone needs a Twitter account - a web app without a Twitter account is like a body without a mouth - how would you possibly communicate without one?
Getting the perfect username isn't easy either - most of the good ones have gone. So we'll need to be creative. Better Google for an article on how to name a Twitter account.
Much later we remember that a domain name is also important. Oh, and ideally the domain name should match the Twitter handle.
I need to search out a suitable domain name. They're like gold dust so I need to strike quickly - if someone gets a sniff of my app they will probably register the domain name straight way, so I need to get in first.
What do we want to call the app? Tricky one as I have next to no idea what the app even does. Let's just choose some half-baked idea I came up with one day and run with that.
Great! Now, the .com almost certainly been taken already. So, do I want to stick with .com and try to be creative and clever or do I want to branch out and use a more exotic TLD like .io or .cc or .ly or whatever the fashion is this week?
Let's get one of each - hedge our bets! Oh, and did we make sure the Twitter handle was available?
It's all well and good having a domain name and a web app, but that alone won't draw visitors. If there's one thing I've learnt by reading the multitude of social media articles, it's that 'Content is King'. Clearly this web app will need a blog.
WordPress? Ghost? Posthaven? Silvrback? Self-hosted? Github Page? Statically generated? Simple HTML?
I'm stunned into inactivity. Let's try them all and see which seems to work best! That must be the best approach, surely.
Hmm, actually a lot of these blogs have a lot of sharing options. Facebook, for example. I think I might need to set up a Facebook Page for this web app. That's going to be important.
Don't forget Google+. Apparently it's growing fast. Would be madness to overlook that.
And the rest
Awesome! I'll just quickly add that to my Buffer. Actually, I wonder what state my Buffer is in - I'll just go check on it quickly. Not great - only a day's worth of posts left. I must remember to add some more stuff in there!
Hey - I just realised - the app needs a logo! All these accounts will need that logo setting up too!
What was I trying to achieve?
Amazing! I have about a dozen new accounts all set up - this feels great! Really productive. These will really help my web app to take off now - and the branding is all consistent. Time well spent.
Admittedly the web app still only says 'Hello world' and only on my personal laptop since I haven't actually got around to putting it onto the host that I was setting up in the first place. But infrastructure is important.
Futile investment of time and energy in marginal technical issues. --Wiktionary
You could probably argue that everything I have written this far falls into this category. In fact it probably does. I just don't have the time to go through and properly categorise all the events into the most appropriate group. I've been too busy shaving yaks and fighting alligators after all.
However, I think that bike-shedding is rather more sedate than the previous two. I see yak-shaving as you trying to be productive but things keep getting in the way - totally not your fault, just the way of the world. Fighting alligators is worse because none of that was actually necessary and I should have been doing other more useful things.
Bike-shedding - it's not about getting rid of bikes
Bike-shedding is what happens when I am not exactly sure how to proceed and instead start investigating things with Google, trying things out, comparing different approaches, reading blog articles about different ways to do the same thing and generally doing everything possible to avoid actually committing to a single approach and charging ahead with it.
As with the yak-shaving and the alligator-fighting, it feels productive at the time. But when you look back at another weekend spent without anything to publicly show for it, it does start to gnaw away a little.
My bike-shed of choice
My current distraction is Docker. I don't even know how it happened but I have spent the last month reading various articles about how to develop and deploy web apps using it. A whole lot of reading and a distinct lack of action.
It really doesn't help that new versions keep coming out which always leads me to a quick bout of yak-shaving as I get all up to date. And any new features lead to an extended bout of alligator-fighting as I try to get my head around what is going on.
Who knew that a bike-shed could be put to such multi-purpose uses as a yak-shaving barn and an alligator-wrestling pit? I sure do now!
What to do
Writing this post has made almost painfully aware of how much genuinely unproductive time I have spent in various endeavours.
The big question though is what to do about it. I've been thinking about it and have come up with three pretty obvious but I hope useful strategies.
Have a target
I want to be laser-focused. Luckily, I have probably got a lot of the extraneous stuff out of my system so all that is left to focus on now is the 'real' target.
In my case I want to get a simple bare-bones prototype up and running.
Have a deadline
Deadlines are great - if they are realistic and if you can treat them as fixed and actually work to them.
As such, I want something that isn't too taxing. So I am giving myself a week. I'll have something up and running by Sunday 31st of March (2014!).
I need to figure out what 'it' is, but I will start to publicise it - first of all to my wife and then on Twitter and then, well, I have a huge number of social media accounts lying around dormant. Might actually be time to make use of them!
Writing up the original draft of this post, everything was going exceedingly well. I was all the way through the Yaks and the Alligators and was about to dive into bike-sheds when my laptop completely froze. Only a reboot could revive it. And as a result my first draft just disappeared.
I don't know if that was the Yaks, the Alligators or the Bike-sheds, but looking back it seems particularly appropriate. Maybe the productivity gods just hate me.