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.