4 - Engineer
As an Engineer, 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.Software 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 apprentices and 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
- Independently scopes and implements small to medium-sized features
- Writes performant and secure code – e.g.: avoids n+1 problems, uses database indexes, caches when appropriate, keeps size of payload small, etc.
- 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
- Communicates the status of their work proactively; stakeholders aren’t left guessing what’s happening
- 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
- Contributes to Into the Tech blog and/or Tech Talks
- Participates in engineering events in their local community
- Builds strong, collaborative relationships in and out of the squad
- Displays a strong sense of ownership across projects
- Handles change with maturity, assumes best intent in others