All work

Netcompany · Oct 2024 – Present

KOMBIT VALG

IT ConsultantAarhus, DenmarkNetcompany

Full-stack engineering on Denmark's national administrative election platform: a programme owned by KOMBIT and delivered for Danish municipalities.

Visit KOMBIT VALGProgramme page on KOMBIT, not a public-facing product. My contribution was on the delivery teams.

KOMBIT VALG is the digital backbone Danish municipalities use to plan, run, and report on elections: referendums, parliamentary, municipal, regional, and EU. KOMBIT is the IT-procurement company owned by Local Government Denmark (KL); they commission the platform on behalf of the country's 98 kommuner, and Netcompany is the supplier responsible for building and operating it. Public-sector software, public-sector scrutiny, public-sector deadlines that do not move.

I joined the programme in October 2024 as a full-stack engineer in one of the delivery teams. The system portfolio spans several services with C# / .NET on the back end, Angular on the front end, MS SQL for storage, and Azure DevOps for source control, pipelines, and work tracking. Around it sit the integrations every Danish public-sector platform eventually needs: identity, registries, document handover, notification, and the various data exchanges municipalities depend on during a poll cycle.

My focus areas have been the unglamorous-but-load-bearing ones:

  • Quality and testability: keeping a wide test pyramid under control as the code evolves; preferring pure, deterministic logic where the shape of the problem allows it; treating code review as a design conversation, not a checklist.
  • Integrations: connecting with surrounding services and registries, paying close attention to contracts, error semantics, and what happens when a dependency degrades on election day.
  • Release management and incident handling: release windows that have to land cleanly, and the kind of calm, structured response you want when something does not.

The work suits how I prefer to operate: small daily commitments, careful trade-offs, and a strong sense that the people on the other end of the system are real, with election secretaries in real town halls, on real deadlines, and no margin for error.

My contribution

I worked across the election-critical and educational platforms in the programme: VC, VCA, VDK, Valg Driftssite, Valg EduAdmin, Valg Infosite, Valg Lokal, and NCSCE. The remit covered backend, frontend, documentation, system design and testing on Denmark's public-sector digital infrastructure. I expanded the automated test surface using EF Core test databases, mocks and domain-validation patterns for unit and integration coverage, and added Playwright tests for front-end and cross-browser validation; performance-critical features were exercised on pre-production against realistic datasets in the order of five million records (the DAO receipt flow, in particular). Around the code I kept managers, testers, POs, developers and Scrum Masters aligned through clarification meetings and specification reviews, supported the implementation teams with root-cause analysis on production issues, and stepped in to lead the daily stand-up on occasions where the Tech Lead or Scrum Master was absent.

By the numbers

  • ~100 pull requests across the KMT Valg ecosystem (VC, VL, VDK, VCA): roughly 20 features and 80 bug fixes covering domain logic, integrations, and UI behaviour.
  • 12 pull requests on NCSCE (1 feature, 11 bug fixes), the senior election platform that sits alongside KMT Valg.
  • 60 design specifications updated or written, spanning functional (complex logic, data models) and non-functional (UI behaviour) work.
  • 8 customer Change Requests scoped, estimated and priced (CRs 86, 87, 100, 109, 110, 112, 113, 116). I led a customer-facing demo coordinating four of them (109, 110, 112, 113) end-to-end.
  • 100+ automated tests added against the 3A standard (Arrange–Act–Assert), across unit and integration layers, plus Playwright coverage for UI flows.
  • Several successful releases delivered through validation, regression checks and release-window discipline.

Stack and tooling

C# / .NET 8, Entity Framework Core (with migrations), Angular 17 + TypeScript, Angular Material, RxJS, MS SQL Server, Azure DevOps for source control, pipelines and work tracking, Docker for local infrastructure (CouchDB, PostgreSQL, a CPR mock, PDF generation, Keycloak, adminer, nginx), SonarQube for static analysis, Splunk for log analysis, Hangfire for background jobs, DBeaver and JetBrains DataGrip for database work, and Toolkit, Netcompany's SharePoint-based quality assurance and project management system. Architecture-wise the platform leans on Clean Architecture with CQRS, repository separation between read and write paths, and a domain-driven model of elections, candidates, districts and votes. Integrations include CPR, Datafordeler, Dataforsyningen (DAWA), SFTP, NemSMS and Service Platform tokens; authentication uses OAuth2 / OIDC via angular-oauth2-oidc. I also attended Netcompany internal courses during the engagement: an introduction to AI and prompt engineering, Understanding the Client's Business and Customer Relations, the Technology, Code & Craftsmanship Seminar, and a week-long Customer Engagement Seminar.

STIL stint, Jun – Sep 2025

For four months I was loaned to STIL (Styrelsen for IT og Læring) and contributed to UADK (uddannelsesadministration.dk), CØSA and Uddannelser. The work amounted to:

  • 40 pull requests (20 features, 20 bug fixes) across UADK, CØSA and Uddannelser.
  • Lead on the design and implementation of a reusable UI component catalog to standardise front-end behaviour and design across the three platforms.
  • Two successful releases delivered, plus PI planning sessions, feature kick-offs and brainstorming, stakeholder meetings, JIRA and Confluence as the working tools.
  • Stack: jQuery, JavaScript / TypeScript, tinyMCE, Oracle SQL on the legacy surface; Angular and Java version migrations on the platforms moving forward; JBoss as the application server (Uddannelser ran on JBoss master in Docker containers).
  • Sparring and coaching on the team alongside the delivery work.