Niklas Lindwall på Spinit om hur han tänker när han förbereder och planerar inför nya stora it-projekt. Niklas har jobbat med systemutveckling i 20 år, är utbildad civilingenjör och jobbar som teknisk projektledare idag. Han brukar presentera sig som en social person som har lätt för att ta till sig saker och ting, och är öppen och nyfiken för nya tekniker.
– Nej, eller jo (skratt), många gillar ju inte att jobba i Excel, men det beror på vilka kunder man jobbar med. Om kunden är van vid att jobba i Excel så är det en fördel för att man får en bra översikt och det är lätt att göra uträkningarna inför ett projekt. Excel är ju inget vi använder när vi bygger system utan är praktisk hjälp när man skall räkna på ett projekt och ta fram en offert. När man väl har satt igång projektet så använder man inte det på samma sätt. Excel kan vara ett bra verktyg många gånger, men jag tycker inte att man ska grotta ner sig alltför mycket och bygga för avancerade modeller, då blir det ofta så att bara en person vet hur allt fungerar.
– Jag brukar alltid köra enligt mitt mantra Separation of Concerns, det vill säga att man ska tänka i moduler, där varje modul har en dedikerad uppgift så att man får mindre utbytbara micro-tjänster. Det här är något som är ganska givet i dagens arkitektur, men det har inte alltid varit lika självklart. När Spinit startade för över 20 år sedan då tänkte vi inte direkt i de banorna, då blev det mer färdiga applikationer som var lite monolitiska och slutna.
– Om man har mindre moduler i ett system så blir de lättare att utveckla för att man kan fördela arbetet på ett helt annat sätt och framför allt så får man inte ett beroende mellan de olika modulerna. Om man arbetar på detta sätt så får man utbytbara moduler och det blir lättare att underhålla systemet i framtiden. Detta därför att man kan byta ut en tjänst utan att behöva byta ut alla tjänster som ingår i applikationen.
– API:er handlar om att dela data mellan system och tjänster. Det kan vara både internt inom ett system men även utåt för andra att nyttja eller integrera mot. Majoriteten av alla appar du använder på din telefon kommunicerar med API:er på ett eller annat sätt. Google Maps är ett utmärkt exempel där de byggt ett utvecklar-API som kan nyttjas av alla i hela världen för att bygga egna tjänster mot vilket också otroligt många tjänster idag nyttjar. Där kan man t.ex. skicka in adress och få tillbaks en position på en karta att visa upp. Eller det omvända om du skickar in en position och får tillbaka en adress.
– Det där är ju rätt konstigt för alla är medvetna om det och man vill involvera slutanvändaren tidigt, men det har en tendens att ändå bli alldeles för sent. Jag tycker att slutanvändarna ska vara med redan i kravställningen innan man drar igång projektet. Dock är det inte givet att de är med från början. I värsta fall så kommer slutanvändarna in i en acceptans-test-period när man är i princip klar. Under projektets gång så har man jobbat sprintvis, men de som faktiskt sitter och använder systemet kanske inte testar igenom ordentligt på vägen. Varför det blir så här är svårt att säga, det har säkerligen med tid att göra, att slutanvändarna har svårt att ta tid från sitt dagliga arbete. Tyvärr är det väldigt kortsiktigt tänkt.
– Det är väldigt olika hur man kan ta till sig en mockup, vi som sitter i det och jobbar som systemutvecklare kanske har en bättre förståelse för hur det kommer att fungera. Men det är svårt för en slutanvändare att se det, de vill gärna ha något att klämma och känna på, och klicka runt i. Ofta är det först då som de inser vilka funktioner de behöver mer i detalj. Vi jobbar agilt och i sprintar* och efter varje sprint så finns det något som är levererbart som man kan testa, och det är här man verkligen behöver involvera slutanvändarna efter varje leverans.
(*En sprint är en regelbunden, repeterbar arbetscykel i Scrum-metodiken. Efter varje sprint är det man byggt redo för att granskas och testas. Oftast är varje sprint mellan 7 till 30 dagar)
Kommentar: Tänk på våra skattepengar och vad de används till om kommuner och landsting inte använder agila metoder när de utvecklar digitala system, vilket slöseri med tid och pengar.
– Verkligen.
– Det gäller att ha kontinuerlig avstämning med slutanvändarna så att de får en chans att komma med sina förbättringsförslag rent funktionellt. Sen handlar det också om underhåll på en mer teknisk nivå så att man hänger med i nya uppgraderingar av de tredjepartsprodukter som man använder.
– När man bygger it-system så använder man olika ramverk när man utvecklar. Det kan t.ex. vara Javascript ramverk som Angular och React eller NServiceBus för Service Bus kommunikation och NHibernate för data hämtning. Det händer mycket inom ramverken och det kan ju vara så att man måste byta ut en modul. Har man ett moduliserat system från början så ska det inte så svårt. Det kanske kommer något nytt som man tycker är mycket bättre och vill använda istället och då ska det vara fullt möjligt att göra det. Risken är att man inte följer med kontinuerligt, och då blir det en väldigt stor grej att göra uppgraderingen.
– Så kan det absolut vara.
– Det är givetvis en kombination, att man har en bra mottagarpart som man kan bolla systemkraven med innan projektet drar igång är ju oerhört viktigt. Att man involverar slutanvändaren tidigt är oerhört viktigt, likaså att man får bra feedback under resans gång är en av nycklarna till ett lyckat projekt. Man behöver ha ett tätt samarbete under hela projektet, och likaså efteråt när man jobbar med förbättringar av systemet.
– Ofta så försöker jag skapa ett team med en bra mix med seniora utvecklare och utvecklare med mindre erfarenhet. När de som är nya kommer in är det viktigt att de får en mentor som de kan bolla saker med.
– Om det är en befintlig applikation som de ska jobba med så försöker jag beskriva en helhet av applikationen så att de får en helhetsförståelse för vad det är vi ska göra och kanske inte bara beskriva den delen som de ska utveckla just då. Det är bra att få en helhetsbild av vad vi försöker uppnå, detta gäller alla system som vi jobbar med. En förklaring till lyckade projekt är att alla är involverade även om man sen bara sitter och gör en del.
– Vi brukar köra dagliga möten, daily standups, för att gå igenom vad man gjorde dan innan och vad som ligger för dagen. Vi utvecklar ofta i sprintrar om tre veckor och då har vi planeringsmöte inför varje sprint, sen har vi en demo för kunden med vad man levererar i varje omgång.
– Tänk igenom vad ni faktiskt behöver, ofta så har man en tendens att tänka lite för långsiktigt. Ofta behöver man inte ha ett helt färdigt system vid första leveransen, utan man ska tänka i faser och mindre delar så att man kan få ett fungerande system som löser de kärnfunktionerna som man är ute efter. Många har en tendens att förstora saker och ting från början för att systemet ska vara superflexibelt och lösa allt som eventuellt kommer att hända i framtiden. I detta stadiet så behöver man inte tänka på alla de funktionerna som man eventuellt behöver i framtiden, utan man tjänar på att dela upp det i olika faser.