Skriver du lige nu problematisk legacy-kode til fremtiden?

20. januar 2014 kl. 13:313
Udviklingsprojekter, der ser fine ud nu, kan blive et mareridt i årene, der kommer. Det skal du undgå, lyder opråbet fra udvikler.
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

Nogle gange kan man som udvikler eller udviklingschef ønske sig en tidsmaskine, så man kunne smutte tilbage og råbe højt, at et lidt klumset hack i en snæver vending under udviklingen af systemet har været anledning til utallige hovedpiner ti år efter.

Det er bare ikke så nemt - så i stedet kan man prøve at gøre verden til et bedre sted for sine efterfølgere med de beslutninger, der bliver taget i dag. Sådan lød budskabet fra udvikleren Ashic Mahtab, da han holdt oplæg om ’neo-legacy’ på Warm Crocodile Conference, der fandt sted i København i sidste uge.

Legacy-kode definerede han som software, vi har arvet med en masse problemer indbygget, men som stadig giver nok værdi til, at det kan betale sig at holde det i gang. Og der bliver også taget masser af beslutninger i dag, som nok skal give problemer for fremtiden, mente han og kom med sine bud på, hvad vi skal undgå.

»Har I en kodebase på mere end 500 megabyte? En gigabyte? Det skal I prøve at undgå. I skal gøre noget ved det nu,« sagde han.

Artiklen fortsætter efter annoncen

Et firma, han havde arbejdet for, var endt med en helt enorm kodebase på 25 gigabyte, og så var det nærmest for sent at lave om på. Det var kode fra mange forskellige projekter, der ikke nødvendigvis havde den store sammenhæng, men der var tilpas mange koblinger til, at det var en kæmpeopgave at skulle rede trådene ud.

»At få det hele fra hinanden er deres største udfordring nu. Det begyndte i 2002, og siden da har der været en masse rewrites. De har også prøvet at køre Git (versionsstyringssystem, red.), men det virkede ikke for dem. Så at køre videre med de 25 gigabyte er det, der giver dem færrest problemer lige nu,« sagde Ashic Mahtab.

Mange af fremtidsproblemerne i softwareudvikling kommer på grund af dårlige beslutninger fra højere sted end hos den enkelte udvikler, og en af de værste syndere er ’design by committee’, hvor alt skal godkendes i et stort udvalg, der ender med beslutninger baseret på mavefornemmelser eller ’highest paid persons opinion’, også kendt som HIPPO.

Er man heldig, betyder det bare en langsom beslutningsproces, men det kan også gå meget værre end det, lød budskabet med et eksempel fra det virkelige liv.

Artiklen fortsætter efter annoncen

»Vi havde engang noget kode fra et eksternt firma, som var meget langsomt til vores formål. Så vi gav dem en række muligheder, som alle ville virke, og som ville tage et par uger at implementere. Syv måneder senere kom de tilbage med en beslutning, med ny teknologi, og uden at bruge nogen af vores forslag. Det ville kræve en masse ændringer, og det løste ikke problemet. Sådan går det, når det er ’design by committee’,« sagde Ashic Mahtab.

Regler om kun ét sprog hæmmer udviklerne

En firmapolitik, der ensretter udviklingsarbejdet i hele firmaet, for at gøre det mere strømlinet, kan også hurtigt give bagslag. At alt skal integreres til samme database kan give problemer, hvis folk bruger det forskelligt, og mange opgaver er nemmere, hvis man selv kan bestemme, hvordan databasen skal indrettes.

Ligeså vil en politik om, at alt skal køre igennem en enterprise service bus (ESB) gøre mange ting komplicerede. Og krav om, at alle løsninger i firmaet skal udvikles i ét sprog, er også at skyde sig selv i foden.

»Det er ikke nødvendigvis dårligt at have standarder, men det bliver problematisk, hvis det bliver håndhævet overalt til alt. For eksempel kan Erlang være en rigtig god løsning til nogle opgaver. Hvis .Net er standardsproget og du er tvunget til at bruge det, kan du ende med at skulle skrive og teste mange linjers kode bare for at få samme muligheder som i Erlang,« sagde Ashic Mahtab.

