I have been a professional software developer for 12 years now, working my way up from Junior Developer to Engineering Manager.
Over my 12-year career, I do have one regret that I wish I could go back and change.
In my first job out of university, I was working on a unit testing tool for C and C++. It was interesting work, and I was learning something new every day. I got to work with embedded devices and understand how computers work and a lower level.
I was later moved on to a client site to help build their internet bank. The project was all in C# which at the time I didn’t actually know. However, I learnt quickly and was soon able to work on tickets and add features to the project.
Over the next 2 years, I carried on delivering new features sprint after sprint. I was then moved on to another client project with the same tech stack, which I worked on for another 2 years.
As time went on, I got more and more demotivated with the work that I was doing. I knew C# and SQL to a decent level, and that seemed to be sufficient to do everything that I was asked to do.
It wasn’t that there wasn’t more to learn, but I didn’t need to learn it to do my job, and my colleagues didn’t seem to know any more than I did.
For those last 2 years, I could probably count all the new technologies I had learnt on one hand.
I had basically stagnated, but it had taken me 2 years to realise this.
I changed jobs to an exciting startup in London, and suddenly I was learning something new every day. The work was challenging, but I was growing as a person and my salary was also growing as a result.
If only I had made that jump earlier, I wouldn’t have wasted a couple of years not learning anything new.
I am now a lot better at switching jobs, I never stay in one position for longer than 2 years. In some cases, I move internally, so I can learn something new. On other occasions, I need to change jobs.
Every year I ask myself this one question, “Am I still learning?”.
Are you still learning?
I have seen software developers fall into this trap time and time again. They like being the expert, the go-to person for a particular topic.
The problem is, once you know more than anyone else on a topic, then the chances are you aren’t learning anything new on a regular basis.
I have interviewed candidates before who have 10 years of experience, but when you look at their CVs, they have spent those 10 years in one company using exactly the same tech stack.
In the job I was interviewing people for, we were using .Net Core, AWS and no-SQL databases. Naturally, the candidates had no experience with any of these.
It is difficult to recommend hiring a candidate that is supposed to be a senior when they have less experience in your tech stack than the junior employees.
If they have used these technologies in personal projects, then that does go in their favour, but it doesn’t beat using the technology “in anger” in a real-world setting.
There is a quote in the book 6 months to 6 figures that always comes to mind.
You often hear people say "I have 20 years of experience, I should get paid more," but in actuality, that person has 1 year of experience repeated 20 times.
If after a year, you aren’t still learning something new at least weekly, then you should seriously consider looking for a new position.
What about job loyalty?
Those not used to changing jobs every few years are probably thinking:
“Doesn’t job loyalty count for anything? Isn’t it good to show that you have been at the same company for the last 10 years?”
Well, actually, no, it doesn’t count for diddly squat.
If you look at the recent lay-offs in software engineering from highly profitable companies such as Microsoft, you will see they did not care about loyalty.
Some of the developers let go had been at Microsoft for over 25 years and were instrumental in developing technology that you use every day.
Clearly, loyalty shouldn’t ever be a factor in your decision-making process.
Microsoft may have laid off people at random based on their salary and nothing else. It is a possibility, but the likelihood is there were other factors at play.
I suspect some of these developers got a little too comfortable in their positions. They were the go-to people, but they weren’t necessarily contributing or learning anything new. Of course, Microsoft could have just picked their names out of a hat.
Either way, loyalty didn’t come into Microsoft’s decision. Companies aren’t going to keep you around if you aren’t a good investment any more.
You need to make sure you are investing in yourself and your skill set if you still want to be relevant to the market when you come to change jobs. Which in most cases, as we have seen, should be sooner rather than later.
Top comments (10)
Great post. I think it can be not quite linear. For example right now I learn so much every day it's exhausting, I can't wait until I know what I'm doing and can relax a little. But yeah I left last place bc it was same same every day. I think it's okay for there to be some zigzag or learning a lot, then relaxing a little while you implement that stack until it goes from confident to relaxing to boring, then go somewhere else to learn a lot and start over. learn learn learn every day is too stressful.
Thanks for your post, but I still have concerns.
I intend to leave my current position with an out-sourcing firm and because of working in out-sourcing company, the customer just plainly does not permit me to work more deeply on the project to gain more understanding of the client's domain or to be more involved in learning more about the new technologies that the client is adopting. Therefore, all I do is base Java and develop API every day (experience repeated). I quickly take action after realizing that it's not good and want to apply for a position as an internal employee at the client firm so that I may work more, but there's a catch: they want me to be knowledgeable about the technologies they employ. But how can I know if I haven't had a chance to use it yet?
Then I take a few courses they need, but it's not that simple. The organization is still looking for someone who is qualified both technical knowledge and real-world project experience. I'm torn between continuing to work for an outsourcing firm and learning nothing vs not qualified to seeking for a better company to advance my career.
Can you assist me get out of this rut so I can eventually have the opportunity to work remotely for a big tech company in the future?
One of the biggest problems for junior to mid-level software engineers working for an outsourcing firm is career growth. Opportunities to learn, earn, and be promoted are all highly dependent on your proactivity. If you don't ask for something to happen, it won't happen. This won't be a problem for senior engineers who already figured out what they want and how to communicate it, especially to management.
If you want to have a strategic position on your client's company, you have to let them know. Either you tell your immediate supervisor within the client's company -- which has a higher chance of knowing how to manage you because you're directly working with them, or negotiate with your parent company's supervisor. The only problem with the latter is that sometimes, your own parent company's supervisor is more of an account manager who doesn't know jackshit about how to advance your career and treats your clients as customers by the book. Your account manager will simply just coordinate it with your client who may or may not do any action about your request.
In my honest opinion, however, I'd weigh the pros and cons first of jumping from one ship to another. While leaving the outsourcing firm now and going to the client seems like a good move for your career growth, is it something that won't affect other aspects of your personal life? Consider the salary packages and benefits as well. Consider the work environment, schedule, and process. What you're experiencing now with the client is from a vendor's perspective, it could be different if you're part of the internal team. Think about it, in a worst-case scenario that your parent company can't do anything about the issue with your client not giving you what you want, you can always ask to be reassigned to another suitable client instead, leaving all your salaries and perks intact, but getting the chance to try another company to work for -- hopefully a better one.
Great points Micah. At one of the clients I did end up pulling out the resignation card in order to get moved to another project where I could learn a little more. It is risky but often they will arrange something rather than upset a client. Try asking your employer whether you can take on more responsibility with your client or ask to be moved to a different project.
I believe as a software engineer, you'll actually get to a point where you're confident enough or left with no choice but to pull the risky move rather than get stuck in a loop.
Thank you so much @alexhyettdev @micahbule , I'll consider the suggestions above, give one a shot, and attempt to be more proactive in my work as well. Looking forward to the positive developments in the future!
Learning is absolutely essential for staying involved in your career. I was fortunate enough that my employer from 2020-2022 insisted that we spend 15% of our weekly 40 hours learning. For the first time in years, I felt like my career was going somewhere. I felt engaged not just with my job, but with life. This got me charging ahead in my career, and I started making "learning" a focus of my life as a whole. It definitely put a big dent in the ennui that had been plaguing me for the better part of a decade.
As a result of this, I've become far more intentional about learning. I schedule an hour a day to just learn things -- Udemy coursework is a favorite -- and I go beyond just tech. I'm currently learning French, for example, and will be signing up for martial arts in March. Add to this intentionally interspersing my usual light/fiction reading with more serious non-fiction at a 1:1 ratio has also helped quite a bit.
An old friend once said, "You can't stop the learning." She was right.
I'd say one of my regrets is: not having an exit plan after joining a company and therefore staying too long at a stagnated job...
Awesome post! Thanks.
I haven't yet gotten a job as a software engineer but this article is life saving. Thanks alot