Ali Jafarian
Ali Jafarian

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.

For example, it’s easy to learn “all the things” as a front-end developer. There’s HTML, CSS and JavaScript as your core trifecta. If you become proficient in these you can land a job just about anywhere.

However, it’s also very easy to get distracted by all the front-end JavaScript libraries and frameworks that exist today. Becoming proficient in ALL of them is not a good use of time, nor will it help you advance your career at a rapid rate.

Instead, pick a couple libraries/frameworks and use them as your go-to. For me, it was jQuery and Bootstrap. I can build just about any front-end experience with those two tools + native JavaScript. Had I jumped into Angular, React, Vue.js, etc. it would have limited my progression and kept me in a “jack-of-all-trades” mode. Don’t get me wrong, I understand those tools and can wield them when needed, but they were never my go-to for product development.

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:

  1. Front-end developer with deep React experience
  2. 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:

  • Compensation
  • Lifestyle
  • 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 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:

  1. Sponge early
  2. Specialize midway
  3. Master later
  4. Be a great communicator
  5. Avoid rushing
  6. Find mentors
  7. Choose your next role logically
  8. Stick to your core competency
  9. Use StackedOverflow wisely
  10. Have fun

Ali Jafarian

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.

Did you find value here?

If so, jump on my email list to be notified of new posts.



Leave a Comment

Your email address will not be published. Required fields are marked *

Latest Articles
2023 Retrospect

2023 was another amazing year! The Jafarian family chose challenge as our word for the year and we tested ourselves in new ways. We also mixed in a bit of…

View Post
Reflecting on 2 Years of Podcasting

I just passed my two year anniversary of podcasting. It’s been a journey. Here are some key reflections from being on the mic – 1. Creative Outlet First and foremost,…

View Post
Jafarian Adventure: Europe (2023)

The latest Jafarian adventure was 3 weeks in Europe. We visited 4 countries over a 23 day span including Norway, Germany, Italy and Greece. It was a full adventure with…

View Post