6 Leadership Tips I Learned During 1 Year

João Neves
10 min readMay 16, 2020

--

Photo by Mathias Jensen on Unsplash

A year ago, I took the opportunity of leading a Software Engineering team. It was the biggest challenge of my career so far, as I was no longer an individual contributor for the first time. I was now leading other human beings which relied on me to help them on their journeys and to guide them as a team. It was a big responsibility, and I did not want to let them down. If you are in the same situation, keep reading, I want to help you.

As always, in discomfort lies evolution, and I learned a lot during this year. It completely changed my perspective of teamwork, software development, and my personal goals. One of the things I discovered is that I enjoy to mentor and help other people with their development journeys. That is why I decided to share my experience and learnings.

1. Do not give all the answers. Ask the right questions.

Great leaders get the big picture, are visionaries, and know the questions to ask at the right time to achieve that vision. To do that, you need to trust your team and let them find the answers, while you focus on planning and preparing the next step (or steps), removing all possible blockages from their way.

Always remember that you are the leader, not the expert.

Naturally, sometimes you do have the answers, but you should not just give it in a silver platter to your team. If you are coming from an individual contributor role, this is highly counter-intuitive. “But if I know the answer I should just tell them, it is faster!” — says your mind.

Remember when I said that in discomfort lies evolution? If you provide all the answers, what happens is that they will get comfortable in having you to get them. That limits their growth.

It may be faster in the short-term, but it will tremendously fail in the long-term.

Why? Because you are not letting your team improve, which is your job as a team leader. If you have the answer, accurately guide your team to find it by providing tips, and asking the right questions, but let them grow and find the answer on their own. If they fail, congratulate them for trying, remember them what they have to learn from it, and guide them towards the solution once again.

Freedom to innovate, experiment and seek answers, is one of the best gifts you can give a team. They will reward you with positive surprises that will make you proud and fulfilled, while you see your mates improve.

Photo by Ashton Bingham on Unsplash

2. You are also learning, and failing is ok.

I am highly competitive. Some might say I am obsessed with winning sometimes. However, I enjoy losing, and I like to fail. A common mistake of new leaders is to think they need to succeed every time. This is wrong. Everyone is always learning, and everyone fails.

You should aim for success, but you should not be afraid to fail. Do not take the fear of failure as a variable in your decisions.

Without failure, you do not learn. Without learning, you do not improve. You should give this essential message to your team. Failing is just a normal step to achieve success. No one wins at anything, without losing sometimes. Failure is the moment that allows you to learn from it and never fail the same way again.

Fast short-term defeat leads to a fast long-term victory.

Do not hide your failures from your team. Some reasons why:

  1. They will know anyway.
  2. By hiding it, you will make them feel that failure is not ok and that they should not take risks.

Showing vulnerability brings you closer to your mates. You are part of the team, you just have a different set of tasks now, but you are also their teammate, and you fail too. Support them always, and they will have your back when you need. Improve together, and be there for each other through the good and the bad moments of your long-term victory.

Do not play safe to avoid failure. Take risks!

Without taking risks, you will miss unforeseen opportunities. You will eventually fail anyway, and meanwhile, your team did not improve as much as it could, as you missed vital opportunities. High risk usually leads to high reward.

Of course, risk management is essential, and you should always have contingency plans. Also, not all the risks are worth it. Your team trusts you to evaluate this well and choose wisely the next step, but never take the fear of failure as a variable in your decision.

Photo by Brusk Dede on Unsplash

3. Be inspirational. Do not panic.

When adversity comes, do not panic. Be the calm in the storm. Show your team you know the next step (even when you don’t, yet). Control your emotions, and show your team everything will be ok. Inspire them in that way, and they will be a mirror of you, following you out of the storm.

When all the hell breaks loose, you need to be the cold-hearted assassin analysing all the details.

If you panic, the “chaos mode” will turn on, and everyone will be running around without really knowing what to do, and without a clear direction, because you lost yours. Remain calm and rational, analyse with your team all the possible solutions to mitigate the issue, and decide the next step.

When you have the issue under control, relax and do a retrospective with your team, understand what went wrong, and learn from it, improving once again.

Also remember, everyone is unique, and your teammates will deal with the problem in different ways. Be empathetic and know your team and their different profiles, and how each of them can best help the team in that situation.

At this point, you might be thinking: “Yeah, that is easy to say”. Indeed, this one was the hardest for me to learn. I am very passionate about my work, and I put all my emotions into it, which then becomes hard to control. If you are like me, I suggest reading about emotional intelligence; there are a lot of techniques that can help you. I might write about it in the future, so stay tuned.

Photo by sydney Rae on Unsplash

4. Stop writing code in the team critical path

