Photo by Mohammad Rahmani on Unsplash
I worked at 6 companies in my career including 3 Big Tech firms. In my career journey, I went through different career profiles and expectation ladders for software engineers. In my experience, there are two dimensions (Technical and Behavioral) that every software engineer is evaluated upon. I recommend engineers to invest equal amount of time to build skill set in each of the below two dimensions:
Technical Skills
Code Quality: As a software engineer it is expected that your code quality improves over time. This is measured by the number of comments you receive in your change list, the preciseness of your change list, and how modular your code is. Are there any bugs introduced by your change list and how is the reliability of your code post release.
Productivity: Early on in an engineer's career it is important to maintain a consistent level of productivity. This is measured by the number of CLs which is a proxy to amount of code written. If your current project doesn’t have a lot of code to be written, pick tasks from the backlog, bugs to be fixed to maintain the productivity levels. Also, make sure your code contributions align with business goals and outcomes.
Design Skills: This is ability to design systems taking into consideration all aspects of the technical architecture including APIs, dependencies, scalability, and reliability. Ability to understand the overall end to end picture and connect the dots to solve customer use cases.
Debugging Skills: Ability to debug customer issues and bugs without help is an important skill to build and develop over time. Great debugging capability comes from getting involved in dealing with outages and building end to end knowledge of the entire product.
Operational Skills: This is about maintaining our systems by being on-call, ability to roll back code, submit patches, maintain and improve SLO errors and budgets. Ability to take up operations work such as documentation, code cleanup, tests, refactoring, systems maintenance.
Behavioral Skills:
Project Ownership: Ability to take complete ownership of your projects. Driving cross-team alignment/collaborations even beyond your immediate technical deliverable.
Unblocking Self: Ability to work independently. Showing a greater sense of urgency and push for resolving blockers independently, with less direct engagement from other senior engineers.
Cross-Team Collaborations: You will eventually work with multiple teams over the course of your career. Showcase your ability to build relationships, collaborate effectively, influence teams to support your work and move things faster.
Influence without Authority: Ability to convince others that your design choices are better and how did you shift the direction of product towards a bigger outcome than originally planned.
Mentoring Others: Ability to provide feedback to colleagues on how they can do better. Coaching others to perform better and grow their career.
Improving Team Efficiency: Ability to provide input on how we can do better as a team. Initiate new processes and organize events/meetings to bring the team closer. Do tech talks, share your work, encourage others to share their work. Provide inputs on how we can increase productivity, communication, and any skill gaps in the team. Setting a high bar in the team with your exemplary work.