General career advice for Software Engineers/Developers.

Introduction

I am a Software Engineer with over 14 Years of experience. I have lead various project implementations and have been fortunate to work with many junior developers. Working with junior developers provides an incredible opportunity to share your learning and learn from them as well. I have been a positive influence on many of them, and I thought that it would be helpful to share my experience with a wider audience. I hope this will be helping you to realize your potential.

About Me

I am a Computer science major who graduated in 2005. The early and mid-2000s was a golden era for computer majors, as it was right after the dotcom bubble and many companies in the US and Europe took outsourcing seriously. Particularly, it has been a boon for developing countries like India as they were seen as potential and capable offshore centers. The demand was so huge that anybody who graduated from a decent college with a decent GPA got a job. I was an above-average performer and even though I graduated from a premier institution, I did not capitalize on the exposure and the environment. Fortunately, I still got placed in one of the MNC as soon as I graduated.

My Career progression so far.

I am summarizing my career progression so far to set some context. I will also mention later on what went well and what did not go well.

  • Computer Science major graduated in 2005, got placement in an offshore service company.
  • Received initial training in .NET from the company and my first assignment was to fix HTML/CSS.
  • I aspired more and decided that fixing HTML is not something I wanted to do. So, I completed OCJP Java certification and switched to Java track.
  • Worked on various projects, always curious to learn, and has been proactive in taking up work and completing them.
  • Worked in India for 3 years and immigrated to the USA in 2008.
  • As life became easy in a developed world, I was a bit complacent and did not pay a lot of attention to my learning.
  • I still performed well at my work. I was always proactive, constantly on top of things, and vocal in raising concerns both work and non-work related.
  • I had good communication skills but not extraordinary.
  • I spent the next 3 years performing well but did not learn much other than what was required for the job.
  • I realized that what got me to the USA, won’t be enough to progress further. So decided to take learning seriously. I started concentrating on learning the latest frameworks, tools, languages, patterns with the help of technical books, and blogs. On the way, I completed a couple of certifications in Java and Oracle.
  • I also learned Java EE, Spring ecosystem, Web Application optimization, Oracle/Sql, and Groovy/Grails.
  • I was serious about staying in the Technical career path but did not want to get sucked into the Management path.
  • Due to some unavoidable circumstances, I had to take up a Business Analyst and Project manager role.
  • I missed being technical and hands-on. So I quit the Full-time position and became a consultant to stay in the technical path.
  • By this time, I had around 9 years of experience, and becoming a consultant was a defining moment in my career.
  • I started watching a lot of Youtube videos on new technologies/frameworks/trends like Microservices, Nosql, Docker, Cloud computing, Big data processing, and also watched or listened to various talks/presentations by top companies in various conferences like Qcon, GOTO, etc.
  • I learned a lot of technologies and kept switching clients every 8-12 months just to make sure that I kept learning and had a chance to work on projects/technologies I wanted to work.
  • At this time, I was a Technical Lead for most of the client assignments.
  • Completed Java Architect and AWS Solutions Architect certifications.
  • I realized that I am still not leveraging my full potential, and I have always felt something is missing and I could do better.
  • Around the same time, I was very keen on learning Distributed Systems concepts.
  • At this point, I had around 13 years of experience and stumbled upon TeamBlind.com. I realized the type of work people do in top tier companies like Amazon, Facebook, Apple, Microsoft, Netflix etc.
  • I was astonished to see the insane compensation that these companies pay for the top talent, and I was furious about why I had not known this before. We are talking about 200-300K dollars per year for mid to senior developers.
  • At this point, I realized that I could do better and started preparing to get into one of the top tier companies. That decision was primarily for money and also to work on highly scalable and distributed systems.
  • I started solving Algorithms/Data Structures using Leetcode.com and also prepared for System Design of Large scale applications.
  • I was comfortable with System design concepts, but still, there were a lot of gaps to fill.
  • I prepared for around 8 months and got into a Tier 2 company on the US East coast as I did not want to relocate to the West coast.
  • As of now, I am really satisfied with the new company, the type of work I do and also the compensation. Compensation is not equivalent to the Bay Area but still very competitive for the East coast.

