# Making a Career (Draft)
That is a draft page.
These are the expected competencies of team members at our company by job grade.
# Mastery levels for software engineers
# Intermediate Engineer
- Communicates in a clear and effective manner.
- Understands organization processes.
- Largely concentrates on growing themselves.
- Often works with other team members to grow their own understanding of the team’s domain through code reviews.
- Writes RFC.
- Participates in code reviews and uses best practices when giving and receiving feedback.
- Provides positive publically and negative feedback.
- Makes responsible decisions, identifying the consequences of each option, evaluating trade-offs and seeking advice from others when necessary.
- Thinks critically by understanding why something needs to be done, determining the root cause of the problem, identifying objectives and examining previous efforts.
- Shares knowledge with team members after becoming a domain expert.
- Gives positive feedback in public and negative feedback privately with care.
- Executes tasks in team projects, demonstrating ownership of them from conception to completion.
- Requires supervision to deliver projects in time, growing bias for action.
- Recognises complexity of the team’s product or the team’s process, and proposes solutions accordingly.
- Capable of implementing solutions based on the complexity, and asks for guidance when the complexity increases unexpectedly.
- Analyzes team processes and proposes areas where efficiency improvements can be made.
- Requests expert help from others recognizing that diverse opinions/experience improve the quality of their solution.
- Balances short term gains and long term benefit with team’s help. For example, advocating for technical debt resolution and understanding the opportunity cost in comparison to a quick customer win.
- Creates RFC for their team that clearly defines the problem, offers alternatives, and proposes a solution. These RFC are small in scope, looking to address problems with a small surface area.
- Incorporates Iteration in every aspect of your job.
- Considers quality, security, and performance on the tasks.
- Seeks guidance when blocked and iterates to a solution.
- Writes tests with every MR and works to uplift the quality of the code.
- Is aware of company established development processes.
- Able to detect security issues in other's code.
- Proactively looks for opportunities to eliminate technical debt by creating technical debt issues, resolving technical debt issues and writing quality code that reduces additional technical debt.
- Performs thorough reviews within their domain and submits helpful comments.
- Understands how to debug performance problems.
- When working in an existing code area, leaves it in a better state than before.
- Proficient or fluent with one or more database languages to design, create and manage databases.
- Proficient or fluent with programming languages and their frameworks.
- Aware of every code guidelines we follow.
- Able to use monitoring tools (site24x7, sentry, grafana).
- Develops documentation and instructions.
# Senior engineer
Communicates clearly and effectively, both written and verbally, when advising, setting expectations, or suggesting. improvements. This applies whether interacting with team members and customers.
Able to deliver work, even when given unclear requirements, within the context of their team.
Able to suggest alternative solutions to customer problems based on what they know about other areas of the product.
Looks for opportunities for process improvements within their team and works with others to implement process changes.
Leads technical architecture discussions and help drive technical decisions
Performs Code Reviews on a regular cadence
Engages with the stable-counterparts for their team looking at how to improve the working relationships and processes.
Represents their team, and considers the impact to the team, when in conversations with others.
Provides feedback that focuses on the business impact of the behaviour.
Demonstrates ownership of projects that require collaboration with other teams.
Leads conversations towards action and encourages bias for action to deliver results.
Helps others in their team to achieve their team's goals.
Follows up on suggestions that they make and issues that they create.
Seeks out ways to be more effective in their role, while also starting to mentor others in ways to work efficiently.
Proactively takes on work that enables greater efficiency of others in the team.
Seeks out diverse opinions to improve the quality of the team's work, for example through code review from outside the team.
Uses people's talents to maximize the results of their group.
Independently balances short term gains and long term benefit.
Creates RFC for the team that have a wide scope but still contain an iterative proposal for delivering the outcome.
Identifies opportunities to improve the processes around iteration.
Holds their team to a high standard of transparency and encourages others to work in the open.
Takes part in the hiring process to help ensure that we bring in a wide variety of experience into our teams.
- Contributes to the team’s understanding of quality and how it impacts the team’s domain with respect to their role.
- Able to resolve complex challenges and performance issues.
- Mentors others on best practices.
- Coaches others on improving their tests.
- Always looks to improve our test coverage with every MR coded or reviewed.
- Ensures security best practices are followed across many domains and escalate security risks
- Able to take on large issues with vague requirements and design an implementation.
- Implements the Iteration value when faced with an issue that grows in size or complexity by converting the issue into an Epic or breaking it down into smaller issues.
- Helps to set and enforce coding standards.
- Looks to maintain coding consistency across the code base.
- Identifies slow and inefficient code produced by team members
- Provides high level of expertise in programming languages that our company use.
- Understands the DB constraints.
# Staff engineer
Continually works with others across the organization to help team members grow their understanding of their team’s domain and technology.
Communicates clearly and effectively, both written and verbally.
Makes responsible decisions, and evaluates tradeoffs.
Exhibits a deep understanding of our products, how customers use them, and how they fit into the larger business.
Looks for opportunities for process improvements and opportunities to exhibit leadership for organizational initiatives.
Able to recognize a good solution when they see one, and able to clearly explain its merits to team members, community members, managers or customers.
Leverages their increasingly on-demand time to help others, efficiently unblock them and enable them to move forward.
Able to deliver results despite starting from unclear requirements.
Works frequently with other teams to coordinate major changes leading to efficient solutions
Performs Code Reviews across the projects on a regular cadence
Is able to take a long term goal and turn this into small actionable steps that can be implemented in an iterative way.
Champions a no-blame culture and encourages learning from mistakes.
- Has a broad skill-set with in-depth expertise in several areas.
- Blends technical, product and design strategy, helping the team to be more productive while interfacing with teams.
- Reaches beyond immediate needs, independently considering the longer-term, and is always looking beyond for ways to have a broad impact.
- Addresses cross-team challenges related to customers, quality and security.
- Able to take on cross-team complex requirements and decompose them into a proposal of small deliverables.
- Engages in the Architecture Practice to contribute to and help with the most challenging technical initiatives.
- Advocates for quality and makes sure it is everyone's responsibility.
- Mentors others on how to maintain and continue to raise the level of quality in everything we produce.
- Holds MRs to the high standards of our definition of done and collaborate with others to improve their implementation, tests and prevent any future regressions.
- Advocates for tech debt, customer issues, and high severity bugs.
- Advocates for security.
- Able to take on complex requirements and decompose them into a proposal of small deliverables.
- Able to quickly pivot a solution based on feedback or complexity.
- Acts as a gate keeper for quality.
- Vast knowledge of programming languages and their frameworks that our company use.
- Improves engineering standards, tooling, and processes