As developers, we are always faced with the dilemma of whether to take on roles that require more time and focus on leadership as compared to roles that are purely technical. When faced with this decision, we would like to focus on some aspects of leadership roles that make us better developers.
Leadership roles help develop critical thinking skills that are crucial for the sort of organizational change that software development seeks to achieve. Consulting skills, communication skills and broad level systems thinking about organizational processes help senior developers deliver the value expected out of expensive software development efforts. We highly encourage developers to take on technical leadership roles as part of their journey.
Most times, developers are comfortable with technical work that requires few interpersonal skills. Learning technical skills and developing as a software engineer becomes natural to a lot of us. Though it might seem like interpersonal skills are unique and unrelated, general leadership skills help developers think more holistically and differently about software development. Senior engineers who truly step out of their comfort zone to perfect these new and unique skills, eventually end up being better developers.
As a leader, you have to communicate, negotiate and understand the perspectives of other stakeholders such as business leaders, consumers, and customers of the technology we build. This makes us think harder about solving real business problems rather than focus on narrower technical concerns like, get your unit tests passing. Testing now takes on a whole new meaning, how do we ensure the software is meeting the broader business needs. Furthermore, coming at this from the perspective of stakeholders and consumers makes you more aware of the vision for the products you’re building, and their real impact on the business. It is with this keen focus on broader impact that software development initiatives bring about organizational change.
As software engineers start off in their career, the focus is usually on developing technical skills with computer languages, technology stacks, and algorithmic efficiency. Though these are very key skills for any software developer, the real value lies in broader systems thinking - how to build software systems that interact with each other seamlessly and provide larger solutions to business problems. While assembling these larger software systems, the scale, magnitude, and complexity of the technical challenges increases. As a technical skill, this next level thinking is as or more valuable than sheer technical skills that focus on narrower concerns like finishing the immediate technical tasks at hand and completing a user story.
Technical leaders also have to come up with effective solutions for organizing multiple teams of developers working in close collaboration. For software teams to be effective, they need to break down the complexity of a large system into smaller manageable chunks, work on these pieces of software in isolation, but in a manner where they don’t block each other. In order to break down a complex system into these smaller pieces that interact with each other, senior software developers need to be skilled in the architecture of the solution, but also in how teams work effectively together using software development processes that work for them. Without experience as leaders in general, this is a very hard skill to master.
When an organization invests on new initiatives, a technical leader may have more interaction with business analysts, managers, customers and developers. Increased communication expands a mostly technical vision to a holistic one; for example, unit testing not only focuses on ensuring functionality or avoiding introducing new bugs, it also describes business scenarios which eases the refactoring process since there is no direct relationship between tests and code implementation.
A developer improves their skills to find solutions with the best algorithms, tools, syntax and readability, meanwhile a technical leader leverages their knowledge and takes it to a team level to meet the organization goals. It does not imply giving up on technical challenges, it changes the perspective of the problem. The right fluency in business terms detects possible edge cases in advance, proposing new levels of abstraction based on business scenarios. Consequently, a developer who has been a technical leader strengthens their ability to understand a problem from different perspectives, gaining greater mastery in understanding and writing code.
On the other hand, everyday activities of a developer include deploying user stories to production, ensuring code maintainability, fixing bugs among others. Technical leaders in their daily work remove blockers, analyze new initiatives, fit a solution on the technological landscape, take a step back and ask the motivations behind a task. A broader vision questions common practices and defiances the status quo.
As previously mentioned, technical leaders have several tasks under their belt: initiative analysis, code integration and non-technical communication. That is why coding time is reduced, cherishing an effective handling of tools and practices or simply increasing our typing ability to test hypotheses and define a way forward. When technical leaders go back to code full time, they take advantage of their improved and acquired skills to achieve a greater consistency in engineering practices improving long-term results. Reaching technical leadership is not the end of the career, it is another step in our professional career.
Disclaimer: The statements and opinions expressed in this article are those of the author(s) and do not necessarily reflect the positions of Thoughtworks.