Gå til indhold

Udvikling

Laravel-udvikling til forretningssystemer

En stor del af de danske forretningssystemer kører på Laravel: kundeportaler, booking, fakturering og interne værktøjer, der er vokset ud af et regneark. Jeg bygger dem, udvider dem og overtager dem, når den, der skrev dem, er videre.

Købes typisk som
Skræddersyet softwarefra30.000 kr
Se hvad det koster

Hvornår giver det mening

  • Et Laravel-system driver en del af forretningen, og præcis én person forstår det
  • I skal bruge en funktion, der rører database, kø og fakturering på én gang
  • Framework-opgraderingen er blevet udskudt så længe, at opgraderingen nu er sit eget projekt
  • Et baggrundsjob fejler i stilhed, og I hører det fra en kunde frem for fra en alarm
  • I har egne udviklere og mangler seniorkapacitet uden at ansætte fast

Sådan foregår det

  1. 01

    Kortlæg

    Jeg læser kodebasen, databasen og jobbene igennem, før jeg rører noget, og fortæller, hvad jeg fandt — også det, I ikke spurgte om.

  2. 02

    Byg

    Funktioner eller opgradering, i små stykker der kan gå live hver for sig. I ser det køre på staging frem for i en statusrapport.

  3. 03

    Overdrag

    Migrationer, miljøvariabler og udrulning skrevet ned. Alarmerne peger på jer og ikke på mig, så intet afhænger af, at jeg bliver hængende.

Hvad arbejdet dækker

  • Nye funktioner, oprydning og afvikling af det, der gør enhver ændring langsom
  • Opgradering af framework og PHP-version, trinvist frem for som ét spring
  • Køer, planlagte jobs og det baggrundsarbejde, der fejler i stilhed
  • Test omkring de steder, hvor en fejl koster penge
  • Integrationer til økonomi-, betalings- og CRM-systemer, med genforsøg og alarmer
  • Databasearbejde: indeks, skemaændringer og de forespørgsler, der var fine ved en tiendedel af datamængden
  • Udrulning og miljøopsætning skrevet ned, så en release ikke er en person
  • Kodegennemgang og en ekstra seniorvurdering ved siden af jeres egne udviklere
  • De offentlige sider server-renderet med opmærkning, så priser og ydelser kan findes i Google og citeres i et AI-svar

Den situation, siden her er skrevet til

En Laravel-applikation, der driver en del af en forretning, lander næsten aldrig hos mig, fordi nogen ønsker sig en ny funktion. Den lander, fordi den, der byggede den, er holdt op eller er blevet selvstændig og ikke svarer så hurtigt længere, og fordi virksomheden har opdaget, at et system, den bruger hver dag, ikke forstås af nogen på lønningslisten. Det akutte behov er en funktion eller en rettelse; det egentlige behov er, at endnu en person kan læse tingen.

Det præger de første uger. Før jeg giver pris på funktioner, læser jeg skemaet, migrationerne, de køafviklede jobs og de planlagte kommandoer, og skriver ned, hvordan applikationen faktisk hænger sammen. Kunder bliver af og til overraskede over, at det er fakturerbart, og det er den del med den længste tilbagebetaling: alle estimater derefter hviler på systemet, som det er, frem for som det blev beskrevet.

Opgraderinger, og hvorfor de bliver udskudt

Den tilstand, jeg oftest finder en Laravel-kodebase i, er flere hovedversioner bagud med en composer.lock, ingen har turdet røre. Det er et fornuftigt sted at ende. En opgradering har ingen synlig gevinst for nogen uden for udviklingssamtalen, den er reelt risikabel, når der ikke er test, og der er altid noget mere presserende. Så kommer der en sikkerhedsmeddelelse på en afhængighed, der ikke kan lappes uden opgraderingen, og så haster det efter en andens kalender.

Vejen igennem er kedelig, og den virker: én hovedversion ad gangen, med applikationen udrullet og kørende imellem hver. Findes der ingen testsuite, kommer en tynd én omkring de veje, der flytter penge eller mister data, først, fordi det er den, der gør resten af opgraderingen mulig at efterprøve frem for at håbe på. PHP-version og framework-version er hvert sit skridt, taget hver for sig, så en fejl har én åbenlys årsag.

Det er langsommere end at springe det hele på én gang, og det er billigere, fordi den dyre del af en opgradering aldrig er kodeændringen. Det er de fjorten dage bagefter, hvor ingen kan sige, hvilken af fyrre ændringer der ødelagde faktureringen.

Samarbejde med de udviklere, I allerede har

En pæn del af Laravel-arbejdet er slet ikke en overtagelse. Der er et team eller én intern udvikler, og det, der mangler, er kapacitet eller en ekstra seniorvurdering. Den slags passer mig fint: review af pull requests, de stykker ingen har tid til, eller at sidde sammen om den del af systemet, alle har gået udenom.

