Teknologier

Hvad jeg arbejder med, og hvordan

Teknologierne bag mit backend- og cloud-arbejde, grupperet efter disciplin. For hver: hvad den er, og den vurdering jeg anvender, når jeg bruger den.

Backend-udvikling

Her ligger det meste af mit arbejde: services og API’er, der opfører sig forudsigeligt, når noget fejler.

  • .NET and C#

    Microsofts runtime og sprog til server-applikationer og fundamentet for mit backend-arbejde.

    Min tilgang

    Jeg bruger typesystemet til at gøre ugyldige tilstande svære at udtrykke, holder controllers og handlers tynde og placerer forretningsregler, hvor de kan testes uden infrastruktur.

  • REST API’er

    HTTP-baserede grænseflader mellem services og mod eksterne systemer.

    Min tilgang

    Jeg ser et API som en kontrakt: eksplicit, versioneret hvor det er nødvendigt og formet af, hvad forbrugerne har brug for, frem for hvordan servicen er bygget indeni.

Cloud og infrastruktur

Managed Azure-services først, med miljøer der kan genskabes og gennemgås.

  • Azure Functions

    Serverless compute til event-drevet og planlagt arbejde.

    Min tilgang

    Velegnet til små handlers med ét formål, udløst af beskeder eller events. Jeg holder funktioner tynde og idempotente, fordi triggers kan udløses mere end én gang.

  • Azure App Service

    Managed hosting af webapplikationer og API’er.

    Min tilgang

    Et fornuftigt udgangspunkt for services, der kører kontinuerligt. Jeg foretrækker managed hosting frem for selv at drive infrastruktur, medmindre der er en klar grund.

  • Azure API Management

    En gateway foran API’er til autentifikation, routing, throttling og overvågning.

    Min tilgang

    Det giver ét sted at anvende tværgående politikker og følge trafikken, så de enkelte services ikke hver især skal genimplementere det.

  • Infrastructure as code

    At definere cloud-ressourcer i versionsstyret kode frem for manuel konfiguration.

    Min tilgang

    Miljøer skal kunne genskabes og gennemgås. En ændring, der ikke kan reviewes i en pull request, er svær at stole på.

  • CI/CD

    Automatiserede build-, test- og release-pipelines.

    Min tilgang

    Pipelinen bør være den normale vej til produktion, så release er rutine og gentagelig frem for en begivenhed.

Distribuerede systemer

Servicegrænser, messaging og dataejerskab — og ærlighed om prisen for hver af dem.

  • Mikroservices

    En arkitektur af uafhængigt deploybare services, hver med egne ansvarsområder og egne data.

    Min tilgang

    Et afvejningsspørgsmål, ikke et standardvalg. De betaler sig, når teamstruktur og domænegrænser retfærdiggør driftsomkostningen; ellers er en velstruktureret monolit ofte det bedre valg.

  • Event-drevet arkitektur

    Services kommunikerer ved at publicere og forbruge events og beskeder frem for at kalde hinanden direkte.

    Min tilgang

    Det reducerer kobling og udjævner spidsbelastninger, men flytter kompleksitet over i leveringsgarantier, rækkefølge og fejlsøgning — så handlers skal være idempotente og forløb observerbare.

  • Azure Event Hubs

    En service med høj gennemstrømning til indtagelse og streaming af events.

    Min tilgang

    Velegnet til store mængder events, som flere forbrugere læser uafhængigt. Jeg designer forbrugere, så de kan håndtere genafspilning og ujævn levering.

  • Azure Service Bus

    En message broker med køer, topics, dead-lettering og leveringsgarantier.

    Min tilgang

    Levering er mindst-én-gang, så handlers skal være sikre at gentage.

    Relateret artikel: Idempotency is not optional

  • Dataejerskab og servicegrænser

    Hver service ejer sine data og eksponerer dem gennem kontrakter frem for delte tabeller.

    Min tilgang

    Jeg trækker grænser omkring ejerskab af data og ændringshastighed, hvilket gør services uafhængigt udviklingsbare.

Data og persistens

Relationelt som udgangspunkt til transaktionelle data.

  • Azure SQL

    En managed relationel databaseservice baseret på SQL Server.

    Min tilgang

    Jeg tjekker de genererede forespørgsler og indekser tidligt frem for at opdage ydelsesproblemer i produktion.

    Relateret artikel: Finding the N+1 queries hiding in your EF Core code

Commerce og integrationer

Commerce-infrastruktur og de integrationer, der omgiver den.

  • Enterprise- og eksterne API-integrationer

    Pålidelig forbindelse mellem forretningssystemer og tredjepartstjenester.

    Min tilgang

    Eksterne systemer fejler og ændrer sig. Jeg isolerer hver integration bag en stabil kontrakt og planlægger for retries, timeouts og delvise fejl.

    Relateret artikel: Stop letting every service talk to the outside world

  • Optimizely CMS og Commerce

    En .NET-baseret platform til indholdsstyring og commerce.

    Min tilgang

    Indholdsmodeller er det, redaktørerne arbejder i hver dag, så jeg modellerer dem bevidst.