AKAnders Koo.

PERSONLIG PROFIL & CV

Heisann,
velkommen!

Developer

Her får du et innblikk i hvem jeg er, min kompetanse, erfaring og hva jeg ønsker å bidra med i min neste rolle.

Oslo

Laster profilbilde …

01 / BAKGRUNN

Litt om meg

Utvikler med bachelor i informasjonssystemer og flere års profesjonell erfaring med utvikling og videreutvikling av webapplikasjoner. Har særlig erfaring med React, TypeScript, Next.js, GraphQL, REST API-er, Docker, Jenkins og Azure DevOps. Trives spesielt godt med problemstillinger som går på tvers av frontend, API-er og dataflyt, og med feilsøking fra brukergrensesnittet gjennom API-er, databaser, caching og indeksering til underliggende kjernesystemer. Før utviklerkarrieren har jeg en variert yrkesbakgrunn fra salg, kundeservice, programvaretesting og praktisk arbeid. Denne bakgrunnen har gitt meg brukerforståelse, kommunikasjonsevne, arbeidsdisiplin, systematikk og gjennomføringsevne. Overgangen til IT har vært målrettet: fra fagbrev og salg via nettverk/sikkerhet og generell studiekompetanse til bachelor i informasjonssystemer og profesjonell utvikling.

Leveranser

  • Digital salgsoppgave – Mekleriet (åpnes i ny fane)

    Utviklet en digital salgsoppgave for Mekleriet med React og TypeScript, basert på kundens Figma-skisser og API-integrasjoner mot kjernesystemet. Løsningen ble strukturert med et tydelig skille mellom presentasjon og logikk for å forenkle vedlikehold og systematisk feilsøking. Arbeidet omfattet effektive GraphQL-spørringer som dekket databehovet til flere komponenter, dynamiske typedefinisjoner basert på API-skjema og spørringsvariabler, samt testing og utrulling gjennom Azure DevOps-pipelines. Løsningen brukes i dag til å presentere over 950 eiendommer.

  • Garanti.no (åpnes i ny fane)

    Bidro til utvikling av komponenter for Garanti basert på Figma-skisser, med vekt på API-integrasjoner mot kjernesystemet. Tilrettela for oppdatering av innhold via MongoDB, noe som reduserte behovet for nye bygg og utrullinger ved innholdsendringer. Enkelte komponenter ble også tilpasset for å hente bilder og tekst fra Azure Storage for å redusere belastningen på egne servere. Siden innholder bla kontor og megleroversikt, årsrapporter, nyhetsartikler etc.

  • MeglerCV – PrivatMegleren (åpnes i ny fane)

    Utviklet design og funksjonalitet i React og TypeScript. I dette prosjektet var fokuset på logisk komponentstruktur og responsivt design. Formålet var å presentere megleres verdier, oversikt over eiendommer de har ansvar for, hva som driver dem osv. Dette gir potensielle selgere av eiendommer innsikt i hvilken megler som passer best for deres eiendom på et mer personlig nivå. Løsningen brukes av over 500 meglere.

Nøkkelkompetanse

  • React.js
  • TypeScript
  • Next.js
  • GraphQL
  • Redis
  • ElasticSearch
  • Azure DevOps
  • styled-components
  • MongoDB
  • MySQL

02 / VIS CV

Min CV

Se erfaring og utdanning i CV-en min, eller last ned en kopi som PDF.

Min CV

03 / REFERANSER

Referanser

Se attesten fra min siste arbeidsgiver, eller last ned en kopi som PDF.

Attest

04 / TANKEGANG

Min frontend tankegang

De globale CSS-egenskapene settes opp først med detaljerte navn, enten det er i kode eller i database, det vil si fonter, farger, fontstørrelser osv.

  1. Det første jeg starter med er å dele opp designet i større deler, mentalt eller ved å tegne opp på et ark.
  2. Deler så de forskjellige elementene i den større delen opp i forskjellige komponenter.
  3. Setter disse elementene inn i en CSS-kontekst for korrekt presentasjon.
  4. Tilpasser komponentene til responsivt design for PC, nettbrett og mobil.
  5. Bruker var() til å gjenbruke fargevariabler og sette fallback-verdier.
  6. Om det er mulighet for det, sjekker jeg spesifikke CSS-egenskaper i Figma for mest mulig nøyaktige måleenheter.

