Learns to write semantic HTML and CSS following guidance and training materials
Learns to write correct JavaScript following guidance and training materials
Uses Chrome, React, and Redux DevTools effectively to increase productivity during development and debugging
Implements simple components
Fixes simple bugs
Asks questions and actions feedback from mentor
Uses git to manage the development workflow effectively
Checkout, Push, Pull, Branch, Diff, Merge, Stash, Rebase, etc.
Writes semantic HTML and CSS following accepted best practices
Uses appropriate algorithms and data structures to solve problems
Writes Flow types to statically type-check the code at compile-time
Writes automated unit and end-to-end tests following accepted best practices
Deploys web services into staging and production following our deployment guidelines
Assists on the design of new features and components
Solves well-defined tasks within our current developer abstractions
Integrates with backend APIs and handles successful and failed responses properly
Works with users to improve new and existing simple features iteratively
Uses a keyboard and screen-reader to manually test their application for accessibility issues
Runs automated auditing tools such as Lighthouse before submitting a PR for review
Demonstrates awareness of a range of security considerations, and mitigates against them
Has multiple examples of where performance was considered as part of a solution
Applies fundamental UX and accessibility principles to common problems such as form design
Referencing (and improving) existing Design Systems where possible
Writes correct JavaScript code following accepted best practices
Follows our JavaScript Coding Conventions & Best Practices; uses language-level primitives correctly
Implements simple components following accepted best practices
Follows React Development Conventions & Best Practices; uses component state and lifecycle methods correctly
Uses shared libraries to reuse existing functionality
E.g. lib.money, lib.api, lib.identity-verification, etc.
Uses appropriate design patterns to solve problems
Identifies obvious deficiencies in the development processes and supports activities to improve them
Assists more experienced engineers on the design of larger features
Modifies and improves code outside of the developer abstractions and reasons about the improvements effectively
Fixes bugs in asynchronous code
Debugs production issues
Explains developer abstractions and how to contribute to them to other engineers
Collaborates with designers and user researchers to create prototypes and to evaluate them
Differentiates between user needs and desires and prioritises accordingly
Implements non-trivial components
Uses modern CSS features like flex-box, grid, media-queries, selectors, etc
Uses advanced component patterns higher-order components, render props, controlled components, compound components
Writes effective asynchronous code
Demonstrates solid understanding of the JavaScript runtime; reasons effectively about the runtime behaviour of asynchronous code; uses async/await, generators and Redux-Saga’s to implement asynchronous code
Writes effective JavaScript by applying fundamental functional and reactive principles and techniques where appropriate and guides others in so doing
Uses uses event streams, immutable data structures, pure functions, functional composition, memoization, etc.
Considers metrics when developing, and uses appropriate services to check quality levels
A range, from services such as Lighthouse, WebPageTest, WAVE etc
Writes code that serves as a definitive example for new engineers
Makes contributions to library code or other core parts of the applications
Makes contributions to our development tools and build processes
Writes complex asynchronous and concurrent code
Identifies optimisation opportunities in the development process and contributes to the implementation of proposed solutions
Builds maintainable and flexible components and applications
Leads the refactoring of complex parts of the system
Debugs and fixes complex issues at speed
Identifies and fixes security weaknesses
Identifies and fixes performance bottlenecks in applications
Explains all aspects of the web platform to new engineers
Implements services or libraries that require a deep level of domain knowledge
Puts users first and can manage competing priorities effectively
Makes major contributions to library code or core parts of the application
Contributes to external technologies or libraries that we depend on
Anticipates platform and project needs, technical debt and common issues intuitively
Develops clear technical solutions from ambiguous requirements
Produces technical designs for large complex projects
Demonstrates a deep level of knowledge in a specific area
Serves as a technical authority on a technology or an area of the codebase
Reviews technical designs and pull requests for large complex projects
Encourages and supports other engineers to achieve outstanding results
Creates major contributions to our documentation, and creates documents that provide guidelines and best practices to other engineers
Works with technical and non-technical stakeholders to identify high-level requirements and turns them into discrete technical concerns
Makes major contributions to technologies and libraries that we depend on
Uses a risk-based approach and manages technical debt systematically to focus the team’s design and development efforts on the most important problems
Works with business and technology stakeholder to translate difficult business problems into technical designs, thereby ensuring that the organisation derives maximum value from services
Identifies architecturally significant functional and non-functional requirements, identifies conflicts among them, and defines possible trade-offs scenarios
Articulates high-level technical goals, concerns, trade-offs, and decisions to the rest of the company effectively
Facilitates technical decision making in complex and ambiguous situations
Promotes architectural thinking and good engineering practices at scale
Makes improvements that affect important non-functional requirements that have an effect on the entire web-platform
Serves as a technical authority in the wider engineering community
Identifies and explores opportunities for service and business improvement