The role
You will lead a small product engineering team while staying close to the code. This is not a role where you hand the technical work to somebody else. You will set direction, make pragmatic architecture decisions, help the team deliver reliably and step into the difficult engineering work when that is where you add most value.
Our estate is mixed. We have modern .NET and React applications, older .NET and VB.NET systems, SQL-heavy business logic, APIs, integrations and mobile components that still matter to day-to-day operations. We need someone who can own what we have today and help us modernise it sensibly, without rewriting things just because they are old.
The estate you are joining
A significant part of the estate is legacy and business-critical. You will work with VB.NET and C# applications on .NET Framework, ASP.NET Web Forms, SQL Server databases with substantial business logic in stored procedures, older integration patterns and applications that have evolved over many years. Alongside that, we already have newer .NET, React/TypeScript, APIs and Azure services in production.
This is not a greenfield rewrite. The job is to understand what we have, keep it reliable and make sensible decisions about what to leave alone, what to improve in place and what to modernise. Over time we are moving toward modern .NET, clearer APIs, stronger automated testing, repeatable CI/CD, infrastructure as code and better use of Azure platform services.
What you will be responsible for
Technical leadership and architecture
- Own the technical direction for the products and services within your team, aligned with the wider Engineering & Data architecture.
- Lead solution design, make clear technical decisions and document the important ones.
- Make sure solutions are secure, maintainable, observable, supportable and proportionate to the problem being solved.
- Understand the end-to-end production stack for your products and lead the technical response to complex incidents and root-cause investigations.
- Make sensible trade-offs between legacy support, technical debt, delivery pressure and new capability.
- Help shape common engineering patterns across applications, APIs, integrations, data access and cloud services.
Delivery and engineering standards
- Take accountability for the technical delivery of the team's work from refinement through to production.
- Work with Product and QA to make sure work is understood, testable and small enough to deliver safely.
- Raise risks, dependencies and blockers early and give stakeholders a clear view of technical health and delivery confidence.
- Set and improve standards for code quality, automated testing, security, logging, monitoring, source control and CI/CD.
- Promote smaller, safer daytime releases and reduce unnecessary manual deployment steps.
- Use metrics and production learning to improve engineering performance, reliability and delivery flow.
People leadership
- Line manage a small group of engineers, typically around four direct reports.
- Run useful 1:1s, performance and development conversations and give clear, timely feedback.
- Coach engineers through pairing, code reviews, technical guidance and hands-on support.
- Build capability across the team and reduce single points of dependency around people or systems.
- Create a team culture where people can challenge decisions, ask for help and take ownership.
Hands-on engineering
- Contribute directly to complex, high-risk or high-impact engineering work.
- Design and build full-stack solutions across front-end, back-end, APIs, integrations and data access.
- Lead code reviews and help the team write testable, maintainable code rather than simply getting changes over the line.
- Diagnose production issues using logs, telemetry, SQL, profiling and application monitoring tools.
- Support the modernisation of legacy code in manageable steps while keeping business-critical services stable.
Technology you will work with now
- C# and .NET across both the current and legacy estate, including .NET Framework, ASP.NET Web Forms, ASP.NET Core, REST APIs and background/service workloads.
- React, JavaScript/TypeScript and Redux-style front-end patterns, with Blazor also present in the wider engineering landscape.
- Microsoft SQL Server and T-SQL, including applications with significant database-side logic.
- Entity Framework, Dapper and other pragmatic data-access approaches.
- Git, Azure DevOps, YAML pipelines and CI/CD.
- Azure services used to host and integrate applications, including App Service, Functions, API Management, Logic Apps, Storage, Key Vault, networking, identity and monitoring where relevant.
- Application Insights, Log Analytics and structured application telemetry for diagnosis and support.
- Legacy .NET and VB.NET applications that still support important business processes.
- Xamarin and .NET MAUI or similar mobile technologies where they remain part of the product estate.
Where we are heading
- More consistent modern .NET and Azure application patterns.
- Reusable CI/CD templates, infrastructure as code and stronger DevSecOps practices.
- Playwright and wider automated test coverage built into normal delivery.
- Better observability, structured logging and production diagnostics.
- Clearer API and integration boundaries, with less point-to-point or manually managed integration.
- Progressive replacement of unsupported legacy technology without destabilising the services that depend on it.
- Smaller, safer releases with clear ownership and better deployment confidence.
- Better use of Azure landing zones, Bicep and platform standards so teams can deploy consistently rather than reinventing infrastructure for every application.
What we are looking for
- Strong commercial experience as a senior or lead software engineer with substantial hands-on delivery experience.
- Strong C#/.NET capability and experience designing, building and supporting production APIs and web applications.
- Good front-end experience with React/TypeScript or a comparable modern framework.
- Strong SQL and relational database understanding, including the ability to diagnose application and performance problems that cross the application/database boundary.
- Good judgement around architecture and technical trade-offs, including knowing when not to introduce new technology.
- Experience with automated testing, CI/CD, source control and cloud delivery.
- Experience leading engineering delivery and raising standards across a team.
- People leadership or line-management experience, or clear evidence that you are ready to take it on.
- Able to explain technical decisions clearly to engineers, Product colleagues and non-technical stakeholders.
Useful experience, but not essential
- Azure API Management, Functions, Logic Apps, Service Bus or integration-heavy application estates.
- Blazor, VB.NET or modernising older .NET applications.
- Playwright, DevSecOps tooling, infrastructure as code or Bicep.
- Healthcare, regulated environments or systems where reliability and auditability matter.
How success looks
The team delivers predictably, production issues are easier to diagnose, quality is designed in rather than inspected at the end, engineers are growing in capability, and the product estate becomes easier to support and change over time. The role will normally remain around 60-80% hands-on depending on the needs of the team.

