I don’t believe in New Year’s resolutions.

It’s almost a cliché that these resolutions never work. We start off with good intentions, and maybe even keep them going for the entire month of January. Then something happens and we miss a day. We get frustrated. Having missed one day, it’s easier to miss another. And soon, the whole resolution is out the window and we’re mad at ourselves for again failing to meet our self-imposed obligations.

New Year's Resolutions

What I do believe in is small goals with deadlines, and systems. The goal “I’m going to finish writing my next book by the end of March” doesn’t work; the result is procrastination until the end of February, and then not doing anything in March due to guilt over wasting the first two months of the year and the impending sense of doom from knowing there’s not enough time remaining to actually finish.

Specific and Achievable Goals

The goal “I’m going to write at least 50 words for my book every day” is much more achievable. It’s not very much work, but more importantly, it doesn’t feel like very much work – how long does it take to write 50 words? It’s also specific – you know exactly what you have to accomplish (write at least 50 words) and when (before you go to bed each day). If you happen to write more than that, great, but as long as you write at least 50 words, you can go to bed feeding satisfied that you have met your goal. Eventually, this becomes a habit, so it doesn’t even use up your limited supply of willpower – writing 50 words is simply part of your daily routine, like brushing your teeth and (unfortunately) checking Facebook.

For the last few years, my goal has been to finish my PhD, which meant that I needed to finish writing and defend my dissertation. This is essentially the same problem as the writing a book goal above, with the added strain of being mentally challenging and requiring a lot of concentration. I often found myself looking at the desired end result – completing the dissertation – rather than setting small, specific goals, such as proving one lemma, and the result was that I never wanted to work on the dissertation; it simply seemed too overwhelming. Fortunately, I had an external deadline – the pending expiration of my earliest credits – which finally forced me to sit down, finish the dissertation, and complete the degree. So that was my big accomplishment in 2015 – after much procrastination, I finally completed one of my lifelong goals.

My Goal as a Developer

This year, I’m formalizing something I’ve been working on for a while – developing my skills as a programmer. I’ve been writing code professionally for the last five years, and lately I’ve moved into more of a leadership role on my team. This year or next, I expect to be promoted to Senior Software Developer, but I don’t yet feel like a senior developer; while I no longer feel like I don’t know what I’m doing, neither do I feel like an expert programmer.

The things I’ve been doing to develop as a programmer are not wrong – actually, I’ll be continuing to do them. Obviously, I’m getting more experience by going to work and coding every day. I read a lot – I’m currently working on Code Complete 2, which I somehow managed to avoid until now – and I recently signed up for a Pluralsight subscription. In other words, I’m getting the two things I feel like I need more of – knowledge and practice.

 

Code Complete 2 book cover

The problem here is that while these are good practices, they’re not specific. About three years ago, I picked up a copy of CLR via C#, and really enjoyed it. I picked up a better understanding of a few things that I was able to apply at work. One thing I never did, unfortunately, is finish the book; one day I just stopped picking it up, so I never got to some of the fun topics towards the end. Similarly, I had a free trial at Lynda, which I never really got around to using. I’m finding that I need deadlines to keep myself working on the things that I want to do, but that are less fun than, for example, watching Doctor Who or playing Tichu, or less urgent than feeding the dogs and doing the dishes.

So for this year, I’m going to give myself some recurring deadlines. They won’t be hard to keep up with – I don’t want to just miss one in January and then give up on the whole thing – but they will meet the following requirements:

  1. They will be specific. I will know exactly what I need to do, and when I need to do it.
  2. They will move me towards my goals. The goals might be nebulously defined (what does it really mean to be a better programmer?) but the deadlines will be for things that will point me in the right general direction. It might be more accurate to say that I’ll have mini-goals that will move me towards my main objectives.
  3. They will be small, to the point that it will be easier to do them than to berate myself for not doing them.

So, let me first start by defining my objectives for 2016. I’ll choose two: one long-term objective that’s work-related, and one short-term objective that’s not.

Objective 1: Finish planning for my trip to Europe. I’m taking sabbatical in a few months, and I haven’t yet figured out where I’m going to stay or exactly what I’m going to do in London. Thus, the first things I need to do to meet this objective are:

  • Select and reserve a hotel.
  • Determine how to get from London to Stonehenge. Make any required reservations.
  • Buy Oyster passes so we can get around.

None of these individually should take much time, but none feel urgent either – the trip was scheduled half a year ago, but they remain undone. So, this coming week, I will have the following deadlines:

Monday: Narrow down my hotel selection to no more than three (I already know the section of London I want to be in) and get my wife’s preference.

Wednesday: Make the hotel reservations. Determine how to get from the hotel to Stonehenge and make reservations for that.

Friday: Determine the rest of our transportation needs (most likely, this will be Oyster passes to get around London and then Chunnel tickets to get to Paris) and make those reservations.

Once these are done, I’ll set new deadlines for other things I need to do, like figuring out how to keep my devices charged and whether I can pack clothes for two weeks in a carry-on. Now for the long-term goal: becoming a better programmer.

Objective 2: Improve my programming skills.

The problem with this objective is that it’s hard to measure; there’s no test that says “you are 85% of the way to being a rockstar programmer!” Instead, I want to implement a system that will have me doing things which will tend to increase my programming abilities.

1) I will attend at least 10 development meetups or conferences in 2016.

Until 2015, I’d never been to a development meetup. This is partially because it’s inconvenient to get anywhere from where I live, partially because I’m very hard of hearing and tend to avoid group activities, and partially out of inertia. In 2015, I attended That Conference and one meetup each from the MADdotNET and Madision Mobile .NET developers groups and enjoyed all three, so this year I’m going to try to make it a monthly thing. At some point in the future I’d like to start speaking, but I don’t know yet what I’d like to talk about.

2) I will start updating my blog again.

I started whatwilliamsaid.com quite a few years ago, but I’ve never really been all that interested in blogging so I haven’t updated the site consistently. I’m going to start doing it regularly, for two reasons. First, explaining something is a great way to clarify your thoughts about it. Second, I’ll need to find things to write about; since the blog is going to have a software development focus, that means getting in-depth about lots of topics so I can write about them. For this goal, I’m going to say that I’ll spend a half hour working on the blog each week, and if a post is ready to go I’ll publish it. Further, I’ll publish at least two posts each month.

3) I will post at least one book review each month.

I’ve been posting reviews at Vulcan Ears Book Reviews since 2010, but never as much as I’d like, and I also don’t get as much reading time as I’d like; last year, I only posted two reviews. This year, I’m going to read and review at least one book (which may or may not be a technical book) each month; this will force me to stay on track with my reading, particularly since I have an easier time reviewing the type of book I should be reading (programming books) than the type of book I just read for fun (science fiction).

So those are my goals for the new year. They do sound a lot like resolutions, but have two advantages: they’re clear and specific, and they’re focused not on the end results, but on the concrete steps that I need to take to achieve my desired results. Next December, I won’t have a piece of paper that says I’m a 13% better programmer, but if I follow the plan, what I will have is more education and experience that will better equip me to meet whatever goals I might set in the future.