Tema Agiludvikling Verden i dag er i konstant forandring, og kompleksiteten i virksomhederne er stigende. Årsagen er i høj grad teknologien, som på få år har forandret den måde, vi kommunikerer og arbejder på i virksomheder, såvel som i fritiden. Fleksibilitet er fremtidens nøgleord, og for at udvikle it-systemer til denne fremtid skal man bruge en fleksibel fremgangsmåde. Derfor arbejder vi agilt. Introduktion til agil udvikling I maj 2014 udtalte David Mitchell Smith, Vice President og Gartner Fellow, ved en Gartner-konference, at fleksibilitet og agilitet var de væsentligste kvaliteter ved fremtidens it-systemer – ikke sikkerhed, stabilitet eller pålidelighed, som ellers før har været i centrum. Årsagen er, at uden fleksibilitet og agilitet bliver gevinsterne ved de øvrige karakteristiska slet ikke realiseret til fulde. Så sikkert, stabilt og pålideligt, ja, men på en fleksibel og agil måde. At udvikle agile systemer kræver agile udviklingsmetoder, hvoraf den nok mest kendte er Scrum. I d60 arbejder vi også agilt, men efter vores egen metode, som vi kalder Bedrock. Bedrock baserer sig også i nogen grad på Scrum, men går videre i forhold til projekthåndteringen og sikring af samarbejde med eksterne organisationer. I dette tema ser vi på agil udvikling fra forskellige vinkler og nogle af de ændringer, det medfører i arbejdsformen og indstillingen. Agil udvikling er grundlæggende anderledes, men på mange måder mere et mindset, man skal indstille sig på, end en metode. Det handler om at give slip på den langsigtede datailplanlægning og acceptere at have lange planer, men spille på den korte bane. Agile it-løsninger Agil udvikling dækker over en række forskellige projektmetoder. Kernen i den agile tilgang er korte udviklingssprints og løbende leveringer, hvilket står i skarp modsætning til de vandfaldsmodeller, man ellers i mange år har anvendt til it-udvikling. Den væsentligste årsag til at udvikle software efter agile metoder er ganske enkelt, at det er nemmere at sikre, at det er den rette løsning, vi leverer, og at løsningen virker – både sammen med de øvrige systemer og for de brugere, der skal anvende den. De hurtige leverancer betyder, at man hurtigt får syn for sagen så at sige og dermed også hurtigt kan høste værdien af løsningen. Den rette løsning Engang var computeren en rettelaksfri skrivemaskine på arbejdspladsen. I dag er den en integreret del af vores processer og arbejdsliv. Det gør det væsentligt mere kompliceret at designe software, idet resultatet skal indgå i et komplekst netværk af mennesker, systemer og processer og kunne tilpasses løbende, når verden forandrer sig. At udvikle den rette løsning bliver af disse årsager en mere kompliceret opgave, og ikke en der på forhånd kan designes i detaljer, fordi: Det er sværere at forudse problemer og faldgruber, fx i integrationer til andre systemer, brugere eller arbejdsgange Løsningerne skal passe til den aktuelle situation, men samtidig også være tilpasselige og fleksible, så de passer i morgen Ændringsønsker vil altid opstå, men er sværere at implementere i færdige designs, fordi de kræver omfattende tilretning Dette, kombineret med det faktum at teknologien udvikler sig i rivende hast, betyder, at ”den rette løsning” er en løsning, som kan vokse, tilpasse sig og skaleres i takt med virksomhedens udvikling. Det er ikke en løsning, som er to år undervejs og skræddersyet til virksomhedens virkelighed to år tidligere. følelse af tryghed. Det vigtigste er, at alle til enhver tid er enige om målene. Agil udvikling er brugerdrevet og sker i løbende samarbejde med brugerne og med regelmæssige leverancer, som implementeres i virksomheden. Det betyder, at størrelsen på hver levering er overskuelig, at leverancen testes i praksis med det samme, og at løsningen implementeres løbende som en naturlig udvikling i medarbejdernes hverdag. Og så kan den også nemmere tilrettes, hvis teori viser sig at være noget andet end praksis. Planlægningshorisonter I projektmetoder som Prince2 ser man på et projekts omfang og risikoprofil for at fastslå længden af faser. Agil udvikling er baseret på korte sprints af omkring 1-4 ugers varighed. Pointen med de korte sprints er kun at arbejde i den umiddelbare fremtid. Alle sprints afsluttes med evaluering, demonstration, videndeling og implementering. Hermed bliver løsningens bæredygtighed jævnligt afprøvet. Agil udvikling er med korte planlægningshorisonter og løbende leverancer langt bedre til at levere it-løsninger til virksomhedernes vilkår end de traditionelle metoder er, og samtidig give værdi kort efter hver release. Forskelle mellem metoderne Som Klaus Nielsen påpeger i artiklen ”Build the Right Product”, er agil udvikling ikke blot en metode, men også et mindset. For mange projektledere, som for eksempel har arbejdet med Prince2 i mange år, vil det være lidt et leap of faith at kaste sig over agil udvikling. Det kan virke usikkert, uplanlagt og tilfældigt, men det er faktisk det modsatte, der er tilfældet. Når det kommer til softwareudvikling giver detaljerede kravsspecifikationer en falsk Agile metoder indeholder samme skridt og planlægning, som de mere traditionelle metoder, men tilgangen er bare lidt anderledes. Her er et par forskelle. Beskrivelse er løsningen Agile metoder arbejder med user stories frem for kravsspecifikationer. En user story udvikles af – eller med brugeren/kunden og beskriver en særskilt funktionalitet eller feature, systemet skal have. Alle user stories prioriteres ud fra forretningsmæssig værdi holdt op i mod udviklingstiden. Hvilke user stories, der er vigtigst at gå i gang med, bliver dermed en vurdering af omkostninger kontra gevinst. En eller flere user stories bliver herefter udviklet i et sprint. Fordelene ved user stories frem for faste kravsspecifikationer er: Stor fleksibilitet når problemer eller muligheder opstår, idet omprioritering og vurdering er en naturlig del af processen Høj grad af brugerinddragelse sikrer, at løsningen passer til hverdagen og behovene Kunden får nemmere ved at styre projektet, fordi det ikke kræver viden om it, men alene viden om processer og behov i virksomheden Løbende implementering Hele ideen ved agil udvikling er den løbende implementering og ibrugtagen. Den agile tankegang er funderet i, at man ikke kan tænke sig til successen. Der skal hurtigst muligt laves en prototype, så man kan afprøve ideerne i praksis og sikre, at alle taler om det samme. De virkelige krav har det først med at dukke op, når produktet går i noget, der ligner en beta-version. Løbende implementering sikrer: at erfaringer hurtigt bliver gjort og opsamlet, så alle bliver bedre at medarbejdere gradvist introduceres til nye processer og værktøjer, og overgangen dermed bliver naturlig i virksomheden at risikoen ved projektet minimeres, idet alle teorier, antagelser og funktionaliteter løbende bliver afprøvet i praksis, ikke kun på tegnebrættet Mindre risiko, større udbytte Helt kort vil jeg hævde, at agil udvikling sikrer, at skalaen af projekter/faser aldrig vokser sig uoverskueligt stor. Funktionaliteten testes og verificeres først i udviklingsfasen og herefter i det kørende miljø, så risikoen for store fejl i implementeringen er lille. Det betyder, at fokus er på produktet lige nu. At systemets værdi og anvendelighed testes lige nu. At ændringer og tilpasninger kan foretages lige nu. For et firma, der har arbejdet agilt i hele sit liv, er det svært at forholde sig objektivt til emnet. Der er dog ikke meget tvivl om, at agil udvikling er kommet for at blive. Metoden giver bedre og billigere løsninger, minimerer risici og er utvivlsomt den nemmeste måde at sikre et projekts bæredygtighed løbende, idet man tager løsningen i brug løbende og dermed undgår at spilde tid på at udvikle det forkerte. Med kortere planlægningshorisonter og løbende implementering bliver løsningerne afprøvet i praksis med det samme. Viser det sig derfor, at forretningsværdien er mindre end forventet, og projektet derfor stoppes, vil man stadig sidde tilbage med et udbytte i form af allerede leverede funktionaliteter. Dermed er man altid blevet mere end blot en erfaring rigere. Build the Right Product Dual MBA holder, Klaus Nielsen, is the author of the book “I Am Agile”, in which d60 is used as a case example in agile development. In this article, he shares some of his findings on agile development and the difference between doing agile and being agile. When I was very young, the world of project management was ruled by plan-based methods, and Royce's waterfall approach was considered the only valid best practice. When I was a bit older, Bohem’s spiral development method saw the light of day and in the years to come an array of so called agile methods arose to battle the plan-based methods. Some may argue that Agile is just a new notion for reinvented old practices. This might be true to some extent, but most Agile methodologies, tools and techniques include values, morals and principles that are the key essence of being Agile. Focus on the Product Working plan-based or agile is very much about building the right product. Building the right product too often comes down to applying practices, tools and techniques. In agile a recent survey by Version One (2012) of agile techniques employed were retrospectives, value stream mapping, velocity, iteration planning, release planning, planning poker, refactoring and such among the top contenders. A lesson learned from World War II on the Cargo Cult also highlights some of the important key points from working agile, i.e. that scrum boards and practices alone do not enable us to build the right product. Agile is a mindset; a diverse culture. The Agile Manifest Agile practices are based upon the four values found in the sacred agile manifest developed on the slopes of Utah in 2001: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan The manifest is found throughout the many different agile practices. The agile manifest is then again explained in greater details in the twelve principles of Agile software (Link). In 2005, a group headed by Alistair Cockburn and Jim Highsmith wrote an addendum of Project Management principles, the Declaration of Interdependence to guide software project management according to agile development methods. Doing vs Being agile Now we have established the practices, the manifest and principles but still lack the mindset and culture to build the right product. Some may apply agile as a process and practice which means learning the practices and applying them without knowing the mindset and principles to tailor them and how to select the best practices. But with agile as a mindset and culture, we must inter- nalize the right mindset, principles and culture which makes you able to tailor and apply the right practices in different situa- tions. So top-down approach with outset in practices is doing agile while bottom up approach based upon the mindset and culture is being agile. Agile or Fixed Mindset When it comes down to the mindset, Stanford professor Carol S. Dweck is one of the world’s leading researchers in the field. According to Dweck (2007) you can have a fixed or a growth/agile mindset. Research shows that mindset can influence how you determine goals, reactions to failure, belief about effort and strategies and attitudes toward others’ successes. Fixed mindset approach involves using iterations where discovery and learning is not the main intent. You tend to avoid failure, focus on schedule, stick to what you know and don't welcome change. Not changing requirements but change how things are and work. You can still build the right product with a fixed mindset. In my line of work, a fixed mindset is often combined with practitioners doing agile. The growth or agile mindset approach to using iterations is where discovery and learning is the main intent. This implies emphasis on continuous learning, embracing challenges, not being afraid to fail and elicit feedback. With an agile mindset, you can build the right product far better than anyone else. Combine this with being agile and you will see the benefits agile has to offer. Responding to change Agile We’re getting smarter We are uncovering better ways of developing software by doing it and helping others do it. Through this work I have come to value being agile over doing agile. Through this work, I have come to value the agile mindset over the fixed mindset. Whether we value one or the other, it is never too late to learn. I started this journey in the 1970s and conclude here in 2014 with my 2 cents of know-it-all in a world still controlled by the evil Royce but where the agile mindset and culture more than ever can rock the boat with any software development approach, so go out there and build the right product now! About the author Dual MBA holder Klaus Nielsen holds PMP, PMI-RMP and PMI-ACP credentials from the Project Management Institute, Scrum master and ICAgile certified and is the founding partner of Global Business Development in Denmark and associated lecturer in Project and Program Management at the IT University of Copenhagen. Klaus has over 10 years of project and program management experience in managing and delivering complex, high-visibility Information Systems projects and programs. Recently Klaus has written the book "I am agile" and a number of articles within project management. He can be reached at [email protected] Customer collaboration Introduktion til Bedrock I d60 arbejder vi agilt efter vores egen leverancemodel, som vi kalder Bedrock. Bedrock er baseret på elementer fra Scrum, kombineret med erfaringer omkring hvordan man bedst håndterer it-udvikling, når to organisationer skal arbejde sammen. Bedrock sikrer, at de løsninger, vi udvikler, lever op til vores kunders strategiske fokus og løbende implemente- res og forankres hos de medarbejdere, der skal bruge dem. Leverancemodellen er baseret på agile principper og inspireret af Scrum-metoden. Med Bedrock har vi operationaliseret vores viden om projektstyring og leverancer, så vi kan sikre en effektiv leverance på et højt niveau. Bedrock omfatter alt fra kommunikation, rollefordeling og dokumentation til videndeling, test og de rammer og normer, vi anvender, når vi udvikler vores løsninger. Vores kunder oplever: At være helt tæt på udviklingsprocessen At være i stand til at styre prioriteringen løbende Hyppige leverancer af ny funktionalitet Roller og ansvar i centrum I Bedrock sammensætter vi teamet ud fra opgavens indhold, kompleksitet og omfang, således at tid og ressourcer afsættes og anvendes optimalt under hele projektforløbet. Alle teamets medlemmer har klart definerede roller og ansvarsområder, som er beskrevet i Bedrock. En af de væsentligste årsager til at sikre en klar projektorganisation og proces er forventningsafstemningen. It-udvikling kræver, at både kunden og leverandøren investerer en vis mængde tid i projektet – både før og under projektforløbet. Det er vigtigt at kunne afsætte denne tid fra starten for at sikre fremdriften i projektet. Når projektorganisationen er på plads, opdeles projektet i sprints af 2-4 uger med løbende prioritering, leverancer og review. I tæt samarbejde med kunden sikrer vi estimering og værdiansættelse af de enkelte leverancer, så kunden kan prioritere, hvilke opgaver vi skal løse først. Heri ligger styrken ved agil udvikling. Det giver hurtige resultater og sikrer maksimal mulighed for at styre projektets videre udvikling. Dynamiske behov Agil udvikling er nyt for mange, men det er den bedste måde at levere projekter på fordi: Teknologiske muligheder ændrer sig hastigt Organisationer er dynamiske Markeder og muligheder ændrer sig hele tiden Erfaring og brug af løsninger skaber muligheder og ændringer i behov undervejs Daily Follow up Project Cycle Når behovene er i konstant forandring, skal kravene til løsningen være det samme. Sprint Management 2-4 uger Backlog Management Product Sprint Backlog Backlog Initialisering Indledningen af projektforløbet med analyser, prioritering, fastsætning af rammeforhold og praktisk opstart. Udvikling Udviklingssprints, estimering, videndeling mv. Handover Dokumentation, release management, support mv. Interview: Practicalities of a Delivery Model The d60 Delivery Model “Bedrock” is - as the name indicates - the foundation of all our projects. Bedrock is developed by d60 and provides a guideline of best practices on how to start up, initiate, develop and handover your projects. Bedrock is now fully introduced in d60 as our delivery model in all teams. A Project Manager, Coordinator and BI Consultant from d60 give their take on working with Bedrock. Senior Project Manager, Stig Jæger Kronvold: In developing Bedrock, we have focused on being fully compatible with e.g. Prince2, PMI standards or other stage/gate models. We have incorporated the best of models such as SCRUM and DSDM into Bedrock taking into account the best of the classic project management theories, and we constantly adapt according to the environment. In short, Bedrock is our way of ensuring the success of the project. We all know things change, and yet we have a need to plan and control aspects such as scope, schedule and budget. In Bedrock, the aspect of constant change is built into the model without compromising neither the controlling nor the management aspects of the project. We do this by working in short sprints and focus on the foreseeable future. For the past year, we have focused on implementing Bedrock in all our teams. As useful or interesting as a delivery model can be for a project manager, it also needs to be implemented –and adopted- by the project team. In this context, we have decided to interview two sides that go hand in hand in the process. On the one side, Camilla, project coordinator, tasked with ensuring a proper implementation of the model. On the other side, Olivier, Business Intelligence consultant and primary target for the daily use of the model. To start with, how have you experienced being involved in establishing a new delivery model? Olivier: A new delivery model brings change with itself, which can easily disturb established procedures and habits. On the other hand, it is also a priceless opportunity to rationalize one’s processes, and maybe investigate how things can be made to run more efficiently in daily operations. The opportunity to be part of a team trying out a new delivery model was exciting, and very rich in learning. Change should not be feared but embraced, and once one accepts that hiccups do happen during the implementation, the end result is very satisfying! Camilla: Change is rarely associated with positivity – at least not to start with. As a project coordinator, once you accept this, you have come a long way in the process. To embrace this you need to communicate. Transparency and information mean everything and there can never be too much communication. You need to foresee and be prepared for every question there might be. When you finally think you have all the answers, new ones will come. It is hard work, but with change comes opportunities! How significant is it to focus on continuous delivery? Olivier: This is of course very dependent on the context a team works within but, as a consulting company, it is in our case highly relevant to provide the best stability and flexibility to our customers. This means that we must be able to understand their needs, work out a way to fulfill these, and implement it. In an era where communication is instantaneous and the world seems to change overnight, every night, being able to adapt and evolve as quickly as possible is not a luxury; it is a key component of one’s competitive survival. Camilla: It means everything. If we do not deliver within the criteria set up by the customer, we do not succeed. We live in a constantly changing world – a world where it is expected of us to predict the future in order to deliver sustainable solutions. One way we do this, or at least try to, is by estimation. Our goal is to overcome sudden change by predicting a sprint. We do this by looking back on past sprints to determine what we can expect in the current sprint. When we know this, both our customers and consultants focus on the same goal within the same frames of flexibility. One tool you use to grant this continuous delivery to the customer is user stories, how does that work? Olivier: User stories are quite self-explanatory. A user/customer comes to us with a “story”, which represents a need for a new or modified feature. It is then translated into a main task, describing the desired outcome and general work plan. This is the end-result, the idea that needs to be concretized. This user story then gets “children”, bite-sized tasks that can be completed in around a day’s development. Each gets the user story a step further toward completion. This way, one follows the overall goal without missing sight of it, all the while focusing on the more minute details of the implementation. Camilla: During the sprint-planning meeting, every user story is estimated and prioritized. This is necessary in order for the customer and the consultants to keep an overview during the whole sprint. The estimation gives an insight into how big the story is. If the story is too big, it is broken down into smaller tasks. We do this to make the tasks, and ultimately the sprint, as transparent as possible for everyone involved. The prioritization shows the customer how important a task is in order to finish the sprint on time. The customer can always change priority, but the team must have the final say in this, because they are the ones that know the true complexity of the task. How does one avoid running wild (time used, feature creep)? Olivier: Estimation. Experience. The whole task group participates in investigating each user story and creating a work plan for it. Each story is then split into tasks needed for completion. Each task gets investigated. What does it take to consider the task done successfully? What is the preferred method? What are potential challenges? Once these questions have an answer or qualified guess, it is much easier to answer the main problematic: “How long will it take?” If the answer is still unknown or too long, then the task probably can be split into still more sub-components that are easier to ascertain. The idea is not to sign a delivery contract. It is to understand the story enough as to limit unexpected delays and accidents. Camilla: It is important to make clear that we estimate. The consultants commit to solving the user stories of highest priority with the knowledge that they have at that time. At the end of each sprint, we review both the product and the estimations and make sure we identify problems, if the estimations were incorrect. An estimation is a qualified guess, and by reviewing sprints and sharing experiences we make sure, that each new guess is even more qualified. How does this model ensure both stability and flexibility for the team? Olivier: Our delivery model is based on weekly to monthly sprints. This allows for great stability, all the while enabling a short “idea to implementation” delay. Once such an overview is built, it is also easier to work unexpected tasks and challenges in. This mix allows our team to know what the customer’s expectations are, while allowing the customer a higher flexibility in task prioritization and needs fulfillment. Camilla: The consultants can model their sprint, taking into consideration that a sprint always changes – in most cases, time and prioritizing is an issue for both consultants and customers. Based on experiences from previous sprints, the team has a clear idea of available resources during the sprint. As a conclusion, what would you say are the advantages and challenges of this model? Olivier: This model allows for a strong delivery process, where changes are implemented quickly, effectively, and in accordance with the customer’s highest priorities. This means that, while holding a great stability thanks to monthly planning, the team is still free to focus on the best way to implement a given story, as minute planning is allowed during the daily operations. This however requires a strong cohesion in the team, and pristine communication on all levels. This means that the customer’s needs have to be correctly understood, and that the tasks have to receive the attention they deserve in order to optimally evaluate them. Like any other system, it only works if everyone is ready to do his part! Camilla: The biggest advantage is being able to deliver quality to customers using the agile way, which means that we are able to implement changes in a short time frame, while satisfying the customer’s most acute needs. We succeed when everyone involved in a project interacts and moves in the same direction. The challenge of course is that the agile way requires a fine balance between transparency to the customer, and flexibility to the team. One should not come at the price of the other. Not every team benefits from the same process in the same way. We sometimes need to adapt the model to specific teams, and that is ok. As long as we deliver quality. Bedrock og Prince2 Agil udvikling er det nye sort i it-branchen, hvor den traditionelle vandfaldsmodel gang på gang har vist sig at være utilstrækkelig. Bedrock er d60’s egen agile leverancemodel; Prince2 er ofte associeret med mere traditionelle projektmetoder. Men artiklen her postulerer dog ikke, at Prince2 arbejder med vandfaldsmodeller. Tværtimod betyder nyere ændringer af Prince2, at modellen er fuldt kompatibel med agile principper. Det er faktisk det, der er pointen. I forhold til den mere praktiske tilgang til projekter gennemgås forskelle mellem traditionelle metoder og agil udvikling i artiklen ”Agile it-løsninger”. Her forholder jeg mig mere til ligheder. Prince2 Prince2 er udviklet af den britiske stat, oprindeligt til netop at håndtere udvikling af it-systemer. I starten arbejdede man i Prince2 med meget usmidige krav til aktiviteter, procedurer og dokumentation, hvilket har givet modellen et lidt unfair ry for at være en tung dinosaur. Den er dog løbende blevet tilpasset og fremstår i dag i en form, som langt mere anerkender problemerne ved vandfaldsmodeller og det særegne i udviklingen af it-systemer, fx i det styrende princip om tilpasning til projektmiljøet. Det betyder, at den uden problemer kan kombineres med agile principper. Projekt kontra leverance Prince2 er en projektmodel og er dermed skabt til at tage hånd om alle aspekter af et projekt. Bedrock er en leverancemodel, som skal håndtere vores arbejde som leverandører. Heri ligger også mange andre ting end den enkelte leverance, men fokus i modellen ligger på leveringsniveauet af Prince2, idet agile modeller i særlig høj grad fokuserer på leveringer – hele tiden. Man kunne tegne det således, hvor de mørke kasser er Bedrock, og de lyse er Prince2: Ledelse Ledelse af et projekt OPSTART - Rammer og kontrakter START AF ET PROJEKT - Business Case - Projektorganisation - Erfaringsindsamling Styring Ledelse af faseovergang OPSTART - Observation og analyse - Produktdesign - Product Backlog INITERING AF ET PROJEKT - Styringsstrategier - Projektplan - Business Case - Dokumentation INITERING - Prioritering af user stories - Estimering - Sprint Backlog Levering Projektafslutning Styring af en fase HANDOVER - Dokumentation - Release Management - Overgang til support Styring af produktleverancer DEVELOPMENT - User story breakdown - Daily Scrum - Test - Evaluation Præ-projekt Initieringsfase Leveringsfase Som det ses, er der umiddelbart de samme faser i de to modeller, men hvor Prince2 følger en lineær projektfremgang, er Bedrock baseret på kortere forløb, som gentages. De tre kasser med initiering, development og handover i Bedrock kunne principielt alle lægges under punktet ”Styring af produktleverancer” i Prince2, således at leverancerne blev leveret efter Scrum-principperne. Heri adskiller Bedrock sig dog fra Scrum ved en bred tilgang til projekter og roller. Vi er ikke bare en kodefabrik, så for at få mest muligt ud af den viden, vores konsulenter har om processer, data og forretning, har vi designet Bedrock til at sikre inddragelse og udnyttelse af denne viden. Projektstyring Et andet sted de to metoder kan forenes er i projektstyringen. Bedrock gør faktisk Prince2-projektlederens rolle meget nemmere. Mange, som har arbejdet med Prince2, vil have hørt mottoet: ”Overvågning er godt, kontrol er bedre, razzia er bedst”, som med halv alvor og halv ironi beskriver tilgang- en til dokumentation i Prince2. I Bedrock har vi flyttet en stor del af fokus fra denne kontrol til levering ved at automatisere dokumentationen. Funktionalitet/user stories nedbrydes til opgaver af omkring en dags varighed, og tidsregistrering foretages dagligt på mindste opgaveniveau. Det betyder, at kunden automatisk får ugentlige og månedlige rapporter med nøjagtig status og tidsforbrug på hver enkelt opgave. Ved at nedbryde og registrere opgaver på mindste niveau sikrer vi, at dokumentationen bliver en aktiv del af udviklingsprocessen, og at såvel projektleder som styregruppe til enhver tid kan trække en opdateret statusrapport. Håndtering af ændringer I Prince2 er der ligeledes et større arbejde, der skal foretages, når der opstår problemer eller ændringsønsker, som skal bringes videre til styregruppen. Ikke blot er det meste dokumentation i denne forbindelse automatisk til rådighed, men idet vi i Bedrock samtidig arbejder med korte udviklingssprints efterfulgt af en funktionel leve- rance, vokser problemerne (og konsekvenserne) sig sjældent så store, at de ikke hurtigt kan beskrives og løses – uden på anden vis at forsinke projektet. Komplementære metoder Prince2 og Bedrock repræsenterer to forskellige tilgange til projekter, men kan sagtens sameksistere og samarbejde. Man kunne endda argumentere for, at meget store projekter med fordel kunne køres som Prince2-projekter i de store linjer, og faserne så kunne køres efter Bedrock. Den væsentligste forskel er nok rollefordelingen. I Prince2 er projektlederen den dagligt ansvarlige, men i Bedrock deles denne rolle af personer på begge sider af kunde/leverandør-forholdet. En Product Owner (PO) ved kunden har ansvaret for at udvikle og prioritere user stories, mens fremdriften hos leverandøren i højere grad er en teamindsats faciliteret af en projektkoordinator. Så hænger man sig meget i titler, har vi et problem. Ser man derimod blot på fordeling af ansvar og resultater, så er Prince2 og Bedrock faktisk komplementære metoder. Moduler og løbende levering Inden for Lean Manufacturing taler man om "flow" og "pull". Det dækker over en produktions-pipeline, som initieres af behov (pull) samt en uafbrudt, glidende proces (flow), som sikrer, at der på ethvert givet tidspunkt er bevægelse i linjen, og at der ikke ligger ting på lager. Da vi som softwareudviklere er meget inspireret af Lean, er det interessant at kigge på, hvilke ting vi kan gøre for at understøtte softwareudviklingen for at sikre flow, hvor parallellen til "noget på lager" er funktioner, som er udviklet, men endnu ikke afleveret. I denne artikel vil jeg gennemgå et par emner af teknisk karakter, som kan bringe os tættere på en vaskeægte lean proces med continuous delivery. Continuous integration Det har snart været alment kendt i to årtier, at man jævnligt - måske adskillige gange om dagen - bør integrere sit arbejde med "mainline" - altså den fælles linje som bør være alle kodeændringers endelige destination. Dette fænomen er kendt som "continuous integration", og det kan ofte hjælpes på vej af en byggeserver, f.eks. TeamCity, som er en maskine, der hele tiden sørger for at bygge og køre tests på de forskellige branches, der måtte være. Inden for de seneste år har vi som softwareudviklere gennemgået en fantastisk udvikling, idet distribuerede versionsstyringssystemer som f.eks. Git er blevet mainstream. Git (især kombineret med GitHub) tilbyder nogle muligheder, som er særdeles velegnede til continuous integration. For det første så er det smertefrit at lave branches med Git, hvilket medfører at det bliver naturligt at lave feature branches (det vender vi lige tilbage til...) - men derudover så er det trivielt at gøre det, der i gamle dage hed "re-branching", altså at merge mainline ud i den branch, man arbejder på. Dvs. man kan som udvikler ganske nemt holde sin branch meget tæt på mainline (eller "master", som det hedder med Git...). For det andet så har TeamCity en funktion, som automatisk kan "opdage" branches og bygge/teste dem på lige fod med master. Derudover så kan GitHub auto-merge pull requests og udstille resultatet som virtuelle branches, hvilket bringer os ret tæt på en fuld automatiseret continuous integration. God test-disciplin Generelt synes jeg, folk er blevet rigtig godt bevidste om, hvor vigtigt det er at lave automatiserede tests af koden - jeg oplever i hvert fald, at de fleste udviklere ganske naturligt dækker udviklet funktionalitet godt af med unit tests. Min egen erfaring er dog, at integrationstests, suppleret med udvalgte unit tests giver et langt bedre fundament for at udvikle software af høj kvalitet med et minimum af "klods om benet"-effekt. Her kan unit tests benyttes som verifikation af komplekse beregninger, men jeg oplever alligevel ofte, at noget, der startede som en unit test, udvikler sig til at være en integrationstest med visse afhængigheder erstattet af stubs, efterhånden som tiden går, og man erkender at units skal opdeles. For at kunne lave løbende levering med korte intervaller er det meget vigtigt, at man har gode tests på plads. De bliver kørt af byggeserveren hele tiden, og det er dem, der skal sikre, at man ikke skal bruge tid på alt for megen manuel test i forbindelse med release. Feature branch I forbindelse med udviklingen af nye features er det en god ide at lave feature branches, altså en branch til hver ny story/task/bugfix, man tager fat på. Man bør lave en feature branch, hver gang man forventer, at koden på et tidspunkt mellem to commits IKKE vil være i stand til at blive released, hvilket må antages at være ret ofte. Min egen hovedregel, "better safe than sorry", kombineret med hvor nemt det er at branche med Git, gør, at jeg anbefaler feature branches til alt. Da man indimellem kan komme ud for, at det tager længere tid end et sprint at færdiggøre en feature, så kan man evt. drage nytte af feature toggle - altså en mekanisme i programmet, som kan bruges til at tænde/slukke for features vha. konfiguration. Det giver sig selv, at det kræver lidt tilvænning at implementere feature toggle, men hvis udgangspunktet er, at der skal være mulighed for at konfigurere, hvorvidt den pågældende feature er tilgængelig, og det ikke er en eftertanke, så er det i praksis ofte ganske nemt at implementere. Branch by abstraction Til tider kan man få brug for at lave så store ændringer i systemet, at det forekommer uoverskueligt at lave feature branches og feature toggles til det - et eksempel kan være en større refaktorering, som f.eks. ælter systemets arkitektur rundt. Her kan man med fordel benytte sig af branch by abstraction, som IKKE er branches, men som er en teknik, hvor man først etablerer en abstraktion mellem den stabile del af koden og den del, der skal rykkes rundt. Når denne abstraktion er på plads, så kan man inkrementelt migrere den del, der ligger bag abstraktionen. Jeg har f.eks. selv været med at til at migrere et system fra at være en rig klient med en direkte databaseforbindelse, til at have en HTTP-baseret klient-serverarkitektur ved i første omgang at indføre et request/response-lag i klienten, hvorefter request handlers kunne flyttes til serveren en for en. Denne proces var tidskrævende og forløb over en lang periode, men kompleksiteten var overskuelig - grænsende til triviel - da arbejdet efter etableringen af abstraktionen kunne udføres i takt med andre opgaver i de forskellige områder af systemet. Moduler Der kan være mange grunde til at separere ting i selvstændige moduler - men hvor det ofte forekommer naturligt at adskille ting, der teknologimæssigt eller funktionalitetsmæssigt tilhører forskellige områder, så kan det også betale sig at adskille ting, der har brug for at bevæge sig i forskelligt tempo, da løbende levering forudsætter, at man sætter kadencen efter det tempo, aftagerens "pull" dikterer. På den måde kan man undgå at forstyrre et stabilt område af systemet, som sjældent har brug for tilføjelser eller ændringer, samtidig med at de mere dynamiske områder af systemet ikke bliver tynget af at være sammenflettet med noget mindre dynamisk. Helt overordnet så kan det efter min mening ofte betale sig at kigge på, hvordan brugerne er organiseret - firmaer har separate afdelinger, fordi det giver mening at organisere arbejdet med en vis grad af selvstændighed i hver afdeling, og denne kendsgerning kan man ofte se afspejlet i systemers arkitektur med succes. Men ud over de officielle afdelinger så kan der sagtens være nogle mindre udtalte opdelinger i teams og subteams, ansvarsområder osv., som med fordel kan gøres mere selvstændige i arkitekturen. Append-only kode Når man kommer helt ned i materien, så er der visse strategier, som kan vise sig at være meget fordelagtige at benytte for at gøre det nemmere at lave løbende levering. Personligt er jeg meget inspireret af de principper, som Bob Martin beskriver med akronymet "SOLID". O'et i SOLID står for "Open/closed principle", som er den egenskab ved et kodedesign, at koden er "open for extension, but closed for modification". Kort forklaret betyder det, at man kan tilføje funktionalitet til et system uden at modificere den eksisterende kode, dvs. uden risiko for at introducere fejl i den allerede afleverede funktionalitet. Der er mange måder at realisere dette på, men helt generelt så kræver det, at man til en vis grad identificerer de akser, som systemet udvides i - hvis man f.eks. forudser, at der ofte skal implementeres nye søgefunktioner, så kan det måske betale sig at destillere frameworket omkring søgefunktionen og ophøje det til noget, der mere eller mindre dynamisk kan opsamle og aktivere sin funktionalitet - i simpel form måske blot via kode-refleksion, i mere ekstrem form som dynamisk indlæste plugins. Jeg synes ofte, det kan betale sig at skelne mellem features og koncepter, hvor koncepter er ting, der kræver ændringer til applikationens framework, og features er ting, der "hænges op" på frameworket. Her vil det naturligvis være features, der kan implementeres efter append-only-modellen, såfremt konceptets design tillader det, og features, der kan implementeres på denne måde, kan ofte leveres med meget fin granularitet og dermed med kort ventetid fra ønske til idriftsættelse set fra aftagerens synsvinkel. Aarhus Søren Frichs Vej 34 A 8230 Åbyhøj I d60 temaer sætter vores interne eksperter fokus på udfordringer, løsninger og trends indenfor it og forretning. Find flere temaer på www.d60.dk/viden København Frode Jakobsens Plads 4, 2. 2720 Vanløse Tlf. +45 32 11 66 60 [email protected]
© Copyright 2024