Is Your Career Drifting Out To Sea?
Like a frog who's slowly being boiled in a pot but doesn't realise it, two years into my career I slowly came to discover that I wasn't progressing anywhere near what I thought I should have.
I was learning tons and growing in my skills. But it seemed like that didn't matter.
Failed job interviews, tiny salary increases after delivering on difficult long-term projects, bitterness, etc. were the results.
Have you ever felt the same way as I did? Feel like your quality of work and effort doesn't get the recognition and results you expected?
One year, I was flat-out told that I wouldn't be getting a raise because I had spent some time on parental leave (even though I had delivered on a critical project that year).
Another time, I failed a job interview due to my poor attitude and bitterness towards a situation which in reality was a very complex project that needed strong ownership, patience and leadership.
I took ownership of my career
Faced with the reality of career progression as a software developer, I decided to make an intentional effort to take ownership of my career.
What does that mean, you ask?
Taking ownership of your career means that you realise your career is an organic thing that you can either nurture and grow, ignore or even damage.
It's like a garden: deciding what seeds to plant, where to plant, how to nurture your plants, deciding what plants to sow more of, etc.
If you are intentional about planting and maintaining your garden then you should get results.
If you don't maintain your plants then your garden will most likely get grown over with weeds and not do so well!
And, if you don't plant any seeds yet expect a garden to appear - well, that's kinda crazy.
Your career is the same! If you simply expect that "doing a good job" will land you promotions or position you as a competitive asset in the job market then it's just like that last analogy of ignoring your garden!
Does doing good work mean getting recognised?
For myself, the root falsehood I believed was that doing good work would lead to being recognised.
Sadly, most of the time, that's just not true.
Our managers are overloaded with their tasks. They are juggling personal issues, internal HR conflicts, overdue projects, etc.
Is "just doing a good job" going to make you stand-out in their minds? Nope.
This is the biggest piece of advice I give everyone who comes to me with career advice:
You need to simply stand-out.
Whether that's within your company, among other resumes, within the greater developer community, etc.
What is it?
Reputation just means "how much you stand-out" combined with your overall professional competence.
Reputation = How much you stand-out + competence.
Think of your programming "heroes": they are very skilled and competent. Yet, they are constantly putting themselves in public by promoting themselves, sharing their thoughts, sharing their "wins", etc.
Do you think they have trouble landing new jobs? Nope.
Does that mean you need to become a programming hero to get promoted and land that new job? Not at all.
I'm simply pointing out that self-promotion, helping other people, getting involved in communities, networking with other professionals and building long-lasting relationships are all part of building your reputation.
If you are always helping your manager, discussing your "wins" and asking about how your work has affected the company then you'll ensure that you're top of mind.
The fact is, most developers hardly talk to their managers about their work and how it's impacting the company.
Tip: Show an interest in your manager. Make their job easier by doing awesome work. And, ask about how your work is improving the company. One-on-one meetings are a great time to ask about these things.
Questions that others ask about YOU
Everyone is forming an opinion and view of who you are, how skilled you are, etc.
Here's a short list to get you thinking about what others are asking themselves about YOU:
Are they kind?
Do good work?
Good at mentoring and teaching others?
Make sure that you can "check" all of those off!
If you are always complaining and have a poor attitude, then your peers will not see you in a good light.
On the other hand, if you aren't learning and growing then your peers will see you like a stagnant resource that will, over time, drag down the team!
Navigating the stages of your career
Before looking at the specifics of how you can start to grow your reputation and grow in your career, you should get an idea of what general career stage you are at.
I use a simple framework to layout the common career path stages that most software developers will find themselves in.
The stages are:
These stages are not job titles. They represent a developer's real experience and competence.
It's been said that someone with 10 years experience might, in practice, have repeated the same 1 year of experience over-and-over!
Let's take a look at these stages to get an idea of where you fit and where you might want to go in the future.
A coder is a hobbyist.
If you don't get paid professionally or work with a team of other developers, then you might be a coder.
A junior developer is entering the IT field as a paid professional and they work with a team of other professionals.
Are you a junior developer?
If you've been a professional developer for less than a year (as a very general figure) then you're probably a junior.
Take a look at the next stage to see if it resonates. If not, then you might still be a junior who's transitioning into becoming an intermediate developer.
An intermediate developer is a competent team member and contributor.
The telling sign I use for this stage is that intermediate developers usually have a mental urge or "pull" to believe that they know everything they need to know.
Perhaps they feel like their views on how to best architect a system are "complete."
Whatever it is, there is some degree of feeling like they've "found" the silver bullet or that their current view is finally "the one."
The intermediate stage is like stepping into puberty for your career.
For example, teens tend to begin believing that they know better than their parents.
They tend to experiment and be bold about what they believe.
They begin to tread a path of their own.
This is the intermediate developer. They are starting to think for themselves.
The senior developer is becoming very skilled and knowledgeable to the point that those around them are looking to them as a mentor and a "go-to".
They usually have some specialised or advanced programming knowledge and can build more complex systems using advanced techniques and patterns.
Seniors are confident in what they know due to their experiences. But they also have a grasp on the fact that there's so much they don't know about.
The biggest telling sign that you are in this stage is whether or not your peers are constantly coming to you for advice and guidance. Are you mentoring others too? These are all signs of being a senior developer.
The lead developer is focused on providing high-level guidance to their dev team.
But more importantly, they are a bridge or connector between the development team and the other business-oriented departments in your organisation.
Are you leading a team of developers? Do you also have to communicate with non-technical managers or other departments about what the development team is working on, etc? If so, you're a lead developer.
I hesitate to include this one, but I think it's helpful to see where your career could go in the future.
A tech leader has made a name for themselves as an expert in some specific area(s) and usually have a very targeted branding/positioning as to what they do well.
That might be a specific programming language, web security, front-end development with react, a developer mentor, or even a particular industry.
They could be community builders who have a following of people that look up to them as a direct or indirect mentor.
They could be thought leaders who champion some specific cause or idea.
They usually speak publicly about their area of expertise or the ideas that they champion.
In a nutshell, they are technology experts and very skilled communicators.
If that sounds like you, then you might be a tech leader.
How to get to the next stage
I've written elsewhere about specific tips to move between each career step. For the moment, I want to highlight some more general pieces of advice that anyone can leverage and use to move forward.
You need to stand-out within your company if you want to land promotions and be a part of important and growth-inducing projects.
Find a gap within your team or company that could help solve some important problems your company is facing.
Practically speaking, if you are early in your career, just keep an eye out for whenever your peers seem surprised at some skill or way of doing things you have. This might indicate a gap that could be helpful to your organisation!
For example, if you did something fancy with CSS that other developers notice and are impressed with, then that could indicate a gap.
For more seasoned developers, it should be more apparent what gaps need to be filled. And, the more experienced you are, the more you should naturally drift into a position of mentoring others and having a clear picture of what gaps need to be filled.
Once you are seasoned, you can use this principle and apply it to the global community - not just your internal company. Try to figure out where there is a need or where certain trends seem to be pointing.
The specific gap you fill doesn't matter so much. The point is that you need to stand-out as a competent problem-solver who can tackle problems that the business is facing.
Get on a high-visibility project
This isn't so you can become famous. It's so that you can:
Gain experience fast
Become known in your org as someone who gets things done well
If you can build experience and become known in your org for getting things done, then you will begin to build traction for whenever new opportunities come up.
Jump on the hard stuff
Similar to the previous point, you won't learn unless your comfort zone is pushed.
And, you will be seen as someone who attacks the important stuff in your company or community.
This will build trust, reputation and confidence.
Keep an achievements library
Keep a spreadsheet of every major task that you complete. If possible, include metrics that might be relevant.
"I improved the speed of a critical SQL query by over 200%"
"Completed feature X which lead to X number of new clients for the company over the next 6 months."
"Learned about the SQL APPLY operation and used it to migrate company X's data 50% faster than before."
This will be helpful for you to look back at privately and see what you've accomplished. We all get down sometimes and fall into seasons when it feels like we aren't progressing.
It will also help when the time comes to re-do your resume. You'll have lots of ammunition.
Get involved in the community
One of the things I regret not doing sooner is getting involved in the developer community.
This will help you find jobs, make new friends, find mentors, and make you feel like you a part of something bigger than just yourself and the company you happen to work for.
Figure out who the "best" developers are for your particular field and interests.
Follow them on Twitter and start reading and commenting on their blogs.
Other things you can eventually get into:
Start contributing to open source projects (even just documentation!)
Start an open-source project
Attend local user groups, meetups and conferences
Find a mentor
This can't be overstated. You can't do it alone.
You need someone to throw ideas off of and be able to learn from.
This might be someone on your team at work or someone in the community.
Find someone you trust and who you can throw your questions and ideas at.
More general tactics
Here are some general tactics I haven't covered yet that you can use to get yourself into the minds of others and start building some credibility and reputation:
Speak your thoughts by tweeting or posting on social media
Building publically available projects
Write a book
Just helping people any way you can
Learning and growing in knowledge
You need to keep learning! If you aren't building your knowledge about software design, patterns, techniques, soft skills, etc. then you are going to stay stagnant.
You need to have real-life experience and learn from real-world situations.
But, you also need to push your knowledge about what tools and techniques are available to solve problems.
If you are in the coder or junior developer stages, then I would suggest learning about general things like design patterns, "clean coding" and whatever languages, and frameworks you are using at work.
Once you are at a more senior stage, then you want to start doubling down on some specialised topics. This will help you to stand-out and make sure that you become an expert in some area(s).
Here are some general tips for learning and growing in your technical skills:
Figure out what tech stack you want to be skilled with and learn it in-depth
Read every day! (This will help you become a better reader and just help you learn every day)
Map out your skills and figure out which ones you want to dig into and which ones you want to learn the fundamentals about
For skills where you want to know the fundamentals, the most important thing to understand is what problem(s) does it solve?
For skills that you want to dig into, consider mentoring or high-quality training material (think Pluralsight)
If your current job isn't challenging, consider moving on to something more challenging
What to expect
To finish off, I want to give you a realistic expectation of how growing your career works.
It's a long-term process.
I love to use the analogy of a garden when thinking about growing your career.
For many types of seeds, you have to wait for weeks or even months before seeing any results.
Some plants only begin to grow in a tangible way near the end of their entire growth cycle!
The same is true about our careers.
The start is seemingly slow.
But things begin to happen quickly after you've built momentum!
My advice here is:
Just keep showing up. Stay consistent.
If you are committed to making content for your blog, then just keep doing it. You don't need to blog every single day or even every single week.
Take any opportunities that come your way.
Network and reach out to those you respect.
Try testing ideas on Twitter (or anywhere else) to see what people think.
Write content that you are passionate about!
Remember above all else that you are planting seeds.
It takes a lot of work to grow in your career. But it's worth it.
Above all else, just keep pushing forward, stay humble, and keep learning!