← Role Archetypes
Individual Contributor Track

Intermediate Software Engineer

SFIA 3-4
GE JSE ISE SSE
TTL EM
LSE Arch
HoE VP

Delivering features end-to-end with minimal guidance, contributing to technical design, and beginning to share knowledge and raise standards across the team.

Overview

As an Intermediate Software Engineer, you deliver features and improvements end-to-end with minimal guidance. You understand the team's systems well enough to make sensible technical decisions within a defined scope, and you contribute meaningfully to design discussions rather than just implementation.

You are beginning to look beyond your own work - helping colleagues, improving team practices, and raising the quality bar around you. You are not yet expected to lead technical direction, but you are expected to be a reliable, high-quality contributor who makes the team better.

Key Responsibilities

End-to-End Delivery

  • Deliver complete features from technical design through implementation, testing, and deployment.
  • Make sound technical decisions within your domain with minimal direction.
  • Manage your own delivery commitments accurately - estimating, tracking, and communicating progress.
  • Identify and resolve ambiguity in requirements before they become delivery blockers.

Technical Contribution

  • Contribute to technical design discussions with well-reasoned proposals.
  • Write high-quality, well-tested code that serves as a positive example for the team.
  • Conduct thorough, constructive code reviews that improve quality and share knowledge.
  • Identify and address technical debt within your area of work.

Team Contribution

  • Mentor graduate and junior engineers through pairing and code review.
  • Share knowledge through documentation, internal talks, or team discussions.
  • Contribute to the improvement of team processes, tooling, and practices.
Role Specific

Feature Ownership

Own the full lifecycle of medium-complexity features, including design, implementation, testing, deployment, and handover to operations or support.

Design Contribution

Participate actively in technical design sessions, proposing solutions and raising concerns with clear reasoning.

Knowledge Sharing

Actively share what you know - through pairing, documentation, code review, and team discussion - raising the overall capability of the team.

Junior Mentoring

Provide meaningful guidance and feedback to graduate and junior engineers, accelerating their development through structured support.

Behaviours

Learning & Growth

  • Continuously develops technical depth in the team's core languages, frameworks, and tooling.
  • Seeks stretch opportunities - taking on problems slightly beyond current comfort to accelerate growth.
  • Reflects on delivery outcomes - what went well, what could be improved - and applies those lessons to subsequent work.
  • Engages with the broader engineering community through reading, conferences, or external communities of practice.
  • Identifies patterns in the feedback they receive and works systematically to address underlying weaknesses.
  • Discusses career development goals honestly with their TTL, including aspirations and the gaps to address.
  • Learns from colleagues across disciplines - product, quality, operations - not only from other engineers.

Delivery

  • Delivers consistently without requiring close oversight, managing scope and quality end-to-end.
  • Identifies risks and ambiguities early and resolves them proactively, before they become blockers.
  • Takes responsibility for the quality of their output, not just the completion of tasks.
  • Manages sprint commitments accurately, re-forecasting and communicating clearly when circumstances change.
  • Owns the deployment of their features through the release pipeline, resolving issues as they arise.
  • Coordinates dependencies with other teams or components early, avoiding late-stage integration surprises.
  • Verifies delivered features in production or staging environments, not only in local or CI contexts.

Quality & Craft

  • Writes high-quality, well-tested code that serves as a positive reference for the team.
  • Applies test-driven development or a strong testing discipline consistently across all delivered work.
  • Conducts thorough, constructive code reviews that improve both code quality and reviewer understanding.
  • Identifies and addresses technical debt within their area of work, not only when directed to do so.
  • Considers non-functional requirements - performance, security, maintainability - as part of feature design.
  • Raises quality concerns before merging rather than filing post-release issues.
  • Sets a visible quality standard through their own work that encourages others to match it.

Communication

  • Communicates technical decisions and trade-offs clearly to both engineers and non-technical stakeholders.
  • Writes design documents and ADRs that are structured, well-reasoned, and accessible to the team.
  • Provides specific, actionable code review feedback that explains the reasoning, not just the correction.
  • Gives and receives feedback in a direct, respectful, and constructive manner.
  • Runs or contributes meaningfully to technical discussions without dominating or dismissing others.
  • Updates tickets and PRs with sufficient context that the team can follow the decision trail without asking.
  • Flags delivery risks to their TTL early, with a clear explanation and a proposed path forward.

Collaboration

  • Actively improves the team around them, not just their own contribution.
  • Gives feedback in code review that is specific, constructive, and kind, and receives feedback the same way.
  • Works across disciplines - with product managers, quality engineers, and operations colleagues - without friction.
  • Contributes to retrospectives with specific, thoughtful observations and follows through on agreed actions.
  • Supports graduate and junior engineers in ceremonies and pairing sessions, creating space for them to contribute.
  • Raises process or tooling improvements with clear reasoning rather than just raising complaints.
  • Builds trust through consistent, reliable behaviour that colleagues can depend on.

Ownership

  • Takes full ownership of features from design through to live, including post-deployment verification.
  • Makes sound technical decisions within their domain without needing to escalate every choice.
  • Knows when a decision is within their remit and when to involve a senior engineer or architect.
  • Balances pragmatism with quality - delivering working software without creating unnecessary debt.
  • Proactively identifies and addresses risks rather than waiting to be asked.
  • Takes initiative to improve things they notice are broken or inefficient, not only what is assigned to them.
  • Holds themselves accountable to the commitments they make in planning, and communicates honestly when those change.

Technical Foundation

  • Applies strong working knowledge of the team's primary languages, frameworks, and tooling across complex features.
  • Designs components and feature-level solutions with sound structure and clear separation of concerns.
  • Writes and maintains comprehensive automated test suites as a standard part of delivery.
  • Manages configuration and environment-specific concerns confidently across the delivery pipeline.
  • Understands and operates the team's release and deployment processes, resolving pipeline failures independently.
  • Contributes to systems integration work, understanding how components interact and where failure modes arise.
  • Contributes meaningfully to architectural discussions at the service or component level, reasoning about trade-offs with evidence.

Knowledge Sharing

  • Shares knowledge generously and without gatekeeping, through pairing, documentation, and team discussion.
  • Mentors graduate and junior engineers actively, providing structured feedback and creating learning opportunities.
  • Contributes to internal documentation - runbooks, ADRs, onboarding guides - as a regular part of their work.
  • Facilitates or contributes to team learning sessions, internal demos, or guild discussions.
  • Helps colleagues understand the rationale behind technical decisions, not just the outcome.
  • Identifies knowledge gaps in the team and takes steps to address them through structured sharing.
  • Ensures the knowledge required to operate, support, or extend their work is captured and accessible before handover.
Skills
Strong working knowledge of the team's primary languages, frameworks, and tooling.
Ability to design and implement features end-to-end across the full stack where required.
Experience with test-driven development and comprehensive automated test suites.
Comfortable contributing to architectural discussions at the service or component level.
Strong written communication - design documents, ADRs, technical handovers.