Looking back at my career, I have done a few things well and some of them not that great.

Things that worked well for me.

Below are a few things that I think I have done right which contributed to my growth

  • I have always preferred to be in the technical path and was adamant not to get sucked into Management paths like Manager or Director. Being an Engineering Manager or Director in a technology company makes sense. But being one in a service company, it is just people management. I know a lot of my friends who took the management path, and the primary complaint they had is that it is difficult to quantify the work you do. A lot of the work they do is considered as “motion” and very little quantifies as “action”. It is just not what I wanted.
  • I have always emphasized learning new technologies, trends, new concepts most of the time. For example, when I go for a Jog, I prefer to listen to some technical videos from Youtube or listen to a podcast on Spotify.
  • Good communication skills, very vocal in defending my choices If I felt that I am correct.
  • Always reading, watching, and/or listening to technical talks on Youtube like how Netflix, Amazon, or Facebook solved problems scalability problems.
  • Reading and reflecting on the top tier company engineer blogs. All top companies have their engineering blogs. For example, Uber, Netflix Pinterest, Airbnb, etc. For example, I recently stumbled upon a post on the Airbnb blog about how they built a distributed job scheduler.
  • I have always valued certifications. You gain so much knowledge in completing a certification without using any dumps. Not just that, I enjoyed the journey and learned lot of other unrelated things to solidify your understanding of any particular concept.
  • Staying relevant at all times. Few examples, moving from .NET to Java, moving from Java EE to Spring, Learning Cloud computing and AWS ecosystem, learning big data processing frameworks like Kafka/Spark, and finally doing the hard stuff( Solving Data structures and Algorithms)

Things I wish I had done better

  • I wish I had Better exposure to the opportunities available in the market and leverage them early in my career.
  • I wish I had stumbled upon good resources (like Leetcode.com, Teamblind.com) which would have inspired me to get into top tier companies early in my career.
  • Make better use of the time that I had before getting married, at least the time I had before having kids.
  • Along with technical skills, focus on improving communication skills (both speaking and writing)

General pointers for a successful career

With the above things, I have a few pointers which will help any aspiring developers.

  • Please use all the time you have before the marriage and kids. You have no idea how much time you have now with you and don’t regret it later. Please use the time wisely, learn new things, switch jobs, complete certifications, etc.
  • Be curious and make learning a life long priority. Learning is a continuous process and don’t be a fool and assume that the learning is done as soon as you are out of college. It is even more imperative if you want to stay have a successful career in IT. Please keep learning new trends and technologies, even though you don’t use them in our current job. Me personally, these learning have always helped to find a better job.
  • Keep learning technologies that are related to what you are currently working which you don’t get a chance to work on. For example, if you are backend developer, learn about Load Balancing, Scaling your application, or how to package the application as Docker image, event hough that is handled by the platform team.
  • Be curious and master the basics of whatever you are learning. For example, if you are learning about Microservices, don’t just learn about writing a bunch of controllers using Springboot. Take time to learn about what is SOA, ESB and how Microservices differs from them, HTTP Verbs, Continuous Integration/Deployment (CICD), how not to share the database between microservices, how to size it properly.
  • Always find a good mentor who can guide, inspire, and push you in the right direction. Always have a good mentor in the workplace who can take you out of your comfort zone
  • Prioritize writing and speaking skills. I have seen a lot of people in IT concentrate on tools and frameworks. But, they lack basic communication skills and writing skills. Please take some time to master the tenses, sentence structures, how to form and present an idea, speaking skills, basic body language, etc. Your technical skills can take you only so far. It’s your soft skills that will take you higher.
  • Please don’t just learn the frameworks or tools. Frameworks and tools may come and go. Try to master the basics like data structures, algorithms, good programming skills, master at least one programming language, scalability patterns, design patterns, SOLID principles, etc. With a good grasp on basics, learning a framework or tool is just a matter of days.

Conclusion

I have seen very few mentors who showed genuine interest in me and shared their learnings. I was fortunate to have two good mentors in my career who helped me to realize my potential. I hope someone finds this post useful. Even if this post inspires only one person, I will be a happy soul.

Be curious and keep learning.