Alexander Hall, 791023-8554 Individuellt mjukvaruutvecklingsprojekt 7,5 hp Linnéuniversitetet 2013-06-09 KAi SENSEMAKING SYSTEM ABSTRAKT KAi Sensemaking System är en webbapplikation för feedback/återkoppling och insamling av data. Ett enkätsystem som ska göra det enklare, och förhoppningsvis lite roligare än vanligt, att skapa och besvara enkäter. Det som framförallt skiljer KAi Sensemaking System från andra enkätsystem på marknaden är dess särskilda fokus på nya former av interaktiva gränsnittselement/-moduler för insamling av data. Följande rapport beskriver processen bakom Alexander Halls arbete med KAi Sensemaking System, vilken genomfördes inom ramarna för kursen Individuellt mjukvaruutvecklingsprojekt vid Linnéuniversitetet våren 2013. 1
INNEHÅLLSFÖRTECKNING INLEDNING / BAKGRUND... 3 MÅLGRUPPER... 3 TEKNIK... 3 GENOMFÖRANDE... 4 POSITIVA ERFARENHETER... 4 NEGATIVA ERFARENHETER... 5 SAMMANFATTNING... 5 2
INLEDNING / BAKGRUND KAi Sensemaking System är en webbapplikation för feedback/återkoppling och insamling av data. Applikationen skapades på uppdrag av KAi (kai-creative.se) - en kommunikationsbyrå som tillhandahåller kurser, workshops och konsulttjänster med inriktning mot innovation, kommunikation och konceptutveckling. Företaget har utvecklat en rad specifika metoder för feedback/återkoppling, med syfte att på ett kreativt och lustfyllt sätt samla in information och mätbar data som sedan kan användas för utveckla olika typer av innovationsprocesser. KAi Sensemaking System har realiserats med utgångspunkt ifrån dessa metoder. Det finns i dagsläget många olika enkätsystem på marknaden, både öppna och kommersiella alternativ. Det som skiljer KAi Sensemaking System från många av dessa är dess fokus på grafisk överskådlighet och användarvänlighet. Utgångspunkten har varit att ett mer genomarbetat grafiskt gränssnitt på sikt leder till både bättre kvantitet och kvalitet på insamlad data. Med inspiration från modern infografik och datavisualisering har jag med hjälp av moderna webbtekniker velat erbjuda ett visuellt tilltalande och användarvänligt gränsnsitt där de grafiska elementen inte enbart används för att presentera data, utan även för att hämta in data och interagera med slutanvändare. Inom ramarna för kursen Individuellt mjukvaruutvecklingsprojekt var ambitionen att ta fram en fungerande prototyp som visar upp applikationens grundläggande koncept och funktionalitet på ett bra sätt. Utvecklingen av KAi Sensemaking System kommer med andra ord att fortsätta även efter att denna kurs har avslutats. MÅLGRUPPER Applikationens målgrupper kan delas in i två huvudsakliga kategorier - Datainsamlare och Datalämnare. Primära målgrupper för den prototyp jag utvecklat inom ramarna för utbildningen är i första hand projektledare och anställda på KAi, vilka alltså tillhör kategorin Datainsamlare, samt deras kunder (beslutsfattare/projektledare inom privat/offentlig sektor) som i detta fall fungerar som Datalämnare. TEKNIK KAi Sensemaking System har byggts i Ruby on Rails (rubyonrails.org) - ett öppet ramverk för utveckling av webbapplikationer. Ruby on Rails är baserat på det objektorienterade skriptspråket Ruby och följer ett designmönster som kallas Model-View-Controller (MVC). Andra centrala filosofier för Ruby on Rails är: - Convention over Configuration. Handlar i korta drag om att utvecklare i så stor utsträckning som möjligt ska slippa skriva väldigt mycket kod från grunden, utan ska istället snarare kunna fokusera på att konfigurera de specifika delar som går emot konvention och vedertagen praktik. 3
- Don t repeat yourself. Ruby on Rails implementerar en rad tekniska lösningar med syfte att i så stor utsträckning som möjligt undvika onödig duplicering av kod. - Fat models, skinny controllers. Detta handlar om att större delen av en applikations logik bör placeras i model -lagret, och att controller -lagret i sin tur bör hållas så lätt och rent som möjligt. Via Ruby on Rails har jag även haft möjlighet att dra nytta av en rad andra ramverk och tekniker. De som främst använts vid utvecklingen av KAi Sensemaking System är SASS (sasslang.com) - en preprocessor för CSS, JavaScript-ramverket jquery(jquery.com)samt ett administrationsramverk som heter Active Admin (activeadmin.info). GENOMFÖRANDE KAi Sensemaking System inbegriper i sitt nuvarande utförande två separata gränssnittslager. Ett backendsystem för att skapa enkäter och administrera sitt konto på olika sätt, samt ett frontendgränssnitt som i detta fall är de enkäter som slutanvändare ser och interagerar med. I backendsystemet ska användare kunna logga in/ut, skapa projekt och mottagarlistor samt skapa och förhandsvisa enkäter som innehåller frågor och olika svarsalternativ. Det ska även vara möjligt att se och exportera insamlad data i olika format. Jag har inom ramarna för denna kurs implementerat alla dessa funktioner, vissa fullt ut och vissa i något enklare utförande. Funktionalitet som inte implementerats i denna första prototyp är bl.a. möjligheten att skicka ut enkäter per epost till flera användare, samt mer genomarbetade lösningar för att sortera och överblicka insamlad data. Dessa funktioner har helt enkelt legat längre ned i prioritetsordningen, och jag har inom ramarna för denna kurs valt att fokusera på att få ordning på de mest grundläggande funktionerna först. De delar jag fokuserat extra mycket på har varit möjligheten att skapa och redigera enkäter som integrerar olika s.k. gränssnittsmoduler för interaktion med användare. Och att sedan via olika formulär koppla dessa moduler till en PostgreSQL-databas, för att spara undan data. Sett över hela kursen har en hel del tid (förutom att lära mig Ruby on Rails) gått åt till datamodellering och övergripande databasarkitektur, samt att utveckla de grafiska gränssnittslösningarna. POSITIVA ERFARENHETER Generellt har det varit en svår men samtidigt oerhört lärorik process. Att arbeta på egen hand med ett relativt stort mjukvaruutvecklingsprojekt kräver både disciplin och struktur. Jag har under dessa veckor tillskansat mig oerhört mycket ny kunskap och erfarenhet som jag förmodligen kommer att ha väldigt mycket nytta av framöver. 4
Att arbeta med Ruby on Rails har varit en mestadels positiv erfarenhet, även om det var en hyfsat brant inlärningskurva. Designmönstret MVC var lite svårt att greppa till en början, men när jag väl fått in det i skallen känns det helt logiskt, och som ett väldigt flexibelt och bra sätt att strukturera en applikation. Andra aspekter av Rails som jag uppskattade var Active Record (ett slags mellanlager som förenklar åtkomst till databasen) samt Migrations - ett slags versionshanteringssystem för databaskommandon. Andra positiva erfarenheter var att jag fick möjlighet att bättre sätta mig in i Git (versionshantering), SASS och jquery - vilka jag tidigare arbetat med i viss utsträckning, men aldrig på ett mer strukturerat sätt. Överlag känner jag mig nöjd med den prototyp jag utvecklat. Det känns som en bra och flexibel grund att bygga vidare på, vilket hela tiden varit min ambition. Känslan är att grundkonceptet håller och att applikationen med viss kompletterande funktionalitet kommer att vara redo att användas i skarpt läge inom en inte alltför avlägsen framtid. NEGATIVA ERFARENHETER Mycket av det som varit positivt under arbetet ryms också inom det som varit negativt. Som tidigare nämnts kräver denna typ av individuellt arbete stora doser disciplin och struktur. Ibland har det känts svårt att veta vad som bör prioriteras, och snudd på övermäktigt att ensam hinna med alla delar på ett tillfredsställande vis. Mycket av detta grundar sig förmodligen i viss orutin, då det är svårt att uppskatta hur lång tid saker och ting tar när man gör dem för första gången. För egen del har just tidsuppskattningen varit problematisk. Ofta har jag stött på oväntade problem som omkullkastat min tidsplanering fullständigt, vilket i sin tur fått konsekvenser för andra delar. I mitt fall har framförallt testningen blivit lidande. Jag inledde väldigt ambitiöst med s.k. testdriven utveckling (TDD), men tyckte det var svårt att upprätthålla detta på ett konsekvent sätt då känslan var att det tog för mycket tid från andra uppgifter. Jag kan definitivt se värdet av att jobba på detta sättet, och jag antar att det är något man lär sig och blir bättre på ju mer man gör det. Men för mig kändes det helt enkelt alltför tidsödande och svårt, och jag valde tyvärr att nedprioritera den s.k. White Box-testningen ju närmare deadline jag kom. SAMMANFATTNING Att jobba helt själv med ett större projekt har varit en både positiv och negativ erfarenhet. Många gånger har jag känt mig frustrerad och övergiven i processen. Otaliga timmar har gått åt till att söka svar på mer eller mindre obskyra problem på mer eller mindre obskyra forum på nätet. Det har känts svårt att ta upp denna typ av problem under de schemalagda handledningstiderna, eftersom de ofta varit så nischade till just den specifika utvecklingsmiljö och kontext jag jobbat med eller för att de helt enkelt känts svåra att förklara på ett vettigt sätt. Den andra sidan av detta mynt är dock känslan av tillfredsställelse när man lyckats lösa ett till synes omöjligt problem på egen hand (eller kanske snarare med hjälp av någon annan stackare 5
som stött på precis samma problem), och detta är givetvis det optimala sättet att faktiskt lära sig något nytt. Jag uppskattar att formen för kursen till stora delar tycks ha baserats på en idé om frihet under ansvar, och jag känner mig som sagt också nöjd med den applikation jag utvecklat. Det har även fungerat bra att integrera denna kurs med den kurs i gränssnittsutveckling som löpte parallellt (de hade nästan kunnat integreras ännu mer kan jag tycka). Överlag en mycket lärorik process och en nödvändig erfarenhet inför framtida webbutvecklingsprojekt, antingen de sker individuellt eller i grupp. 6