These are the ZeroCater Engineering and Data role definitions for both teams. (This was originally forked from Kickstarter's Engineering Ladder v7)
|Junior Software Engineer|
|Software Engineer||Data Analyst|
|Senior Software Engineer||Data Scientist||Engineering Manager|
|Staff Engineer||VP of Data||Engineering Director|
|Principal Engineer||VP Engineering|
There are three different paths:
- Technical - These are technical roles that don't generally involve people leadership. As you move up they include increasing levels of technical leadership and responsibility. Most of the Engineering team will fit into these roles.
- Data - These are the roles within the Data team.
- People - These roles represent the people leadership and management path within Engineering. Given our size there are only a small number of roles.
Junior Engineers are at the start of their career. Being successful in all aspects of this role is the principal criteria for becoming a Software Engineer.
Junior Engineers have a reasonable understanding of core engineering concepts. They are focussed on expanding that understanding and growing as an engineer. They have a basic understanding of the team’s tools and processes and a broad introduction to engineering best practice and productivity skills. They have an appreciation and understanding of software engineering techniques like testing, source control and agile planning and are focused on learning more about these domains.
A Junior Engineer is capable of taking small well-scoped components of larger projects and features and, with the mentoring and assistance of more seniors engineers, completing these tasks in a reasonable time frame. Engineers at this level work with more senior members of the Engineering team to ensure they make steady progress on tasks that are assigned to them. More senior engineers may also help when they are blocked.
Focused on learning about Engineering principles, tools, practises and mastering those with a view to being more self-sufficient.
They are learning how to communicate well and how to deliver feedback to peers and their manager. When given a task with unclear requirements they are learning how to ask for clarification and how to identify underlying assumptions in design and implementation and how to clarify them. They understand how their work fits into the larger picture for their team, and can work with product and other engineers to help identify conflicting requirements. They will start to participate more in the technical design process, often with guidance from more senior engineers.
Engineers at this level should be learning how to identify issues and learn from them to improve their skills. By the time a Junior Engineer is ready to be promoted to Engineer she will have expertise in Engineering best practice, tools, techniques and a solid introduction to the technologies in their domain.
There will be engineers in this role with a broad spectrum of experience. Being successful in all aspects of the role is the principal criteria for becoming a Senior Engineer.
Engineers display solid understanding of core engineering concepts. They are focused on growing as an engineer, learning the team's tools and current processes, and developing productivity skills, as well as a strong background in Engineering best-practices like testing, source control, and agile planning.
Capable of taking well-scoped component from a larger project and completing these tasks in a reasonable time frame. Engineers at this level are assumed to be constantly making steady progress on tasks that are assigned to them and know when to ask for help when they are blocked. They can own their independent small-to-medium features all the way through from technical design to launch.
Software Engineers are focused on learning about a specific component or product sub-area and mastering that component.
They communicate well and are capable of delivering feedback to peers and their manager. When given a task with unclear requirements they know how to ask for clarification, and ensure that all assumptions are vetted before work starts to reduce the need for re-work. They understand how their work fits into the larger picture for their team, and use this to identify conflicting requirements to their people leader and product manager. As Engineers learn they will start to participate more in, and eventually lead, the technical design process, often with guidance from senior engineers.
Engineers at this level should be improving the speed at which they learn from their mistakes. By the time an engineer is ready to be promoted to Senior Engineer she will have focused on some technology as their expertise and become capable of mentoring interns and new engineers in these areas.
A Data Analyst works across the company in a number of domains and subject areas, performing everything from exploratory data analysis to business intelligence and product research.
An essential quality of a Data Analyst is the ability to mix rigorous skepticism with a practical approach to research and development. Understanding database technology, query languages, and data visualization grammars is also crucial: many times the analyst's word is treated as gold, so their attention to detail and technical aptitude must be par excellence.
Data Analysts are also excellent communicators and can easily move between lay explanations and sophisticated technical treatments of the same topic. When research requires visualization or more complex analysis, Data Analysts use the right tool for the job and don't get lost in the details of using data to tell a story. Often they see the bigger picture before their audience will, and leading their colleagues to the right decision is of primary concern.
As Data Analysts mature they will take on more technical projects, whether that means applying more complex statistical techniques or writing production code. Their role can evolve as their interests in different areas develop.
Eventually Data Analysts can “own” certain areas within the data team and can assume responsibility for managing their milestones and processes.
Senior Engineers are responsible for technical leadership in one or more Engineering domains. They are responsible for maintaining any plan, documentation and backlog for these one or more technical domains. They will work with other Engineers to burn down the backlog of these domains while working with product to determine alternative paths, feasibility, scope, and phasing of complex projects.
The Senior Engineer should be seen as a rock-solid engineer who is a master of at least one domain. The Senior Engineer is capable of owning technical design for projects of moderate complexity, and understands the tradeoffs in creating good software in their area. They hold a depth of knowledge in systems that enables them to debug those systems effectively without issues. In addition to writing consistently high-quality code they are aware of industry best practices and trends, and have acquired at least one major skill outside of core coding such as monitoring, documentation, integration testing, visual design, performance optimization.
The Senior Engineer gets a lot done. They are responsible for complex tasks and complete them despite roadblocks, grabbing others for help or insight as necessary. The Senior Engineer requires very little oversight beyond high-level direction; they can take a complex user story, break it down into sub-tasks, and complete their sub-tasks with relative ease. The Senior Engineer shows initiative beyond knocking tasks off a list; they are able to identify and suggest areas of future work for themselves or their teams. They seek evidence to support their ideas and start to build cases for these ideas. They deliver products with confidence.
The Senior Engineer has end-to-end responsibility for projects of increasing complexity that encompass more than their own development. They contribute to the common code bases and standards for the team. They understand the business that their code supports and use this knowledge to influence their task prioritization. They assist in identifying and validating test cases and can identify regression risks in their features. In general, they can identify risks in code, features, and design, and communicate these to the appropriate parties.
The Senior Engineer is known outside of their core team as a technology leader. They participate extensively in code reviews, and mentor others via code reviews and pairing, as well as frequently presenting at team meetings. They work effectively with non-tech members of the ZeroCater community. They are able to identify problems with requirements and help their team course-correct around these issues.
Recommended reading: http://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/
The Engineering Manager is the manager of a small to mid-sized team. They are comfortable with management practice and are strong project managers. As a leader they empower their team, grow their team members' skills and capabilities, ensure that they are tracking the team's efficiency and quality of work, they assist in regularly adjusting processes and timelines to ensure high quality work is delivered.
The Engineering Manager will spend less time writing code, but there is an expectation that they still engage in some technical deliverables such as bug fixes and small features, without blocking or slowing down the progress of their team. More than writing code, they hold responsibility for identifying bottlenecks in the process and roadblocks to success for their team and clearing these roadblocks.
This role is expected to have a large impact on the success of their team as a whole. In particular, leaders in this role are capable of identifying the most high-value projects and keeping their team focused on these projects. As part of keeping the team focused the Engineering Manager will partner closely with Product Managers to manage project scope and ensure the technical deliverables are met. In addition to focusing the team, they are capable of identifying headcount needs for the team and planning and recruiting to fill these needs.
The Engineering Manager is an independent manager. They are comfortable managing team members with different skill sets from their own. They communicate expectations clearly to all team members and solicit and deliver individual feedback frequently. Additionally, they identify areas of technical debt, do the cost/benefit analysis for resolving this debt and communicate suggested timelines for prioritizing this to the Product and Engineering teams.
Data Scientists assume all the primary responsibilities of a data analyst, but frequently employ complex statistical techniques in the pursuit of objective truth and reproducible, hypothesis-driven results. Put another way, Data Scientists apply the scientific method to their day to day work, and help mentor the rest of the data team in these techniques.
In addition, Data Scientists are also responsible for conducting research and development on current industry and academic trends focusing on new algorithms and models applicable to the company’s core business problems. This work can sometimes be highly theoretical, but must always be grounded in an appreciation for its technical and product feasibility.
Ideally, Data Scientists are comfortable assessing and developing production code and feel at ease understanding its technical performance characteristics and consequences. It is conceivable that a Data Scientist never deploys, but the results of their work should be heavily collaborative with engineering and product development, and will often shoulder the responsibility for seeing it implemented properly.
How is this different from an Data Analyst?
The distinction is partly based on seniority -- Analysts can be promoted to Data Scientists, but the role is also focused on particular techniques and skillsets grounded in theoretical research and literature. Some analysts will never aspire to be a Data Scientist simply because their skills and interests are located elsewhere: product development, management, infrastructure, etc.
The Engineering Director is responsible for functional slices of the Engineering team. The Engineering Director will typically lead engineers across multiple slices.
The Engineering Director is not generally expected to write code on a day-to-day basis. However, the Engineering Director should have a strong technical background and spend some of their time researching new technologies and staying abreast of trends in the tech industry. They will be expected to help debug and triage critical systems, and should understand the systems they oversee well enough to perform code reviews and help research problems as needed. They should contribute to the architecture and design efforts primarily by serving as the technically-savvy voice that asks business and product questions of the engineers on their teams, ensuring that the code we are writing matches the product and business needs and can scale appropriately as those needs grow.
The Engineering Director is primarily concerned with ensuring smooth execution of complex deliverables. To that end, they focus on ensuring that we continually evaluate and refine our development/infrastructure standards and processes to create technology that will deliver sustained value to the business. They are responsible for creating high performance, high velocity organizations, measuring and iterating on processes as we grow and evolve as a business. They are the leaders for recruiting, headcount management and planning, career growth and training for the organization. As necessary, directors will manage vendor relationships and participate in the budgeting process.
The impact of an Engineering Director should reach across multiple areas of the technology organization. They are responsible for creating and growing the next generation of leadership and management talent in the organization, helping that talent learn how to balance technical and people leadership and management. They are obsessed with creating high-functioning, engaged and motivated organizations, and they are expected to own retention goals in their organization. Additionally Engineering Directors are responsible for strategically balancing immediate and long-term product/business focused work with technical debt and strategic technical development.
Directors are strong leaders, and set the example for cross-functional collaboration both between Engineering and other areas of the company, and across Engineering teams. The goal of this collaboration is to create both a strategic and tactical roadmap that tackles both business needs, efficiencies and revenue as well as fundamental technology innovation. This roadmap is jointly owned by the Engineering technical leadership (the Senior Engineers and the Principal Engineer) and the Engineering Directors.
The director is a very strong communicator and can simplify technical concepts in a way to explain them to non-technical partners, and take business direction and explain it to the technology team in a way that inspires and guides them. Directors of Engineering help to create a positive public presence for ZeroCater Engineering and are capable of selling the company to potential candidates.
Due to their breadth of exposure to both technology and the business drivers, Directors are responsible for guiding the planning process for their team, helping the team articulate goals that support both business initiatives and technology and organizational quality.
It is important to note that each director may have specific responsibilities given their area of oversight. For example, the Director of Devops is ultimately responsible for all critical infrastructure (databases, servers, etc) and must ensure continued support and uptime of these systems. The Director over Back End has specific responsibilities for the development and management of back end systems. These are not written into the general job description but understanding of the scope of the responsibility is important for understanding the scope of the job.
Other activities for Engineering Managers and Directors
- Mentoring and professional development for the members of their Eng team.
- 1:1s and semi-annual reviews with team members.
- Administration and people management - approving leave, etc.
- Engineering team organization - helping or organizing the Engineering meetings, lightning talks, and Hack Days.
- Helping plan and prioritize Engineering team activities and backlog.
- Helping develop and communicate policy and process across Engineering.
Recommended reading: http://fractio.nl/2014/09/19/not-a-promotion-a-career-change/
The VP of Data is responsible for cultivating and developing ZeroCater’s data-driven products, research, and culture.
A large component of this responsibility is meant to be strategic and less hands on than the work of Data Scientists or Analysts. It should consist mainly of resource planning, project management, and advisement on how best the data team can help the organization achieve its larger goals. Accordingly, the VP of Data will frequently weigh in on how the long term priorities of the organization might benefit from data driven research, products, or developments in the field of data science.
Day to day the VP of Data will consult on individual research projects, advise others throughout the organization on data questions, suggest broader topics for analysis, and direct decisions around data tools and services.
They represent Data on the senior team and frequently report topline metrics and research developments to the rest of the company and the board as well. They help vet all reports delivered inside and outside the organization and are the last line of defense when it comes to Bad Data and spurious correlations.
The Staff Engineer has strategic impact over some combination of a large team, a very deep technical problem, and/or a long time horizon. The problems that the staff engineer is solving are open-ended.
The Staff Engineer provides considerable high-level technical guidance across the team. They can usually anticipate and plan for technical problems. They are highly knowledgeable in major parts of our technology stack and are the technical owner of significant components of our code base. They have a sustained track record of creating improvements in business-critical systems around stability, performance, and scalability.
A Staff Engineer is still acting in a very hands-on role, and as such, they are a prolific contributor to both core projects at ZeroCater as well as side and experimental work. When presented with a complex problem, process or existing system they are able to reduce the complexity in order to get more done with less work. They provide guidance, direction and help colleagues build and produce better outcomes.
The Staff Engineer has strong abilities to influence without requiring reporting authority. They facilitate cross-team work and are influential beyond their individual group. They are capable of driving groups of disparate interests to decisions, and clearly communicating and seeing those decisions through to impact. The staff engineer is capable of setting short to medium term strategic direction for part of the technology stack, identifying areas of critical need based on future growth and developing roadmaps to attack those problems.
The Staff Engineer may act as the leader of technical team but is probably not acting as the people manager of fellow engineers.
This person acts as the “chief architect” for our business. They have significant strategic vision and can take a high-level 3-5 year plan for growth at a business level and translate that into a strategic technology roadmap. They are deeply technically savvy and their primary job is focusing on the architectural and technology needs to grow the business over the longer-term horizon.
This level signifies strategic impact over the team. The Principal Engineer deals with very deep technical problems and a long time horizon. The problems that the Principal Engineer is solving are very open-ended even to the leadership who presented the problem.
The Principal Engineer is sought-after for technical guidance across the team. They have a track record of anticipating technical problems that will fall out of major products and designing solutions to overcome those problems. They are deeply knowledgeable in major parts of our technology stack and are the technical owner of large parts of our code base. They have a sustained track record of creating major improvements in large business-critical systems around stability, security, performance, and scalability.
A Principal Engineer is still acting in a very hands-on role, and as such, they are a prolific contributor to both core projects at ZeroCater as well as side and experimental work. When presented with a complex problem, process or existing system they are consistently able to reduce the complexity in order to get more done with less work. This ability to manage and simplify complexity is the hallmark of the Principal Engineer; working with this person should leave team members feeling like they are going to leave with something significantly better than they came into.
The Principal Engineer has broad impact across ZeroCater tech. They create architecture that shapes large parts of our business, and ship complex projects including many systems or major pieces of infrastructure. The impact of their work is felt across the team in the quality of the engineering that we produce, the ways we write code, the core libraries that we use, and the underlying design of systems. There are multiple obvious large technical contributions that can be pointed to as originating from this team member.
The Principal Engineer has excellent abilities to influence without requiring reporting authority to do so. They effectively facilitate cross-team work and are influential far beyond their individual group. They are capable of driving groups of disparate interests to decisions, and clearly communicating and seeing those decisions through to impact. The Principal Engineer is capable of setting short, medium and long term strategic direction for part of the technology stack, identifying areas of critical need based on future growth and developing roadmaps to attack those problems.
The Principal Engineer may act as the reporting manager for a small team but is probably not acting as the reporting manager for most or all of the team.
The VPE is responsible for nurturing the team's culture and recognizing when to let the team evolve and when to guide its growth. They oversee the team's capacity and availability are an advocate for steady progress on the product, the infrastructure, and the total system health.
They represent Engineering and Data on the senior team to articulate the capabilities and needs of the department. They are responsible for understanding the system's construction and having a sense of opportunity and cost. The VPE communicates technical impact in simple, clear terms.