The last 12+ years of my career have been a rollercoaster of design, coding and product development as a software engineer.
During that time, I’ve had a plethora of ups and downs in various roles. I’ve met and worked with tons of amazing people. Most of all, I’ve learned A LOT.
This post aims to share some of those learnings and provide advice as if I was speaking to my former self.
1) Sponge Early
In the beginning you should focus on learning as much as humanly possible. This especially applies if you’re young and single. The amount of time you have to learn, practice and implement diminishes as you age and take on more life responsibility. In your younger years you also have fewer opinions and biases towards the craft.
So put the time in early to really learn and explore different things.
2) Specialize Midway
Once you have a few years of design or development under your belt it’s time to start specializing. By specializing I mean pick a path – design or development – and narrow your toolset.
3) Master Later
Once you’ve hit senior level (5+ years) it’s time to start mastering something. This should be a a solid choice between front-end vs back-end and the specific language/technology of your choice. For example:
- Front-end developer with deep React experience
- Back-end developer with deep Ruby on Rails experience
If you do this, you will be able to command higher compensation and work into an architect role. If you don’t do this, you will stay at mid compensation levels and/or be most valuable to startups who need full-stack developers.
Personally, I chose the latter path as a full-stack startup developer because I’m an entrepreneur before a coder, and I love the early stage business phase. But I wouldn’t suggest that to my former self if he was seeking a more predictable career as a software engineer 🙂
4) Be a Great Communicator
This one is the easiest to overlook but also the easiest to set yourself apart from the pack. Why? Because let’s face it – most software engineers are really bad communicators. Don’t get me wrong… I’ve worked with some highly intelligent and experienced developers over the years, but the communication just wasn’t there with most of them.
Most “true programmers” are introverts at heart and prefer working in silos. That’s precisely why code software project management tools came into existence. If sales guys/gals dictated software development there would be no need for computers! We’d all just jump on calls to make decisions and track progress.
But software is created by engineers, and engineers are not naturally wired to communicate well. So set yourself apart from the pack and invest in your soft skills. This will help you build stronger relationships with your team members and help you establish credibility with leadership. A software engineer who can sell themselves, and the work they produce, has a very dangerous advantage. Those engineers go on to become leaders.
So make the effort to communicate clearly and frequently.
5) Avoid Rushing
In the beginning, we all rush code out the door. The new job or project presents the perfect opportunity to show what we’re made of and pump those first few commits out at lightning speed. While this may seem helpful, it’s actually A LOT more harmful in most scenarios.
Sure, if you’re working for a funded startup you might not have an option. Cash is often tight and your ability to develop MVP solutions is a big factor in why you were hired. But outside of that context, it will only help you to take time to properly develop and test your code.
6) Find Mentors
The landscape of software engineering is quite vast and expansive. From different programming languages to frameworks, libraries and plugins. There’s A LOT to learn and gain proficiency in.
The natural “developer instinct” is to just figure things out and learn it yourself. And it usually pays to fully comprehend something in software engineering, as opposed to just being familiar with it.
However, there’s a faster path to doing it on your own.
Find mentors to guide you.
Mentors can come in many forms, from online courses to in-person training. I personally found in-person mentors to be extremely effective in the early stages of my career. For example, the senior developer I worked under at various jobs were instrumental in what and how I learned. Not only did they provide guidance and examples, but they solidified principles that helped me establish a sound software engineering background. You can’t always find this from online resources or DIY (do-it-yourself) paths.
Regardless, find people and resources that can expedite your learning path.
7) Choose Your Next Role(s) Carefully
Advancing your career often comes with different job jumps and opportunities. Some people stick with a job for 10+ years but that’s becoming less and less prevalent in today’s job force, especially for software engineering. The job market is competitive and lucrative, offering software engineers a lot of options.
When choosing your next role, take some time to navigate it logically. Here is the key questions to ask when evaluating new opportunities:
What are my current priorities for employment?
You should be able to stack the following in order of priority:
- Growth potential
Your prioritization here should help inform whether or not you take a new opportunity.
For example, if compensation is #1 you will favor the highest possible salary and neglect lifestyle or growth potential. These opportunities often come in the form of consulting and/or less exciting corporate gigs.
On the other hand, if growth potential is #1 you should likely consider a startup or small business. Your ability to learn and execute in those business environments is drastically higher than larger businesses that move at much slower paces.
I’ve had a change in priority at multiple stages of my career over the last 12 years, so it can certainly change. The key is figuring out what takes priority at what time.
So take the proper amount of time to really evaluate your career jumps.
8) Stick To Your Core Competency
One of the hardest things to manage as a software engineer is staying within your core competency. In other words, it’s very easy to become distracted and influenced by something new or attractive.
For example, a simple blog post can leave you 10 clicks deep into a course on data science that you didn’t even know existed. Next thing you know, you’re jumping into “machine learning” reddit threads and claiming python as a proficient language in your skillset.
Or better yet, you learn a little bit of CSS and brag about this demo you coded during a team happy hour. Before long your management team asks you to jump into some front-end work and own actual tasks.
Be cautious of driving outside your lane. It can definitely be advantageous [and healthy] for personal growth, but it can also leave you hanging in the “generalist” pool with all the other jack-of-all-trades coders. Re my point #3 above, it will pay more dividends to truly master something first, and then branch out later. If you’re a back-end developer become really good at back-end development before you choose to dip into the front-end. Or if you’re a web designer make sure you truly master great web design before you teach yourself to code back-end.
Stay inside your core competency if you want steady growth and stability.
9) Use StackedOverflow Wisely
This one is easy. Stop copy/pasting solutions you find on stacked overflow.com. Period.
You might think you’re crafty and smart by using it daily. But believe me, good employers can sniff out a StackedOverflow copy/paster. Especially when you leave the author’s code comments in your code!
To be clear, StackedOverflow is a wonderful resource. But it should be used as just that – a resource. Not your go-to for code snippets that you use in production environments.
When interviewing developers this is one of the first questions I ask them – “How do you use stackedoverflow?”
I then observe if they truly use it the way they answered during their first few weeks of employment. And believe it or not, I’ve actually caught multiple people using a pure StackedOverflow solution as part of their code in production environments. Not only that, but they have the tenacity to defend their code when questions around it arise.
That’s just ignorant and sloppy. Don’t become a StackedOverflow coder who has no real skillset when the internet goes down.
10) Have Fun
Last but certainly not least, have some fun!
Life is pretty short. Given your limited time in this life, choose jobs that inspire you and allow you to have some fun in the process. As software engineers we’re fortunate to have an abundance of employment opportunities and that won’t change any time soon. The need for software is on a growth curve that will continue to rise as computers take over more and more of our processes.
So take some time to enjoy the ride and do things that make you smile.
This one will find you at some point or another in your career 🙂
Here’s the recap:
- Sponge early
- Specialize midway
- Master later
- Be a great communicator
- Avoid rushing
- Find mentors
- Choose your next role logically
- Stick to your core competency
- Use StackedOverflow wisely
- Have fun
Ali is a father, husband and serial entrepreneur with a deep drive to create. He writes, records, codes and builds things to inspire the artist in all of us.