A friend of mine who is graduating from a good Computer Science school in a few weeks shared some good news with me — he accepted an offer from one of the big and well known software houses after a couple of successful internships he had over there. Being the dedicated and hardworking person he is, he immediately asked me to recommend some books or resources he could use to hone his skills as a professional software engineer. I took some time to think about it then came to realize very quickly it wouldn’t be a problem for someone like him to find good resources or navigate the details of whatever technology he ends up using.
He was an excellent intern when we first met, and I think he has all the right ingredients to grow into a solid engineer. What I found myself inclined to share with him instead were some hard learned lessons about career and professional development. Not the typical self-help material you often find on the internet, but real firsthand observations and experiences I went through or witnessed up-close. But when I started to think about the things I wanted to tell him, I felt they were general pieces of advice that may very well apply to lots of other people who may be in his same situation. So, I decided to write them down and share them publicly in the form of a relatively long message. And here it begins, my dear friend and colleague.
1. Always stay on the market
I know how excited you feel about the new job and you definitely should. You are going to learn a lot even though it might feel a little too intense in the beginning. But I promise you you’ll be amazed at how much knowledge and skill you will acquire during your first couple of years. It will definitely pay off to stay focused and learn as much as you can. But don’t let your newfound fulfillment lead you to forget how important it is to always be on the lookout for new opportunities.
I know you worked hard to earn your degree and land this job. But as you grow more capable, there will be more and more opportunities and it is critical that you stay aware of this and not get too attached to a particular job, team, or company. Look around, inside the company you’re at and elsewhere. See what other people are working on, try to identify the most highly demanded skill sets, see if there is anything you should learn about or explore, make sure your expertise is in demand, test yourself against the market, and know your worth. Update your LinkedIn account, don’t shun recruiters, and go through job interviews every once in a while if you can. This will give you perspective and help you plan for the future even if you don’t actually move around much.
2. Keep updating your resume (not to get a job though)
I am not asking you to always keep it current so you are always ready to apply for new jobs. I don’t think I ever met someone who kept his/her resume up-to-date the whole time. In fact, I want you to keep updating your resume at a relatively relaxed pace, e.g. every 4~6 months. And the reason is it helps you identify those periods of time when your work does not amount to much on your resume.
See, the problem is: software houses, especially the bigger ones, hire lots of people and have tons of work to be done, most of which will probably add value to their business but, more importantly, you must make sure the work also adds value to you. You could very easily get too busy/content with what you are doing and forget to measure the return on the investment you’re making. You could spend months in firefighting mode cause that’s what it takes to keep your service running, or you could spend years cruising cause you got really good at what you’re doing. Either way, updating your resume will help you take some time to reflect on your achievements, see what good things you can tell about the work you’ve done, and get alarmed if you are getting burnt or growing too comfortable.
And when you update your resume, make sure you’re adding quantifiable achievements not listing job responsibilities. If there is one resource I’d recommend you take a look at in this regard, it is chapters 5 and 6 of Gayle McDowell’s book: The Google Resume. These 2 chapters contain a good description of the hallmarks of a strong resume as well as a detailed critique of common bad resume-writing habits.
3. Identify and learn transferable skills
Don’t focus on just learning the intricacies of whatever platform, technology, or programming language you are using. Try to identify the core concepts and fundamental principles that govern your domain, see how different solutions approach similar problems, and what trade-offs they make.
If you’re into Systems Programming, try to learn the core concepts of Inter-Process Communication on different operating systems. Try to understand how different languages and libraries support asynchronous programming. If you’re into web-services, try to understand what Remote Procedure Call is, what problems SOAP and REST are intended to solve, and what their similarities/differences are. If you’re into web UI, try to understand how the prominent Single Page Application frameworks work and what the various HTML/CSS layout techniques are.
These are all examples but you get the idea. Try to master the tech-stack you’re using at work but make sure your viewpoint remains wider. You’ll use different technologies throughout your career and understanding the underlying principles will help you pick new stuff up really quickly, which is a priceless skill in this profession cause technologies change at a much higher pace than their basic foundations.
4. Understand the necessary ingredients for growth
If I were to give a very dense and oversimplified recipe for professional growth (in experience or rank/scope) as I have seen it, it would be: Growth = Opportunity + Hard Work + Time. Without going into much detail or extended debate about what each one of these ingredients means or if there are any other, the gist of this recipe is that there are multiple factors that affect growth. For instance, it is more difficult to grow if the project you’re working on is in maintenance mode, even if you put in a lot of time and hard work. It will also be difficult to grow your career if the things you work on keep getting changed so rapidly you don’t get enough time to see them through or showcase their success. You can read this article for a firsthand account of one such experience. You must stay alert so you don’t end up in a situation where one of the key ingredients for growth is missing. It’ll drain your efforts and slow your growth.
5. Know your career growth options
Passionate craftsmen are susceptible to focusing exclusively on improving their technical skills and staying on top of their trade. You have to realize there are other factors of equal importance that contribute to career growth though. For instance, people grow by changing jobs, rewriting systems/features, taking on leadership responsibilities, utilizing connections with other people … etc. You should always strive to deliver excellent work, but bear in mind this may not be sufficient on its own to grow your career. Be mindful of this and plan your investments accordingly. Your approach to career growth should not be limited to doing an excellent job then waiting to get promoted organically. There will be other smart hardworking people competing with you, and there will only be few promotions and finite reward budgets. This is why it is vital to understand all the different options you have and not get stuck or lose sight of the bigger picture.
6. Ask yourself: What’s in it for me?
As you consider different jobs, teams, or companies, ask yourself: what’s in it for me? It is easy to get distracted by a fancy product name or established company reputation, which could definitely have a positive impact on your career. But what matters the most are the things you learn, the contributions you make, and the people you get to know. It is not uncommon to see big and established products that have fewer opportunities for contribution than smaller and younger ones. In fact, bigger products also require a fairly different set of skills from those necessary for smaller ones. Just make sure to stay conscious of your choices. Are you in it for the good pay and nice perks? Are you trying to tap into a new domain? Are you trying to increase your scope of responsibilities? Just make sure you never forget what keeps you where you are. Be diligent about your choices and don’t just float cause it will affect your future prospects adversely, especially expectations will grow higher as you become more senior.
I hope this wasn’t too long of a read. I tried to keep it succinct and I hope you find it useful. And last but not least, congratulations and welcome, my dear friend.