Successful product delivery requires us to navigate overlapping, competing concerns across a broad spectrum of execution dimensions, all tied together via our tech lead role. This role is complex and multifaceted, requiring the people who hold it to balance a variety of needs and interests.
An Important Part of Our Project Team Structure
Atomic’s teams are poly-skilled, meaning that team members are expected to do more than meet a simple job description. Our teams are led by a triad of consultants:
- The delivery lead is responsible for becoming an expert in our customer’s business ecosystem and concerns and managing the project to fit their timeline, budget and any other key stakeholder concerns.
- The design lead manages desirability/user concerns, leading user research and UX design efforts.
- The tech lead is primarily concerned with feasibility and technical constraints, ensuring that the system architecture and technology stack will support the intended product and enable the team to meet overall project goals.
In this post, I’m going to review the unique complexities and challenges of the tech lead.
The Challenges of a Tech Lead
This role is complex because there are so many ways a software project can go awry in technical delivery. As Tolstoy wrote, “All happy families are alike; each unhappy family is unhappy in its own way.” The same is true for technical delivery of software projects: Each project that falls short of perfection does so in its own unique way.
Unfortunately, software projects have so many competing concerns that no project is truly perfect. The best we can achieve is a close-to-ideal set of tradeoffs; even then, there is always some pain. There are always “what-if” questions and “hindsight-is-20-20” observations in any software project.
Here is a small sampling of the challenges we face:
- Slow or missing development feedback loops (e.g., from automated tests) reducing productivity
- Complex manual build or deployment processes leading to operational problems which consume precious time
- Team members who ramp into new tech/domain slowly due to a suboptimal learning environment
- Implementation of the wrong model, leading to a system that resists late-stage changes to the project
- Late or misidentified project risks that manifest in negative project outcomes
- Familiar, larger-scale problems, like missing budget or timeline constraints
The Responsibilities of a Tech Lead
Because each project has its own unique risks, there’s no list of specific tactics that will guarantee success. Instead, I think it’s useful to focus on the tech lead’s responsibilities, which fall into the following categories:
1. Be a leader
As part of the project’s leadership team, the tech lead works with the design and delivery leads to balance leadership responsibilities appropriately. For example, if a delivery lead is being overwhelmed by stakeholder requests, the tech lead might step in to help cover some of the delivery lead’s other tasks. Do whatever it takes to help the team find success.
2. Identify technical risk
The tech lead is primarily responsible for identifying technical project risks. These may come from technical unknowns, model drift as more is learned about project needs, technical debt accrued to meet short-term goals, or observed team frictions or workflow issues. All risks must be captured, accounted for with the delivery lead, and monitored until they warrant action. When action is needed, it should be prioritized alongside other user-facing project work.
3. Steward the feasibility of human-centered design
As part of our human-centered design process, the tech lead ensures that feasibility/technical concerns are integrated into the overall product design. Tech leads should be involved in the holistic design, but they are also directly responsible for helping refine the design. They look for ways to build technical leverage and identify easy implementation wins to meet user and customer needs while minimizing development effort.
4. Formalize the model
As experienced developers trained in domain and data modeling, tech leads should guide the team in formalizing and generalizing the model evolved from the domain, project goals, and UX design. The development lead (with help from the design and delivery leads) will clarify the model and develop the ubiquitous language for the project. The tech lead can also ensure that the model is applied uniformly to the UX and identify when the model needs to evolve to accommodate new features and edge cases.
5. Refine the backlog
When a backlog is built out early in a project, it’s often oriented around epic stories or rough units of user-visible functionality. Once remaining questions are answered and a story is sprintable, tech leads look across upcoming work for commonalities with near-term work. They can then document a hypothetical implementation plan and/or various cross-cutting or future concerns that may impact the feature implementation.
6. Evolve the architecture
The architecture of a system evolves each sprint as we deliver more working software. Tech leads are responsible for ensuring that the overall system evolves in a coherent way over time. This often manifests as bringing larger-scale technical concerns to individual feature tasks. To be considered “done,” a story should include auxiliary work to ensure the overall system is evolving responsibly. This often entails additional work above and beyond meeting the user-facing need represented by the story.
7. Tend the project ecosystem
In addition to evolving the product architecture, a tech lead must monitor the development ecosystem, which includes the abstractions, tools, and practices used by the development team. The tech lead must be on the lookout for problem areas, such as opportunities for automation, inappropriate abstractions, development frictions, or recurring mistakes. While the tech lead may not be the one to solve these problems, he or she should make sure these problems are handled appropriately–for example, by making sure that new tasks are added to the backlog.
8. Align the team
It takes work to get everyone on the team on the same page. For small teams, it may take nothing more than good communication. On large teams, it may require regular pair rotations or technical team sync meetings to ensure that everyone understands how the system is being built. This is a constant, challenging activity that often requires technical investment and support in the project ecosystem via linters and other tooling.
9. Teach & learn
Every project is a classroom, and we all have more to learn. To deliver the best possible outcome for a customer, the tech lead should nurture and empower the team, helping them to develop their skills in ways that will be productive for this particular project. It’s important to think critically about how to help individual team members grow. Then pick technologies and architectural patterns that provide the best environment for leveraging past experiences and growing to meet the challenges at hand.
An Impossible Job to Master
This list of tech lead responsibilities is large, varied, and often contradicting. I recommend that tech leads regularly revisit this list and ask what opportunities they see for improving their execution or advancing the project. Focusing on each area and looking for ways to improve is a strong step toward excelling in the role.
For me, this list is also a testament to the sheer depth of the tech lead role. No one can master all of these concerns and the ways they manifest in a short time frame. True mastery of this role takes at least a decade, and even then, there’s always room for improvement and new ways to master the subtleties.