The way to organize of developer efforts and clarify the what, who, how, and why can be achieved by first clarifying roles and responsibilities with the developer process.
Generally, software teams have the following leadership roles: product manager, technical product manager, design lead, engineering manager, and engineering lead. We are not forced into this model, but it provides a helpful barometer.
How do these typical roles fit in your team's organization?
To understand how each typical role fits in our organization, we first need to clarify the responsibilities of each role.
Roles can best be understood as to how they are conduits. In other words, we must understand how a role is a channel between a "higher" initiative and goal--since no one on the level of software development team is a part of the "higher-ups."
A product manager serves as the channel between company initiatives and a team's roadmap of projects.
The product manager is responsible for explaining what the company initiatives are, how they relate to the formation of projects in a roadmap, and how the completion of said projects will contribute the mission of the business.
Also, the product manager serves as the channel between customer needs and a the roadmap of projects.
The product manager is responsible for explainging what the customer needs are, how they relate the formation of projects, how the completion of said projects solves their needs, and how a customer needs and business needs are both fused into a common solution via a project.
In a word, the product manager is the one to define what is worked on, explaining the why from the vantage point of the business and customers.
Technical product managers are the channel between the product manager and the developers.
The technical product manager is responsible for translating projects determined by the product manager into requirements and size-able projects that can be delivered to developers.
Once a project is delivered, the technical product manager is responsible for ensuring that the developers are staying on track to complete a project.
In this sense, the technical product manager is the channel between the product manager and the engineering manager, as both have an interest in meeting the deadlines.
The technical product manager is also responsible for reenforcing what is being worked on and why it is being worked on from the vantage point of the customers and business. This reenforcement is important since the technical product manager is usually in more of a fixed orbit with the developers than the product managers who tend to have more communications with higher-ups.
The design lead is the channel to translate a conceptual project of the product manager into a viable prototype.
The design lead is responsible for showing how a project will look and feel for the users, postulating why the prototype is the best expression of the product manager's vision--and hence, the the best expression of a solution for a business and customer need.
Design leads, like product managers, are a step ahead the developers as they formulate a project for project roadmap while the developers are busy implementing a previously formalized project.
While design leads are a step ahead of the developers, they still should orbit around the current work of the developers, frequently explaining the prototype/requirements--amending them as needed.
It is also important to note that prototypes evolve as a product is constantly undergoing additions (and sometimes subtractions). Therefore, the design lead is responsible for making clear which prototype maps to which phase of a product's evolution. Since developers are a step behind, the prototypes for the current developers' project should not be modified without announcement and a conscious acceptance of the ramifications of a project's scope.
Moreover, the design lead is the channel between a broader design initiative (i.e. a design system) and the developers, ensuring that the prototypes are in sync with the design patterns and principles of the other products--which then ensures a uniform experience for all customers no matter the product in the product suite.
Finally, the design lead is usually the point of contact for receiving feedback from developers and translating those ideas into a prototype.
The engineering manager is responsible for allocating developer resources to accomplish projects distributed by the technical product manager.
Therefore, the engineering manager is a channel between the developers and the technical product manager.
The engineering manager advocates for project deadlines. It would be unwise for the product manager to set a deadline on the engineers that is incongruent with the deadline of the engineering manager. While the engineering manager is responsible for understanding the product initiatives, and must communicate with the product manager and technical product manager to do this, the engineering manager's deadline should able to trump the deadline of product managers if it is deemed too ambitious--since engineering managers understand both what needs to be accomplished and how it may be accomplished. Product managers do not have as much visibility into the how part.
The engineering manager is then also a channel between the engineering lead--who is primarily responsible for determine how a project will be accomplished in code (more on this below)--and the product managers.
The engineering manager should help keep the team on track to accomplish projects to meet a given deadline and ensure the team is properly implementing the project in light of product requirements.
This constitutes the responsibilities of the engineering manager so far as the product side is concerned. However, the engineer also is a channel between the developers and engineering higher-ups. Therefore, there are additional responsibilities to satisfy higher technical initiatives.
The engineering manager is a channel between developers and technical initiatives. Meaning, broader technical ideals for code standards, architecture, deployment, career growth, etc. should be implemented by the communication and counsel of the manager.
While this type of channel is shared with the engineering lead, the engineering manager serves this capacity in more of a "eyes on, hands off" manner.
When it comes to career development, a peculiar broader technical initiative. The engineering manager is responsible for helping developers build their craft amidst pursuits for tangible career goals.
More broadly, engineering managers help to motivate developers by allocating work that is peculiar to their skills and interests, developing their short-term and long-term growth, helping to connect work with the big picture, and navigating through difficult seasons in a company.
Finally, the engineering manager is responsible to coordinate technical work that is contingent upon other teams and communicate as needed down to the developers.
With all of this in mind, it can be seen how the role is a unique blend of technical and relational skills. It is the latter which clearly distinguished from engineering leads.
Due to the scope of responsibilities, it can also be understood why engineering managers often do not contribute to any writing of code.
The engineering lead is a distinct role from an engineering manager. A manager is more focused on keeping the team on track for delivering on product initiatives and cultivating a strong engineering culture marked by personal development. A lead, on the other hand, is primarily focused on keeping the team on track by planning technical decisions that coincide with product initiatives and developer experience.
An engineering manager may lean upon the engineering lead to help with keeping a team on track by delegating project breakdowns, etc. The manager may also have helpful feedback for big-picture technical conversations. Yet, the roles and responsibilities and distinct.
In a word, the engineering lead is responsible for how projects are accomplished (architecture, technical constraints, etc.) while managers are responsible for ensuring that the projects are accomplished and mapping out how the developers will be cultivated.
Engineering leads are distinct from other developers not only in their leadership qualities but in that they focus on more specialized work. They may work on the day-to-day stories around releasing features to customers, but they are responsible for technical work that enabled efficient releasing of features (tactical work)--such as: establishing code standards and principles, and patterns; maintaining shared libraries; informing architectural decisions; working with other leads to solve large technical projects; etc.
All of this in mind, the lead is a channel between engineering manager and developers.
They are also a channel between other engineering leads and the developers/manager.
Finally, they are a sort of channel between technical product managers and developers, being the primary liaison for questions about the code/projects.
It is important to call out that it is impossible to enumerate roles without also thinking about how those roles serve a common purpose within the contexts of teams.
Speaking very generally, there are two types of teams in mature software engineering organization: stream and enabling teams.
Stream teams are focused on a "stream" of work. A stream is usually a product, but it could also be a set of experiences within a product, or a set of services that enable those experiences when applications grow larger.
Stream teams require all necessary components in order to legitimately constitute a team. Those necessary components are: Application (UI + mocks, or UI and presentational API) developers, API (presentational APIs and/or microservices) developers, and (sometimes) DB developers.
Usually, a product manager and technical product manager own a particular stream. If streams are smaller and scoped to a single product, then perhaps product resources could manage multiple streams. However, owning multiple streams across multiple products can be quite difficult, so it is not recommended.