Exploring the Engineering Job Architecture at Nerdwallet
In an earlier post, we described how putting a job architecture in place has helped us grow as a team. As we prepare for the Summer 2019 review process, we wanted to share this document out to show what we expect from our engineers and give them a clearer path on how to grow within the field.
The job architecture is a framework for understanding NerdWallet engineering values and how they are reflected in various skills for each role. The job architecture is NOT a checklist for getting a promotion. Evaluating performance in a creative and dynamic field like software development is always going to be somewhat subjective and require human judgement. This is why the architecture uses subjective language (e.g. “communicates proficiently”, “technical expertise”, “broadly impactful work”) as opposed to objective language (e.g. “shipped X lines of code”,“fixed Y bugs”, “reviewed Z pull requests”).
For every role at NerdWallet, there is a minimum set of expectations that each engineer should meet. These expectations are informed by NerdWallet values and should be present regardless of job function or “guild”. A Frontend Staff Engineer should demonstrate the same level of leadership as a Devops Staff Engineer and a Senior QA Engineer should be as good at communication as a Senior Backend Engineer. These expectations may manifest differently, depending on what team you work on, but they represent the core engineering values of NerdWallet as a whole. To provide further context, each section has an associated list of examples. These examples are a mix of broad-based statements and specific situations in an attempt to outline the kinds of behaviors that demonstrate the core skill. The examples are not a checklist, they are a subset of behaviors meant to provide further context to the expectation at a given level. Proficiency in any given skill does not presuppose you have done any or all of the examples listed and managers are expected to craft career development plans that are relevant for their engineers and teams.
Each role inherits from the role above it and the expectation is that a person in a given role can perform all of the functions of the previous roles at the same level. Progression through the architecture is expected to be logarithmic. That is to say, as you progress through the architecture, you should expect to spend more and more time at the same level before making progress to the next. Additionally, availability of roles throughout the company is expected to decline as one gets higher in the progression. For instance there will always be a limited number of people managers in the company, largely determined by total headcount.
As an employee
Read and understand the underlying intent in the job architecture. While the language and specific bullet points may change over time to better express NerdWallet’s viewpoint on engineering, the underlying values will change far less often. Have regular discussions with your manager about where you are skill-wise in the architecture so that you are both in alignment as to your current level of performance and what you’re working towards.
As a manager
Make sure that your understanding of the job architecture matches the understanding of other managers at all levels. The subjective nature of the architecture puts a greater obligation on managers to ensure that evaluation is consistent across the company. Talk to your own manager if there is any ambiguity around the expectations for a given role. Review the examples and come up with similar ones that are relevant to your team. Have regular discussions of engineers’ performance using the job architecture as a framework.
SWE I is NerdWallet’s entry-level engineering role. It mostly consists of new grads of both the college and boot camp variety. The ME expectation for SWE I engineers is that they learn the core technology stack for their team and the necessary skills and processes for supporting code in production. They are expected to execute efficiently on their assigned work with some amount of support from their team to ensure code is delivered on time and to quality.
Proficient in one or more programming language
Proactively reads technical documentation
Looks for solutions / tries multiple solutions before asking for help
Nerd spends 5 minutes on Google diagnosing an issue with dev setup before asking team for help.
Speaks up in standups and retros
Asks for clarification when needed / asks questions when they have them
Updates tickets in JIRA to reflect current status of work
Communicates with other members of the project team
Nerd is confused during PM presentation and raises hand to ask clarifying questions.
Nerd shows up to a meeting and actively participates and listens instead of playing with a phone or working on a laptop.
SWE II is NerdWallet’s intermediate engineering role. SWE II engineers will usually consist of former SWE I engineers who have learned the core technical and non-technical NerdWallet skills and engineers who are still relatively early in their careers. The ME expectation for SWE II engineers is that they participate and contribute to the full software development process (requirements gathering, technical design, implementation, etc) and deliver their work with little to no supervision in their day to day work.
General understanding of every part of the team stack and how it fits together
Can contribute to multiple parts of the stack
Gives testing details to QA
Communicates with PM about cost/benefit tradeoffs of feature work
Nerd has a question about screen interactions for the ticket they are currently working on, he talks to a designer and comes to a better understanding
Estimates and completes features on time:
Good estimation and setting appropriate expectations is the foundation of engineers’ working relationship with PMs and other stakeholders.Finishes committed work (Jira tickets) each sprint
Nerd finishes 1 week task in 3 days, talks to PM about what to work on next, and uses this as input into future estimations
Writes and updates documentation: Code is read more often than it is written. Making sure your code is understandable and clear to other engineers is key to being a professional engineer.
Updates team wiki page detailing technical onboarding process for new hires
Nerd finds github repo README to be out of date and updates it to reflect the most recent revision.
Senior SWEs at NerdWallet make up the majority of the engineering workforce. As such, they set the tone for the engineering culture and are expected to lead by example. They perform most of the heavy lifting on the engineering team and are expected to own individual projects with little oversight or help from more senior engineers.
Technical expertise within team stack:
Senior Engineers are expected to be experts in their team’s technology stack and should understand how that stack fits in the broader NerdWallet ecosystem. They should also be able to contribute to the evolution and improvement of that stack.Refactors and upstreams code when appropriate (ex: puts into nwapi or other shared lib)
Able to step into any part of the team’s stack (proficient in most, expert in at least one area)
Can teach others how team stack fits together (draw system diagram, how to set up dev env, deploy and other processes)
Nerd implements a React component for common layout patterns.
Nerd adds a lint rule to automate common PR feedback.
Understands cross-functional roles and coordinates across them:
Senior Engineers are expected to be understand NerdWallet’s organization ecosystem and bring in external stakeholders when necessary.Can shepherd release of a feature throughout the lifecycle and with the necessary teams (spec->designs->tech breakdown->... qa)
Nerd escalates an issue to appropriate stakeholders after some back-and-forth on an implementation detail that couldn’t be decided.
Exhibits leadership: Senior Engineers are expected to lead by example and set the tone for engineering as a whole.
Role model for more junior team members
Can drive small projects with 1-3 engineers to completion
Code reviews often. Always leaves respectful comments. Sets the tone for the team.
Gets feedback on larger initiatives, and pragmatically incorporates it into project.
Nerd sees that our mobile analytics is could be improved and decides to take on and refactor it
Staff Engineer is the first role that is expected to have consistent impact outside of an engineer’s immediate team. For platform engineers that impact will tend to manifest in the technical architecture whereas for product engineers it will typically come through in NerdWallet’s product portfolio. Regardless of their guild, Staff Engineers are expected to understand how their work fits into the broader technical and business context and strive to make their code fit into that broader context. They should be solving problems beyond the immediate technical issues at hand and addressing issues facing the organization as a whole.
Technical reference across org in one or more domains:
Staff engineers are expected to provide technical leadership in one or more areas for the rest of the engineering organization.Able to track down most difficult bugs in parts of the stack
Actively answers technical questions in a variety of forums
Reference for front-end performance
Teaches and mentors other engineers
Nerd is expert in our data pipeline and analytics implementation
Nerd actively participates in engineering Slack channels and routinely helps troubleshoot problems
Drives work beyond team:
Staff Engineers should be focusing their efforts on larger, broader projects that impact multiple teams, technical and otherwise. Their technical expertise and project experience is expected to be necessary for these larger initiatives due to the higher technical and organizational complexity.Identifies cross-team touchpoints and keeps track of dependencies to drive projects forward
Nerd helps coordinate work for a project that spans work across verticals, consumer, and QA teams.
Nerd coordinates cut-over of app for multiple verticals from legacy data stores to Offer API
Nerd identifies issues in analytics for embedded content and coordinates with analytics and FEI to design and implement a solution.
Does broadly impactful work:
Staff engineers are expected to contribute work that is broadly useful, either by their partner teams or other engineers. They are often builders of the “picks and shovels” for other teams to use in their day to day work.Writes frameworks to allow other teams to easily contribute
Writes reusable components, modules, libraries
Nerd writes a impactful blog post that meaningfully improves NerdWallet’s engineering brand
Nerd writes an SDK for JavaScript clients to leverage across verticals
Nerd writes a library to facilitate monitoring across all backend apps and improve monitoring consistency
Nerd creates an easy way to add “post types” to existing WordPress installation (to support various kinds of copy that our apps need to maintain) and exposes REST API to be used by other applications to pull in copy as needed
Nerd drives product direction in a way that materially impacts our users and our business
Nerd leverages existing systems to create a way for stakeholders to manage pages without engineering
Senior Staff Engineers are expected to operate at the company and engineering organization level. Most of their work should be focused around improving both of these things through technical and organizational improvements. Often this will happen in the context of work associated with a specific team deliverable and it is up to the engineer to identify the cases in which these improvements can be made.
Focused on broadly impactful work:
Senior Staff engineers should be spending even more time than staff engineers on building and designing reusable technology than staff engineers.Nerd identifies that putting a CDN in front of dynamic apps would improve entire site page performance and drives this change across teams
Nerd identifies a gap across design and engineering and drives implementation to fill that gap.
Nerd refactors narrowly defined platform to support broad, modular contribution.
Stays up to date on recent technology changes and updates, particularly in their own discipline.
Guides engineers to more strategic/leverageable solutions
Nerd churns credit cards to better understand the space and solve product problems better
Nerd installs major fintech apps to understand the competitive space better
Nerd organizes a workshop in order to share security best practices with engineering org
Makes technical decisions that demonstrate an understanding of current and future business needs.
Identifies process issues and actively works to update process to keep pace with a changing environment
Nerd decides mobile app should not follow suit with web app in having a modular framework because business goals in mobile app are different
Nerd chooses out-of-the-box solution to meet PM requirements instead of building new system
Principal engineers define the technical vision of the company and are expected to own and influence large parts of NerdWallet’s technical ecosystem. Their influence is expected to extend beyond individual apps and projects and instead be reflected in their broad technical domain (e.g. mobile, devops, data). Principal engineers are expected to have outsized impact on their team, in the company, and in the public sphere.
Move to microservice architecture
Move to CI/CD
Business Continuity Planning
Champion/Evaluate an acquisition
React Native versus Native mobile development
Finishes committed work (Jira tickets) each sprint
Gives technical talks outside of the company
Joins technical meetups and recruits
Writes influential blog posts
We hope this gives teams a better understanding of how Nerdwallet expects and evaluates its engineers. This documents aims to illustrate how we see job progression as a function of what you do, not how long you have worked. And remember, If you see yourself in one of these roles, we encourage you to apply!