by Adam Brett

How to be a Successful Developer: BHAG & SMART Goals

This is going to be the first in a series of posts I've wanted to write for a while on How to be a Successful Developer. I consider myself to be a fairly successful software developer. Whether or not that's true could be open to debate, but by every metric I use to measure my success, I am successful. With that in mind, that's where I want to start the series, the metrics of success.

How do you measure "success"?

The thing about success is that it is highly subjective. What looks like success to one person is another person's idea of failure. The very first thing you have to do is ask yourself: "What does success look like to me?" Disregard other people's ideas of success. Once you know what success looks like for you, you then have to be able to measure where you are relative to your success in order to plot a path there, and more importantly, know when you've achieved it. That's where goal setting comes in.


When most people set goals they pick something that is too generic, for example:

I want to be a famous software developer

This has a number of issues. It isn't specific enough to know when you've achieved it, so you won't ever know if you've been successful or not, it's not realistic, as not everyone can become famous, and being famous for writing software usually means twitter fame, and that's not really relevant to moving you forward in life.

You could improve it by removing the fame element, to something like:

I want to be the best software developer in the world

This is better, because now it's relevant. Being the best software developer in the world would certainly help you move forward in life, but I'm not sure it's achievable (there can be only one best), and it's certainly not measurable, as "best" is a very subjective term, especially in software development. Let's try again:

I want to be the best software developer at my company

Now we're getting somewhere. This is certainly achievable (although still subjective), and very relevant to making you more successful, but how will you know you've become the best? And how long will it take? Being the best software developer at your company in 5 years when everyone has quit and you're the only software developer at your company would be achieving your goal, but it then seems fairly pointless.

In order to set good goals, goals that can be achieved, we need a system, and there is a system that is well established and works. That system is SMART.

SMART states that goals should be:

  1. Specific

    Something that is specific is much easier to plan and aim for than something that is more generic, for example "write more tests" vs "become a better developer".

  2. Measurable

    By establishing up-front a specific metric for your goal you can tell if you've achieved it much easier. E.g. "achieve 80% code coverage" vs "write more tests".

  3. Achievable

    Making sure your goals are achievable is just as important as anything else. There's no point setting a perfect goal if it's unachievable, as you'll fail before you start. E.g. "become a better developer" vs "become the best developer in the world". This also applies to the other areas of SMART, for example: "get 100% code coverage" is specific, but probably not achievable and "get from 50% to 80% coverage by the end of the week" probably isn't an achievable timeframe for a 100k line codebase.

  4. Relevant

    Your goals should be relevant to your overall and longer term success. For example "get 5000 twitter followers" vs "get more customers for my SaaS app".

    More often that not, the R in SMART is described as Realistic, which in my mind is the same as Achievable, so I prefer to change it to Relevant, which I think makes a bit more sense.

  5. Time Bound

    You have to set a timeframe to work to that's not too long and not too short, but you must set a timeframe, otherwise it's open ended and you won't ever achieve the goal, or at least won't be driven to achieve it.

As an example, the above goal re-written as a SMART goal could look something like this:

I want to achieve 80% code coverage across my issues within 6 months.

What I've done here is boil down "best software developer at my company" to something very specific.

First I asked myself: What would make me a better developer than everyone else at my company? It could be closing more issues, but that doesn't take in to account issue size, it could be knowing more design patterns, but that doesn't mean you're applying them correctly, or it could be become a mentor for a junior developer, but that doesn't mean you're teaching them better than anyone else could. Ultimately, I decided that for this example, being a better developer means writing code with fewer bugs.

Writing code without bugs is hard, plus it's hard to measure how many bugs you get compared to someone else. A good method for helping you find bugs early and making sure you don't introduce new bugs is writing tests, and as luck would have it, in my fictitious example company here, most developers only have 70% coverage across their issues, so if I have 80% coverage, then I should have 10% fewer bugs and therefore (at least in this contrived example) be a better developer.

Now I have something specific to aim for, I can estimate how long I think it will take me to achieve this, and 6 months seems realistic; not too far off, and not too close, so now I have a very specific goal I can aim for, and in 6 months time I can look back and say either yes, I was successful, I have 80% coverage across all of my issues, or I wasn't a success because I had less than 80%.

You should probably also note that this goal is specific to one individual at the company. What makes a good developer is highly subjective, whilst in your opinion it might be writing fewer bugs or more tests, someone else might see it as closing more issues, providing better support, writing better documentation etc. Just because you've achieved your definition of "best developer at my company" doesn't mean everyone there is going to agree with you!

Setting Goals

Now you know how to write SMART goals, there are three types of goals you should be setting for yourself:

  1. Short Term Goals

    These are things you want to complete today or this week.

  2. Medium Term Goals

    These are thing you might want to complete within the next 1-12 months

  3. Long Term Goals

    These are things you want to do in the next 1-5 years

This might seem like overkill, but having a clear plan of where you want to be gives you something to aim for - a target to hit or miss, and something to measure your success against, and each level should feed in to the next.

Long Term Goals

Start with your long term goals. Maybe there's a particular company you want to work for, a job title you want to aim for, a salary level you want to achieve, or just a better work/life balance.

People often have a tendency to set long term goals and then never revisit them. This is a guaranteed recipe for failure. Long term goals need to be revisited and revised often, and take in to account things that are happening right now or have happened since the last time you looked at them.

