About the role
We're looking for a .NET software engineer to join our small team building the platform that powers Koala Legal, a modern conveyancing firm based in Sheffield.
You'll work across the full stack: server-rendered Razor Pages, PostgreSQL, Azure Container Apps, and a Tailwind CSS frontend enhanced with Alpine.js and Alpine-AJAX for partial page updates without full reloads. No SPAs, no GraphQL, no microservices for the sake of it. We use server-side rendering because it's the right tool for the job, and we keep things simple because simple systems are reliable systems.
This is a greenfield platform built from scratch in 2026. There's no legacy to wrestle with, but there's plenty to build. You'll ship features end-to-end, from writing the EF Core migration to deploying via our GitHub Actions pipeline.
What you'll work on
- $ A case management portal that tracks property transactions from instruction to completion
- $ A partner portal used by estate agents for referrals, quoting, and commission tracking
- $ A client-facing portal with real-time progress updates and WhatsApp notifications
The stack
What we're looking for
You don't need to tick every box. We care more about how you think than what you've memorised.
- $ Strong experience with C# and .NET (ASP.NET Core, EF Core)
- $ Comfortable with relational databases (PostgreSQL or SQL Server)
- $ You write clean, readable code and care about getting the domain model right
- $ Happy working across the stack, including HTML, CSS, and a bit of JavaScript
- $ You prefer simple solutions and know when not to add an abstraction
- $ Bonus: experience with Azure, Docker, IaC, or CI/CD pipelines
How we work
We deploy to production multiple times a day. Every migration is backwards-compatible for zero-downtime rollouts. We use feature branches, pull requests with preview environments, and automated pipelines that build, test, and deploy.
We don't have a QA team. Engineers own what they ship. We write tests where they matter, not to hit a coverage target. We keep dependencies minimal and don't reach for a library when 20 lines of code will do.
We pair when it helps. We work independently when it doesn't. No standups for the sake of standups.