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.
What is the job architecture?
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”).
Structure of individual roles
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.
Context of roles within the broader architecture
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.
Using the architecture
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.
Software Engineer I (SWE I)
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.
Technical aptitude: SWE I engineers are not expected to have technical knowledge in NerdWallet specific technologies, but they are expected to have a technical foundation from which they can build.
- 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.
Communicates with Team: Engineers should participate with their team as a full partner. They are expected to work through technical and non-technical issues with their partners in a constructive manner.
- 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.
Software Engineer II (SWE II)
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.
Technical competence within team stack: SWE II engineers are expected to be fully versed in their team’s technology stack and should be able to contribute to it effectively.
- General understanding of every part of the team stack and how it fits together
- Can contribute to multiple parts of the stack
Communicates with cross-functional partners: As engineers grow in their careers they are expected to be active partners with their stakeholders. Rather than passively wait for people to come to them, they proactively communicate and participate fully with their stakeholders.
- 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 Software Engineer (Senior SWE)
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 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 Engineer
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.
Uplevels Engineering team: Senior staff engineers stay on the forefront of broader technology trends and bring key parts of that knowledge into the company.
- 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
Acts Strategically: Senior Staff Engineers have an obligation to understand the business environment in which the company operates and how engineering fits within the broader context. This deeply informs their decision making processes and is expected to lead to improved business outcomes.
- 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.
Thought Leader: Influences NW leadership and leads company-wide efforts to introduce new technical and business dimensions
- Move to microservice architecture
- Move to CI/CD
- Business Continuity Planning
- Champion/Evaluate an acquisition
- React Native versus Native mobile development
Evangelist: Principal Engineers represent the highest levels of engineering values at NerdWallet. As such, they have an obligation to represent NerdWallet’s brand in the larger community.
- 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!