As an Engineer (2), you display a solid understanding of core engineering concepts such as code that performs at scale, caching, relational databases, security, and abstraction, to name a few. You’re focused on growing as an engineer, learning the team's tools and current processes, and developing productivity skills. You also have a strong background in engineering best-practices like testing, source control, and agile planning.
You’re capable of taking a well-scoped component from a larger project and completing these tasks in a reasonable time frame. You should be constantly making steady progress on tasks assigned to you and know when to ask for help when you’re blocked. You can own your independent small-to-medium features all the way through from technical design to launch. Engineers are focused on learning about a specific component or product sub-area and mastering that component.
You and Your Team
You’re a skilled communicator and are comfortable giving feedback to your peers and manager. When given an unclear task, you know how to ask for clarification and ensure that everyone is on the same page before getting started to reduce the need for re-work. You understand how your work fits into the larger picture for your team, and use this to identify conflicting requirements if they come up.
At this level, you should be improving the speed at which you learn from your mistakes. By the time you’re ready to be promoted to Senior Engineer, you will have focused on a technological expertise and become capable of mentoring new engineers in these areas. As you learn, you’ll also start to participate more in the technical design process, often with guidance from senior engineers. As an Engineer, it is likely that you will have a broad spectrum of experience. Being successful in all aspects of the role as described above is the principal criteria for moving on to a Senior Engineer position.
Example Skills and Behaviors
- Demonstrates strong understanding of programming – e.g.: data structures, types, asynchronous programming
- Writes performant and secure code – e.g.: avoids n+1 problems, uses database indexes, caches when appropriate, keeps size of payload small, etc.
- Demonstrates influencing skills with manager within and across teams, agnostic of reporting authority
- Ability to communicate scope and state of work, identifying issues that they are facing, and anticipating roadblocks that may arise
- Delivers clear, helpful, and timely feedback
- Documents their work – e.g.: descriptive PRs, READMEs, entries to the wiki
- Mindful and empathetic in their communication – strives to understand context and assumes best intent from others
- Builds strong, collaborative relationships in and out of their team
Execution / Delivering Goals
- Uses company values and procedures and goals in conjunction with creative thinking to solve medium, diverse problems
- Makes contributions to shared libraries and patterns
- Looks for opportunities to ship work to production early and keep PRs small
- Comfortable breaking down projects spanning a small number of sprints
- Prioritizes the critical path of work in order to reduce risk and deliver value early
- Delivers solutions at a high level of quality
- Creates reliable estimates, and takes ownership for delivering their work on time
Discretion / Supervision
- Consistently improving the speed at which learning from mistakes happens and always looking to expand skills with self-directed learning
- Independently prioritizes and escalates unforeseen issues
- Receives general or little instruction for day-to-day work
- Displays a strong sense of ownership across projects
- Handles change with maturity, assumes best intent in others