Over the last year, Pusher’s engineering organisation transformed from a team supporting one product, to a group of autonomous teams developing several new services. We also launched a bunch of platform teams to lay foundations for them.
After putting the general structure in place, we focused on the anatomy of individual teams. To function well, teams needed lead developers, called “tech leads” inside the company. The name wasn’t enough to explain the role, nor was observing existing leads. We needed to clarify what it means to be a tech lead.
Our culture at Pusher favours autonomy — people here greet bureaucracy and heavy processes with (justified) resistance. To explain the tech lead role, we needed a small set of guidelines compatible with the way the company operates.
We came up with three principles of the technical team leadership at Pusher:
But before we dig deeper, it’s important to highlight challenges associated with the role.
Becoming a tech lead, in particular for individual contributors, brings a set of new responsibilities and problems. We can categorise them into two broad areas: leadership and management.
Leadership means setting the direction for the team. It’s about making sure everyone understands and follows major technical decisions. Tech leads find answers to questions with high impact on the team’s productivity and morale. Are our services reliable enough? How can we improve performance? Which database is the best choice at this stage of the product development? Can we afford more technical debt? Those are just a few questions tech leads often get to answer.
Managers facilitate execution of tasks oriented towards the team’s goal. Tech leads play a small management role too. They help teams structure work, often provided by product managers, and solve coordination issues faced by their teammates.
The principles described below help our tech leads develop tools and processes for solving leadership and management issues.
Company values provide basic operating principles for teams and employees. Although their goal is to align everyone in one direction, they leave plenty of freedom for adaptation into specific environments. For example, one of Pusher’s values is “dream big, start small”, which encourages chasing big problems but starting with minimal solutions.
The first responsibility of a tech lead is to guide their team with company values. Most of the time, team members follow the values without any intervention. However, some types of problems make developers blind to basic principles. Here’s an example: designing distributed systems. Every software engineer wants to build super reliable, fully consistent, infinitely scalable services. That’s fantastic — we should reward ambition — but what if the product is solving the wrong problem? Isn’t it better to ask users for feedback before picking the battle against the CAP theorem?
Company values are here for tech leads to answer such questions. As mentioned earlier, they are open to different interpretations. They can include tensions, as our CEO, Max, wrote in a recent Medium post. We rely on tech leads to adjust the values to their context and resolve conflicts in a way that benefits the team.
At Pusher, every engineering team has customers. Product teams solve problems for software developers from outside the company. Platform teams are more tricky as they don’t have external customers. However, they provide infrastructure and services for product teams, so they should do their best to treat them well.
The second essential part of a tech lead’s job is to ensure their team delivers value to customers. In product teams, product managers play a big role in this, so tech leads need to partner with them. In platform teams, leads take more responsibilities in that area.
To be more specific, tech leads need to:
Neglecting any of those will sooner or later cause serious problems. When teams misunderstand or ignore customers’ needs, they build unsuccessful products. When planning or execution suffers, nothing gets delivered. Tech leads should focus their teams on solving the right problems at the right pace.
The team is crushing it — the roadmap is clear, features are taking shape. The product manager is happy with the progress. Engineers are excited about their tasks. For now.
Maintaining that rhythm is the third pillar of the tech lead’s job. Entropy is real, the team can’t go on forever on its own. Keeping the team’s momentum requires experience, creativity and communication skills from tech leads.
To start, tech leads must understand what makes their team members tick. Each person has different interests, and tasks that meet their preferences will keep them motivated. This applies to both technological choices and product itself. When the team is passionate about a particular problem, they are more likely to succeed. And success brings engineering challenges.
Because technology follows the product, the team’s momentum changes during the project’s evolution. There are ups, e.g. during prototyping, and downs, often around the release process. Sustaining the pace is tough for team members. It’s even harder for tech leads, as it’s often best for everyone if they tackle the frustrating work themselves.
As mentioned in the introduction, we wanted the principles described above to be abstract. Freedom gives teams room to adjust to their environment and changing circumstances. It lets tech leads experiment, learn and have an impact across the company.
Developing these guidelines helped me understand my role and improve my leadership skills when we launched the first platform team at Pusher. They drove me towards better decisions when everything was in flux. I hope other tech leads will find them useful too.