Ved hjelp av Codex som kodeassistent kan punktene over gjøres ganske effektivt, så lenge promptene er detaljerte og konkrete.

Min tankegang

Dette bildet er AI-generert basert på punktene fra tankegangen.

05 / ARBEIDSPROSESS

Arbeidsprosess – fra planlegging til ferdig produkt

Arbeidsprosessen starter vanligvis med et møte mellom meg og min leder, hvor vi gjennomgår prosjektets mål, krav og ønskede funksjonalitet. Lederen presenterer ofte skisser eller andre visuelle eksempler for å illustrere hvordan løsningen skal se ut og fungere. Under møtet dokumenterer jeg relevante krav, tekniske behov og andre viktige detaljer som danner grunnlaget for det videre utviklingsarbeidet. Når jeg har fått tilstrekkelig oversikt over prosjektet, oppretter jeg et nytt prosjektoppsett og registrerer nødvendige konfigurasjonsverdier i databasen. Disse verdiene er spesifikke for det aktuelle prosjektet og kan blant annet omfatte CSS, JavaScript, applikasjonsruter og andre prosjektspesifikke innstillinger. Ved å håndtere slike innstillinger gjennom databasen kan vi gjøre enkelte endringer uten å måtte gjennomføre en ny deployment via Azure Pipelines. Dette reduserer behovet for unødvendige deployeringer og gjør det enklere å tilpasse løsningen underveis i utviklingsprosessen.

Når prosjektoppsettet er klart, oppretter jeg en egen feature-branch i vårt monorepo. Dette gjør det mulig å utvikle ny funksjonalitet isolert fra øvrige endringer i kodebasen. Vi benytter JWT (JSON Web Token) som en del av mekanismen for å identifisere og skille mellom ulike kunder. Vi har valgt en monorepo-arkitektur fremfor separate repositories for hver kunde. Dette gjør det mulig å samle prosjektene i én felles kodebase, samtidig som kundespesifikk funksjonalitet kan organiseres og vedlikeholdes separat. En slik struktur legger til rette for gjenbruk av felles kode, enklere vedlikehold og bedre skalerbarhet etter hvert som antall kundeprosjekter øker. I frontend-utviklingen følger jeg etablerte prinsipper for komponentbasert arkitektur, med særlig fokus på gjenbrukbarhet. Mappestrukturen organiseres slik at mindre, gjenbrukbare komponenter kan kombineres til større komponenter, som til slutt utgjør komplette seksjoner i brukergrensesnittet. Delte typer og hjelpefunksjoner organiseres i egne mapper for å sikre en oversiktlig og vedlikeholdbar kodebase. Denne tilnærmingen reduserer duplisering av kode og gjør det enklere å videreutvikle eksisterende funksjonalitet. Endringer i felles komponenter kan også gjenbrukes på tvers av flere deler av løsningen, noe som bidrar til mer konsistent funksjonalitet og design. Gjennom hele utviklingsprosessen legger jeg stor vekt på robusthet, lesbarhet og tydelig ansvarsfordeling. Dette innebærer blant annet bruk av optional chaining, hensiktsmessige fallback-verdier, beskrivende funksjonsnavn og komponenter med klart definerte ansvarsområder. Optional chaining og fallback-verdier benyttes for å håndtere situasjoner der data fra API-er er mangelfulle eller udefinerte. Dette reduserer risikoen for kjøretidsfeil og bidrar til at brukergrensesnittet fungerer mer forutsigbart, også når datagrunnlaget ikke er komplett. Tydelig ansvarsfordeling og beskrivende navngivning gjør samtidig koden enklere å forstå, feilsøke og vedlikeholde. Samlet bidrar disse prinsippene til høyere kodekvalitet, mer konsistente brukeropplevelser og en mer strukturert utviklingsprosess. Målet er å utvikle løsninger som er enkle å forstå, vedlikeholde, videreutvikle og gjenbruke i fremtidige prosjekter.

2.1 Bruk av AI som utviklingsassistent

