We’re almost two months down in 2017. How are those New Year’s resolutions going? I’ll fully admit that I’m terrible about keeping up with things like that. But I’m working at getting better. This framework has helped me stay on target for a few things at work and in my personal life, I hope it helps you too!
What’s a medium- to long-term aspiration?
To start with, you need something big to work towards. Maybe you want to get promoted. Or you’d like to start a new business. Perhaps you’re looking to become a great public speaker. Or something else altogether.
Whatever it is this aspiration is something you’ve been thinking about for a while and you’re ready to make some serious strides in that direction.
For the purposes of this exercise I’m going to assume your aspiration is something along the lines of “become a better developer.” But the general steps will hold for even quite unrelated topics (like become a yoga instructor - one of my aspirations).
How do you stack up?
Where are you now vs. where you do you want to be? You should know which areas you need to improve in before you can start intentionally improving. Take some time to realistically assess where you think your weaknesses are. How do you honestly think you stack up?
After you’ve done that, get some outside opinions by talking to people:
- Ask your boss. Hopefully your boss has some ideas around where you need to improve, and possibly has specific ideas about how to improve in that area. A few days before your next one-on-one tell you boss you’re thinking about goals and would like some input about areas and techniques you can use. Asking in advance means your boss isn’t put on the spot, but has some time to think through a good answer. Then make sure to actually bring it up in your one-on-one!
- Ask team members who review your pull requests. These people are reading your code all the time. Perhaps they’ve seen you make the same mistake a few times. Or maybe they can see your code always has one style to it, so maybe you should explore other ways of doing things.
- Ask anonymously. Some companies (such as Atlassian) have a system for you to ask for anonymous feedback. This feedback tends not to be as useful since you usually want to follow up, but can help guide your thoughts and questions you ask other people. This can be a better solution if you’re more senior as your less experienced co-workers might feel weird giving you feedback directly.
- Ask for “soft” skills as well. When one programmer asks another programmer how they can get better at programming, the answers tend to be about... programming. That’s often a good thing, and asking people knowledgeable in your field gives you specific things to work on. However, as a programmer, you’re not actually programming all the time. You use soft skills in your work, so be aware about how you can get better at those as well.
How can you level up?
There are a bunch of ways to get better at programming. There’s a long discussion about it on StackExchagne: What is the single most effective thing you did to improve your programming skills?. This is the highest voted question under “self-improvement” so it’s clearly a topic people have put a lot of thought into. Here are a few of my suggestions:
- Read X, Y, Z books (possibly generic programming books like Code Complete, or maybe something more specific to do with your language and situation). The important part here is that the list is predefined and you put thought into each of the titles.
- Read blog posts about new tech (hopefully others in your company can recommend particular authors)
- Pair with more senior developers
- Work on side project (if possible have some specific learning goals, but even if you don’t you’ll certainly find some road blocks to get through!)
- Do programming exercises to learn about X
- Go to meetup groups to see case studies of problems
- Have coffee with someone you respect and ask them how they improve
- Ask the people you meet with from “How do you stack up” if they have ideas how to get better
Hopefully that’s enough to get you started, but you should come up with a few ideas on your own as well.
Once you’ve got a good list to choose from pick the top four or five most impactful actions to improve. Don’t try to do everything, instead focus your time where you’ll get the most value.
Set some goals
Goals should be SMART:
- S - specific and stretching
- M - measurable
- A - attainable
- R - relevant
- T - time-based
Let’s break these down:
- specific - you should be able to explain your goal clearly to someone else and they should know what you’re going to do: “be a better developer” vs. “read X book”
- stretching - the goal should push you out of your comfort zone a little: “write Hello World” vs. “implement bubble sort”
- measurable - it should be clear if you succeeded or failed: “learn more about Y” vs. “give a talk on Y”
- attainable - it’s actually feasible for you to complete this goal: “have coffee with 100 people this month” vs. “have coffee with five people this month”
- relevant - completing this goal should excite you since it’s moving you towards your aspiration: “learning underwater basket weaving” vs. “completing the Ruby Koans”
- time-based - there’s a clear cut off date when you can evaluate success or failure: “read X book” vs. “read X book by March 23”
So “be a better developer” is a badly worded goal, but “Read book about X by Y date, and publish a blog post about it with a summary and personal insights and examples a week after” is a SMART goal.
- Look over the “top four or five most impactful actions to improve” from you came up with from the previous section. Convert each of these actions into a SMART goal.
- It’s probably not attainable for you to do all five of those goals. Instead pick 1-3 of your SMART goals to work on over the next month. The time frame is flexible, but give yourself a hard deadline, ideally shorter rather than longer.
- During the month check to see how you’re doing with each of your goals. At the end of the month review, repeat, and adjust as needed.
There are a few ways to do this:
- Use an app to see when you did (or didn’t) do your assigned task. I use Loop - Habit Tracker, but it’s only on Android.
- Pay money when you’ve fallen off the wagon. I use Beeminder to give that extra “sting” for not sticking with your goals.
- Have an accountability buddy - meet with someone (ideally who’s got the same goal) to see how you’re both tracking.
- Track yourself. Certainly the easiest one, but only works if you’re honest with yourself.
The important thing is to notice when you’re not meeting your goals and ask why: Was the goal too big? (not attainable) Do you feel the goal won’t ultimately help you reach your long term goal? (not meaningful) etc.
Ask yourself what needs to change for you to continue towards your aspiration. Keep coming back to these questions as you work on your goals. Remember, you’re using goals as stepping stones towards your aspiration. It doesn’t matter if the goals change, so long as you’re making progress.
- I find it easier to work on things little and often (read a blog post each day, watch a tutorial on youtube once a week, etc).
- Tell your boss about your goals. This gives you some accountability (they can ask you about your goal in your next one-on-one) as well as letting them know you’re working on improving. Remember, your boss can’t give you points for something they don't know you’re doing!
- Talk to other people about their goals. I get a lot of ideas from how other people are working towards their long term goals. Chances are there are a lot of people in your workplace who want to “become a better developer”, so use that resource.