About

Experienced. Focused.
Ready to ship.

I'm a freelance software engineer with a Cand.Scient. in Computer Science from the University of Copenhagen. Since 2018 I've run Telos IT, delivering consulting and development work for Danish financial institutions.

My primary languages are C# and TypeScript, with F# for domains where correctness and expressiveness matter most. On the infrastructure side I work with AWS — serverless functions, event-driven architectures, and managed services — keeping business logic decoupled from the platform via hexagonal architecture.

My background spans Velliv, Forca A/S, Edlund A/S, Netcompany, and Danske Bank. The common thread: complex business domains, demanding correctness requirements, and code that has to keep working years later.

Get in touch
8+
Years consulting
5+
Years pensions domain
C#
TypeScript & F#
AWS
Serverless & cloud

Where I fit in your process

I help businesses define, design, and deliver complex software — from requirements to running code. Specialising in C#, TypeScript, AWS, and clean hexagonal architecture that stays agnostic to cloud and storage. I can step in at any phase — or stay for all of them. Scroll to explore each one.

Requirements

Getting requirements right is the highest-leverage activity in software. A well-specified system is faster to build, easier to test, and cheaper to change.

  • Stakeholder workshops to surface what the system actually needs to do
  • RUP 4+1 model — logical, development, process and physical views with scenarios at the centre
  • Use cases and user stories that developers can build from directly
  • Domain modelling to find the natural boundaries of the system
  • Works just as well feeding AI-generated code as human-written code
RUP 4+1Use CasesDomain ModellingUMLEnterprise Architect

Design

Good design is what makes a system easy to change. Hexagonal/onion architecture keeps business logic independent of infrastructure — swap AWS services without rewriting your core.

  • Hexagonal (ports & adapters) and onion architecture — pure core, side-effects at the edges
  • Cloud and storage agnostic by design
  • Domain-driven design to align code with business language
  • API design for internal service boundaries and external consumers
  • Technology selection with long-term maintainability in mind
Hexagonal ArchitectureDDDAPI DesignAWS CDK.NET

Development

Production-grade C#, TypeScript and F# — with AI actively accelerating delivery. Focus on correctness, clean domain language, and code that stays readable a year later.

  • C# and TypeScript as primary languages — F# where correctness matters most
  • AWS Lambda, API Gateway, SQS, SNS, DynamoDB, S3 via CDK infrastructure-as-code
  • AI-assisted development — faster delivery, same quality bar
  • Clean, readable code with explicit domain language
  • Unit and integration tests written alongside the code
C#TypeScriptF#.NETAWS LambdaCDKAI

Test

Testability is a design property, not an afterthought. Hexagonal architecture means the core logic can be tested without spinning up databases or cloud services.

  • Unit tests against the pure domain core — fast, no infrastructure needed
  • Integration tests at adapter boundaries — verify the wiring, not the logic
  • NUnit and xUnit for .NET; Jest/Vitest for TypeScript
  • Test-driven where it clarifies requirements; pragmatic where it would slow delivery
  • Pensions domain experience means knowing the edge cases that matter
NUnitxUnitJestIntegration TestingTDD

Deploy

Deployment should be boring. Infrastructure-as-code, automated pipelines, and cloud-agnostic design mean you can ship confidently and roll back safely.

  • AWS CDK for infrastructure-as-code — infra lives alongside the application code
  • GitHub Actions CI/CD pipelines — build, test, deploy on every push
  • Serverless-first on AWS reduces operational overhead
  • Same business logic can be deployed as Lambda, container, or on-premise
  • Environment parity — dev, staging and production configured consistently
AWS CDKGitHub ActionsLambdaServerlessCI/CD