{"id":162680,"url":"https://alion.io/job/appnovation-backend-developer-net","title":"Backend Developer (.NET)","company":{"id":58181,"name":"Appnovation","domain":"appnovation.com","url":"https://alion.io/company/appnovation","size_band":"201-500","is_staffing_agency":false,"employer_type":"direct","is_intermediary":false,"listed_via":null,"ats_vendor":"Greenhouse","truth_index":{"grade":"A","score":97,"open_postings":3,"ghost_share":0,"stale_share":0.333,"repost_share":0,"time_to_fill_p50_days":14,"computed_at":"2026-10-17T05:46:00Z"}},"role":"Backend","role_family":"Backend","seniority":"senior","employment_type":null,"work_mode":"on_site","remote_scope":null,"remote_scope_basis":null,"remote_working_hours":null,"hiring_geo_confidence":"explicit","locations":["Vancouver, Canada"],"countries":["CA"],"hiring_countries":[],"hiring_countries_total":0,"salary":null,"salary_estimate":{"min_usd":92000,"max_usd":196000,"period":"year","method":"role_seniority_country_remote_cell","sample_n":343},"experience_years_min":5,"visa_sponsorship":false,"relocation_package":false,"has_equity":false,"technologies":[{"name":"ASP.NET Core","optional":false},{"name":"C#","optional":false},{"name":"CI/CD","optional":false},{"name":"ClickHouse","optional":false},{"name":"Confluence","optional":false},{"name":"Docker","optional":false},{"name":"Entity Framework Core","optional":false},{"name":"Git","optional":false},{"name":"GitLab","optional":false},{"name":"GitLab CI","optional":false},{"name":"Jira","optional":false},{"name":"Keycloak","optional":false},{"name":"Moq","optional":false},{"name":"Next.js","optional":false},{"name":"Playwright","optional":false},{"name":"PostgreSQL","optional":false},{"name":"Rest API","optional":false},{"name":"Scrum","optional":false},{"name":"SQL","optional":false},{"name":"Swagger","optional":false},{"name":"Temporal","optional":false},{"name":"Testcontainers","optional":false},{"name":"xUnit","optional":false},{"name":"Go","optional":true},{"name":"Java","optional":true},{"name":"JavaScript","optional":true},{"name":"OpenTelemetry","optional":true},{"name":"React.js","optional":true},{"name":"TypeScript","optional":true}],"status":"live","first_seen_at":"2026-08-27T01:36:52Z","employer_posted_date":"2026-10-16","last_verified_at":"2026-10-18T01:19:26Z","board_verified":true,"closed_at":null,"days_open":52,"trust":{"level":"ok","repost_count":1,"flags":[],"days_open":51},"description":"About us\nAppnovation is the AI Product Company. Headquartered in Vancouver, Canada, with teams around the world, Appnovation builds AI products, delivers enterprise AI and digital solutions, and co-invests with clients to bring new AI products to market.\nOpen source has been the foundation of Appnovation's work since 2007, and it remains the foundation underneath every AI product the company builds today. Appnovation teams work with organizations in highly regulated industries, including global leaders such as Pfizer, Google and AstraZeneca, to help them adopt AI they can govern and own.\nAs a Senior Software Engineer - Backend, you will build the .NET services that carry the core business logic of a modern operational SaaS platform for K-12 education. The platform automates administrative processes for school divisions, so the backend work is workflow-heavy and integration-heavy: you will develop REST APIs consumed by a Next.js frontend, implement durable multi-step business processes as Temporal workflows, build worker services for asynchronous and scheduled processing, and write the integration services that publish and consume events across system boundaries.\nYou will work as part of a dedicated, cross-functional scrum team that operates as an embedded extension of the client's engineering organization. The team includes business analysis and QA capability and owns assigned product services end-to-end - from refinement through development, testing, documentation, and release readiness. You will work directly in the client's repositories, follow their established architecture and engineering standards, and deliver in small, reviewable increments.\nThe data layer spans a PostgreSQL transactional model and a ClickHouse analytics store, with authorization enforced through Keycloak and OpenFGA - a real requirement in a multi-tenant product where an administrator in one school division must never see another's data. The platform is moving from pilot deployments toward general availability, so this is a role for a senior engineer who cares about correctness in distributed systems - idempotency, retries, and what happens when the third call fails - and who is ready to own significant slices of the platform with minimal supervision.\nKey Responsibilities:\nDeveloping and maintaining .NET Core REST APIs, including versioning, validation, error semantics, and Swagger/OpenAPI documentation\nBuilding worker services for background, scheduled, and queue-driven asynchronous processing\nWriting integration services that publish and consume events over pub/sub, against clearly defined message contracts\nModelling and querying relational data in PostgreSQL using Entity Framework Core, including migrations and query performance tuning\nBuilding and maintaining API calls into ClickHouse\nEnforcing authorization in application code against OpenFGA policies, and integrating with Keycloak for OAuth 2.0 / OpenID Connect authentication and SSO\nProducing technical analysis and implementation plans for significant changes, and delivering work in small, reviewable merge requests\nWriting unit, integration, and API tests, and contributing to the Playwright end-to-end suite where backend behaviour is under test\nParticipating in code review, responding to CodeRabbit findings, and keeping GitLab CI/CD pipelines green\nInstrumenting services with logging, metrics, and tracing to support production diagnosis\nParticipating in refinement, planning, review, and retrospective as a member of a self-directed scrum team, and raising missing business decisions early\nTaking ownership of feature areas end to end, from technical design through release and support\nMaintaining technical implementation and API documentation as part of the definition of done, not after it\nResolving defects and supporting post-release stabilization of recently delivered functionality\nMentoring less experienced engineers through code review and pairing\nWhat we are looking for\nMust-Have:\nAt least 5-7 years of professional backend development experience with C# and .NET in production environments\nStrong command of .NET Core, ASP.NET Core Web API, and Entity Framework Core\nDemonstrated experience building RESTful APIs consumed by real frontend or third-party clients\nSolid relational data modelling and SQL skills in PostgreSQL or an equivalent RDBMS, including query performance tuning\nPractical experience with asynchronous processing - background workers, message queues, or scheduled jobs\nWorking understanding of async/await in .NET and the failure modes that come with it\nUnderstanding of event-driven and pub/sub patterns, including at-least-once delivery and idempotent consumers\nExperience integrating with an identity provider using OAuth 2.0 and OpenID Connect\nComfortable working inside an existing codebase and an established set of engineering standards, rather than setting your own\nDisciplined approach to automated testing across unit, integration, and API layers\nUnderstanding of what makes automated tests durable - avoiding hard-coded waits, brittle selectors, shared test state, and environment-specific assumptions\nComfortable working in a Git-based workflow with CI/CD and peer code review\nMust be located in Vancouver, British Columbia, Canada\nTechnologies\nLanguages/Frameworks: C#, .NET Core, ASP.NET Core, Entity Framework Core\nAPIs: REST, OpenAPI/Swagger, API versioning\nWorkflow and Async: Temporal workflows, worker services, asynchronous processing, event-driven pub/sub, integration services\nDatabases: PostgreSQL, ClickHouse, EF Core migrations, query optimization\nIdentity and Authorization: Keycloak, OpenFGA, OAuth 2.0, OpenID Connect, role- and policy-based authorization\nTesting: xUnit/NUnit, Moq, Testcontainers, unit, integration and API testing, Playwright end-to-end testing\nBuild/Deploy/Tooling: GitLab, GitLab CI/CD, CodeRabbit automated code review, Docker, Jira, Confluence\nNice-to-Have:\nExposure to ClickHouse or another columnar/OLAP store for reporting workloads\nFamiliarity with fine-grained authorization models (OpenFGA, Zanzibar-style ReBAC)\nHands-on Temporal experience, including workflow versioning and testing strategies\nWorking knowledge of TypeScript and React, enough to trace an issue across the stack\nExperience with distributed tracing and structured observability (OpenTelemetry)\nFamiliarity with Domain-Driven Design and CQRS patterns\nSaaS product delivery experience, particularly through a pilot-to-GA transition\nExperience with Canadian public-sector or education data privacy requirements (PIPEDA, provincial FIPPA), including data residency considerations\nExperience in a consulting or client-facing delivery environment\nWho you are\nYou are a careful engineer who thinks about failure modes before writing the happy path, and who leaves code easier to change than you found it.\nYou ask questions early, communicate clearly when something is off track, and take testing seriously rather than treating it as a step after the work.\nYou treat a feature as incomplete until it is tested, documented, and supportable - finishing the code is the middle of the job, not the end.\nThank you for your interest in a career with Appnovation Technologies! Please note that only those selected for an interview will be contacted.\nAt Appnovation, we recognize that diverse teams are the strongest teams. Diversity, Equity & Inclusion is not only something that we embrace - we celebrate it! We are proud to be an Equal Opportunity Employer and we encourage applicants from all backgrounds, lived experiences and industries to apply. Come join us at Appnovation, and learn more about how we stay true to our company values as we build better lives through better digital. \n\nAccommodations are available upon request throughout the recruitment process.","description_format":"text","description_chars":7805,"description_truncated":false,"requirements":{"experience_years_min":5,"management_years_min":null,"team_size_min":null,"manages_managers":false,"education":null,"security_clearance":false,"languages":[]},"benefits":["Equity"],"hiring_locations":[{"name":"Canada","iso":"CA","kind":"country"}],"hiring_excludes":[],"relocation_offered":false,"industries":["Web Design","Web Development Services","Custom Software Development"],"lifecycle":[{"event":"open","at":"2026-08-27T01:36:52Z"},{"event":"close","at":"2026-09-23T13:38:25Z"},{"event":"reopen","at":"2026-10-16T22:46:09Z"}],"visa":[],"liveness":{"score":17,"band":"cold","label":"Long shot","p_open":1,"p_active":0.492,"p_room":0.35,"age_days":51,"expected_fill_days":14,"reasons":["conf:3","velocity","win:tail"],"computed_at":"2026-10-17T05:46:00Z"},"pay":null,"html_url":"https://alion.io/job/appnovation-backend-developer-net","json_url":"https://alion.io/job/appnovation-backend-developer-net.json","meta":{"generated_at":"2026-10-18T01:41:41Z","cache_seconds":300,"methodology":"https://alion.io/methodology","terms":"https://alion.io/terms","contact":"https://alion.io/contact","api":"https://alion.io/developers","about":"Alion is a live layer of people, companies and AI agents: who they are, whether they are real and active right now, what they do and how to work with them, readable by people and by agents and paid per call.","catalog":"https://alion.io/catalog.json","usage":{"tier":"crawler_verified","counted_by":"address","units_charged":1,"used_today":2809,"day_limit":null,"remaining_today":null,"minute_limit":300,"resets_at":"2026-10-19T00:00:00Z"}},"offers":[{"id":"company.slices","title":"One company in depth, by slice","status":"live","price":{"credits":0.02,"usd":0.002,"plus_per_slice":{"credits":0.05,"usd":0.005}},"unit":"per company, plus each slice with data","note":"the employer in depth","call":{"mcp_tool":"get_company","arguments":{"id":58181},"rest":"https://alion.io/mcp/rest/get_company?id=58181"},"human":"https://alion.io/catalog?offer=company.slices&for=job%2Fappnovation-backend-developer-net"},{"id":"market.stats","title":"A market slice: pay, demand and time to fill","status":"live","price":{"credits":1,"usd":0.1},"unit":"per slice","note":"pay, demand and time to fill for this role and place","call":{"mcp_tool":"market_stats"},"human":"https://alion.io/catalog?offer=market.stats&for=job%2Fappnovation-backend-developer-net"},{"id":"job.search","title":"Open jobs by role, technology, place, pay and visa","status":"live","price":{"credits":0.02,"usd":0.002},"unit":"per posting in a list","note":"similar open postings","call":{"mcp_tool":"search_jobs"},"human":"https://alion.io/catalog?offer=job.search&for=job%2Fappnovation-backend-developer-net"},{"id":"company.verify","title":"Is this company real and active right now","status":"pilot","price":null,"unit":"per company","request":{"url":"https://alion.io/catalog/request","method":"POST","body":"{\"offer\": \"company.verify\", \"for\": \"job/appnovation-backend-developer-net\", \"note\": \"what you need it for\"}"},"human":"https://alion.io/catalog?offer=company.verify&for=job%2Fappnovation-backend-developer-net"}]}