I utviklingsarbeidet benytter jeg Codex som en AI-assistent for å effektivisere arbeidsprosesser og styrke min tekniske forståelse. Verktøyet brukes blant annet til å forklare programmeringskonsepter, analysere dataflyt, forstå komponentarkitektur og bistå med feilsøking i kodebasen. Gjennom erfaring har jeg lært viktigheten av å definere tydelige retningslinjer for hvordan AI-agenten skal arbeide. Dette gjør jeg ved å opprette en AGENTS.md-fil som beskriver prosjektets kodestandarder, arkitekturprinsipper og ønskede struktur, samt hvilke oppgaver agenten skal utføre og hvilke begrensninger den skal forholde seg til. Faktiske tilgangsrettigheter og tillatelser håndteres gjennom verktøyets sikkerhetsinnstillinger. Dette bidrar til at forslagene blir mer relevante, forutsigbare og tilpasset den eksisterende kodebasen. Bruken av AI har også bidratt til min faglige utvikling, særlig når det gjelder å skrive renere og mer vedlikeholdbare komponenter, samt strukturere datainnhenting fra vårt GraphQL-API på en oversiktlig måte. Jeg benytter derfor ikke bare AI til å løse konkrete problemer, men også som et læringsverktøy for å forstå hvorfor enkelte løsninger er mer hensiktsmessige enn andre. En annen nyttig egenskap er muligheten til å visualisere komplekse tekniske problemstillinger gjennom diagrammer og dokumentasjon. Dersom jeg står overfor en utfordring som er vanskelig å forstå eller visualisere, kan jeg be agenten analysere relevant kode og utarbeide en PDF som setter problemstillingen i kontekst. Dokumentasjonen kan eksempelvis illustrere dataflyt, avhengigheter mellom komponenter og forslag til hvordan en løsning kan implementeres på en strukturert måte. Dette gjør det enklere å forstå komplekse sammenhenger før jeg begynner å implementere endringer. Samtidig er jeg bevisst på at AI-genererte forslag må vurderes kritisk og kvalitetssikres opp mot prosjektets krav og eksisterende arkitektur. AI fungerer derfor som et supplement til mine egne faglige vurderinger, ikke som en erstatning for dem.

Vår backend er integrert med etablerte kjernesystemer gjennom REST-API-er. Data fra disse systemene blir normalisert, indeksert og mellomlagret (cachet) for å sikre effektiv databehandling og tilgjengelighet. Normalisering bidrar til en mer konsistent datastruktur på tvers av ulike kilder, mens indeksering og mellomlagring kan redusere behovet for gjentatte og ressurskrevende dataoppslag. Dette legger til rette for raskere datatilgang og mer effektiv kommunikasjon mellom frontend og backend. Disse dataene benyttes videre i utviklingen av nettsider og digitale salgsoppgaver, hvor frontend presenterer informasjonen på en strukturert og brukervennlig måte.

Alle våre produkter utvikles med TypeScript, som bidrar til økt typesikkerhet og gjør det mulig å avdekke potensielle feil allerede under utviklingen. Dette reduserer risikoen for type-relaterte kjøretidsfeil og gjør kodebasen mer forutsigbar og enklere å vedlikeholde. Hyppigheten på statusmøtene varierer ut fra prosjektets fremdrift, kompleksitet og behovene som oppstår underveis. Når ny funksjonalitet er klar for demonstrasjon, deployes prosjektet gjennom Azure Pipelines til et eget testmiljø med tilhørende domene. Her kan løsningen testes og gjennomgås før eventuell produksjonssetting. Bruken av et separat testmiljø gjør det mulig å demonstrere og kvalitetssikre funksjonalitet uten å påvirke løsningen som allerede er tilgjengelig for sluttbrukerne. Dette reduserer risikoen for at uferdige endringer introduseres i produksjonsmiljøet. Tilbakemeldinger fra kunden mottas vanligvis via e-post eller i forbindelse med statusmøter. Dersom tilbakemeldingene krever ytterligere avklaringer, kommuniserer jeg direkte med enten leder eller kunde for å sikre en felles forståelse av ønskede endringer. Basert på tilbakemeldingene gjør jeg nødvendige justeringer i koden og tester funksjonaliteten på nytt. Før en løsning lanseres, gjennomføres det også en kodegjennomgang av en seniorutvikler. Formålet er å kvalitetssikre implementasjonen, identifisere mulige forbedringer og kontrollere at koden følger etablerte prinsipper for struktur, lesbarhet og vedlikeholdbarhet. Kombinasjonen av TypeScript, testing og kodegjennomganger bidrar til høyere kodekvalitet og redusert risiko for feil i produksjon. Kodegjennomgangene gir meg også verdifulle faglige tilbakemeldinger som jeg kan ta med meg videre i utviklingsarbeidet.

