Software Engineer's Career Guidelines
Important
These guidelines are based on the author’s experience and do not necessarily represent the consensus of a large group of people in the field of software engineering.
tl;dr
Be the owner and driver of your career, continuously invest in yourself, understand the fundamental concepts, work on personal projects, identify your market value, develop communication skills, and follow a medium and long-term plan.
Table of Contents
- Education
- Career Levels
- Salary and Market
- Specialization and Certifications
- Communication and Soft Skills
- Interview Preparation
Education
The 3 fundamental questions:
- Where should I start?
- What should I invest in along the way?
- Which knowledge will last longer, and which will become obsolete more quickly?
Sources of Knowledge
It’s not necessary to get a degree to learn how to develop software or enter the job market.
- If the goal is to quickly enter the job market or a new area, an excellent option is a programming bootcamp. These are intensive training programs that usually last from a few weeks to a few months and focus on skills needed for a specific market.
- Free suggestion: An excellent and comprehensive one is freecodecamp.org.
- Paid suggestion: One of the best in 2023, according to Forbes: altcademy.com.
- If the goal is to have a more comprehensive education that facilitates entry into the job market through internships, but not as long as a degree, a technical course is a great option, as it usually lasts 1 to 2 years and provides practical base and a recognized diploma in the field.
- If the goal is continuous learning, complementing an ongoing course, or learning a specific tool or framework, there are a wide variety of online courses available on online platforms.
- Free/paid suggestion: With 100 million students, there’s Coursera.org.
- Free/paid suggestion: Founded by MIT and Harvard, there’s edx.org.
- Free/paid suggestion: For a structured path, there’s codecademy.com.
- Free/paid suggestion: For budget-conscious learners, there’s Udemy.com.
- Paid suggestion: For companies to offer to their employees, there’s Pluralsight.com.
- If the goal is to gain or demonstrate skills, create an account on Github.com with your public projects, where you can express how you like to code or solutions to problems you’ve develop.
Why Pursue a Degree
Once you’re already in the workforce or wish to pursue a software engineering career, getting a degree is highly recommended. There are several reasons why this decision can be beneficial as it offers:
- A solid foundation in computer science, preparing you for a wide range of challenges in the software engineering career. It also broadens your view of the various opportunities within this dynamic field.
- The opportunity to build a valuable professional network, which can be crucial for starting and advancing your career.
- A significant boost to your credibility in the job market, as employers generally value the dedication and commitment required to complete a degree, which can be a competitive advantage in the long term.
- Internship programs for students and thus facilitate entry into the job market for those who have not yet joined.
- International mobility, as in some cases, a bachelor’s degree can be a requirement for obtaining a highly qualified work visa in another country, opening up opportunities for an international career.
Knowledge Pyramid
To guide which aspect of knowledge to focus on, there is an approach commonly known as the knowledge pyramid. This hierarchical structure represents a solid base of enduring knowledge at the bottom and more volatile knowledge at the top. As you move up the pyramid, knowledge tends to be more specific and subject to rapid changes.
At the beginning of your career, it’s crucial to concentrate efforts on the most fundamental levels of the pyramid as they establish a solid foundation for your development as a software engineer. These levels include:
Fundamentals (Base, level 0):
- Logic programming
- Data structures
- Algorithms
- Principles of software design and architecture
- Theory of computation
Principles of Software Engineering (level 1)
- Project management
- Object-oriented software development
- Principles of agile development
- Software testing and code quality
- Design patterns
Technologies and Programming Languages (level 2)
- Programming languages (e.g., Java, Python, JavaScript)
- Frameworks (e.g., Spring, React, Django)
- Databases (e.g., MySQL, PostgreSQL, MongoDB)
- Development tools
- Pipelines
Domain-Specific Knowledge (level 3)
- Industry or domain-related knowledge (e.g., healthcare, finance, games, etc.).
- Specific business rules.
Project-Specific Technologies (Top, level 4)
- Specific technologies and tools used in a particular project
- This may include specific versions of languages, libraries, and tools
Career Levels
The 3 fundamental questions:
- How many levels are there?
- How do I determine my level?
- What should I do to reach the next level?
Organization of Levels
There’s no single rule in the market to define the number of stages or levels, as each company has its own rules. However, a common pattern can be identified in the market. The most common levels identified are 5:
- Intern: typically students or recent graduates who are taking their first steps in the IT field. They have limited or no responsibilities.
- Junior: have some practical experience in IT, but are still developing their skills. They have few responsibilities, usually in day-to-day routines.
- Mid-level: have solid experience in their area of expertise and can even guide less experienced team members. They work autonomously and have shared or autonomous responsibility for the systems developed by the team.
- Senior: have extensive experience and technical knowledge in their area, and they mentor those at lower levels. They are responsible for the systems developed by the team or department and make strategic decisions related to them.
- Principal or senior specialist: are highly experienced, possess deep technical knowledge, and are often leaders in their field. They can lead large-scale projects and influence the direction of technology in the organization.
Above these levels, you’ll often find directors, but some companies have intermediate levels and instead of names, they use numbers. For example, Amazon has 6 levels, while Google and Facebook have 7 levels. You can check the levels of large companies and their respective salaries on levels.fyi.
Large companies have a clear way to identify your level within the organization and the expectations for moving up to the next level. However, there are two points to consider:
- Non-IT companies or smaller companies may have little or no career guidance, and you’ll need to rely on the market.
- Many companies with defined career plans focus on their organization and may not always be connected to the job market.
Therefore, it’s important to examine the market and understand typical career progressions in the field of engineering to be prepared not just for the company you work for today but for the job market.
Engineering Ladders
There are various engineering ladder frameworks, but in general, they cover similar items with more or less detail. These ladders serve as a career roadmap, helping guide your career more efficiently.
An effective framework is the engineeringladders created by Jorge Fioranelli, who is currently a director of engineering at Amazon Web Services (AWS). This framework is divided into 7 levels and 4 roles: Developer, Tech Lead, Technical Program Manager, and Engineering Manager. Each level consists of a pentagon with 5 vertices and 5 levels for each one. This allows you to visually identify which vertices are important to invest in to reach the next level and which levels are required for each role. Here’s an example of what is expected at level 5, Senior, for the Developer role.
- Masters: has very deep knowledge about the whole technology stack of the system
- Evolves: evolves the architecture to support future requirements and defines its SLAs
- Mentors: mentors others to accelerate their career-growth and encourages them to participate
- Adjusts: adjusts the team processes, listening to feedback and guiding the team through the changes
- Multiple Teams: makes an impact not only on the whole team but also on other teams
Of course, this isn’t an exact science, but it significantly aids career progression. After reading the 7 levels, identify where you currently stand and review the recommendations to move to the next level.
For a more detailed view with clear expectations for each level and additional roles beyond Software Engineer, an effective framework is provided by Dropbox. This framework includes a wider range of roles, such as quality engineer, security engineer, and even machine learning engineer, each with their own levels. For software engineering, it follows the same pattern of 7 levels as engineeringladders by J. Fioranelli. Here, you’ll find what is expected at each level, from impact and decision-making to collaboration and code fluency.
Once you identify your level within these frameworks, you can review what is expected at the next level and set a clear path for where you want to go.
Salary and Market
The fundamental questions:
- What constitutes the salary benchmark in the market?
- How do I determine the ideal salary aligned with the market?
- What are the most common ways to increase salary?
Specialization and Certifications
The fundamental questions:
- What are the most common forms of specialization?
- Why should I specialize?
- Is it worthwhile to invest in certifications?
Communication and Soft Skills
The fundamental questions:
- What are the most necessary soft skills in the field of software engineering?
- How can I develop these soft skills?
- What does developing communication skills entail?
Interview Preparation
The fundamental questions:
- What types of interviews are typically conducted?
- How should you prepare for an interview?
- What are the key points during an interview?