Agil udvikling er blevet uhyre populært, men det kan også give problemer, mente han. Nogle steder tager det overhånd med møderne - for eksempel faste møder for at planlægge, hvad sprint-planlægningsmødet skulle handle om - og andre gange er filosofien lidt farlig.

»Mange praktiserer agil udvikling ved at tænke ’det klarer vi senere, vi tilpasser os’. Men nogle ting kan man ikke ordne senere, for eksempel grundlæggende performance-problemer eller sikkerhedsproblemer,« lød Ashic Mahtabs anti-legacy-råd.

Udover de mere langsigtede tanker om arven, man efterlader til kommende udviklere på opgaven, er der også tilsvarende problemer at overveje bare fra udvikling til lancering. Tit kommer et website for eksempel i stormvejr, når det går live, selvom det er blevet kapacitettestet.

»En webside lanceres - og så går den ned. Det sker faktisk tit, selvom man tester og tester og synes, man har gjort den ’klar til kamp’. Hvis oppetid betyder noget, skal du tænke over de her problemer, også de problemer, du ikke forventer vil komme,« sagde Ashic Mahtab.

Artiklen fortsætter efter annoncen

Han supplerede med et grumt eksempel, hvor en webbutik lancerede en ny version af websiden natten før det store, årlige udsalg, og betalingsfunktionen så går ned. Det tog 10 timer at få siden til at virke igen, fordi roll-back-løsningen ikke virkede. Den var aldrig blevet testet.

Warm Crocodile Conference fandt sted den 15. og 16. januar i Empire Bio i København. Version2 var mediepartner på konferencen.

3 kommentarer.  Hop til debatten
Denne artikel er gratis...

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.

Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.

Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.

Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger
3
21. januar 2014 kl. 11:11

Jeg har til dato ikke set et bedre bud på hvordan du undgår at drukne i din egen kode end bogen Clean Code af Robert C. Martin. Den kan varmt anbefales.

1
20. januar 2014 kl. 13:43

Jeg er enig med - og ud fra personlig erfaring - at legacy kode hurtigt kan give problemer, men jeg savner alligevel nogle af de "tips" til hvordan man kan i og for sig kode til fremtiden.

Hvis tipsene blot består i at udvikle i det bedste værktøj og ikke have en kodebase på 1+ GB, så er de tips med alt ære og respekt altså ikke særlig brugbar.

En lille kodebase indeholder naturligvis alt andet lige mindre problemer, men man kommer hurtigt til at lave samme løsninger mange gange hvis ikke løsningerne ligger i kodebasen. Helt basalt foretrækker jeg personligt en lille kodebase selv med faren for at opfinde den dybe tallerken flere gange, fordi så er chancen også at man hurtigere/bedre kan opfinde en bedre dyb tallerken. Men at det ligefrem gør meget for problemer med legacy kode er ret teoretisk og giver helt andre problemstillinger.

Desuden at vælge det bedste værktøj til opgaven er langt hen ad vejen a) erfaring hvilket dermed betyder at man har prøvet det før eller b) man "gætter" hvis man ikke har erfaringen selv, baseret på andres erfaringer eller teknologi blogs.

Men i begge situationer kan et teknologi valg i dag hurtigt betyde problemer i morgen, fordi ellers var legacy kode jo et noget mindre problem til at begynde med.

Det er en spændende "praksis" og vel noget størstedelen af udviklere prøver på "by default", men jeg savner nu noget substans omkring hvad der blev sagt og ikke sagt.

2
20. januar 2014 kl. 14:09

Jeg synes tit jeg støder på det her tip med at holde kode-basen meget lille, og bruge dll's eller varianter af samme for at tilføre mere funktionalitet men ikke sovse koden til med alt muligt.

Jeg har i hvert fald haft glæde af at pakke forskellig funktionalitet ind i små pakker og så inkludere dem i forskellige projekter, det kræver selvfølgelig at er er styr på at når jeg opdatere en af mine små-pakker så går et andet system ikke ned fordi jeg pludselig ændre noget i en .dll der er en afhængighed af.

Som dig, er jeg enig med at de "tips" der kommer i løbet af artiklen her, er noget vage og ikke ligger op til hvad man som udvikler kan gøre bedre.