11 pieces of advice to improve your career as an engineering manager
When we start a technology career, we may not consider paths in our career that go into management. Most of the Software Engineers I know that became Engineering Managers, were kind of pushed into that role. And suddenly, they were faced with challenges for which they needed skills that they didn’t necessarily have. And that’s where problems can start. It’s rare to find someone that planned that transition before it started.
I have been a programmer since an early age. I was 10 years old when I wrote my first program in BASIC, a command line adventure game. From then on I kept practicing with all the opportunities I could get. My high school years were spent on a professional computer science training program, and after that I completed my bachelor also in Computer Science.
On my first job, I remember my Manager showing me the possible career paths that I could follow inside the company, and I completely dismissed the paths that went into management. It didn’t even cross my mind to do anything else besides programming.
Fast forward 10 years, and I am given my first Tech Lead role. It happened because I was the only one in the new web department. I had developed an application that had huge success, and we needed more people to grow the product. So suddenly I had to interview new programmers, organise their work, manage their careers, help solve their problems, and report to managers about status. It is an understatement to say that I felt overwhelmed.
I guess I did a good enough job, at least the department didn’t implode. But it showed me how much I missed necessary skills to do the job. It also showed me that I actually enjoyed leading people and projects. I felt I was making a difference for my team and the company. And I realised that I was no longer happy with just programming, that this new difficult challenges were something that I was loving to face, because I could see the positive impact I was making.
At the next company I worked at, I started again as a software engineer, and then became the CTO of the company. It was a small company, and I reported to the COO, but still a bigger responsibility than I was prepared for. But this time I had something very important: A mentor! The COO mentored me, showing me how to deal with many of the challenges I faced, and that made a huge difference.
It has been around 10 years now, since I started having management roles, always very hands-on on system design and programming. And during that time, I started to identify the areas that I was lacking, and I studied and trained for them. This I believe has been fundamental to my success. This article is my way of helping you to have a smoother transition than I had 🙂
We all know that it is difficult to find good Software Engineers. It is even more challenging to find good Engineering Managers with good technical knowledge. This pushes many people to those roles just because they are more experienced than the others on the team.
This leads to poor management: Many fail, and leave management. Others become dictators. Others pretend they are not managers, and postpone difficult decisions. And the result is unhappy team members and projects that lag behind. The solution for that is preparing for the change.
When given the opportunity (or better yet before), you are the person responsible for this decision. There are other paths you can follow. You can decide not to manage and become an expert in your technical area. You can also decide on other paths: Software Architect, Cloud Architect, Sales Engineer, there are so many other paths that you can choose.
But if you decide to become a Manager, please learn to be a good manager.
You studied many years to become a Software Engineer, but how much time did you spend on preparing to become a Manager? For most people the answer is none.
I believe that everything can be learned. I do accept that some people have natural abilities that help them be exceptional on what they do, but even those can’t just wing it. You have to invest in learning the skills necessary, the same way you invest time in learning a new programming language, a new database, or a new System Design.
Some of the fundamental skills you will need are:
- Project Management
- Agile Methodologies
- Soft Skills
- Mentoring and Coaching
- Conflict Resolution
- Systems Architecture
- Public Speaking and Presentation
- Technical Writing
You don’t have to be an expert on those subjects, but with enough knowledge on all these areas you will be able to help you and your team to take the right decisions timely.
If you have some years of experience, you have been managed by bad and (hopefully) good managers. Look back on the past, and try to see what was great about some of them, and what was really bad. Observe how you feel with the different actions of your current manager, and try to identify the actions that caused those feelings, good or bad.
If you do that purposefully, you will for sure identify patterns to avoid, and patterns to copy. Sometimes very small things make a big difference. Copy and adapt the best ones.
Challenges are rarely new, and most likely someone has already faced what you are going through. Search for people inside your organisation, or even outside, that can help you with those difficult decisions. If it is your supervisor, even better, but do not limit yourself to that.
If you create a good connection with someone experienced, ask them to become your mentor. I believe you’ll be surprised how many of them will be open to that.
A good mentor will also be able to point you on what you need to learn and practice next, or point you to someone that can help you with a difficult problem.
You do not have to be a Manager, or even a Tech Lead, to become a leader. Leadership comes in many ways. Take all the opportunities that come:
- Find a problem that your team has that you can solve, and present a way to solve it to your manager. Volunteer to solve it.
- Volunteer to lead some stand up meetings.
- Find a skill necessary for the whole team, and prepare a presentation for it.
Good managers will be happy to give you the opportunity to lead where you are. And eventually they will give you the opportunity to lead your own team!
Own it when you fail, and try to understand why it happened and what could have created a different outcome. We all fail, but it is important to learn from our failures, so that we can continue to improve. Ask help from the people around you to identify alternatives that could have gone better.
If it’s still possible to fix or mitigate the mistake, do it. If not, learn from it so you can avoid it in the future. Learn to say “I’m sorry” and move on. Don’t dwell on it.
A Software Engineer can sometimes focus on the code itself and not know the business in detail, even if that’s not ideal. But the Engineering Manager does not have that luxury. You have to understand your product and your business very well to make the right decisions and to explain the users needs to your team.
It is also very important to understand the impact that the area you manage has on your company. If you go to higher managers and show them something needed for your team or product, you have to be prepared to present why this impacts positively the success of the company. You have to be able to sell it. Does it reduce costs? Does it improve productivity? Does it open new opportunities of revenues? Does it help us reach more customers? If you do not speak the language of the higher management, they will not support your suggestions.
You bring the biggest value to your team and company when you are there to help them solve problems, guide them on decisions, and unblock them. Some people need or want more supervision then others, but everyone needs a manager that is present and available for them.
Transparency, trust and kindness, are values that I believe go a long way in improving how fluid the communication flows between the team. Trust on each member of the team, and deal personally and with kindness when a team member is not acting correctly or not delivering what is expected. From my experience, it is extremely rare to find a person that does not perform at her best when she is working in a safe environment.
Trusting your team also means that you need as few controls and bureaucracy as possible. Sometimes we create processes that are unnecessarily complex and a burden to our team, which leads to unhappiness and frustration for everyone.
Observe the processes, and find the places where time is being wasted. Improve it by simplifying it. The result will be a happy team that is more productive.
I believe that it’s better to hire people with the right attitude, even if they do not have all the skills that are needed. Focus on must-haves, not on nice to haves. Skills can be learned, but you have to actively create a training program that helps each individual to grow.
It’s important to be attentive to both the objectives of the company and of each team member, and find opportunities to match them. If you invest in people, they will help the team and the company to achieve their objectives. If you don’t invest in people, they will leave sooner.
There is a lot more that could be said about becoming an Engineering Manager, but I aim to describe the points that I believe have made the biggest difference for me. I hope this helps you to start or improve your career as an Engineering Manager.
Please add any other points that are important for you in the comments, we are all still learning. I am looking forward to reading them.