ChooChoo En Rails Engine åt Crowding.se 1(10)
Innehållsförteckning Inledning Syfte Mål Projektorganisation Projektets tillvägagångssätt Resultat Avvikelser Slutsats Övertagande organisation Förbättringar och vidareutveckling 2(10)
Inledning Crowding.se är en nystartad webbtjänst som låter svenska och internationella företag dra nytta av ett crowdsource baserat system, där tjänstens användare uppmuntras bidra med lösningar till olika utmaningar och tävlingar som lagts ut av anslutna företag. För varje tävling finns en prispott som delas mellan vinnande bidrag. Hela tillvägagångssättet innebär en lång process av kommunikation och utbyte av händelser mellan parterna, vilket kräver ett fungerande och intuitivt informationsflöde för både parterna. I dagens läge har crowding.se ett redan implementerat aktivitetsflöde som upplevs som något stelt och odynamiskt av sajtens utvecklare, och det är där vi i projektgruppen kommer in i bilden. Vårt uppdrag var att utveckla ett dynamiskt och smart aktivitetsflöde som täcker sajtens behov. Syfte Huvudsyften med projektet var dels att få uppleva att arbeta i grupp i ett skarpt projekt där vi får känna av hur gruppdynamik kan påverka arbetets gång, och dels att få ställas mot skarpa krav och därigenom leverera en fungerande slutprodukt som uppfyller de av kunden ställda krav. Mål Målet med projektet har, i den anda som agil utveckling innebär, kommit att utvecklas ifrån en begynnande målsättning att skapa ett aktivitetsflöde som passar crowding.se:s 3(10)
specifika behov, till att utveckla ett mer generiskt aktivitetsflöde som i princip kan kopplas på vilken applikation som helst som använder sig av webbramverket Ruby on Rails. Allt eftersom målet har kommit att förändras så innebar den slutgiltiga målsättningen att skapa ett dynamiskt aktivitetsflöde, med stöd för cache:ning som enkelt kan kopplas till kundens applikation som finns under domännamnet crowding.se Projektorganisation Projektets organisation var av hierarkiskt upplägg, där Tobias Ohlsson vid Linnéuniversitet var den som tillsatt projektgruppen och har hållit i handledarmöten varje måndag under projekttiden. Ohlsson har i sin tur utsett Linus Lundvall, utvecklare vid crowding.se till projektbeställare, som bevakade arbetetsgången för utvecklarteamet i projektet som bestod av: Jimmy Börjesson testansvarig Alexander Hall produktansvarig Merkur Hoxha dokumentationsansvarig Inom utvecklargruppen fanns det ett fastlaget roterande schema för rollen som projektledare och kundansvarig, med en veckas intervall. Projektets tillvägagångssätt Utvecklingen skedde genom en skräddarsydd lösning, eller snarare en slags hybridlösning, där SCRUM och UP metoder var anpassade och sammansatta så att de 4(10)
täckte projektets behov. Det fanns bland annat visionsdokument, risklista, mjukvaruarkitektursdokumentation och testdokumentation som var semantiskt kopplade till en product backlog med tillhörande sprint backlogs och sprint reviews. Vad gäller den tekniska delen av projektet så hade vi inom utvecklargruppen sedan första projektdagen bestämt oss för att använda oss av GitHub för att på ett överskådligt sätt kunna utveckla i grupp med hjälp av pull requests och branches. Webbramverket Ruby on Rails var något helt nytt (med undantag för Hall som hade viss erfarenhet av Ruby on Rails sedan tidigare) för oss vilket gjorde att fokus lades på att sätta sig in i hur Ruby on Rails fungerar, under projektets första iterationer. Lyckligtvis var projektbeställaren väldigt insatt i Ruby on Rails och till stor hjälp, så vi kunde minska den branta inlärningskurvan genom support via bl.a. Google Hangouts samt läsmaterial från olika källor. Kommunikation kan bli något knepigt när ett projekt ska äga rum enbart på distans men överlag har vi lyckats hålla oss synkroniserade informationsmässigt, då vi hade ett privat chattrum inom utvecklargruppen där vi kunde nå varandra i princip dygnet runt. Detta i kombination med Skype och den form av kommunikation som kan ske genom GitHub (issues och kommentarer) gjorde att vi kunde kommunicera förhållandevis smärtfritt inom gruppen. Det fanns också förbestämda kommunikationskanaler med både kund och handledare. Ohlsson hade vi inbokade möten med varje måndag kl 9:00, där vi gick igenom förra veckans resultat samt kommande veckas målsättningar. Detsamma gäller kommunikation 5(10)
med kund; till detta fanns ett avsatt chattrum för kunden där vi kunde nå varandra under arbetstid och möjlighet till videokonferens genom Google Hangouts. Resultat Resultatmässigt kan man beskriva de första veckorna i projektet som något kaotiska. Detta berodde först och främst på viss okunskap kring Ruby on Rails. Kommunikation med kunden upplevdes väldigt intensiv, men även väldigt hjälpsam i början. Detta uppskattades väldigt mycket av oss i gruppen, då vi inte bara såg kunden som just en kund, utan även som en hjälpande hand för en grupp utvecklare som först skulle behöva sätta sig in i en helt främmande utvecklingsmiljö. Riktlinjerna för projektet upplevdes som väldigt otydliga i början och vi fick själva bestämma hur slutprodukten skulle te sig skulle det vara i form av ett API eller som en integrerad del av crowding.se? Man kan nog påstå att det var inte förrän i mitten av projektet som vi, delvis av eget iniativ, satte fasta och tydliga riktlinjer för projektet. Det skulle bli en Ruby on Rails Engine som kunde kopplas till en applikation (inklusive Crowding.se) på ett lätt och dynamiskt sätt. Här bidrog kunden med teknisk feedback och vi kom fram till att vårt egenutvecklade aktivitetsflöde skulle bete sig som ett superobjekt som kan lyssna till modeller i en värdapplikation och betrakta dem ur en förälder barn relation. Eftersom tillgång till källkod för crowding.se aldrig erbjöds, trots förfrågningar från oss i utvecklargruppen, så bestämde vi oss för att vid sidan av projektet även utveckla en simpel bloggapplikation för att efterlikna crowding.se, och därigenom kunna testa Choo Choo (aktivitetsflödet) i ett mer skarpt läge. 6(10)
Den slutversion av produkten som har levererats till kunden finns som öppen källkod på github.com/lnucrowding/choochoo med tillhörande dokumentation. Där framgår även att produkten är testad och passerar samtliga enhetstester (läs Travis). Det är fritt fram för både kund och andra intresserade utvecklare att använda sig av Choo Choo och att vidareutveckla den. Vad gäller resultaten för projektet kan man sammanfatta dessa med att Choo Choo täcker de krav som finns dokumenterade i visionsdokumentet. Trots detta återstår det en del arbete för att produkten skall uppfylla kundens ursprungliga krav (som tidigare nämnts har riktlinjerna förändrats under arbetets gång) med bland annat möjlighet för cache:ning, vilket egentligen aldrig implementerades utan vi valde att överlåta lösningar för detta till Choo Choos framtida användare istället. Avvikelser Avvikelser har kanske redan nämnts under stycke Resultat men sammanfattningsvis så skedde det en del avvikelser i slutet av projektet. Vi bestämde exempelvis i samråd med Ohlsson att avvika ifrån de krav som ställdes i början av projektet vad gäller sweepning (cache) och möjlighet för applikationsanvändare att prenumerera/avprenumerera, helt enkelt eftersom vi insåg att projekttiden började närma sig slutet och att vi inte skulle hinna med detta. Vi anser så här i efterhand att detta scenario hade kunnat undvikas om projektet inte hade haft en så pass stor komplexitet (att koda något som dynamiskt anpassar sig till vilken värdapplikation som helst), med större förkunskaper i Ruby on Rails samt om vi även fått tillgång till kundens källkod i tid. 7(10)
Slutsats Om man jämför vision och uppsatta mål med det som levererats kan slutprodukten kanske ses som lite halvdant genomförd. Det är dock väldigt viktigt att notera att vi har haft flera hinder på vägen, som redan nämts i föregående text, både på teknisk och ledande nivå. Hinder på den tekniska nivån har varit bland annat att lära sig Ruby on Rails från grunden men även lära sig avancerade användningsområden av Git genom GitHub. På den ledande nivån har hindren inneburit problem med att förstå den riktiga problematiken med kundens projekt och hur slutprodukten skulle se ut. Det började som sagt med enkel kod som eventuellt skulle kopplas till crowding.se för att vidare förkasta allt och utveckla hela konceptet som en Ruby Gem (ett tillägg man kan koppla till sin Rails applikation). Men utvecklingen stannade inte här utan vi bestämde oss själva sedan för att göra om allt igen som en Ruby Engine (en mini app ) som kan kopplas till en värdapplikation genom att använda olika nya tekniker som Concerns. Den allra viktigaste slutsatsen man kan dra inom ramen för detta projekt är att vår grupp visade sig beta av alla hinder på vägen, och leverera en slutprodukt som uppfyller kundens krav. Dock pga tidsbrist kanske inte på det sätt som var bestämt från början. Vi kan stolt påstå att gruppdynamiken fungerade över våra förväntningar, och vi kunde emellanåt känna oss som en självgående utvecklargrupp som tog egna initiativ, hade en jämn och rättvis arbetsfördelning och leverade vecka efter vecka. 8(10)
Det nämndes i början av detta avsnitt att produkten kan anses som lite ofärdig i relation till kundens ställda krav, men om man har i åtanke den knappa projekttiden på tio veckor och att vi var helt nollställda i början av projektet så anser vi själva att kvaliteteten på slutprodukten faktiskt var en stor bedrift. Övertagande organisation Även om uppdgragsgivare var Crowding.se så är källkoden öppet publicerad under MIT licens och tillhör den sammanfogade organisationen Lnu och Crowding. Källkoden i sin helhelt går att nå via github.com/lnucrowding/choo_choo och kan fritt modifieras av övertagande organisation så att den passar ens behov. Förbättringar och vidareutveckling Det finns en del förbättringar som implicit har nämnts i detta dokument. Som slutprodukten är nu, så är det helt upp till värdapplikationen att sköta cache:ning av aktiviter som Choo Choo samlar. Något som hellre skulle kunnat göras igenom Choo Choo. Även smarta funktioner som att prenumerera/avprenumerera på en viss aktivitet kan vara en integrerad del av Choo Choo. Dessa förbättringspunkter var som det framgick av avsnittet Avvikelser en del av projektets krav som aldrig hann implementeras pga tidsbrist, men våra förhoppningar är att många (inklusive vår kund) kan ha nytta av den grundfunktionalitet som redan finns i Choo Choo redan och även vidareutveckla den framöver. 9(10)
10(10)