Utviklingsprosessen er iterativ, noe som innebærer at løsningen videreutvikles gjennom gjentatte sykluser med implementering, testing, demonstrasjon og tilbakemeldinger. Denne arbeidsformen gjør det mulig å avdekke misforståelser og forbedringsmuligheter tidlig, samtidig som kunden får anledning til å påvirke løsningen underveis. Ved å gjennomføre jevnlige evalueringer og justeringer reduserer vi risikoen for å utvikle funksjonalitet som ikke samsvarer med kundens behov. Prosessen gjentas frem til kunden er fornøyd og løsningen oppfyller de avtalte kravene.

06 / BLI BEDRE KJENT MED MEG

Mer om meg

Jeg er en person som lader batteriene best med egentid. Har en sterk lidenskap for film. Som barn, ungdom og voksen har jeg opparbeidet meg en del innsikt når det kommer til manusforfattere, regissører, skuespillere, filmstil og virkemidler som etter min mening gjør en god filmopplevelse. Er veldig fascinert i behind-the-scenes klipp som forklarer hvordan filmteknikk utføres i bakgrunnen og hvordan det til slutt oppleves for en seer. Ellers liker jeg å se dokumentarer om teknologi og samfunnet vi lever i. Musikk er også en stor del av livet. Hører veldig mye på metal (deathcore, slam), liquid dnb, trap, dubstep. Trener regelmessig, da jeg opplever at dette gir en mental klarhet og godhetsfølelse etter en session, noe som er viktig i livet generelt.

Jeg er tilhenger av tydelig kommunikasjon, bistår gjerne andre eller er med å løse utfordringer. Som person er jeg hyggelig og samarbeide med. Trives best i team som har et åpent mind-set, respekterer og vil hverandre det beste, deler av sin kompetanse og erfaringer på en empatisk måte. Dette ser du også fra referansen min.

Å bli en del av et faglig varmt arbeidsmiljø hvor jeg kan vokse videre, lære mer og bygge gode erfaringer, et sterkt nettverk og bedre forståelse for skalerbare systemer med samfunnskritisk nytteverdi.

Hvis vi er en match og kjemien stemmer så gir jeg veldig mye av meg selv. Dvs at utvikler rollen ikke bare en en vanlig jobb for meg. Dette er et fag jeg er glad i og har driv for, sammen med menneskene jeg samarbeider med. Det har ofte forekommet å sitte utenfor ordinær arbeidstid fordi jeg ønsker at kunden skal være fornøyde. Jeg er disiplinert, ydmyk og lærer fort via praksis fra reele produkter.

Ønsker å jobbe videre med skalerbarhet, arkitektur og optimalisering fullstack. Er også nysgjerrrig på Go, .NET og C# i backend. Håper å kunne jobbe meg opp til et mer senior nivå med mer ansvar for helheten.

07 / Softskills

Styrker

Setter meg inn i problemstillingen før jeg konkluderer.

Lang erfaring med å forstå behov og finne løsninger som fungerer for kunden. Tett dialog er derfor sentralt for et gjennomført produkt.

Trives med å dele kunnskap og samarbeide med mennesker med ulik bakgrunn og perspektiver.

Komfortabel med både teknisk og ikke-teknisk dialog. Det er også viktig at det kommuniserer tydelig innad i teamet, dette for å klargjøre hva som er forventet og hva som er formålet. Med bakgrunn fra salg har jeg erfaring med å gjennomføre gode dialoger med kunder.

Jobber systematisk med problemløsning, feilsøking, gjennomføring og tar eierskap til arbeidet.

Erfaring med å sette langsiktige mål og arbeide målrettet over tid.

Opptatt av å være tydelig, respektfull, ydmyk og pålitelig i samarbeid med andre.

Ønsker alltid å lære mer, forstå helheten og kunne sparre om tekniske løsninger.