Although having an eye on the future is essential, you have to be realistic. Landscapes change, for example, in 2007 you might have wanted a 20% pay-rise, but with the economic downturn in 2008 you would have been happy to have a job at all. In 1998 you would have been forgiven for wanting to work for Microsoft, but by 2003 Google was your best bet.

Most companies go through a 5-year planning process. Good companies go through this process every year, and re-assess where they see themselves in 5 years based on their experiences in the last 12 months. Really good companies do this every 6 months. The same goes for employee annual reviews. Most companies set employee targets for 12 month periods, but how much more useful would it be if you re-adjusted this every 3 months?

Medium Term Goals

Once you know what your long term goal is, you can then look at where you are now, and what you need to do to get there. There will usually be stopping points along the way.

If your long term goal is to become a consultant for ThoughtWorks, and you currently only know PHP, you probably need to learn Java, C#, or Ruby as they are the languages they primarily use.

If you want to become a Lead Developer then maybe you need to get some management training, because the skills for effectively managing people are very different to writing code.

These are examples of good medium term goals as they will help you achieve your long term goals. A medium term goal should always feed directly into your long term goals.

This is another reason why it's good to do 5 year planning annually, and annual reviews quarterly. It allows you to change your medium term goals based on information you have right now that you didn't a few months ago.

In 2007 when the first iPhone launched Nokia didn't pay much attention, and didn't change direction. When the iPhone 3G exploded onto the scene 12 months later they still didn't change their long term plans, and now they've paid for it. Google released the first version of Android just 12 months after the first iPhone, and are now the market leaders. They saw the change in the market and updated their medium and long term plans accordingly.

If Nokia had been taking external influences and changing markets into account and re-assesed their long or medium term plans frequently we might have a different landscape today.

Short Term Goals

Just as medium term goals should help achieve your long term goals, short term goals should help you achieve your medium term goals.

If your medium term goal is to learn Java, then maybe a short term goal is to read a beginners tutorial on Java. After that maybe you research which books are good for Java. Then research Java frameworks. Then build an app in Java and so on.

These should be things that you can do now, today, and if you can't, then ask yourself why not, and keep asking yourself why not until you have something you can do today, and make your goal to remove the obstacles in your way.

Daily Goals

Daily goals can be the same as short term goals, but in reality short term goals could take a few days or weeks to achieve, and there are lots of thing you need to do in a day. It can be hard to focus. Luckily, there are systems that can help us here too. One of my favourites is the 1-3-5 method, and it's really simple.

Every day, write down the most important thing that you want to get done that day. It could be the biggest, or just the most important. That's your "1", you do that first, and nothing else until it's done. After you've written down your "1", write down 3 more tasks, these should be of medium importance and size. Things you want to get done today and probably will, but if you don't get round to it, it's not the end of the world. Finally, write down 5 smaller and less important tasks. Things you'd like to get done, but really it's not that important if you don't get them done today.

If this sounds familiar, it's because it's very similar to MoSCoW prioritisation in Agile/SCRUM. If you think of it in those terms, you have 1 MUST, 3 SHOULD and 5 COULD goals every day. Just like with SCRUM, it's perfectly reasonable for a SHOULD or COULD goal from a previous day to be promoted to a MUST or SHOULD the following day.


The last thing I want to talk about is BHAG or Big Hairy Audacious Goals (or sometimes Big Scary Audacious Goals). That's because I believe many of us are too constrained by the Realistic/Achievable part of SMART goals (or life in general). I think everyone should set themselves at least one Big Hairy Audacious Goal. If you don't try to shoot for the stars, you'll never build a rocket. You might not always achieve your BHAG, but the important thing is to believe you can, to find a way, and to try. You have to remember that sometimes it's OK to fail, if nothing else you will have learnt how not to do something.

A good example of a BHAG I like to use is buying an Aston Martin1. These cars are beautiful and desired by many people, but so extremely expensive as to be out of reach for most. Or so you would believe. But if you start to break it down, and look at how you could own one instead of sitting there thinking you can't, it suddenly becomes much more achievable.

A new Aston Martin DB9 will set you back £140,000, but if you look for one just 5 years old then you can have an outstanding example for less than £50,0002. If you go 10 years old you can have one in excellent condition for just £24,0003. If we average that out to £37,000, and your goal is to own one in 5 years time then you need to save £7,400 per year, or around £620 per month. That's still a lot of money, but is far more achievable.

Now start thinking of ways to earn an extra £620 per month (Payrise? SaaS app? Write a book or two? Freelance on the side?) and you can put a firm plan in place and get on your way to owning one instead of just wishing you could.

A SaaS app with around 30 paying customers at £20 per month each would cover the cost, and if you can't get 30 customers, or they don't pay £20 per month each, you've still built a viable business in the meantime, so although you've not met your BHAG, you've done something remarkable that's improved your life anyway.


Hopefully this has given you a good grounding in how to set goals and use them to measure and drive your success. In the next installment I'll be covering how to use methodical, concerted practice to genuinely improve, because you'd be surprised how easy it is to get wrong!

For exclusive content, including screen-casts, videos, and early beta access to my projects, subscribe to my email list below.

I love discussion, but not blog comments. If you want to comment on what's written above, head over to twitter.