Frontendutvikling anno 2022

Milde malunka, så lei jeg er av frontendutvikling.

Ta React. Du skal utvikle en app og tenker, hei, kanskje jeg skal bruke React? Joda, du skal nok bruke React også, men om du innbiller deg at du kun skal bruke React, da har du rotet deg bort. For det ingen forteller deg er at det å utvikle en app med React er som å kjøpe en ny bil.

React er bare basismodellen, nemlig. Ser pent ut, React - deklarativt og komponentbasert, akkurat som du har drømt om. Men så begynner alle utstyrspakkene å dukke opp. For hva med state management? Du trenger jo state management! For bare noen hundre ekstra kilobyte kan du legge på Redux Toolkit, som gir deg alt du trenger! Stores, reducers, actions, slices, thunks! Du kommer garantert til å trenge dette på vinterføre i norsk utvikling! Men klarer du deg med Redux alene, da? Hva med Saga? Du trenger vel også Saga?

Så du tar Redux Toolkit og Saga og ender opp med et enda større rot enn det du hadde. Det gir mening, det som står i de flotte introduksjonene om hvert av verktøyene, så du overser litt at du ikke egentlig forstår halvparten. Det gir mening etterhvert, hører du fra en annen utvikler. Han ser ut som om han vet hva han snakker om, der han går i flannelskjorte og briller med tjukke rammer, og en kopp kaffe rett fra presskanne han selv har medbrakt. Det er sånn de ser ut, de som jobber med sånne ting.

Men det stopper ikke der. For brått må du ta enda en bestemmelse. Hvordan i alle dager skal du bedrive styling? Kanskje styled-components? Nei, hva med Tailwind? Det er jo ikke som om noen skriver CSS selv om dagen, haha, det gjorde man i gamle dager, det! Så du tar inn styled-components, og begynner å skrive CSS-in-JS, for det er jo sånn man skriver CSS om dagen? Ikke sant...?

Hva med Apollo, da? For GraphQL er jo i vinden i disse dager! Du har hørt om GraphQL, det virker ordentlig kult å kunne skrive queries på frontenden uten å måtte gå via gammeldagse REST-APIer og denslags krimskrams. Og han som sitter og jobber med backenden du skal operere mot, han virker som en likandes kar der han sitter, smått overarbeidet med nervøse rykninger. Han holdt en intern bedriftspresentasjon om GraphQL for en måneds tid siden, og beslutningstakerne nikket anerkjennende da de fikk høre om hvor effektive alle skulle komme til å bli med denne nye flotte teknologien. Han sukker litt oppgitt av at du prater med ham, men sier at joda - det stemmer, det. GraphQL er det nye store. Can't go wrong.

Så du tar inn Apollo også. Det blir bra, vet du, å få inn litt GraphQL også. Det blir jo en skikkelig moderne app, det her! Du begynner å utvikle litt, kommer i gang med å lage noen komponenter. Etterhvert kommer det mer ekstrautstyr også. Sånn som testverktøy. Du trenger jo det. Jest og Cypress er jo det alle bruker. Du finner ut at du er altfor sent ute med å sette opp en kodestil for prosjektet ditt, og ESLint og Prettier kommer på plass også. Du hører andre rundt deg snakke om NextJS og Remix. Noen av de ordentlige kule kidsa borte ved hjørnebordet i kantina, der ingen andre tør å sette seg, snakker om noe som heter Astro også.

Og før du vet ordet av det, sitter du der med React, Redux Toolkit, Saga, styled-components, Apollo, Jest, Cypress, ESLint og Prettier. Det føles fortsatt inadekvat fordi du ikke en gang har tenkt tanken på å bruke NextJS eller Remix. Det som var en enkel, pen React-app har blitt et sammensurium av kode, et gigantisk berg av dependencies som spytter ut åtte A4-ark med deprecation notices når du starter opp prosjektet i terminalen. 417 vulnerabilities (312 moderate, 75 high, 30 critical) lyser mot deg når du prøver å installere pakkene dine.

Dette er ikke en dystopi. Dette er virkeligheten, i norske bedrifter, dag inn og dag ut, enten vi vil eller ei. Det er ille nok at vi utdanner unge utviklere til å tro at denne måten å drive utvikling på er normal, for det gjør vi, men vi tror jaggu på det selv også.

Klart, det betyr ikke at jeg skal slutte å drive med frontendutvikling, for jeg er veldig glad i fagfeltet mitt. Jeg digger å lage ting som påvirker livene til andre, og jeg elsker å pusle med design og grensesnitt og kode for å gjøre ting bedre.

Men jeg har tenkt til å sette foten ned og si "nei" oftere når noen prøver å innbille meg at jeg må bruke React, Redux Toolkit, Saga, styled-components, Apollo, Jest, Cypress, ESLint og Prettier hver gang jeg vil lage noe nytt. For det trengs ikke.