Becoming a Tech Lead
blog.fogcreek.com
blog.fogcreek.com
But in my experience, groups of technical folk self-organize. No matter what the formal hierarchy is according to management/HR, an informal meritocracy will form, and natural leaders will emerge... normally being those who are not only good at tech, but also at seeing the bigger picture, including business knowledge and soft skill. These people won't be spending 30% of their time coding, they will be spending 80% of it coding... and 20% helping everyone else out, and talking to leadership about strategy. People who spend 70% of their job organizing the coders are not tech leads, they are project managers (or just managers).
Maybe I am just arguing semantics, and "Tech Lead" means something else to the rest of you... it appears from the few comments here already that every organization labels themselves differently.
do you really want a project manager -- who hasn't contributed anything to the code base -- to evaluate skills, make recommendations, organize, and mediate for a team of a 8 or 10 software developers? probably not.
as a "tech lead" in a very, very large organization, i would say finding 30% of your time to code is very hard to do. especially given you are the one sitting in the meetings explaining progress, deflecting new arbitrary "but can't you just..." tasks, and speaking with authority on cross-team dependencies all day.
The Tech Lead role, in my experience, is a confirmation of execution and aptitude (in the eyes of management), but certainly not a certification of technical competence. Many teams had Tech Leads who were not as capable or as key of technical contributors as others on their team.
Across orgs, my experience is that Tech Lead is always a social spotlight and is only mildly correlated with technical competence. Tech Lead is much closer to junior manager than senior engineer.
Oftentimes companies think they need a "Tech Lead", when what they actually need is a really good Technical Writer who understands code. A lot of time (80 percent) spent "coding" isn't necessarily great / productive / effective if it's just creating more piles of code. But coding good documentation, or refactoring documentation around even mediocre code? That's the quickest route to making the sum of the developers' lives easier.
It also reduces the amount of time I have to spend answering questions--link to the wiki and move on.
Now, actually getting others to buy-in to this is a different story: they don't usually see the point in working to sow the same sort of benefits they reap on a daily basis.
I think a good lead needs to constantly strive to spread knowledge about the work as widely as possible.
I do agree that documentation is important, but just felt you really downplayed how large a role an architect/tech lead that actually writes a lot of code can play.
The book suggests that people in organizations self-assemble into tribes, ignoring the org chart, exactly as you note.
Tribes are one of the oldest organizational structures, the author suggests. He goes on to give advice about how to use this to improve organizations without getting crucified in the process.
I found the book interesting and worth my time.
We self organized on previous projects, and one day I came back from a holiday to find that on the most recent project I and a colleague had been promoted to tech lead for that project. It was more an official recognition of what was already de facto.
I have to say though that having official recognition that you're in this role by management also helps a lot. You need buy in so everyone in the org recognizes you as someone with "technical authority".
I've worked under 30% leaders before and didn't care for the experience as a subordinate. I always felt like POs and PMs broadsided the team, good people weren't recognized or rewarded, shitty people got to hang on, etc. The experience wasn't awful, but it wasn't that great. It would have been much happier had our boss spent two fewer hours each day coding and 2 more hours managing each day.
Also some 30% tech leads tend spend that 30% needlessly micromanaging developers on their team by doing stupid shit like constantly having them move classes or modules around the codebase for no rhyme or reason towards better "organization" rather than just telling the team "I think the way x y z exist is messy. When you have downtime, or are sick of working on whatever and need a break, can you folks think of a better way to re-org and refactor them?"
I think this is the different between a "Tech Lead" and a "Team Lead".
In my experience, groups of folks self-disorganize.
A "Tech Lead" is in part a manager, yes. Project management aspects are part of it, product management aspects are part of it. From my experience, the difference is chiefly in making decisions that define strategy, and making decisions that implement strategy.
For the most part, a single person can't do both well, and, extrapolating from your numbers above, spending 10% or less of your time thinking about and working on strategy means strategy simply isn't being considered by the tech team.
I'd draw the line like this: a tech lead must appreciate the trees while focusing on the forest, while a senior developer, or someone of the sort, must appreciate the forest while focusing on the trees.
I've copied the section below from our wiki, to show what we consider to be part of this role. I'm interested to hear what anyone thinks of it.
# What is expected of a lead developer?
* Technically in charge of the developer capacity within the project team
* Works in close cooperation with the PM and is crucial in technical meetings with client.
* Explains technical choices
* Recognizes when client wishes (tend to) go out of scope
* Facilitates efficient software development within the team* Involves other parties when needed (i.e. ask designers for input when needed, etc.)
* Also develops prominent parts
* Understands the technical architecture
* Assesses (judges) any design-input for being complete and realistic (a check-list exists for this)
* Oversees software quality: has decent knowledge of all used technologies
* Knows best practices (i.e. w.r.t. security, documentation, testing, SEO)
* Verifies and then moves post-its from "verify" to "done" (except his own)
* Escalates to PM/AM whenever he/she foresees planning goals may not be met
* Can estimate the time it takes for his/her team to complete common tasks
* Possibly: technically architect the software at stake (for technically challenging projects we have an architect role)
* Possibly: supply time estimations for the project planning
* Chooses the tools and technologies used for the project (within the lines the architect has set)
* Allocate tasks over the team members, detailing the planning
* Takes the lead in translating requirements to tasks (Post-Its)
* Can deploy the project
* Knows the processes of our company
* Identify process improvements and speak them through with PMs/ AMs/ head of technology
* Applies the final checklist (and improves upon the list when possible)The last 2 jobs have been "We're flat here. No team leaders, senior or junior devs." but there are clearly people that take on more responsibility and are more experienced than others.
I'm the only technical person on the project, so the only person I'm leading is myself!
If you really want to go for leadership in your career look up some courses and books on the subject and talk to a mentor or even HR about developing a career plan.
Good luck!
I have found striving to impress and influence has caused me to become a much better developer and communicator. I've also seen a lot of developers come, say a few smart things to the boss, and sit back expecting to be given a team to boss around. They often don't currently possess the skills or communication abilities to convince any technical people, and rather than work on those, they go elsewhere to find a team where they can be unjustly rewarded.
Really, just try collecting a group of people and discussing who they think is a great developer and why.
By the way, I have been that person who was promoted from a team of peers.
I'm not sure what I would do if everyone on the team was passive and expecting orders, I think that wouldn't be a very good match for our styles.
Personally I am skeptical of self-organizing teams because I have had strictly negative experiences with them as a developer.
It seems that having a self-organizing team of evenly qualified and experienced professionals is probably almost guaranteed to work, but 'working' does not mean 'optimal'.
I am almost certain that when self-organization works, command and control would still work better if you put the right person in charge.
Still, I do not think that command and control is the absolute optimal form of organization. It seems to me that true self-organization requires a number of very special ingredients that maybe the humankind is yet to discover.
Just simply declaring self-organization will lead to more or less disorganization. A disorganized team will not necessarily fail though. It depends on a number of conditions, such as the complexity of the project, the qualifications of the team, time/budget pressure, etc. If the team's proficiency greatly exceeds the project's complexity, then probably any form of organization will do.
A reasonable disorganization is probably what is actually being exploited under the buzzword of so called 'self-organization'.
It's hard to say but the one most important thing for a tech lead is "never compromise on standards"
It's the point of leadership to take people places they would not have got to without the leader. And most of us are human, and the place we get to is the path of least resistance - less tests, less refactoring, less user feedback and suddenly it's a mess.
Tech leads are the entropy fighters. Telling us to clean up our act and leading the way by example.
edit: Direct URL -> http://embed.wistia.com/deliveries/a5152426e67b75a366891a6f7...
As for the soft skills that were strongly emphasised in the interview I fully agree that it is a necessary trait of anyone who wishes to lead in whatever form or context but techies are no different than accountants or any other inherently individualistic professional in that regard.
Accenture on the other hand, they make it hard to get into the consulting arm, but the tech arm (Accenture Solutions) is easy to get into (although you'd be surprised at how maby people tank in the interviews) and even easier to coast through, producing crappy software and bleeding their clients dry.
Trying to convey the perception of "thought leader" (which is really a horrible term), and how they are perceived by the software development community are two vastly different things.
ThoughtWorks are thought leaders in agile whether you want to believe that or not.
I don't think I could even say something like that, with a straight face, to myself in the mirror. When you were a kid, is this who you wanted to be?
I had a tendency to come into tense or emotionally charged situations with a pretty simple process. First I would decide if I really cared. If I didn't, I would just keep quiet. If I did really care I'd fight to win. Crucial Conversations has helped me to see how many more ways there are to speak up more often and more effectively.
I read it for work but I was so impacted by it in my personal life that my wife and daughter ended up reading it and it has had a huge impact in my home as well as my workplace.
I know this sounds like an infomercial - but I'm in no way associated with anyone related to the writing or selling of the book. I just really appreciate it as a resource.
the "tech lead" codes and leads. this idea that it should be a strictly managerial position is pretty gross, and seems like it's an ego thing.
Every project in the group has a tech lead, who may be one of those 4 manager or it might be someone else that's relatively senior. That tech lead is in charge of the folks under them for the purposes of that project.
Any given developer might be working on a single project or sharing time between a few, so they'll have their manager and 1 or more tech leads.
This makes it very stressful to squeeze more work from one's team.
Great Tech Leads need to have 2 characteristics: openness of mind, and empathy. Here are 4 TED videos that any Tech Lead would benefit from watching: