Recently I've had the opportunity to speak with a number of tech leads struggling on the projects they are leading. Most of the tech leads I speak with are leading the development of projects where they don't own the vision. In some cases this is because they do client work. In other cases it's because they are part of an enterprise organization where a product manager or product owner has the vision. In all cases there are some organization struggles.
Over the last decade I've had the opportunity to work as a lead engineer on numerous projects ranging from a component of a vehicle, to simple web software solutions, to complicated software in an enterprise setting. Through these experiences and some good mentors I've learned some valuable lessons in tech leadership that others may find useful.
One of the first lessons I've learned is to try and optimize business value. This is important because all too often the vision in the time and resources the product owner wants it just won't work. A good lead will use the people and resources at hand to help the product owner optimize the implementation plans based on the reality of situation.
Work With Product Owners
If you think of yourself and your team as subservient to product owners it's going to be a hard road. The engineers are not the minions. Instead think of yourself as a team member. If the gig is a consulting or contracting gig think of it as expert consulting where your technical guidance matters.
I found this to be easier in enterprise organizations where product owners are matrix'd into engineering organizations. When the resource managers overseeing you are different from the product owners the separation adds stability.
Have Expectations of Others
Engineers are regularly expected to get things done. But, they shouldn't be the only ones. If project managers have a timetable they should have a well planned and articulated one based on the requirements, constraints, and everything else. They should also have a sane schedule to revisit the plan and bring it up to speed with how reality has changed since the last update. If they are following something simpler like scrum they should really be following it.
The tech lead should hold the other people the engineering team interfaces with to the same level of expectation they are being held to in trying to execute. The lead not only needs to lead the team but stand up for them and their needs. Building something is a team effort and the team can go well beyond engineering.
Know When To Say No
When someone asks you for something default to saying no. Everything needs a good justification to avoid scope creep. The more that is developed is the more that is maintained. The more maintaining that happens the more new work you are not capable of.
When you say no do so in an intelligent manner. Don't just say no but make the direction obvious. Ask questions and inform so product owners can see the full weight of the initial development along with all the cradle to grave resources needed around the effort. Help everyone else see what you see.
On occasion, when it makes sense, say yes and make sure everyone knows the consequences of doing so.
Team Mentoring and Learning
Make mentoring part of the culture and team dynamic. Technology is a place of constant change. Developers new to a technology space or who don't have a lot of experience with technology have a lot to learn. This goes beyond learning a language, some methodologies around web design, or how to use REST. There are elements like maintainability, documentation, and many other areas that should be cultivated over time.
Align developers in a manner that brings about mentoring, be a mentor, and expect people to continue to learn while establishing methods to make that easy.
Set Team Tone
Happy teams are productive teams that want to execute on the vision. Sometimes this just happens because the people love working together or the project is great. Other times it's not so easy.
Being the lead means rallying the team to execute. Sometimes this means setting the tone and spending time with members of the team in a manner that reinforces it.