Memrise’s Engineering Growth Framework
Memrise’s Engineering Growth Framework is a guide for individual contributors and their managers on how to succeed as an engineer at Memrise. We rely on it as the foundation of people’s growth, guiding what we focus on in mentoring and coaching people, and how we assess people’s performance when we do reviews and promotions.
We made our Growth Framework a central part of our processes a little over a year ago. Since then, it’s helped us greatly with transparency, fairness, making it clear what we value, and helping everyone grow.
How it works
Our Growth Framework is general, and applies to all engineers, regardless of whether they are experts in platform, frontend, or mobile. Our criteria don’t relate to particular pieces of technology or our problem domain. We believe this makes the document more powerful, fairer, and more resilient, as it describes a particular technical culture and attitude, without coupling it to a codebase or a particular technical strategy.
We have four levels in our growth framework for Individual Contributors:
- Junior Software Engineer (1)
- Software Engineer (2)
- Senior Software Engineer (3)
- Staff Software Engineer (4)
From Senior Software Engineer (3), you can choose whether to continue on the Individual Contributor track, aiming to reach Staff Software Engineer (4), or you can switch to a people management track, aiming to become an Engineering Manager. Memrise values both paths equally. At the moment, we don’t have different levels for our Engineering Managers, although this will change in the future as the company grows.
The level of expectation for each behaviour increases with level. For example, the expectations for “solves complex technical problems” are different for level 1 engineers compared to level 3.
Behaviours are cumulative. For example, an engineer at level 3 should be exhibiting behaviours for levels 1 and 2 as well.
Successful behaviours should be occurring comfortably — without the engineer being overly stretched to achieve them — and consistently, reliably, and evenly over a period of time.
To be promoted, an engineer should demonstrate all behaviours in the next level.
The Framework
Our framework is broken down into Problem Solving, Impact, Communication and Leadership.
Problem Solving
Solves complex technical problems
Level 1
- Solves small, clearly scoped technical problems.
- Works through problems in a systematic way.
Level 2
- Independently solves clearly scoped small to medium technical problems.
- Can debug production issues in their area e.g. crashes on mobile, Sentry errors on backend.
Level 3
- Solves difficult technical problems independently.
- Can form scope for medium to large items and produce a high quality technical design outlining the solution.
- Makes good design trade-offs between maintainability, risk, performance, and speed of delivery.
Level 4
- Solves Memrise’s most challenging technical problems.
- Designs effective solutions to problems that span multiple problem domains, for example, backend/frontend, Android/iOS, data pipelines/infrastructure etc, collaborating with relevant specialists and picking up new domain knowledge if required.
- Finds strategic technical solutions for our strategic business problems.
Creates maintainable software
Level 1
- Adheres to all coding guidelines.
- Fixes their code when peer feedback is given.
Level 2
- Writes well designed maintainable code, with good unit test coverage.
- Improves our codebase through refactoring as part of work.
- Engaged in code review, providing intelligent and useful feedback and able to answer questions and discuss feedback received.
Level 3
- Makes significant contributions to improving the quality of our code, playing an active role in technical investment. For example, initiates refactors of areas that are hard to maintain, writes reusable code that increases the velocity of the team, introduces new technologies that simplify our work, etc.
- Produces thorough, high quality code reviews of complex work.
- Avoids reinventing the wheel and uses third party solutions where appropriate, understanding the trade-offs.
Creates software with few bugs
Level 1
- Makes mistakes, but learns from them.
- Writes unit tests, but may require assistance to ensure all cases are covered.
- Where automated tests are not practical, manually tests their own work.
Level 2
- Independently produces code with few bugs. In particular, code review and QA finds few errors in their work, and they ship few problems to production.
Level 3
- Produces work that inherently avoids complexity and bugs by design, e.g. makes good use of types, uses defensive programming techniques, avoids state, uses pure functions etc.
- Anticipates production problems that may occur after shipping and takes steps to avoid them, e.g. handles scalability, sets up monitoring and alerting for their features, thinks about all the different user devices and browsers etc.
Highly Productive
Level 1
- Has a basic level of productivity, according to the standards of the team.
Level 2
- Delivers clearly scoped work in a timely manner, according to the standards of the team.
- Actively working on increasing their rate of delivery by improving their knowledge of the language, frameworks, tools, and our codebase.
Level 3
- Prolific. Takes technical decisions and produces high quality work at a fast pace, according to the standards of the team.
Focused on improving at their craft
Level 1
- Strongly focused on learning how to be a good programmer.
Level 2
- Actively developing a broad expertise of the language and platform they work on, e.g. by reading books, websites and blogs, attending conferences, learning from their peers etc.
Level 3
- Has broad, expert knowledge of the language and platform they work on.
- Up to date with the latest developments in their areas of expertise, and judiciously applies this knowledge in their work.
- Proactively seeking to expand their knowledge further.
Impact
Proactively takes on problems
Level 1
- Enthusiastic about solving assigned problems.
- Volunteers for and solves small issues within their areas of knowledge.
Level 2
- Proactively takes on unassigned but important items in their team’s backlog.
- Takes on problems in unfamiliar areas.
Level 3
- Proactive about solving pressing technical problems e.g. creates tickets for important tech work and works on them
- Has a constructive attitude towards problems, not just identifying them but capable of progressing them as well.
- Identifies and takes responsibility for resolving technical and organisational blockers in the course of their work.
Level 4
- Plans and executes complex programs of work both individually and in conjunction with the team.
- Proactively enlists and builds consensus with other engineers and teams to solve problems.
- Initiates and champions work aligned with our company strategy and technical strategy.
Knows our systems well
Level 1
- Actively improving their knowledge of our systems and our problem domain.
Level 2
- Has a solid overview of the architecture of systems in their area, and how those systems fit into Memrise’s overall architecture.
Level 3
- Has a detailed understanding of Memrise systems in their domain.
- Has a basic understanding of how the rest of the systems at Memrise work.
Level 4
- Either of the following two -
- Has a detailed understanding of how some Memrise systems outside their domain work end to end.
- Has a solid understanding of an area of Memrise’s business outside of Tech. For example, paid marketing, language acquisition.
Focused on delivery
Level 1
- Clearly communicates their progress to the team.
- Focused on shipping in a timely manner.
Level 2
- Has a good sense of how much effort their work is likely to take.
- Understands the relative priority and urgency of their items.
- Identifies and communicates blockers, delays and risks to their colleagues when they encounter them.
- Follows up loose ends and ensures their resolution. Doesn’t leave things hanging.
Level 3
- Designs economic solutions to complex technical problems that balance cost and value.
- Actively works to establish the priority of items when it is unclear.
- Anticipates problems with delivery before they occur and communicates them in advance.
- Resolves ambiguity and edge cases in specifications when the work is unclear.
Level 4
- Coordinates the breakdown and implementation of work across different teams and domains.
Focused on the end user experience
Level 1
- When making technical tradeoffs, considers the impact on the experience of our users.
- Aware of how our product works and how their changes affect it.
Level 2
- Has a good understanding of our production instrumentation and how metrics relating to their area affect users e.g. Crashlytics, Datadog
- Takes responsibility for their work after it ships, following up problems, bugs and performance issues with their work.
Level 3
- Has a deep understanding of how implementation details affect the end user experience, and makes technical decisions with this in mind. For example, understands how using a particular data structure might affect perceived latency, or whether systems using eventual consistency might lead to user confusion.
Level 4
- Guides the team in improving the overall user experience from an engineering perspective. For example, identifies metrics to focus on that will improve perceived UX and forms a technical strategy to improve them, or suggests architectural changes that will lead to a smoother UI overall.
Communication and Leadership
Is a good communicator
Level 1
- Can discuss the design and approach for tasks they have worked on in depth.
- Respectful of their colleagues.
- Asks for help when they don’t know the answer.
Level 2
- Documents their code and their PRs empathetically, providing all the necessary context.
- Confidently negotiates implementation details with non-engineer colleagues, such as product managers and designers, communicating trade-offs and proposing constructive solutions.
- Can quickly and effectively explain complex technical issues in their area to other engineers.
- Provides useful, actionable feedback in code reviews.
Level 3
- Communicates empathetically, ensuring that they are understood by all.
- Ensures they understand the thinking of other members of the team as part of their decision making.
- Proactively shares their technical and Memrise-specific knowledge with the team via talks, documentation, and chatting.
- Writes good quality technical proposals, making the goals of the project clear, explaining all options, tradeoffs, and consequences.
- Provides high quality, in-depth feedback during code reviews, helping their peers find alternative solutions.
Level 4
- Shares high quality knowledge with other engineers in an effective way that results in positive impact.
- Communicates the connection between our company strategy and technical strategy to the rest of the team.
- Represents their team in discussions with other teams, technical and non-technical.
- Ensures that non-technical stakeholders have a sufficient understanding of projects at the correct level of detail.
Makes contributions that multiply the effectiveness of the team
Level 1
- Engaged with the goals of the team.
Level 2
- Participates constructively in technical discussions related to their area of expertise.
Level 3
- Improves the output of other engineers by providing them with guidance.
- Brings valuable new technical ideas to the team.
- Helps with the on-boarding of new engineers, ensuring they have all the information they need, and making them feel part of the team.
Level 4
- Inspires and lifts the level of other engineers.
- Guides the team in setting priority over technical investment work based on impact and need.
- Influences technical direction and vision across their domain.
Acts on feedback and provides constructive feedback to others
Level 1
- Listens and improves based on feedback.
Level 2
- Provides articulate feedback about their peers.
- Provides good feedback about the teams’ ways of working, although doesn’t necessarily know the solutions to problems.
Level 3
- Provides constructive, actionable feedback about their peers.
- Provides actionable feedback about the team’s ways of working.
Level 4
- Actively mentors / coaches less experienced engineers.