Growing Your Career
Introduction
Growing your career in software engineering is a journey that requires continuous learning, self-evaluation, and hard work. I frequently meet with former students and junior developers who are looking for advice on how to grow their careers. This guide is a collection of tips and advice that I have found to be helpful in my own career and in mentoring others.
As someone who has been reasonably successful in my career, I want to acknowledge that there will be bias in the advice I give. I have been very lucky in my career, and I have had many opportunities that others have not. Not everyone has had the same experiences, and I want to recognize that my advice may not be applicable to everyone.
Getting Started
Getting started in software engineering can be the hardest part of your career. Without concrete experience, it can be challenging to get your foot in the door. This is also the place where I have the least experience. The industry has changed a lot since I started, and I don't have a lot of advice to offer. Here are some general tips for getting started:
- Build a Portfolio: If you don't have relevant work experience, building a portfolio of projects can be a great way to demonstrate your skills to potential employers. I recommend small applications that demonstrate your ability to write clean, maintainable code. Don't neglect the README file; it's often the first thing a potential employer will see.
- Apply often: Applying for jobs can be a numbers game. Don't be discouraged if you don't hear back from every application. Keep applying, and eventually, you will find the right opportunity.
- Network: Networking can be a great way to find job opportunities. The software industry can feel small, and you never know who might be able to help you find your next job.
Interview Tips
While I haven't interviewed for a job in a long time, I have interviewed many candidates for positions at my company. Here are some tips that I have found to be helpful:
- Prepare: Do your research on the company. Make sure you understand what the company does and what the role you are applying for entails.
- Slow Down: Take your time when answering questions. It's okay to pause and think before answering. It's better to take a moment to think through your answer than to rush and give a poor response. This is especially important for technical questions. The interviewer is more interested in how you think through a problem than in the answer itself.
- Ask Clarifying Questions: Many technical questions are intentionally vague. Don't be afraid to ask clarifying questions to make sure you understand what the interviewer is looking for. Once again, this is about showing the interviewer how you think through a problem.
- Explain Your Thought Process: When answering technical questions, explain your thought process. Avoid long silences while your working through an answer. The interviewer wants to understand how you think through a problem, not just the answer itself. If your thought process is clear, minor mistakes in your answer are less important.
- Learn to Spot Mistakes: I see candidates make mistakes in technical questions all the time. It's never a problem unless they can't find the issue when I give them a hint. Learn to spot mistakes in your code and explain how you would fix them. Being able to mentally walk through your code and find issues is a valuable skill.
I dislike LeetCode-style questions in interviews. I find them to be poor indicators of a candidate's ability to write maintainable code. Unfortunately, they are still extremely common in the industry. If you are interviewing for a position that uses LeetCode-style questions, I recommend practicing them. They are a skill that can be learned.
Growing Your Career
Once you have a job in software engineering, the next step is to grow your career. This can mean different things to different people. For some, it means moving into a leadership role. For others, it means becoming a technical expert in a particular area.
Where do you want to go?
Ask yourself the following questions:
- Do I want to stay in a technical role, or do I want to move into a leadership position? Think carefully about what you like doing and where you want to go. Most large companies have separate career tracks for technical and management roles. It's important to understand which track you want to be on. Also note that moving into a management role is much easier than moving back into a technical role.
- How do I want other engineers and managers to see me? Do you want to be seen as a problem solver, a technical expert, a mentor, or something else? Think about how you want to be perceived by your peers and managers, and shape your skills and interactions accordingly.
- What kind of work do I enjoy doing? Do you enjoy working on large, complex systems, or do you prefer smaller, more focused projects? Do you enjoy working with people, or do you prefer to work alone? Understanding what you enjoy doing can help you shape your career.
Learning
Getting a career in software engineering is a commitment to learning. The industry changes rapidly, and you need to stay up-to-date with the latest technologies and best practices.
Continuous focus on learning is what differentiates good engineers from great engineers. The best engineers are always learning, always growing, and always looking for ways to improve.
Focus on Fundamentals
The fundamentals of software engineering are timeless. Being able to craft clean, maintainable code will always be valuable. No matter how much the industry changes, the fundamentals will remain the same. Focus on learning the fundamentals of software engineering, and you will be well-prepared for whatever comes next. They will apply regardless of the industry, programming language, or technology stack you are working with.
Finding Mentors
Working with a more experience mentor can be invaluable. They can provide guidance, feedback, and advice that can help you grow your career. Their experience will allow them to spot gaps in your knowledge and help you fill them. If you can find a mentor, take advantage of the opportunity.
Finding a mentor can be challenging, especially if your company doesn't have a formal mentorship program. Look for opportunities to work with more experienced engineers on projects. Ask for feedback on your work and advice on how to improve. Most engineers are happy to help others grow their careers.
Mentoring does not need to be a formal arrangement, but it can be helpful to have someone who can provide guidance and feedback as you grow your career.
I suggest switching mentors every year or two. This will give you a fresh perspective and expose you to different ways of thinking.
Volunteer for Projects
One of the most effective ways to grow your career is to volunteer for projects that will stretch your skills. This could mean working on a project that uses a new technology, working on a project that is outside your comfort zone, or working on a project that has a tight deadline. Volunteering for challenging projects will help you grow your skills and demonstrate your value to your team and your company.
If you see some upcoming work that looks interesting, offer to help out even if your skills are not a perfect match. You will learn a lot by working on projects that are outside your comfort zone.
Succeeding on challenging projects can be a great way to demonstrate your value to your team and your company, and can lead to new opportunities for growth.
Self Evaluations
You can expect to have regular performance reviews at most companies. Some small companies don't have a formal process, but you should still be having regular conversations with your manager about your performance.
The annual review is not the time to find out how you are doing. You should be having regular conversations with your manager about your performance. If you are not getting regular feedback, ask for it. Regular feedback will help you understand how you are doing and what you need to improve.
The annual review is the time to showcase your accomplishments and set goals for the coming year. Be prepared to discuss your accomplishments and areas for improvement. Be honest about your strengths and weaknesses, and be prepared to discuss how you plan to improve.
Track Your Work
Get into the habit of tracking your work throughout the year. Keep a list of your accomplishments, projects you have worked on, and feedback you have received. This will make it easier to prepare for your annual review and will help you demonstrate your value to your team and your company.
It also helps to alleviate the recency bias that can occur during performance reviews. If you have a list of accomplishments from the entire year, you can demonstrate your value even if you have had a slow quarter.
The best way that I've found to track my work is to keep a work log, sometimes call a brag document. To keep this updated I have a dedicated block of time set aside at the end of each week. During this time I add a few bullet points to my work log summarizing my accomplishments for the week, who I helped, and any feedback I received. At the end of each quarter, I review my work log and summarize my accomplishments for the quarter. This makes it easy to prepare for my annual review and to demonstrate my value to my team and the company.
The annual self eval is a stressful time for many people. Having a work log can help alleviate some of that stress by making it easier to prepare for your review.
Actionable Feedback
When asking for feedback, or giving it to others, make sure it is actionable. Feedback that is too vague won't help you improve. Consider the SMART criteria when giving feedback:
- Specific: Be specific about what you are giving feedback on. Try to include examples whenever possible.
- Measurable: Make sure the feedback is measurable.
- Achievable: Make sure the feedback is achievable. Setting unrealistic goals will only lead to frustration.
- Relevant: Make sure the feedback is relevant to your goals.
- Time-bound: Make sure the feedback has a time frame.
Brag When Appropriate
A lot of people are uncomfortable talking about their accomplishments. It's important to get past this discomfort, especially during annual reviews or when seeking promotion. If you don't talk about your accomplishments, no one else will. Make sure you are highlighting your accomplishments and the value you have brought to your team and your company.
Building Soft Skills
In many ways, soft skills are more important than technical skills. The ability to communicate effectively, work well with others, and manage your time are all critical to your success as a software engineer.
No matter how good you are at systems design, writing code, or debugging, if you can't communicate effectively with your team, you will struggle to be successful. Most people will prefer to work with someone who is a good communicator and a good team player over someone who is technically brilliant but difficult to work with.
If your people skills are lacking, your career will suffer. It's important to work on your soft skills as much as your technical skills.
Communication
The most critical soft skill for software engineers is communication. You need to be able to communicate effectively with your team, your manager, and other stakeholders. This includes written communication, verbal communication, and listening. You need to be able to explain complex technical concepts to non-technical people, and you need to be able to listen to feedback and incorporate it into your work.
Conclusion
Stagnating in your career is a real risk in software engineering. The industry changes rapidly, and you need to keep up if you want to stay relevant. Growing your career requires continuous learning, self-evaluation, and hard work.