This one is specific to Software Engineering teams, but I believe you can apply the same concept to any kind of team. If you are the team leader, you have a different set of tasks, and you should not perform the same functions as your mates. Three reasons why:

  1. If you are coding with them, no one is doing your job of thinking ahead. You need to plan the future, to manage blockages, to create personal development plans, to conduct mentoring meetings, and a lot more. You need your space away to think ahead, and you can’t be so close to the execution.
  2. To code, you need to be focused and work on your tech problem for some time straight without someone breaking your train of thought. As a leader or a manager, you will have lots of meetings, lots of interruptions, and your time will be all split in blocks. It will be hard for you to have that time focused on coding, so you will take longer due to context switching. Also, you take the risk of delaying the task because of it, or someone having to pick the task after you, which might cause a lot of different problems.
  3. Some members of your team might not feel comfortable with it. They would have to review and test your code, or to pick your unfinished tasks. They do not feel comfortable, because they would be “correcting the boss”. First of all, mentor them not to have this mindset, or it will limit your personal development. They should always feel comfortable providing you with any kind of feedback. However, some people have issues with this, so consider that.

With all this in mind, the management life can be stressful sometimes. There will be times when you just wish to go back to your “individual contributor state of mind” and be in “the zone” for a few hours not talking to people. Just you and your machine. You know how it is. That is perfectly normal. It is natural that when you feel pressured, you feel the need to go back to a place of comfort.

I have good news; you can. Furthermore, you should keep up to date with tech and code if you want as long as you do it outside of your team critical path! In that way, you can leave your tasks unfinished without impacting anyone or any delivery, and your mates will not feel uncomfortable. Just remember, that it is no longer your job, and you have other priorities now, don’t ever put tech tasks on the top of your other tasks. If you feel that this leads you to unhappiness, reconsider your decision of choosing a management career, that is perfectly fine!

The cheat sheet below provides some examples of tech tasks, and it might help you identify and understand when you should do it, or not. Hope it helps.

5. Cross the bridge between Business Value and Engineering Details

In Software Engineering (and probably any Engineering discipline), there is a hard balance between business value and engineering perfection. First of all, perfection does not exist. Usually, when engineers discuss “the perfect way” they are trying to predict the future.

“We need to do it this way, because in the future…”

Most of the times, that is just a guess, and not worth the extra effort. Always remember that…

Done is better than perfect.

When all has been said and done, the team needs to deliver value one way or the other. The client wants things working, now, and in the future, but he does not care how you did it.

I don’t mean you should not care about quality, and just do it as fast as you can. Quality is essential because it is the way you ensure that things work as expected. It also ensures that you can further develop new features — when needed. I am also not suggesting that you create a “Technical Debt”, no! Develop great solutions, with top-level engineering, with high standards and high quality, but always with the customer on your mind, and not your desires as a technology lover.

We are talking about an important balance you need to “juggle”. As an engineer in an individual contributor role, we tend to focus on the technical details, and we dive deep on them until we reach the perfect architecture, the perfect solution. Sometimes, we get lost in those thoughts, and we don’t realise that we are over-engineering. We start thinking about that nice new framework we read about (hello javascript), or that new design pattern or architectural style that everyone talks about (aham, Microservices). However, maybe that new framework you will have to learn is not required to achieve the functional and non-functional requirements of your clients.

You should focus on the most simple solution that achieves all the requirements of the client, with quality, now and for the expected future, as fast as possible.

As a leader, you are usually the team member that is closest with Business Analysts, Product Owners, Marketing teams, Executives; you name it. It makes it your responsibility to take your engineers out of their hype state of mind and be practical.

Focus on business value, and on the solution you need, not the solution you want.

This one might be hard to “click” on your Engineer technical mind; it was for me also. However, trust me, it might be the most crucial one to be a great engineering leader. Find that balance, delight your customers!

Photo by Loic Leray on Unsplash

6. Have mentors

Do not forget to keep working on your personal development. When you become a leader, you usually become a mentor to your team, but do not let your mentors go anywhere. You still need them. Do not forget that. Personal development is a continuous journey with no end, and you will need them around to help you on this new challenge.

Keep the old ones, but also get new mentors! From different backgrounds and different roles. Speak with other leaders, even if you don’t know them yet or if they are three hierarchical levels above you. You will be surprised by their will to help you and amazed with all the knowledge shared.

Everyone needs someone to debate ideas with and to stimulate creativity.

Most of the tips I wrote here, and a lot more, were given to me by unbelievable leaders that I will take with me for the rest of my life! I even directly spoke with a high-level Director because he mentioned something in a speech that interested me. I ended up taking a coffee with him and learning about his journey. The amount of knowledge shared on those 30 minutes will be with me forever. Do not be afraid to ask for help and to find teachers and mentors; it is worth it.

Without mentors, your development will not be as fast, and you will feel lost sometimes. It does not have to be your direct manager; it can be anyone: a colleague, a friend, a family member. Surround yourself with people that inspire you, and make you feel a better human being. Surround yourself with positivity and productive thoughts, and I am sure you will achieve all the goals you have for yourself.

Photo by NeONBRAND on Unsplash

There are more tips and a lot more to learn, but I think these were the most important ones for me. You will also need to practice your time management skills, and you will learn how to conduct meetings, speak to an audience, motivate a team, and even read people without them needing to speak. You will learn a lot about the human being, and it will be fun! Enjoy it! I am always ready to help you, so message me, and I will try!

--

--

João Neves

SDE @ Amazon, lover of challenges and good debates. All of this can change tomorrow, just like my mind. Opinions are my own. https://joaodiasneves.wordpress.com