About one year ago, out of a sudden, I was given an opportunity for a Tech Lead position in a scrum team, and everything changed…
Let’s start by looking back to one year ago. Here I am, a happy Senior Java Developer, who is interested in microservices, likes JS, have experience with things like GIS, Android, BPMN, REST Services and basically likes to design software and write some nice, clean code. Here, please take notice, “likes to write code”. At that moment, I was mostly focused on creating good code and sometimes I provided some feedback on architecture, proposed different solutions etc. So just a standard experienced developer.
Then there was a meeting with my boss about a new project, normal talk, and boom, I am a Tech Lead now… panic ensues. I had no idea what to expect.
When you think about being a Tech Lead, I bet that you imagine something like “I will design the software, I will tell everyone how to implement it, I will decide everything and write amazing code”. The truth is, that yes, you will design some small part of the software, you will implement an even smaller part of this software, probably every member of your team will implement a few times more than you, and no, you will not decide everything. But you still can write an amazing code! But only a few lines ;)You have other things to do and take care of now.
As a Tech Lead, you are responsible for what you and your team create! Yes, I know, the team is responsible as a whole, but you as a Tech Lead should be ready to take the blame for wrong decisions. You are also responsible for making sure that your team understands what has to be done, in business and technical terms. You have to find and propose the best solution for the tasks at hand if the team doesn’t know how to solve a problem.
You have to make sure your team can work, that they have a working development environment, that they know the technology stack used in the project, they know how to proceed in different scenarios. You have to teach them, be a mentor, support them and be very patient. That’s the hardest part. Sometimes you have to give a junior developer a task, that you know that you would finish in a day easily, and you know that it will take him 4 days to finish it, he will have a lot of questions, really simple and basic questions, and the code won’t be nice. But you have to learn to delegate, to let go. Let them make errors, let them trip so that they can learn and be better developers in the future. Because you can’t do everything yourself.
On top of that, as a Tech Lead, you have to attend many meetings with other teams and higher-ups. Meetings that often are a waste of time from your point of view. Meetings that only result in follow-up meetings. On average, I’m probably 20-25% of my time on some kind of a meeting.
As you see, this is a lot of responsibility that got thrown onto one person, especially someone new to stuff like that.
If you are nominated as a Tech Lead, you probably have good tech skills already. But one thing is to know how to code, another thing is to know how to quickly learn new things. I had to learn the architecture of the application, it’s surroundings, get to know used libraries and frameworks, learn CI/CD process, find out what this and that requirement means in the context of the application etc. You have to learn this because your team needs to have a person that they can ask for help. You are their lead in all the technical aspects, so you should be able to answer their questions, correct their errors and explain why it should be done in one way and not another, and no, answer like “because I said so” is not a good answer.
Your strong tech skills are also needed for the whole organization. Your feedback is often needed on all those meetings, you have to be able to look at the wider context, to analyze how one application influences another, how solution A impacts solution B and C. And you have to keep learning all the time, somehow.
Now, this is something new for all you die-hard developers. But well, you have to develop a lot of soft skills, because they are really important for this position.
First, you need soft skill for taking care of your team, for difficult talks with team members, for discussions about choosing a solution. You have to talk in a way that won’t be negative for them. You have to learn to listen and understand each of your team members. You have to get to know them, get to know things that they are good with, things that are difficult for them and help them resolve those problems.
Second, you need soft skill for communication with people outside of your team. You have to learn how to talk and negotiate with business, with architects, managers. You have to learn how to understand the motives of other people, why they want something to be done one way or another. It is also good to be on good terms with most of them, to know how and when to push, and when to let go. This is probably the hardest thing in all of this. But if you manage to find this golden spot, you will be able to achieve much more, they will be more willing to help you, even if they don’t have time reserved for your case.
I know, that most developers lack soft skills, it is something that is not really needed when you work as a junior/regular/senior developer. But I think that you should develop those skill if you want to progress your career further.
Here are a few books that helped me a lot.
About responsibility and leadership:
Extreme Ownership: How U.S. Navy SEALs Lead and Win by Jocko Willink
About soft skills:
How to win friends and influence people by Dale Carnegie
Getting Past No: Negotiating in Difficult Situations by William Ury
Being a Tech Lead is a lot of fun, it is a great feeling when you see how your team develops, gets better, when your product owner is happy 😉 I’m still learning, every day, it gives me a lot of challenges and is very fulfilling. Of course, a lot depends on the organization in which you work and your team. And I was extremely lucky in this aspect, as my team is awesome!
Also published on Medium.