Aarhus, Danmark
Softwareingeniør, der bygger stabile, forretningskritiske systemer.
Jeg er Eduard, softwareudvikler hos Bankdata i Silkeborg. Rolig under kompleksitet, omhyggelig med kvaliteten og motiveret af langsigtede løsninger til forretningskritiske systemer.

Om mig
Jeg er softwareingeniør baseret i Aarhus, med over fem års erfaring på tværs af offentlig sektor, forsvar, detail og SaaS. Siden oktober 2026 har jeg været softwareudvikler hos Bankdata. Fra april til september 2026 var jeg hos Mjølner Informatics, som jeg startede hos efter at have afsluttet mit forløb hos Netcompany. Før det et forløb hos Netcompany på flere danske offentlige platforme (KOMBIT VALG-valgsystem, STIL / Uddannelse.dk og tilstødende kommunale systemer), og tidligere Greenbyte ApS, Boozt og Systematic. Den røde tråd er kvalitetsfokuseret levering: backend- og frontend-arbejde, kravsafklaring, automatiserede tests og den slags stakeholder-koordinering, der sænker leveringsrisikoen.
Rumæner af fødsel, bosat i Danmark, europæer af tilbøjelighed. Jeg har en kandidat som civilingeniør, cand.polyt. i teknologibaseret forretningsudvikling fra Aarhus Universitet (2022 – 2024) og en bachelor i softwareteknologi fra VIA University College i Horsens. AP-graden i marketing fra IBA Kolding har stadig værdi; den har givet mig en vane med at læse en opgavebeskrivelse grundigt, før jeg skriver en linje kode.
Hvad jeg leder efter i et team: meningsfulde systemer, en rolig review-kultur og kolleger, der ser korrekthed som det lange spil. Siden /my-story har den længere fortælling; /now har det, der har min opmærksomhed lige nu.
Et hurtigt overblik
- 5+
- Års softwareudvikling
- 4
- Sprog
- 4
- Større projekter leveret
- 20+
- Lande besøgt
Erfaring
Fem år på tværs af seks virksomheder.
Min faglige tidslinje gennem seks virksomheder på fem år, med nuværende rolle øverst. Firmanavnene linker til deres hjemmesider.Software Developer
Bankdata · Silkeborg, Denmark
Oct 2026 – Present
Joined Bankdata in October 2026 as a Software Developer in Investment Advisory, based at the development centre in Silkeborg.
Software Engineer
Mjølner Informatics · Aarhus, Denmark
Apr 2026 – Sep 2026
Mit Norlys (mit.norlys.dk), Norlys's customer self-service platform, on Team Bifrost as a Mjølner consultant. React 19 + TypeScript in an Nx monorepo, with .NET 9 BFF work alongside. Rebuilt the platform's Datadog observability (two live dashboards and consent-gated RUM with GDPR PII masking), stood up the Playwright end-to-end foundation with CI, delivered BFF telemetry and fail-fast incident fixes, and built an Electron QA tool from scratch whose adoption on managed company PCs drove an org-wide endpoint-policy change.
TypeScriptReactNxDemo-repositories for TypeScriptUkendt er også en værdi
- Problemet
- Når et tal ikke kan udledes af kilderne, returnerer koden ofte et plausibelt tal alligevel. Det havner så i grafer og rapporter, uden at nogen kan se, at det var et gæt.
- Hvornår det er relevant
- Når man bygger rapporter eller dashboards på ufuldstændige data, fx en lønsammenligning, hvor én kilde inkluderer pension, mens en anden ikke siger noget om det.
- Det viser demoen
- Åbn maybe.ts og salary.ts. En beregning returnerer enten en kendt værdi eller unknown med en obligatorisk begrundelse, og TypeScript lader ikke kalderen bruge tallet, før det ukendte tilfælde er håndteret. Se på change(): den afviser af to forskellige grunde, manglende oplysning om pension og forskelligt ugentligt timetal.
C#Demo-repositories for C#Result frem for exception
- Problemet
- Hvis "bilen er allerede booket" og "databasen er nede" kastes som samme slags exception, skriver hver kalder den samme catch-blok, og de to tilfælde bliver blandet sammen.
- Hvornår det er relevant
- Et team, der bygger et web-API i .NET og har brug for ærlige statuskoder: forventede forretningsfejl håndteres af kalderen, infrastrukturfejl samles ét centralt sted.
- Det viser demoen
- I BookingEndpoint.cs kommer en booking tilbage som et Result. En dobbeltbooking giver 409 og omvendte datoer 400, mens en tabt forbindelse stadig kaster en exception og ender som 500. Handleren har slet ingen try/catch.
.NETMartenWolverinePlaywrightStorybookDatadogElectronGitHub ActionsDemo-repositories for .NETResult frem for exception
- Problemet
- Hvis "bilen er allerede booket" og "databasen er nede" kastes som samme slags exception, skriver hver kalder den samme catch-blok, og de to tilfælde bliver blandet sammen.
- Hvornår det er relevant
- Et team, der bygger et web-API i .NET og har brug for ærlige statuskoder: forventede forretningsfejl håndteres af kalderen, infrastrukturfejl samles ét centralt sted.
- Det viser demoen
- I BookingEndpoint.cs kommer en booking tilbage som et Result. En dobbeltbooking giver 409 og omvendte datoer 400, mens en tabt forbindelse stadig kaster en exception og ender som 500. Handleren har slet ingen try/catch.
IT Consultant
Netcompany · Aarhus, Denmark
Oct 2024 – Feb 2026
KOMBIT VALG, Denmark's administrative election platform. Full-stack C#/.NET + Angular. Jun–Sep 2025 stint at STIL on UA.dk EUD III, leading the build of a reusable UI component catalog on JBoss + TypeScript + jQuery.
C#Demo-repositories for C#Result frem for exception
- Problemet
- Hvis "bilen er allerede booket" og "databasen er nede" kastes som samme slags exception, skriver hver kalder den samme catch-blok, og de to tilfælde bliver blandet sammen.
- Hvornår det er relevant
- Et team, der bygger et web-API i .NET og har brug for ærlige statuskoder: forventede forretningsfejl håndteres af kalderen, infrastrukturfejl samles ét centralt sted.
- Det viser demoen
- I BookingEndpoint.cs kommer en booking tilbage som et Result. En dobbeltbooking giver 409 og omvendte datoer 400, mens en tabt forbindelse stadig kaster en exception og ender som 500. Handleren har slet ingen try/catch.
.NETDemo-repositories for .NETResult frem for exception
- Problemet
- Hvis "bilen er allerede booket" og "databasen er nede" kastes som samme slags exception, skriver hver kalder den samme catch-blok, og de to tilfælde bliver blandet sammen.
- Hvornår det er relevant
- Et team, der bygger et web-API i .NET og har brug for ærlige statuskoder: forventede forretningsfejl håndteres af kalderen, infrastrukturfejl samles ét centralt sted.
- Det viser demoen
- I BookingEndpoint.cs kommer en booking tilbage som et Result. En dobbeltbooking giver 409 og omvendte datoer 400, mens en tabt forbindelse stadig kaster en exception og ender som 500. Handleren har slet ingen try/catch.
ASP.NETEntity Framework CoreAngularMS SQLAzure DevOpsJBoss / WildFlyDemo-repositories for ASP.NETResult frem for exception
- Problemet
- Hvis "bilen er allerede booket" og "databasen er nede" kastes som samme slags exception, skriver hver kalder den samme catch-blok, og de to tilfælde bliver blandet sammen.
- Hvornår det er relevant
- Et team, der bygger et web-API i .NET og har brug for ærlige statuskoder: forventede forretningsfejl håndteres af kalderen, infrastrukturfejl samles ét centralt sted.
- Det viser demoen
- I BookingEndpoint.cs kommer en booking tilbage som et Result. En dobbeltbooking giver 409 og omvendte datoer 400, mens en tabt forbindelse stadig kaster en exception og ender som 500. Handleren har slet ingen try/catch.
TypeScriptjQueryPlaywrightDemo-repositories for TypeScriptUkendt er også en værdi
- Problemet
- Når et tal ikke kan udledes af kilderne, returnerer koden ofte et plausibelt tal alligevel. Det havner så i grafer og rapporter, uden at nogen kan se, at det var et gæt.
- Hvornår det er relevant
- Når man bygger rapporter eller dashboards på ufuldstændige data, fx en lønsammenligning, hvor én kilde inkluderer pension, mens en anden ikke siger noget om det.
- Det viser demoen
- Åbn maybe.ts og salary.ts. En beregning returnerer enten en kendt værdi eller unknown med en obligatorisk begrundelse, og TypeScript lader ikke kalderen bruge tallet, før det ukendte tilfælde er håndteret. Se på change(): den afviser af to forskellige grunde, manglende oplysning om pension og forskelligt ugentligt timetal.
Software Engineer / Student Software Engineer
Greenbyte ApS · Horsens, Denmark
Nov 2021 – Sep 2024
Kalenda, a planning and shift-management SaaS for daycare centres, schools, libraries and citizen services. Java and Spring backend with JSP/JSTL and a React front end; architect and lead developer of the Flutter/Dart mobile companion app.
JavaDemo-repositories for JavaLæsemodel adskilt fra skrivesiden
- Problemet
- Når de samme entiteter skal bære både forretningsregler og skærmbilleder, ender en oversigtsside med at hente flere aggregater og bygge rækkerne i en løkke, og en ændring af skærmen kan ramme reglerne.
- Hvornår det er relevant
- En Spring-applikation, hvor ét skærmbillede skal bruge en flad, samlet visning (her en kontooversigt), mens overførsler skal følge faste regler inden for én transaktion.
- Det viser demoen
- Sammenlign de to filer. AccountSummaryQuery.java returnerer en simpel record fra én SQL-forespørgsel uden entiteter. TransferService.java håndhæver reglerne for overførsler og kender ikke til skærmen. Bemærk, at konti låses i id-rækkefølge for at undgå deadlocks, og at der hverken er en ekstra database eller en event bus.
SpringHibernateJSPApache TomcatReactFlutterDartDemo-repositories for SpringLæsemodel adskilt fra skrivesiden
- Problemet
- Når de samme entiteter skal bære både forretningsregler og skærmbilleder, ender en oversigtsside med at hente flere aggregater og bygge rækkerne i en løkke, og en ændring af skærmen kan ramme reglerne.
- Hvornår det er relevant
- En Spring-applikation, hvor ét skærmbillede skal bruge en flad, samlet visning (her en kontooversigt), mens overførsler skal følge faste regler inden for én transaktion.
- Det viser demoen
- Sammenlign de to filer. AccountSummaryQuery.java returnerer en simpel record fra én SQL-forespørgsel uden entiteter. TransferService.java håndhæver reglerne for overførsler og kender ikke til skærmen. Bemærk, at konti låses i id-rækkefølge for at undgå deadlocks, og at der hverken er en ekstra database eller en event bus.
.NETDemo-repositories for .NETResult frem for exception
- Problemet
- Hvis "bilen er allerede booket" og "databasen er nede" kastes som samme slags exception, skriver hver kalder den samme catch-blok, og de to tilfælde bliver blandet sammen.
- Hvornår det er relevant
- Et team, der bygger et web-API i .NET og har brug for ærlige statuskoder: forventede forretningsfejl håndteres af kalderen, infrastrukturfejl samles ét centralt sted.
- Det viser demoen
- I BookingEndpoint.cs kommer en booking tilbage som et Result. En dobbeltbooking giver 409 og omvendte datoer 400, mens en tabt forbindelse stadig kaster en exception og ender som 500. Handleren har slet ingen try/catch.
System Engineer
Boozt Fashion · Malmö, Sweden
Oct 2021 – May 2022
Large-scale e-commerce backend on boozt.com in PHP/Symfony. Introduced Kanban; quality and test automation focus.
PHPSymfonyDoctrine ORMMySQLBehatMockeryGuzzlePHPUnitDemo-repositories for PHPPenge som værdiobjekt
- Problemet
- Kommatal taber brøkdele af en krone, intet forhindrer, at kroner lægges sammen med euro, og når et beløb deles i tre, forsvinder en enhed, uden at nogen opdager det.
- Hvornår det er relevant
- Ethvert system med priser, fakturaer eller udbetalinger, hvor beløb skal gå præcist op, og valutaer aldrig må blandes.
- Det viser demoen
- Money.php gemmer beløb som hele mindsteenheder (øre, cent) med valutaen inde i objektet. Lægger man to forskellige valutaer sammen, kastes en fejl, og allocate() deler 100 i 34, 33 og 33, så delene altid summerer til det hele. Hver operation returnerer et nyt objekt.
Junior Systems Engineer
Systematic · Aarhus, Denmark
Feb 2021 – Jun 2021
Mission-critical SitaWare suite (Frontline, Edge). Java + Angular. NATO interoperability.
JavaAngularJUnitKarmaJasmineRobot FrameworkSeleniumDemo-repositories for JavaLæsemodel adskilt fra skrivesiden
- Problemet
- Når de samme entiteter skal bære både forretningsregler og skærmbilleder, ender en oversigtsside med at hente flere aggregater og bygge rækkerne i en løkke, og en ændring af skærmen kan ramme reglerne.
- Hvornår det er relevant
- En Spring-applikation, hvor ét skærmbillede skal bruge en flad, samlet visning (her en kontooversigt), mens overførsler skal følge faste regler inden for én transaktion.
- Det viser demoen
- Sammenlign de to filer. AccountSummaryQuery.java returnerer en simpel record fra én SQL-forespørgsel uden entiteter. TransferService.java håndhæver reglerne for overførsler og kender ikke til skærmen. Bemærk, at konti låses i id-rækkefølge for at undgå deadlocks, og at der hverken er en ekstra database eller en event bus.
PowerShellTeamCityBitbucketDemo-repositories for PowerShellEn ratchet-gate
- Problemet
- Slår man en lint-regel til i en kodebase, der allerede bryder den tusindvis af gange, står valget mellem at blokere alle builds eller nøjes med advarsler, som ingen reagerer på.
- Hvornår det er relevant
- Et team, der indfører en ny regel i en eksisterende kodebase og vil have, at ny kode følger den fra første dag, mens den gamle kode bliver bedre over tid.
- Det viser demoen
- Invoke-RatchetGate.ps1 læser en ESLint-rapport i JSON, tæller overtrædelser pr. regel mod en baseline i repositoriet og fejler kun, når et tal stiger. Baselinen sænkes kun automatisk; at hæve den kræver et commit, som en reviewer kan se.
How I work
Seks korte principper for, hvordan jeg leverer, hver forankret i et konkret projekt eller en rolle fra mit CV.Six short principles, each grounded in something I've actually shipped (not chips, not buzzwords). Where it was learned is on the line above each.
KOMBIT VALG · Netcompany 2024–2026
I optimise for legibility over cleverness when the audit trail will outlive me. Election platforms have to read clearly to auditors years later, so I treat naming, comments, and PR descriptions as part of the deliverable, not garnish.
STIL / UA.dk · Netcompany 2025
When the deadline is fixed and the team is small, I pair the architecture conversation with the first commit. On the four-month EUD III stint at STIL we shipped a reusable component catalog because we agreed the boundaries on day three, not at the retro.
SitaWare · Systematic 2021
I lean on test automation when the cost of a defect is borne downstream. Robot Framework UI tests on Frontline & Edge weren't a vanity exercise: defence software calibrates how seriously you take qualification.
Greenbyte mobile · 2021–2024
Architect-and-ship rather than architect-then-hand-off. I designed the Flutter / Dart companion app and stayed on it through release, which is also how I learned that the second-hardest part of a mobile app is the release pipeline.
Boozt Fashion · 2021–2022
I introduce process changes the same way I introduce code changes: small, reversible, and measured. Bringing Kanban into the campaign-booking team was a six-week experiment with an exit ramp, not a mandate.
Across all five roles
I read the brief twice before writing the first line. The marketing diploma I started with at IBA Kolding wasn't wasted; it left me with a habit of clarifying scope with stakeholders before the IDE is open.
Arbejder med
Værktøjer og sprog.
Backend-tung full-stack med fordybelse i mobil og værktøj. Klik på et logo for at åbne dokumentationen.
Referencer
Hvad samarbejdspartnere har sagt.
Udtalelser fra kolleger, kunder og akademiske vejledere, indsamlet fra LinkedIn og underskrevne anbefalingsbreve.“Excels in understanding complex concepts and applying them practically; communicates complex ideas clearly and collaborates efficiently across teams.”
–
Udvalgt arbejde
Udvalgte casestudier.
Udvalgte casestudier fra forretningskritiske systemer, jeg har været med til at designe og levere, med kontekst om problemet, min rolle og resultatet.Netcompany · Oct 2024 – Feb 2026
KOMBIT VALG
Full-stack-udvikling på Danmarks nationale administrative valgplatform: C#/.NET, Angular og de integrationer, hver dansk kommune støtter sig til på valgdagen.
Systematic · Feb 2021 – Jun 2021
SitaWare Frontline & Edge
Praktik på Systematics NATO-niveau C2-suite. Java- og Angular-feature-arbejde, fejlhåndtering og UI-testautomatisering i Robot Framework under FDD.
Greenbyte ApS · Nov 2021 – Sep 2024
Greenbyte SaaS + Mobile
Tre år på Kalenda, en planlægnings- og vagtplanlægnings-SaaS til offentlige institutioner. Java og Spring med JSP/JSTL og React, samt arkitekt og lead developer på Flutter/Dart-mobilappen.
Boozt Fashion · Oct 2021 – May 2022
Boozt e-commerce backend
PHP/Symfony-backend på en stor nordisk modeplatform. Feature-arbejde, automatiserede tests og en Kanban-arbejdsgang indført i teamet.