Det prissættes som alt andet. Timearbejde er 600 kr i timen ex. moms uden minimumsaftale, og hvor behovet er fast frem for lejlighedsvist, er udviklingspartnerskabet til 12.000 kr om måneden for 20 timer den nemmere form. Timeprisen er den samme — forskellen er, at timerne er sat af på forhånd, og at den enkelte opgave ikke skal prissættes og indplaneres forfra hver gang. Der er ingen binding på det, for en aftale, der skal håndhæves med en kontrakt, er en aftale, ingen har lyst til at være i.

Ofte stillede spørgsmål

Hvad koster Laravel-udvikling?
Timearbejde er 600 kr i timen ex. moms. En afgrænset opgave starter ved 30.000 kr, altså 50 timer, til aftalt omfang og leveringsdato. Danske bureauer melder typisk fra omkring 150.000 kr for en MVP og 250.000 til 600.000 kr for en mellemstor webapplikation — omfanget betyder langt mere for den pris end timeprisen gør.
Kan du opgradere en gammel Laravel-version?
Ja, og det er værd at gøre, før det haster. Jeg opgraderer i trin med testsuiten og staging imellem frem for at springe flere hovedversioner på én gang og bruge besparelsen på fejlsøgning. Findes der ingen testsuite, kommer en tynd én omkring de kritiske veje først.
Kan du arbejde sammen med vores nuværende udvikler?
Ja. At reviewe pull requests, tage de stykker ingen har tid til, eller være den ekstra seniorvurdering er en helt normal aftale. Jeg forsøger ikke at blive den eneste, der forstår jeres system — det er netop den situation, de fleste kunder ringer om.
Hvad med databasen?
Det er som regel dér, det rigtige problem ligger. Manglende indeks, et skema der passede til den oprindelige idé og ikke til den nuværende, og forespørgsler der var fine ved en tiendedel af datamængden. Jeg arbejder i Postgres og MySQL og siger til, når en langsom side i virkeligheden er et databaseproblem i frontend-forklædning.
Kan du arbejde på et Laravel-projekt helt uden test?
Ja, og det er almindeligt. Det, der ændrer sig, er rækkefølgen frem for om det kan lade sig gøre: en tynd testsuite omkring de veje, der flytter penge eller mister data, kommer først, for uden den kan hverken du eller jeg vurdere, om en ændring var sikker. Det er typisk nogle dage, ikke et projekt, og det er det, der gør de senere estimater værd at tro på.
Hvordan håndterer du udrulning og hosting?
Det, I allerede kører, hvis det virker — en VPS, en hostet platform eller en containeropsætning, nogen satte op én gang. Er der ingenting, sætter jeg en udrulning op, der kører fra et git push med migrationer og en vej tilbage, og skriver ned, hvordan den virker. Jeg bygger og driver også selv en hostingplatform, og jeg siger rent ud, når jeres er fin, og en flytning bare ville være uro.
Hvad hvis systemet skal skrives om frem for repareres?
Så siger jeg det, med begrundelsen og prisen, og det er jeres beslutning frem for min. Omskrivninger bliver anbefalet langt oftere, end de er berettigede, som regel fordi det er sværere at læse en andens kode end at skrive sin egen. En teknisk gennemgang til 6.000 kr er den ærlige måde at afgøre det spørgsmål på, før nogen af os binder sig til et tal, og svaret er ofte, at en målrettet rettelse køber tre år mere.
Skriver du under på en NDA, og arbejder du i produktionsdata?
En NDA er helt fin og almindelig. Produktionsdata håndteres anderledes: jeg arbejder på anonymiserede eller reducerede kopier, hvor opgaven tillader det, fordi den sikreste måde at undgå at behandle personoplysninger forkert er ikke at ligge inde med dem. Hvor der reelt er brug for produktionsadgang, er den tidsbegrænset, logget og navngiven, og GDPR-siden af det bliver skrevet ned frem for forudsat.
Skal en Laravel-applikation kunne findes i Google og i AI-svar?
Det, der ligger bag login, skal ingen crawler nogensinde se, og der er ingen grund til at bruge timer på det. Det, der ligger foran — forsiden, ydelserne, priserne, et katalog, en hjælpesektion — er tit det eneste, en fremtidig kunde og en AI-assistent får at se, og det er som regel den del, der er bygget sidst og målt mindst. Blade leverer færdig HTML, så udgangspunktet er godt: det, der mangler, er normalt opmærkning med rigtige tal, titler og canonical per side, en robots.txt, der er skrevet med vilje, og et sitemap, der matcher det, der faktisk findes.
Laravel eller WordPress til vores projekt?
Hvis hovedopgaven er at udgive indhold, I selv vil rette, så WordPress. Hvis hovedopgaven er logik — brugere, rettigheder, beregninger, et forløb med tilstande — så Laravel, og så bruger I mindre over tre år end ved at presse den anden. I får det ærlige svar, også når det er det billigste.

Andre teknologier jeg arbejder i

Ved du ikke, hvad du skal vælge?

Skriv et par linjer om, hvad du gerne vil opnå. Du får svar inden for 24 timer, og et ærligt ja eller nej.