The main thing I realised by transitioning from coding as a freelance or employee to building software as a tech lead is that engineering is not a linear pathway.
There are several ways you can progress your developer journey and all of them will force you to develop other skills than just programming. However, there are degrees. When I first became a tech lead and more recently CTO, I realised that, for certain roles: Being a good team leader and a people's person is even more important than coding proficiency.
If your dream is becoming a Chief Technology Officer, or a tech entrepreneur, you are going to find that this does not mean becoming a Senior-Senior Developer. Although I do think you need to have some strong technical foundations, if you are to do well leading others in the field.
Ultimately, leading a team involves a whole different set of skills and mindset than the ones that make you a strong engineer. Being good at handling people and either working in a team or leading a team are extremely important.
Now, in terms of how important that might be, the difference lies in the path you take within this field. You have at least 3 different routes you can take. Each will suit different types of personalities. And what you end up doing, as you progress each of these, can be worlds apart from the others.
- "Corporate" lead
- "Entrepreneurial" lead
If you don't like managing people and spending an increasingly higher portion of your time setting out the product development vision, sending emails, and taking part in business meetings... Then becoming a technical leader, VP of Engineering, CTO or the likes is not for you.
Your only viable path is becoming a specialist. Either working as part of a team or as consultant. Data scientists, Cybersecurity experts, and senior Machine Learning or Cloud engineers are all options that pay even better than many CTO or VP positions. So, if you like researching and focusing on building technology, whilst the thought of becoming a "business person" scares you or bores you to death... Then I'd suggest you don't follow my path and instead consider focusing on one of the specialisms you enjoy the most.
Pros: You get to research, build, and a focus on engineering. Cons: You run the risk of pigeonholing yourself.
The "traditional" path to raising through the ranks. This is NOT what I personally did, but I know people who followed this path. It goes something like: Junior dev -> Mid level dev -> Senior dev / Tech lead -> VP / CTO.
The advantages of this route is that you get to take it easy, learn a lot from people more senior than you, and slowly climb the ladder.
You get a chance to reflect on how much coding time you are happy to trade off, since you can rely on more senior people all the way until becoming CTO.
I have met a few colleagues who take on a lead role first, and then realise they'd rather step aside and focus on building more than on managing others. If you "take it easy", trying it for a while and then changing your mind needs not to be traumatic.
It's the closest thing to a linear career pathway, but you will still need to challenge yourself and aim to step outside of your comfort zone if you are to progress along this course.
Pros: Safe, gradual, and rewarded with an increasingly higher salary. Cons: Can get corporate and it is slooow.
If waiting is not for you, you like taking risks, and earning a high salary is not a short-term priority... Then you can always raise up to the occasion of "biting more than you can chew".
What I mean is that you can take a leading role much earlier than what you normally would by growing within an established business.
You can do that by either founding your own startup or by joining a young startup team.
Either way, you will have to figure out and build a lot of stuff on your own that you've probably never done before —and with little to no guidance on how to do it.
You might have guessed by now that this is the road I took.
Startups team have little resources at the start. So salaries are either nonexistent or much lower than the industry average. They are also a risky gamble because they have this tendency of... Well, failing. Work-life balance and clear work schedule? Often sacrificed in the name of finishing that code deployment in time for a scheduled release. Maybe at 2am.
Yet, if you can stomach that, and if you can see yourself sending emails, setting out the development vision, coaching others and getting your hands dirty with loads of different aspects of engineering, from frontend to backend or from architecture to DevOps, then it can also be extremely rewarding.
Rewarding and frustrating. Because you won't be able not to take personally any failure or setback, and because you will need to deal with one of the most emotionally intense aspects of team management: hiring and letting people go.
This, out of the three options, is probably the one that will task you with the most non-coding demands. Because in the unstructured world of startups, being a tech lead can mean having to present at meetups to excite and hire new developers as much as picking the new Frontend framework. Being the first (or one of the very firsts) engineers in a company can get you quickly involved in the worlds of branding, team pitching to investors, and budgeting.
In short, you'll have to always rebalance how much you'll spend building vs how much you spend ensuring the company can continue to build anything.
Pros: Grow fast, learn at an insane pace, and build something you are a founding pillar to. Cons: Sleepless nights, unstructured environment, and the need to be as good as a people's manager and business person than as an engineer.
Irrespective of the route you take, remember that mastering how to deal with people always pays off, even if you choose never to lead a team.
No matter what career path you choose, in the end your people skills will come handy. Not only that, but the connections you make will help you progress. Both because you can learn from other and because they are by far the best way to open career opportunities. So, don't forget to network. Take part in Hackathons, exchange contacts, attend meetups. Networking is important. Nay, it's fundamental to your career as a developer.