This post is targeted to people not familiar with Software Development roles.
Delivering software projects, particularly large and complex one’s have their own challenges and requires multiple teams and people to work together to achieve the desired outcomes. I am going to try to summarize the different roles that I have come across and the expectations from those roles. Each role might have many levels and will vary by company– I have tried to generalize for easy consumption.
Software Engineer: Engineers design the software and code. There are multiple levels of Engineer roles depending on the company (Amazon for example has Levels 4, 5 and 6 for Engineers). The expectation of coding, design and complexity will vary based on the levels, with higher levels expected to take on complex problems.
Principal Engineer: Principal Engineer is a higher level Engineer. Principal Engineers are expected to provide the architectural vision, come up with design/architecture for large problems and act as the Architect for the suite of services within a functional area. There is also an expectation that Principal Engineers have followers on the team (typically the lower level Engineers) and help develop the next layer of tech design/architecture capabilities within the organization. You should expect to see only a handful of Principal Engineers for large organizations (100+). Some companies have multiple levels of Principal Engineers.
Software Development Manager (SDM, Dev Manager): Manager of Engineers typically. Depending on team size, they might contribute to the code base. Accountable for the design and architecture, delivery and quality. In most tech companies, Dev Managers will own a suite of services in a specific area and are accountable for supporting these services in production (24×7) via an on-call rotation of their team members to respond to high severity incidents.
Director, Software Development: Manager of managers of closely related services functions. For example in a large eCommerce company, there will be multiple teams (with their own Dev Managers) within the Payments functional area– a team for collecting, exposing and storing payments profile data securely, a team (or multiple) for connecting to multiple payment processors to enable different forms of payment (credit cards, bank payments, cash on delivery, etc), a team to centralize all payment data in a common place for analytics. All these teams would report into the Director as a single threaded Engineering leader for the Payments space.
Technical Program Manager (TPM): Large projects typically require work from multiple teams, inside and outside one’s own organization. When multiple teams are involved, it requires someone to articulate the outcomes, scope of work, the technical integration architecture in addition to managing the dependencies and timeline across all these teams. This is where a TPM plays a pivotal role– they act as the glue. Good TPM’s have all the technical skills of a Dev Manager, can think end to end customer experience, can ask good critical questions to understand the problem and to control scope and are super focused on delivering the outcomes– kind of like a super man/woman, very difficult to find really good TPM’s.
Product Manager (Tech or Non Tech): Product Managers define the What and the Why– ideally with data– in cases where they don’t have data, they rely on experience, intuition, stakeholders or whatever they use for making their Judgment calls.
The above roles are the most common I have seen. Not every team will have each of these roles– sometimes the TPM and PM roles could be combined into one or both might not exist in which case, the Dev Manager and the Senior Engineers on the team might have to pick up that function. Same is the case with Principal Engineers, there aren’t that many of them in the Industry.