The Roadmap of a Lead Software Engineer
Experience and knowledge you need to gain to become a lead software engineer
Table of contents
No headings in the article.
Preconditions
How to start planning the move to the Lead Engineer title? Firstly, you need to be a Senior Software Engineer with approximately 2 or 3 years of experience. This means you are a seasoned engineer who tackles complex tasks and supports a small group of teammates(1...3 devs).
Also, you should be proactive rather than reactive. This assumes that you are ready to bear the burden of responsibility. You can analyze tasks and communicate with business guys. Every suggestion is confirmed by clear justifications.
Obviously, you need to be an expert at least in one tech. This would be a big advantage to have expertise in some more techs and nitches. This is called a "T-shape person" - one who has deep knowledge in his main field and some additional knowledge around it.
Do you fit these criteria? Then you are ready!
E.g, my expertise is mainly related to React and everything around it. Also, I had a big experience with PHP and some experience with Nodejs. So, I have enough experience to either start a new project or support an existing one.
I'm an active mentor when helps folks to start their IT career from the ground up or to get a promotion. I'm a proactive team member who is ready to take responsibility, plan the development process, and support teammates.
Now we are ready to explore required hard and soft skills in detail. Are you ready?
Hard skills
As for me, these are the most important skills required for a regular software engineer. I don't want to underestimate the importance of soft skills. But the main thing developer should do is to produce high-quality code that turns into an app that gives value to folks.
Soft skills are also important. And we will explore them in the next section.
Programming Paradigms
Object Oriented Programming. You should be a pro on this topic. And it is not only about OOP principles. There are a lot more items you should cover:
- Patterns and design principles
- Smalltalk-like and Erlang-like OOP
- Bad and good practices
- Actor model vs OO model
- Elegant Objects
See the GoF Patterns book. This is a very useful thing for covering some of these topics on a good level.
This is a nice website about patterns. Worth looking at. And one more resource about JavaScript patterns.
Functional Programming. This is an exotic thing for a lot of modern developers.
But it becomes more and more popular in the last few years, especially in front-end development. There are topics you need to know as a Lead Software Engineer:
- FP principles and patterns
- Lambda calculus
- Different types of polymorphism
- Laziness and Eagerness
- Parallel computing
I highly recommend this book by Professor Frisby.
Reactive Programming. Not important but highly recommended knowledge. See RxJS and Akka.
You need to be able to compare different solutions and to choose the most appropriate on taking into account different factors.
Communication Protocols
Not much to say here. There is a set of topics that you need to know and practice.
- IP, TCP, UDP, TSL
- REST
- GraphQL
- Websocket
- Polling
- Richardson Maturity Model
- Open API
Security
As a Lead Software Engineer, you are responsible for developing a secure app. There are a lot of topics you need to be experienced in. Let's explore the main ones.
- OWASP Top 10
- Security audit
- Security headers
- Security techniques related to your reach stack
It's an important block. Don't neglect it, please.
Authentication
That's a wrong idea to develop a highly performant app in the early stages. You may ask, why? Emmm...At least because this time to market is a more priority thing at this step. But when your app becomes more mature, and it gives revenue, you need to care about performance.
Here is a minimal list of what you need to know.
- Web performance
- Web vitals
- Quality Attributes
- RAIL
- Tools (like Google Lighthouse)
- Performance Budget
You need to extend this list by adding framework-specific topics.
Frameworks
As a Lead Software Engineer, You should be able to choose the right tooling. E.g., what to choose: React, Angular or Vue? Or anything else? this is an important point of implementing an app as it may speed up or slow down the dev process.
There are some criteria you can use for making a decision:
- Community and popularity
- Learning curve
- Built-in features
- Scalability
- Performance
- and so forth...
You can use services like 'Technology Radar' and 'The State of JavaScript'.
Architecture
It's a huge block. And It's impossible to fit all the valuable information in several sentences. I will give you the most important points that will help you to start this fun journey.
- Quality Attributes
- Non functional Requirements
- MVC, MVP, MVVM
- Stateless back-end
- Serverless
- Microsevices
- Microfontends
Here should be a bunch of framework-related topics. So, extends this list, please.
This is a nice article about micro frontends by Martin Fowler.
Testing
It's impossible to deliver a quality product w/o quality assurance. Lead Engineer should take part in setting up a testing strategy. So, the following topics are worth looking at - even if you don't plan to dive deep into the QA field.
- Testing patterns (e.g., testing pyramid)
- Testing principles (e.g FIRST and AAA)
- Testing practices (e.g, TDD, BDD)
- Unit & integration testing
- System and acceptance testing
- Manual testing
Quality
This block is a continuation of the previous one. As a Lead Engineer, you need to enforce your team to develop quality code. You need to know techniques and tools for how to do it.
Let's dive into topics.
- Code quality vs Product Quality
- Static code analyses (Sonar, linters)
- Refactoring and Tech debt
- Code review
CI/CD
Let's start from the following basic topics:
- Continuous Improvement
- Continuous Integration
- Continuous Delivery
- Continuous Deployment
Then you can go and learn branching strategies. There are some of them:
- GitHub Flow
- Git Flow
- Feature Branch Workflow
- Release Flow
- One Flow
- Trunk Based Development After that, I'd suggest you learn release strategies
Soft Skills
This session is what makes the real difference between Senior and Lead Engineers.
There are a lot of Senior Engineers who are not interested in making more managerial tasks, They may be excellent coders. But only tech expertise can't make you a good tech leader. This is because you need to know how to:
- organize devs in groups
- discuss requested features with business
- provide devs with tasks
- consult dev during the dev process
- and so on...
SDLC
It stands for "Software Development Life Cycle". As a Lead Software Engineer, you will be taking part in setting up the development process. For this reason, you need to know what SDLC is.
There are topics you need to cover in this block:
- Waterfall
- Agile
- Scrum
- Kanban
- Lean
- DoR & DoD
Work Planning
Let's start from estimation techniques:
- Story Point
- T-Shirt Estimation
- Planning Pocker
- PERT
- Bottom-up & Top-bottom Estimation
Also, I'd like to suggest you explore "Risk Management". It is not required but would be a great item for your portfolio.
I also think that it is reasonable to add the following topics in this section:
- Tasks delegation
- Motivation
- Time management
- Onboarding
- Conflicts solving
- Employee's performance management