I have a problem. I feel like my software development knowledge is poor and must be boosted. Which bit? Errmmm…all of it. Everyone knows more than me, I know nothing. That’s what my brain tells me. Learn all the things, right now! But, I can’t do that. Like other people, I have a full time job. I have a family, I can’t just ignore them. But I want to learn stuff, I want to improve myself, how do I do it? There’s so much to learn, how do I decide what is most important right now?

This is what runs through my head almost daily. My first thought is make a list. Lists are great, they mean you don’t have to remember stuff. Before I had a kid I used to have a fairly long list of stuff I wanted to know more about, books I wanted to read, technologies I wanted to play with, projects I wanted to undertake. That was fine, I had lots of time I thought, I’ll get to them eventually. Then my son appeared and my time disappeared. I made the sensible decision to kill the list. Well, everything but the top most item, the task I wanted most to complete. This worked well for a while, but then my free time and energy creeped up again. I started adding more things to the list. Arrggh! How to I prioritise this stuff? My free time is way more important that it used to be, I need to prioritise. This is where I stumble. I still want to complete all the things on my list but I can’t decide which is most “important”. Note the quotes. I’m using these to suggest that none of the tasks are really important, I just convince myself they are. Also it's worth clarifying that I'm talking about non trivial tasks, something that I would at least have to put at least few hours into. 

So, I need to find a better way to prioritise right? Off the top of my head there are a couple of ways I could go about this.

Method 1 - A system

I need a system. I like having a system. I used to have a system for stacking dishes on the draining board, before I got a dish washer. Find the most efficient method and stick to it, that’s me. 

One way to make decisions is using a decision matrix. List the options, list the factors and rate each factor against each option, using an optional weighting. The option with the highest total is the winner. This is so me. 

What factors are applicable here. After some light brain activity I came up with the following:
  1. Is it fun? E.g. Do you enjoy doing it? Is it something that you can’t wait to get your teeth into?
  2. Is it useful? E.g. Is this something that will make your life easier, or your colleague’s lives easier?
  3. Is it important? E.g. Will your career suffer without this? Can you work without this? The distinction between useful and important is a bit hazy. Something useful could save you time day to day but something important you’ll struggle to do without
  4. Is it difficult? E.g. Creating a game from scratch is difficult, reading a book is not
  5. How long will it take? Pretty obvious this one. If you’re going to spend a long time doing something it had better be worth your while in some way

Scores are between 1 and 5, 1 is low, 5 is high. E.g. 1 means something isn’t fun, 5 means it’s super fun.

Mostly there’s no need to be specific, just a gut feeling will do, with the exception of duration which I feel the need to be a little more explicit. 
  • 1 - years
  • 2 - months
  • 3 - weeks
  • 4 - days 
  • 5 - hours
Here’s an example of the kind of things floating round my head right now.

Fun?Useful?Important?Difficult?How long?Total
Learn about .NET vNext4355581
Investigate UA feature and work out how to upgrade 2534461
Write a Hubot script5514470
Write a Resharper plugin4513357

I think this is potentially pretty useful. Here are the hard facts, based on the gut feeling values, with which I can work out the most “important” task.

The results are interesting. vNext stands out because while it’s not that useful right now it is really important to know how to take advantage of it down the line when it’s released. Plus it won’t take very long, I can watch a few videos and blogs to get a feel for it.

At the other end of the spectrum is the Resharper plugin. I’ve wanted to try and write a plugin for ages. There are some tasks at work that I could automate using Resharper. After giving it some thought, it would be really useful, but, it’s utterly non essential, it’s probably not going to be particularly easy, therefore will take weeks if not months and I imagine it’ll be a very steep learning curve which will take the edge off the fun factor. 

Method 2 - Throw out the system

While doing a little reading around this area I stumbled across Jeff Atwood’s blog post todon’t. In it he makes the point that collecting tasks is bad and todo lists are bad. I get this. I look at my list of stuff I want to learn and I think crap, I’ve not got enough time! Someone create me a Time Turner already! 

So, method two is bin my todo list. But, if I do that, how will I remember what I want to learn? Well, as Jeff Attwood and Adam Wozniak point out you can just go with the flow. Act on what excites you right now, what interests your right now. Everything else is irrelevant. 

In one respect this approach scares me. I strongly believe there’s no point remembering something that can be remembered by something that doesn’t forget, usually Evernote. So if I don’t write down all the things I want to do, how will I remember them? On the other hand this feels like a breath of fresh air, like a release, like a weight off my shoulders. This way I can be rid of the physic weight of unfinished tasks and just work on what interests me, and that's a big deal.

Here's another way of thinking about it. In on task hoarding and todo bankruptcy the author talks about a hoarder named Richard Wallace

"Despite his incredible existence (he slept in a chair, his bed was covered in ceiling-high junk), he didn't see see that he had a psychological syndrome. Pay attention to this, because it's kind of the point: He didn't believe he had an excessive hoarding habit, he felt his real problem was a shortage of storage."

I'm the same as the author of that blog post. I don't believe I have an excessive task hoarding habit, I believe I have a shortage of time. I don't want to live like that. 

This seals it for me. As of now I'm deleting my home dev todo list and I'm deleting my work dev todo list. I'm going to trust that everything I want to learn will be suitably interesting and exciting that it will be at the forefront of my mind. What if this approach doesn't work? That's fine, I can always change my mind somewhere down the line. But for now I'm not going to miss the constant reminder that I don't know enough.