Learns to write correct Go code, following guidance and training materials
Fixes simple bugs or issues
Proactive in asking questions, explains what they have tried so far and why that hasnāt worked
Asks questions and actions feedback from PRs and other engineers
Uses git to manage the development workflow effectively E.g. Checkout, Push, Pull, Branch, Diff, Merge, Stash, Rebase, etc.
Designs simple database tables
Implements asynchronous messaging between services
Deploys services to staging and production
Handles simple error cases in RPC handlers and message consumers
Fixes bugs involving a number of services and can investigate production issues
Uses appropriate algorithms and data structures to solve problems
Implements simple RPC handlers
E.g. Basic CRUD handlers, Internal/external API proxies
Writes correct Go code following accepted best practices
Follows our Coding Conventions & Best Practices, uses language-level primitives correctly
Uses appropriate design patterns
Designs new schemas comprising multiple tables
Implements complex asynchronous messaging flows
Co-ordinates complex deployments and database migrations
Implements distributed systems consisting of multiple interacting services
Produces technical designs that include a consideration of scalability
Handles complex error cases in RPC handlers and message consumers
Debugs production issues
Considers metrics when building a new system
Writes idiomatic Go code
E.g. Follows the guidelines in Effective Go, avoids using patterns that are idiomatic in other languages
Mitigates race conditions and partial failure states in distributed systems
E.g. Uses locking where appropriate, writes code that is āself-healingā when dealing with distributed failure (e.g. data needs to be written in two or more services)
Implements complex RPC handlers
E.g. Implements complex business logic, orchestrates multi-stage processes, deals with idempotency or distributed data sources
Proactively considers security implications of their work
Appropriately ties down internal access to resources they're working with (e.g. RPC blacklisting, BigQuery permissions)
Evaluates security risks when contributing to proposals
Highlights potential security issues when raising and reviewing pull requests - e.g. adding rate limiting in an API, or leaving a code comment to explain why we choose not to
"There's a risk here of X, Y but given Z, I think this is OK"
Loops in Security when their squad is unsure about something by posting in #security-requests
Writes code that serves as a definitive example for new engineers
Leads the refactoring (de-cruftification) of complex systems
Debugs complex production issues at speed
Identifies and fixes security vulnerabilities
Identifies and fixes performance bottlenecks in individual services
Explains all aspects of the platform to new engineers
Includes actionable dashboarding as part of a new system
Implements services or libraries that require a deep level of domain knowledge
E.g. Mastercard message parsing, Credit decisioning, CASS scheduling, Google Pay
Makes contributions to library code or core services
E.g. Bug fixes, small improvements; things that donāt result in a major change in the public API
Builds systems that scale reliably without intervention
E.g. Services can withstand a yearās worth of growth in load/user base without needing first aid
Builds systems that serve as definitive examples for new engineers
Makes major contributions to library code or core services
Contributes to external technologies or libraries that we depend on
Develops clear technical solutions from ambiguous requirements
Uncovers and fixes tricky bugs that have previously evaded detection
Implements security improvements that impact multiple services
Implements performance improvements that impact multiple services
Demonstrates a deep level of knowledge in a specific area
Serves as a technical authority on a technology or an area of the codebase
Creates dashboards that broadly impact all engineers
Produces clear technical designs for large complex projects
E.g. Outbound and Inbound MasterCard clearing proposals
Makes major contributions to technologies and libraries that we depend on
Makes improvements to the stability, performance or security of the entire platform
Serves as a technical authority in the wider engineering community