Den nye metode

Original: http://martinfowler.com/articles/newMethodology.html

I de sidste par år har der været en opblomstring af en ny form for software-metode – kaldet agile metoder. Alternativt karakteriseret som en modgift mod bureaukrati eller en licens til at hacke de har vakt interesse over hele software-landskab. I dette essay jeg undersøge årsagerne til agile metoder, der fokuserer ikke så meget på deres vægt, men på deres adaptive karakter og deres folk-første orientering.

 

Sandsynligvis den mest mærkbar forandring til software proces tænkning i de sidste par år har været fremkomsten af ordet »agile«. Vi taler om agil softwareudvikling metoder til, hvordan man kan indføre smidighed i et udviklingsteam, eller hvordan man kan modstå den forestående storm af agilists bestemt til at ændre veletablerede praksis.

Denne nye bevægelse voksede ud af den indsats af forskellige mennesker, der behandles med software proces i 1990’erne, fandt dem ønsker, og så til en ny tilgang til software proces. De fleste af de ideer, var ikke ny, faktisk mange mennesker troede, at meget vellykket software var blevet bygget på den måde i lang tid. Der var dog en opfattelse, at disse ideer var blevet kvalt, og ikke er blevet behandlet seriøst nok, især ved folk interesseret i software proces.

Dette essay var oprindelig en del af denne bevægelse. Jeg oprindeligt udgivet det i juli 2000 skrev jeg det, ligesom de fleste af mine essays, som en del af forsøget på at forstå emnet. Dengang jeg havde brugt Extreme Programming i flere år efter at jeg var heldig nok til at arbejde med Kent Beck, Ron Jeffries, Don Wells, og frem for alt resten af ​​Chrysler C3 holdet i 1996 havde jeg da haft samtaler og læse bøger fra andre mennesker, der havde lignende ideer om software proces, men havde ikke nødvendigvis ønskede at tage den samme vej som Extreme Programming. Så i essay jeg ønskede at udforske, hvad der var ligheder og forskelle mellem disse metoder.

Hvis du er interesseret i historiske kuriositeter, kan du læse den originale version af denne artikel. Andre end formatering ændringer af teksten er uændret.

Min konklusion dengang, som jeg mener stadig nu, er, at der var nogle grundlæggende principper, der forenede disse metoder, og disse principper var en bemærkelsesværdig kontrast fra de antagelser, de etablerede metoder.

Dette essay er fortsat at være en af ​​de mest populære essays om min hjemmeside, hvilket betyder, at jeg føler lidt befalet at holde det ajour. I sin oprindelige form essay både udforsket disse forskelle i principper og forudsat en undersøgelse af agile metoder, som jeg forstod dem. For meget er sket med agile metoder, da for mig at holde op med kortlægningen del, selv om jeg give nogle links til at fortsætte din udforskning. De forskelle i principper stadig, og denne diskussion har jeg holdt.
Fra ingenting til Monumental, at Agile

Det meste software udvikling er en kaotisk aktivitet, ofte karakteriseret ved udtrykket “kode og fix”. Softwaren er skrevet uden meget af en underliggende plan, og udformningen af ​​systemet flikket sammen fra mange kortsigtede beslutninger. Dette faktisk fungerer ganske godt, da systemet er lille, men da systemet vokser det bliver stadig sværere at tilføje nye funktioner til systemet. Desuden bliver bugs stadig mere udbredt og mere og mere vanskeligt at løse. Et typisk tegn på et sådant system er en lang testfase, efter at systemet er “har fuldstændigt”. Sådan en lang testfase spiller ravage med tidsplaner som test og debugging er umuligt at planlægge.

Den oprindelige bevægelse for at forsøge at ændre dette indført begrebet metodologi. Disse metoder pålægge en disciplineret proces ved softwareudvikling med henblik på at gøre softwareudvikling mere forudsigelig og mere effektiv. De gør dette ved at udvikle en detaljeret proces med en stærk vægt på planlægning inspireret af andre ingeniørdiscipliner hvilket er grunden til jeg gerne henvise til dem som tekniske metoder (en anden udbredt betegnelse for dem er Plan-drevne metoder).

Engineering metoder har eksisteret i lang tid. De har ikke været mærkbar for at være frygtelig succes. De er endnu mindre kendt for at være populære. Den hyppigste kritik af disse metoder er, at de er bureaukratisk. Der er så mange ting at gøre for at følge den metode, at hele tempoet i udviklingen langsommere.

Agile metoder udviklet som en reaktion på disse metoder. For mange mennesker appel af disse agile metoder er deres reaktion på bureaukratiet i ingeniøruddannelserne metoder. Disse nye metoder forsøger et brugbart kompromis mellem ingen proces og for meget proces, der giver lige nok proces at opnå en rimelig payoff.

Resultatet af alt dette er, at agile metoder har nogle væsentlige ændringer i vægt fra ingeniørmæssige metoder. Den mest umiddelbare forskel er, at de er mindre dokument-orienteret, sædvanligvis understrege en mindre mængde dokumentation for en given opgave. På mange måder er de snarere kode-orienteret: efter en rute, der siger, at den centrale del af dokumentationen er kildekode.

Men jeg tror ikke, det er det centrale punkt om agile metoder. Manglende dokumentation er et symptom på to meget dybere forskelle:

Agile metoder er adaptive snarere end intelligent. Engineering metoder tendens til at forsøge at planlægge en stor del af software proces i stor detalje for en lang span tid, det fungerer godt, indtil tingene ændrer sig. Så deres natur er at modsætte sig forandringer. De agile metoder dog velkommen forandring. De forsøger at være processer, der tilpasser og trives på forandring, selv til det punkt for at ændre sig selv.
Agile metoder er folk-orienterede snarere end procesorienterede. Målet med ingeniørmæssige metoder er at definere en proces, der vil fungere godt hvem der nu skal bruge det. Agile metoder hævde, at ingen proces nogensinde vil gøre op dygtighed af udvikling team, rollen som en proces er at støtte udviklingen team i deres arbejde.

I de følgende afsnit vil jeg undersøge disse forskelle i flere detaljer, så du kan forstå, hvad en adaptiv og folk-centreret proces er ligesom, dens fordele og ulemper, og om det er noget, du skal bruge: enten som en udvikler eller kunde software.
Forudsigelig versus Adaptive
Adskillelse af Design-og Byggestyrelsen

Den sædvanlige inspiration til metoder er ingeniørdiscipliner såsom civile eller maskinindustrien. Sådanne discipliner lagt meget vægt på planlægning, før du bygger. Sådanne ingeniører vil arbejde på en serie tegninger, der præcist angiver, hvad der skal bygges, og hvordan disse ting skal sættes sammen. Mange design beslutninger, såsom hvordan man skal behandle med lasten på en bro, der er lavet som tegningerne er produceret. Tegningerne bliver derefter afleveret til en anden gruppe, der ofte et andet selskab, der skal bygges. Det er antaget, at byggeprocessen vil følge tegningerne. I praksis konstruktørernes vil løbe ind i nogle problemer, men disse er som regel små.

Da tegningerne angiver stykker, og hvordan de skal sættes sammen, de fungerer som fundament for en detaljeret bebyggelsesplan. En sådan plan kan regne ud de opgaver, der skal udføres, og hvilke afhængigheder der er mellem disse opgaver. Dette giver mulighed for en rimelig forudsigelig tidsplan og budget til byggeri. Der står også i detaljer, hvordan folk gør anlægsarbejdet skal gøre deres arbejde. Dette giver mulighed for opførelse at være mindre dygtige intellektuelt, selv om de ofte meget dygtige manuelt.

Så det, vi ser her, er to fundamentalt forskellige aktiviteter. Design, som er vanskelige at forudsige og kræver dyre og kreative mennesker, og konstruktion, som er lettere at forudsige. Når vi har designet, kan vi planlægge byggeriet. Når vi har planen for byggeri, kan vi så behandle konstruktion i en langt mere forudsigelig måde. I anlægsvirksomhed er meget større i både omkostninger og tid end design og planlægning.

den tilgang til software engineering metoder ser sådan ud: Vi ønsker en forudsigelig tidsplan, der kan bruge folk med lavere kvalifikationer. For at gøre dette må vi adskille design fra konstruktion. Derfor er vi nødt til at regne ud, hvordan du gør det design, for software, så byggeriet kan være ligetil, når planlægningen er færdig.

hvilken form denne plan tage? For mange, det er den rolle af design notation såsom UML. Hvis vi kan gøre alle de væsentlige afgørelser ved hjælp af UML, kan vi bygge en konstruktion plan og derefter aflevere disse designs ud til kodere som byggeaktiviteten.

Men her ligger det afgørende spørgsmål. Kan du få et design, der er i stand til at dreje kodning til en forudsigelig byggeaktivitet? Og hvis ja, er omkostningerne ved at drive dette tilstrækkelig lille til at gøre denne fremgangsmåde værd?

Alt dette bringer et par spørgsmål til at tænke. Det første er spørgsmålet om, hvor vanskeligt det er at få et UMLlignende design i en tilstand, at det kan afleveres til programmører. Problemet med et UML-lignende design er, at det kan se meget godt ud på papiret, men alligevel alvorligt fejlbehæftet, når du rent faktisk har at programmere ting. De modeller, som civilingeniører anvender, er baseret på mange års praksis, der er nedfældet i tekniske koder. Desuden de centrale spørgsmål, såsom den måde styrker spiller i design, er modtagelige for matematisk analyse. Den eneste kontrol, vi kan gøre ved UML-lignende diagrammer er peer review. Mens dette er nyttigt det fører til fejl i design, der ofte kun afsløret ved kodning og test. Selv dygtige designere, som jeg betragter mig selv at være, ofte overrasket, når vi tænder en sådan konstruktion i software.

Et andet problem er, at sammenlignende omkostninger. Når du bygger en bro, udgifterne til projekteringsarbejde er omkring 10% af jobbet, med resten værende konstruktion. I software mængden af tid brugt i kodning er meget, meget mindre McConnell tyder på, at for et stort projekt, kun 15% af projektet er kode og unit test, en næsten perfekt vending af broen bygning nøgletal. Selv hvis du klump i alle test som en del af byggeriet, design er stadig 50% af arbejdet. Dette rejser et vigtigt spørgsmål om karakteren af design i software i forhold til dens rolle i andre grene af teknik.

Disse slags spørgsmål førte Jack Reeves til at foreslå, at kildekoden i virkeligheden er et design dokument, og at anlægsfasen er faktisk brug af compiler og linker. Faktisk noget, som du kan behandle som konstruktion kan og bør automatiseres.

Denne tankegang fører til nogle vigtige konklusioner:

I software: konstruktion er billige som at være fri
I software alle indsats er design, og derfor kræver kreative og talentfulde mennesker
Kreative processer ikke nemt planlagt, og forudsigelighed kan meget vel være en umulig målsætning.
Vi bør være meget forsigtig med den traditionelle teknik metafor for bygning software. Det er en anden form for aktivitet og kræver en anden proces

Uforudsigelighed Krav

Der er et omkvæd jeg har hørt ethvert problem projekt, jeg har kørt ind. Udviklerne komme til mig og sige “problemet med dette projekt er, at kravene altid er under forandring“. De ting jeg finder overraskende ved denne situation er, at nogen er overrasket over det. I byggebranchen software krav ændringer er normen, spørgsmålet er, hvad vi gør ved det.

En rute er at behandle skiftende krav som følge af dårlig kravspecifikations. Ideen bag krav engineering er at et fuldt forstået billede af de krav, før du begynder at bygge softwaren, få en kunde sign-off til disse krav, og derefter oprette procedurer, der begrænser krav ændringer efter sign-off.

Et problem med dette er, at prøver bare at forstå mulighederne for kravene er hård. Det er endnu hårdere, fordi udviklingen organisation normalt ikke giver oplysninger om omkostningerne på kravene. Du ender med at blive i den situation, hvor du kan have nogle ønske om en soltag på din bil, men sælger kan ikke fortælle dig, hvis det tilføjer $ 10 til prisen på bilen, eller $ 10.000. Uden megen idé af omkostningerne, hvordan kan du finde ud af, om du ønsker at betale for at soltag?

Skøn er svært for mange grunde. En del af det er, at software udvikling er et design aktivitet, og dermed svært at planlægge og omkostninger. En del af det er, at de grundlæggende materialer hurtigt holde ændre. En del af det er, at så meget afhænger af hvilke individuelle mennesker er involveret, og individer er svære at forudsige og kvantificere.

Softwares immateriel karakter også skærer i. Det er meget vanskeligt at se, hvilken værdi en software funktion har indtil du bruger det for alvor. Først når du bruger en tidlig version af noget software vil du virkelig begynde at forstå, hvad funktioner er værdifulde, og hvilke dele der ikke er.

Dette fører til den ironiske punkt, at folk forventer, at kravene skal være foranderlig. Efter al software formodes at være blød. Så ikke bare er krav foranderlige, de burde være foranderligt. Det tager en masse energi til at få kunder i software til at fastsætte krav. Det er endnu værre, hvis de nogensinde har dabbled i softwareudvikling sig selv, fordi så de “kender”, at software er nemt at ændre.

Men selv hvis du kunne bosætte alt, og virkelig kunne få en præcis og stabil sæt krav, du sandsynligvis stadig dødsdømt. I dagens økonomi grundlæggende forretningsprincipper kræfter er ved at ændre værdien af ​​software features for hurtigt. Hvad kunne være et godt sæt krav nu, er ikke en god sæt på seks måneder. Selv hvis kunderne kan løse deres behov, er erhvervslivet ikke kommer til at stoppe for dem. Og mange ændringer i erhvervslivet er helt uforudsigelig: enhver, der siger noget andet er enten lyver eller har allerede gjort en milliard aktiemarkedet handel.

Alt andet i softwareudvikling afhænger af kravene. Hvis du ikke kan stabile krav kan du ikke få en forudsigelig plan.


Er Forudsigelighed umuligt?

Generelt er der ikke. Der er nogle software udvikling, hvor forudsigelighed er muligt. Organisationer som NASAs rumfærge Software Group er et glimrende eksempel på, hvor softwareudvikling kan være forudsigelig. Det kræver en masse af ceremonien, masser af tid, et stort hold, og stabile krav. Der er projekter derude, der er rumfærger. Men jeg tror ikke meget business software passer ind i denne kategori. Til dette skal du brug for en anden form for proces.

En af de store farer, er at foregive, at du kan følge en forudsigelig proces, når du ikke kan. Mennesker, der arbejder metoden er ikke særlig god til at identificere randbetingelser: de steder, hvor metoden går fra hensigtsmæssigt at uhensigtsmæssig. De fleste metodelærere ønsker, at deres metoder til at kunne bruges af alle, de ikke forstår heller ikke offentliggøre deres randbetingelser. Dette fører til mennesker, der bruger en metode i de forkerte omstændigheder, såsom at bruge en forudsigelig metode i en uforudsigelig situation.

Der er en stærk fristelse til at gøre det. Forudsigelighed er en meget ønskelig egenskab. Men hvis du tror, ​​du kan være forudsigelig, når du ikke kan, det fører til situationer, hvor folk bygge en plan tidligt, så skal du ikke korrekt håndtere den situation, hvor planen falder fra hinanden. Du kan se planen og virkeligheden langsomt glider fra hinanden. I lang tid du kan foregive, at planen stadig er gyldigt. Men på et tidspunkt afdrift bliver for meget, og planen falder fra hinanden. Normalt efteråret er smertefuldt.

Så hvis du er i en situation, der ikke er forudsigelig, kan du ikke bruge en intelligent metode. Det er et hårdt slag. Det betyder, at mange af de modeller for kontrol af projekter, mange af de modeller for hele kundeforholdet, bare ikke er sande mere. Fordelene ved forudsigelighed er så store, er det svært at lade dem gå. Ligesom så mange problemer den sværeste del er simpelthen indse, at problemet eksisterer.

Men at give slip på forudsigelighed betyder ikke, du er nødt til at vende tilbage til ukontrollabel kaos. I stedet skal du bruge en proces, der kan give dig kontrol over en uforudsigelighed. Det er, hvad adaptivity handler om.


Styring en uforudsigelig proces Iterationer

hvordan kan vi styre os i en uforudsigelig verden? Det vigtigste, og stadig vanskelige del er nøjagtigt at vide, hvor vi er. Vi har brug for en ærlig feedback mekanisme, som præcist kan fortælle os, hvordan situationen er med hyppige mellemrum.

Nøglen til denne feedback er iterativ udvikling. Dette er ikke en ny idé. Iterativ udvikling har eksisteret i et stykke tid under mange navne: inkrementelle, evolutionære, iscenesat, spiral … masser af navne. Nøglen til iterativ udvikling er ofte producere arbejder versioner af det endelige system, der har en del af de nødvendige funktioner. Disse arbejdsgrupper systemer er kort på funktionalitet, men ellers bør være trofaste over for kravene fra det endelige system. De bør være fuldt integreret og så omhyggeligt testet som en endelig levering.

Pointen i dette er, at der er intet som en testet, integreret system til at bringe en kraftig dosis af virkeligheden i ethvert projekt. Dokumenter kan skjule alle mulige fejl. Uafprøvet kode kan skjule masser af fejl. Men når folk faktisk sidde foran et system og arbejde med det, så mangler bliver virkeligt synlig: både i form af fejl og hvad angår misforståede krav.

Iterativ udvikling giver mening i forudsigelige processer samt. Men det er vigtigt i adaptive processer, fordi en adaptiv proces skal være i stand til at håndtere forandringer i nødvendige funktioner. Dette fører til en stil af planlægning, hvor langsigtede planer er meget flydende, og de eneste stabile planer er kortsigtede planer, der er foretaget for en enkelt iteration. Iterativ udvikling giver dig et solidt fundament i hver iteration, som du kan basere din senere planer rundt.

Et centralt spørgsmål for dette er, hvor længe en iteration bør være. Forskellige mennesker giver forskellige svar. XP foreslår gentagelser af en eller to uger. SCRUM foreslår en længde af en måned. Crystal kan strække yderligere. Tendensen er dog, at gøre hver iteration så kort som du kan slippe afsted med. Dette giver mere hyppig feedback, du ved, hvor du er mere ofte.


Adaptive Kunden

Denne form for adaptiv proces kræver en anden slags forhold med en kunde, end dem, der ofte betragtes, især når udvikling sker ved en særskilt virksomhed. Når du leje en separat firma til at gøre softwareudvikling, ville de fleste kunder foretrækker en fast pris kontrakt. Fortæl udviklerne hvad de vil, bede om bud, acceptere et bud, og så påhviler det udviklingsorganisation til at bygge softwaren.

En fastpriskontrakt kræver stabile krav og dermed en intelligent proces. Adaptive processer og ustabile krav indebærer, du kan ikke arbejde med den sædvanlige forestilling om fast pris. Forsøger at passe en fast pris model for en adaptiv proces ender i en meget smertefuld eksplosion. Den grimme del af denne eksplosion er, at kunden kommer til skade lige så meget som softwareudvikling selskab. Efter alt at kunden ikke ville ønsker nogle software, medmindre deres virksomhed havde brug for det. Hvis de ikke får det deres forretning lider. Så selv hvis de betaler udviklingsselskabet ingenting, de stadig tabe. Faktisk mister de mere, end de ville betale for softwaren (hvorfor skulle de betale for softwaren, hvis den forretningsmæssige værdi af at software var mindre?)

Så der er farer for begge parter underskrive den traditionelle fastpriskontrakt under forhold, hvor der ikke kan anvendes en prædiktiv proces. Dette betyder, at kunden skal arbejde anderledes.

Dette betyder ikke, at du ikke kan løse et budget for software up-front. Hvad det betyder er, at du ikke kan løse tid, pris og omfang. Den sædvanlige agile tilgang er at fastsætte tid og pris, og for at give mulighed for at variere på en kontrolleret måde.

I en adaptiv proces kunden har meget finere kontrol over software udviklingsprocessen. Ved hver iteration de får begge til at kontrollere fremskridt og til at ændre retningen af ​​softwareudvikling. Dette fører til meget tættere forbindelser med softwareudviklere, en ægte business partnerskab. Dette niveau af engagement er ikke for hver kunde organisation, eller for enhver softwareudvikler; men det er vigtigt at gøre en adaptiv proces arbejde ordentligt.

Alt dette giver en række fordele for kunden. Til en start de får langt mere lydhør softwareudvikling. En brugbar, selv minimal, systemet kan gå i produktion tidligt. Kunden kan derefter ændre sine kapaciteter i henhold til ændringer i erhvervslivet, og også lære af, hvordan systemet bruges i virkeligheden.

Lige så vigtigt som det er større synlighed i den sande tilstand af projektet. Problemet med prædiktive processer er, at projektets kvalitet måles ved overensstemmelse til at planlægge. Dette gør det vanskeligt for folk at signalere når virkeligheden og planen afviger. Den fælles resultat er et stort slip i tidsplanen sent i projektet. I det agile projekt er der en konstant omarbejdelse af planen med hver iteration. Hvis dårlige nyheder lurer det har en tendens til at komme tidligere, mens der stadig er tid til at gøre noget ved det. Faktisk denne risiko kontrol er en vigtig fordel ved iterativ udvikling.

Agile metoder tage dette yderligere ved at holde iteration længder små, men også ved at se disse variationer på en anden måde. Mary Poppendieck opsummerede denne forskel i synspunkt bedst for mig med hendes sætning En sen ændring i kravene er en konkurrencefordel“. Jeg tror, ​​de fleste mennesker har bemærket, at det er meget svært for forretningsfolk til virkelig at forstå, hvad de har brug for fra software i begyndelsen. Ofte ser vi, at folk lærer under processen hvilke elementer er værdifulde, og hvilke der ikke er. Ofte de mest værdifulde funktioner er slet ikke indlysende, indtil kunden har haft en chance for at spille med softwaren. Agile metoder søger at drage fordel af dette, at tilskynde business folk til at lære om deres behov som systemet bliver bygget, og til at opbygge systemet på en sådan måde, at ændringer kan indarbejdes hurtigt.

For min keynote på den første XP / Agile konference (XP 2000) Jeg fremstillede Design Dead: et essay, der udforsker designs rolle i ekstrem programmering.

Alt dette har en stor betydning, hvad der udgør et vellykket projekt. Et intelligent projekt er ofte målt på, hvor godt det opfyldt sin plan. Et projekt, der er påtid ogomkostninger anses for at være en succes. Denne måling er nonsens til en agil miljø. For agilists spørgsmålet er forretningsmæssig værdi gjorde kunden get software, der er mere værdifuldt for dem end omkostningerne lagt i den. En god prædiktiv projekt vil gå efter planen, en god agile projekt vil bygge noget andet og bedre end den oprindelige plan forudså.


Sætte mennesker først

Udførelse af en adaptiv proces er ikke let. Især skal en meget effektiv team af udviklere. Teamet skal være effektive både i kvaliteten af de personer, og i den måde holdet blander sammen. Der er også en interessant synergi: ikke bare gør adaptivity kræver et stærkt team, de fleste gode udviklere foretrækker en adaptiv proces.
PlugKompatibel Programmering Enheder

Et af formålene med de traditionelle metoder er at udvikle en proces, hvor de involverede personer er udskiftelige dele. Med sådan en proces kan du behandle mennesker som ressourcer, der er tilgængelige i forskellige typer. Du har en analytiker, nogle kodere, nogle testere, en manager. De personer, ikke er så vigtige, kun roller er vigtige. Den måde, hvis du planlægger et projekt, er det ligegyldigt, hvilken analytiker og som testere du får, bare at du ved, hvor mange du har, så du ved, hvordan antallet af ressourcer påvirker din plan.

Men dette rejser et centralt spørgsmål: er de mennesker, der er involveret i udvikling af software udskiftelige dele? Et af de centrale elementer i agile metoder er, at de afviser denne antagelse.

Måske den mest udtrykkelige afvisning af mennesker som ressourcer er Alistair Cockburn. I sit papir karakteriserer Folk som ikke-lineære, første ordens Komponenter i Software Development, gør han opmærksom på, at forudsigelige processer kræver komponenter, der opfører sig på en forudsigelig måde. Men folk er ikke forudsigelige komponenter. Desuden sine studier af software projekter har ført ham til at konkludere, folk er den vigtigste faktor i softwareudvikling.

I titlen, [af hans artikel] Jeg henviser til folk som “komponenter“. Det er, hvordan folk bliver behandlet i processen / metodik design litteratur. Fejlen i denne tilgang er, at “folk” er meget varierende og ikke-lineære, med unikke succes og fiasko tilstande. Disse faktorer er af første orden, ikke uvæsentlig betydning. Svigt af proces og metode designere til at redegøre for, bidrager til den slags uforudsete projekt baner vi ser så ofte.

– [Cockburn ikke-lineær]

Man spørger sig selv, hvis ikke karakter af softwareudvikling arbejder imod os her. Når vi programmere en computer, vi styre en iboende forudsigelig enhed. Da vi er i denne virksomhed, fordi vi er gode til at gøre det, vi er velegnet til at rode op, når de står med mennesker.

Selvom Cockburn er den mest eksplicitte i hans folk-centreret visning af software udvikling, begrebet folk først er et fælles tema med mange tænkere i software. Problemet, for ofte er, at metoden har været modstander af begrebet folk som den første ordens faktor i projektets succes.

Dette skaber en stærk positiv feedback effekt. Hvis du forventer, at alle dine udviklere til at være plugkompatibel programmering enheder, behøver du ikke forsøge at behandle dem som individer. Dette sænker moralen (og produktivitet). De gode folk kigge efter et bedre sted at være, og du ender op med, hvad du ønsker: plugkompatibel programmering enheder.

Beslutter, at folk kommer først er en stor beslutning, som kræver en masse vilje til at presse igennem. Begrebet mennesker som ressourcer er dybt indgroet i erhvervslivet tænkning, sine rødder går tilbage til virkningen af ​​Frederick Taylors Scientific Management tilgang. Ved at køre en fabrik, kan denne Taylor tilgang giver mening. Men for den meget kreative og professionelle arbejde, som jeg tror softwareudvikling til at være, betyder det ikke holde. (Og i virkeligheden moderne produktionsanlæg er også bevæger sig væk fra Taylor-modellen.)
Programmører er ansvarlige Professionals

En central del af Taylor opfattelse er, at folk gør det arbejde er ikke de mennesker, der bedst kan finde ud af, hvordan man bedst til at gøre det arbejde. I en fabrik kan dette være tilfældet for flere grunde. En del af dette er, at mange fabriksarbejdere er ikke de mest intelligente eller kreative mennesker, dels er det fordi der er en spænding mellem ledelse og medarbejdere i, at ledelsen foretager flere penge, når arbejderne gøre mindre.

Nyere historie i stigende grad viser os, hvordan usandt det er for softwareudvikling. Stadig mere lyse og dygtige folk er tiltrukket af softwareudvikling, tiltrukket af både dens glitz og ved potentielt store belønninger. (Der begge fristet mig væk fra elektronik.) På trods af afmatningen i den tidlige 00’erne, er der stadig en stor del af talent og kreativitet i softwareudvikling.

(Der kan meget vel være et generationsskifte effekt her. Nogle anekdotiske beviser gør mig spekulerer på, hvis mere lysere mennesker har vovet sig ind softwareudvikling i de sidste femten år eller deromkring. Hvis så det ville være en grund til, hvorfor der er sådan en kult af unge i computerbranchen, ligesom de fleste kulter skal der være et gran af sandhed i det.)

Når du ønsker at ansætte og fastholde gode folk, er du nødt til at erkende, at de er kompetente fagfolk. Som sådan de er de bedste folk til at bestemme, hvorledes deres tekniske arbejde. Den tayloristiske forestillingen om en særskilt planlægning afdeling, der afgør, hvordan man gør tingene fungerer kun, hvis planlæggerne forstår at gøre jobbet bedre end dem at gøre det. Hvis du har lyst, motiverede mennesker gør jobbet dette ikke holder.


Administration af en Mennesker Oriented Proces

Folk orientering manifesterer sig i en række forskellige måder i agile processer. Det fører til forskellige effekter, ikke alle af dem er i overensstemmelse.

Et af de vigtigste elementer er, at acceptere processen snarere end indførelsen af ​​en proces. Ofte software processer er pålagt af ledelsen figurer. Som sådan de ofte modstand, især når tallene ledelse har haft en betydelig mængde tid væk fra aktiv udvikling. Accept en proces kræver engagement, og som sådan har brug for aktiv inddragelse af alle hold.

Det ender med det interessant resultat, at kun udviklerne selv kan vælge at følge en adaptiv proces. Dette er især sandt for XP, som kræver en masse disciplin til at udføre. Crystal anser sig selv som en mindre disciplineret tilgang, der er passende for et bredere publikum.

Et andet punkt er, at udviklerne skal kunne træffe alle tekniske beslutninger. XP får til hjertet af denne hvor i sin planlægningsproces det hedder, at kun udviklere kan gøre skøn på, hvor meget tid det vil tage at gøre noget arbejde.

En sådan teknisk lederskab er en stort skift for mange mennesker i lederstillinger. En sådan tilgang kræver en deling af ansvaret, hvor udviklere og ledelse har lige plads i ledelsen af ​​projektet. Bemærk, at jeg siger lige. Ledelsen spiller stadig en rolle, men anerkender den ekspertise af udviklere.

En vigtig årsag til dette er graden af ​​ændring af teknologi i vores branche. Efter et par år teknisk viden bliver forældet. Denne halveringstid på tekniske færdigheder er uden sidestykke i nogen anden branche. Selv tekniske folk er nødt til at erkende, at indtastning af ledelsen betyder, at deres tekniske færdigheder vil visne hurtigt. Ex-udviklere nødt til at erkende, at deres tekniske færdigheder hurtigt vil forsvinde, og de ​​har brug for at have tillid til og stole på de nuværende udviklere.


Vanskeligheden ved måling

Hvis du har en proces, hvor de mennesker, der siger, hvordan arbejdet skal gøres, er forskellige fra de mennesker, der rent faktisk gør det, lederne har brug for nogle måde at måle, hvor effektive de magtsyge er. I Scientific Management var der en stærk tilskyndelse til at udvikle objektive metoder til værdiansættelse af mennesker.

Dette er især relevant for software, fordi det er vanskeligt at anvende måling software. Trods vores bedste indsats, vi er i stand til at måle de mest simple ting om software, såsom produktivitet. Uden gode foranstaltninger for disse ting, enhver form for ekstern kontrol er dødsdømt.

Introduktion målt ledelse uden gode foranstaltninger fører til sine egne problemer. Robert Austin gjort et fremragende diskussion af dette. Han påpeger, at når man måler ydelse, du er nødt til at få alle de vigtige faktorer under målingen. Alt, hvad der mangler har det uundgåelige resultat, at de magtsyge vil ændre, hvad de gør for at producere de bedste foranstaltninger, selv om der klart reducerer den sande effektiviteten af ​​hvad de gør. Denne måling dysfunktion er akilleshælen i målingen forvaltning.

Austins konklusion er, at du nødt til at vælge mellem måling base management og delegatory forvaltning (hvor magtsyge beslutte, hvordan at gøre arbejdet). Måling forvaltning er bedst egnet til gentagne enkelt arbejde, med lave krav til viden og nemt målte udgange – præcis det modsatte af softwareudvikling.

XP (Extreme Programming)

Under den tidlige popularitet af agile metoder i slutningen af ​​1990’erne, Extreme Programming var en, der fik broderparten af opmærksomheden. På mange måder er det stadig gør.

Rødderne af XP ligge i Smalltalk samfund, og især det tætte samarbejde med Kent Beck og Ward Cunningham i slutningen af ​​1980. Begge raffineret deres praksis på en lang række projekter i begyndelsen af ​​90’erne, der strækker deres ideer om en softwareudvikling tilgang, der var både adaptive og folk-orienteret.

Kent fortsatte med at udvikle sine ideer i løbet af konsulentydelser træfninger, især Chrysler C3-projektet, som siden er blevet kendt som skabelsen projekt af ekstrem programmering. Han begyndte at bruge udtrykket »ekstrem programmering” omkring 1997 (C3 markerede også min første kontakt med Extreme Programming og begyndelsen af ​​mit venskab med Kent.)

Under slutningen af ​​1990 ord af Extreme Programming spredes, i første omgang gennem beskrivelser på nyhedsgrupper og Ward Cunningham wiki, hvor Kent og Ron Jeffries (en kollega på C3) brugt en masse tid på at forklare og diskutere de forskellige idéer. Endelig en række bøger blev udgivet i slutningen af ​​90’erne og starten af ​​00’erne, der gik ind i nogle detaljer forklarer de forskellige aspekter af den tilgang. De fleste af disse bøger tog Kent Becks hvide bog som deres fundament. Kent produceret en anden udgave af den hvide bog i 2004, hvilket var en betydelig re-artikulation af den strategi.

XP begynder med fem værdier (Kommunikation, feedback, Simplicity, Courage og respekt). Derefter uddyber disse i fjorten principper og igen i fireogtyve praksis. Ideen er, at praksis er konkrete ting, som et team kan gøre dag-til-dag, mens værdier er den grundlæggende viden og forståelse, som understøtter den tilgang. Værdier uden praksis er svære at anvende og kan anvendes på så mange måder, at det er svært at vide hvor man skal begynde. Praksis, uden værdier er rote aktiviteter uden et formål. Begge værdier og praksis er nødvendige, men der er en stor kløft mellem dem de principper hjælpe bro denne kløft. Mange af XP praksis er gamle, gennemprøvede teknikker, men ofte glemt af mange, herunder de fleste planlagte processer. Samt at genoplive disse teknikker, XP væver dem ind i en synergistisk helhed, hvor hver enkelt er forstærket af de andre og givet formål af værdierne.

En af de mest slående, såvel som oprindeligt appellerer til mig, er dens stærke vægt på test. Mens alle processer nævne test, de fleste gør det med en temmelig lav vægt. Men XP sætter afprøvning ved grundlaget for udvikling, med hver programmør skrive tests, som de skriver deres produktion kode. Testene er integreret i en løbende integration og byggeprocessen, som giver en meget stabil platform for fremtidig udvikling. XP tilgang her, ofte beskrevet under overskriften Test Driven Development (TDD) har været indflydelsesrig selv på steder, der ikke har indført meget andet af XP.

Der er en stor del af publikationer om ekstrem programmering. Et område af forvirring, er imidlertid skiftet mellem den første og anden udgave af den hvide bog. Jeg sagde ovenfor, at den anden udgave er en ‘re-artikulation “af ekstrem programmering, i at tilgangen er stadig den samme, men det er beskrevet i en anden stil. Den første udgave (med fire værdier, tolv praksis og nogle vigtige, men for det meste ignoreret principper), havde en enorm indflydelse på software-industrien og de fleste beskrivelser af ekstrem programmering blev skrevet på grundlag af den første udgave beskrivelse. Holde det i tankerne, som du læser materiale på XP, især hvis det var forberedt før 2005 Faktisk de fleste af de fælles web beskrivelser af XP er baseret på den første udgave.

Det naturlige sted at begynde at opdage mere er den anden udgave af den hvide bog. Denne bog forklarer baggrunden og praksis XP i en kort (160 side) pakke. Kent Beck redigeret en multi-farvet serie af bøger om ekstrem programmering omkring århundredeskiftet, hvis tvunget til at vælge en til at foreslå jeg ville gå efter den lilla en, så husk at ligesom de fleste materiale det er baseret på den første udgave.

Der er en masse materiale på nettet om XP, men det meste af det er baseret på den første udgave. En af de få beskrivelser, jeg kender, der tager hensyn til den anden udgave er et papir om den nye XP (PDF) af Michele Marchesi der var vært de oprindelige XP konferencer i Sardinien. Til diskussion på XP er der en yahoo postliste.

Mit engagement i de tidlige dage og venskaber i XP-samfund betyder, at jeg har en særskilt fortrolighed, kærlighed og skævhed til XP. Jeg tror, ​​at dens indflydelse skylder gifte principperne for agil udvikling med et solidt sæt af teknikker til rent faktisk at udføre dem. En stor del af de tidlige skrifter på agil forsømt sidstnævnte, hvilket rejser spørgsmålet om, hvorvidt de agile tanker var virkelig muligt. XP forudsat de værktøjer, som håb om agility kunne realiseres.


Scrum

Scrum også udviklet i 80’erne og 90’erne primært med OO udvikling kredse som en meget iterativ udvikling metodologi. Det mest kendte udviklere var Ken Schwaber, Jeff Sutherland, og Mike Beedle.

Scrum koncentrerer sig om de forvaltningsmæssige aspekter af softwareudvikling, dividere udvikling i 30 dage iterationer (kaldet “sprints”) og anvendelse af tættere overvågning og kontrol med scrum møder dagligt. Det lægger langt mindre vægt på teknisk praksis, og mange mennesker kombinere sin tilgang projektledelse med Extreme Programming er teknisk praksis. (XP praksis ledelse er ikke virkelig meget forskellige.)

Ken Schwaber er en af ​​de mest aktive fortalere for Scrum, hans hjemmeside er et godt sted at begynde at lede efter mere information og hans bog er sandsynligvis den bedste første reference.


Crystal

Alistair Cockburn har længe været en af ​​de vigtigste stemmer i den agile samfund. Han udviklede Crystal familien af ​​softwareudvikling metoder som en gruppe af metoder, der er skræddersyet til forskellige størrelse teams. Crystal ses som en familie, fordi Alistair mener, at forskellige tilgange er nødvendige som holdene varierer i størrelse og kritikalitet fejl ændringer.

På trods af deres varianter alle krystal tilgange deler fælles træk. Alle krystal metoder har tre prioriteter: sikkerhedskrav (i projektets resultat), effektivitet, beboelighed (kan udviklere leve med krystal). De deler også fælles egenskaber, hvoraf den vigtigste tre er: Hyppig Levering, reflekterende forbedringer, og tæt kommunikation.

Den beboelighed prioritet er en vigtig del af krystal sindetsæt. Alistair søgen (som jeg ser det) er på udkig efter, hvad der er den mindste mængde af processen, du kan gøre, og stadig lykkes med en underliggende antagelse af lav disciplin, der er uundgåeligt med mennesker. Som et resultat Alistair ser Crystal som kræver mindre disciplin end ekstrem programmering, trade-off mindre effektivitet for en større beboelighed og reduceret chancerne for fiasko.

Trods Crystal er skitse, der er ikke en udtømmende beskrivelse af alle dens manifestationer. Den mest velbeskrevne er krystalklart, som har en moderne bog beskrivelse. Der er også en wiki for yderligere materiale og diskussion af Crystal.
Context Driven Test

Fra begyndelsen har det været software-udviklere, der har drevet agile samfund. Men mange andre mennesker er involveret i udvikling af software og er berørt af denne nye bevægelse. En oplagt sådan gruppe er testere, som ofte lever i en verden meget indeholdt ved vandfald tænkning. Med fælles retningslinjer, der erklærer, at den rolle test er at sikre overensstemmelse af software til at up-front skriftlige specifikationer, rolle testere i et agilt verden er langt fra klar.

Da det viser sig, har flere mennesker i test samfundet er blevet afhøring meget af mainstream test tænkning ganske lidt. Dette har ført til en gruppe kendt som kontekst-testning. Den bedste beskrivelse af dette bogen Erfaringer i Software Testing. Dette fællesskab er også meget aktiv på nettet, tage et kig på sites hostet af Brian Marick (en af ​​forfatterne til den agile manifest), Brett Pettichord, James Bach, og Cem Kaner.


Lean Udvikling

Jeg husker et par år siden at give et foredrag om agile metoder mod udvikling konference Software og taler med en ivrig kvinde om paralleller mellem de agile ideer og lean bevægelse i fremstillingsindustrien. Mary Poppendieck (og mand Tom) har gået på at blive aktive tilhængere af den agile samfund, især ser på overlapninger og inspirationer mellem lean produktion og udvikling af software.

Lean bevægelse i fremstillingssektoren blev banebrydende ved Taiichi Ohno hos Toyota og er ofte kendt som Toyota Production System. Lean produktion var en inspiration for mange af de tidlige agilists de Poppendiecks er mest bemærkelsesværdige til at beskrive, hvordan disse idéer interagere. Generelt er jeg meget på vagt over for disse former for ræsonnement analogt faktisk ingeniør adskillelse mellem design og konstruktion fik os ind i dette rod i første omgang. Men analogier kan føre til gode idéer, og jeg tror, ​​de magre ideer har indført mange brugbare ideer og værktøjer i den agile bevægelse.

De Poppendiecks bog og hjemmeside er de oplagte udgangspunkter for mere information.
(Rational) Unified Process

Et andet velkendt proces at være kommet ud af det objektorienterede samfund er Rational Unified Process (undertiden blot kaldet Unified Process). Den oprindelige idé var, at ligesom UML Unified Modeling sprog UP kunne forene software processer. Siden RUP dukkede omkring samme tidspunkt som de agile metoder, der er en masse diskussion om, hvorvidt de to er kompatible.

RUP er en meget stor samling af praksis og er virkelig en proces ramme snarere end en proces. Snarere end at give en enkelt proces til udvikling af software det formål at tilvejebringe et sæt fælles praksis for hold at vælge imellem for et individuelt projekt. Som et resultat et holds første skridt ved hjælp af RUP bør være at definere deres individuelle proces, eller som RUP kalder det, en udvikling sag.

De vigtigste fælles aspekter RUP er, at det er Use Case Driven (udvikling drives gennem bruger-synlige træk), iterativ og arkitektur centreret (der er en prioritet at bygge en arkitektur tidligt, at vil vare projektet igennem).

Min erfaring med RUP er, at dens problem er dens uendelig variation. Jeg har set beskrivelser af brugen RUP, der spænder fra stive vandfald med analyse iterationer «til billede perfekt adræt. Det slog mig, at folks ønske om at markedsføre RUP som fælles proces førte til et resultat, hvor folk kan gøre næsten alt og kalder det RUP resulterer i RUP er en meningsløs sætning.

Trods alt dette er der nogle meget stærke mennesker i RUP samfund, der er meget på linie med agil tænkning. Jeg har været imponeret i hele mit møde med Phillippe Kruchten og hans bog er bedste udgangspunkt for RUP. Craig Larman har også udviklet beskrivelser af arbejdet med RUP i en adræt stil i hans populære indledende bog om OO design.
Skulle du gå adræt?

Ved hjælp af en agil metode er ikke for alle. Der er en række ting at huske på, hvis du beslutter dig for at følge denne vej. Men helt sikkert tror jeg, at disse metoder er bredt anvendelige og bør anvendes af flere mennesker end i øjeblikket betragter dem.

I dagens miljø, er den mest almindelige metode er kode og fix. Anvendelse af mere disciplin end kaos vil næsten helt sikkert hjælpe, og den agile tilgang har den fordel, at det er meget mindre af et skridt end at bruge en sværvægter metode. Her den lette vægt af agile metoder, er en fordel. Enklere processer er mere tilbøjelige til at blive fulgt, når du er vant til ingen proces overhovedet.

For en ny person til agile metoder, er spørgsmålet, hvor du skal begynde. Som med enhver ny teknologi eller proces, er du nødt til at gøre din egen vurdering af det. Dette giver dig mulighed for at se, hvordan det passer ind i dit miljø. Som et resultat meget af min råd her følger, at jeg har givet til andre nye tilgange, bringe tilbage minderne om da jeg først blev talt om Objekt-Orienterede teknikker.

Det første skridt er at finde egnede projekter til at prøve agile metoder ud med. Da agile metoder er fundamentalt folk-orienterede, er det vigtigt, at du starter med et hold, der ønsker at prøve og arbejde i en agil måde. Ikke bare er en tilbageholdende hold mere vanskeligt at arbejde med, om indførelse af agile metoder på modvillige mennesker er fundamentalt i strid med hele ideen om agil udvikling.

Det er værdifuldt at også have kunder (dem der har brug for software), der ønsker at arbejde i denne form for kollaborativ måde. Hvis kunderne ikke samarbejder, så vil du ikke se den fulde fordele ved en adaptiv proces. Sagt, at vi har fundet flere gange, at vi har arbejdet med kunder, der ikke ønsker at samarbejde, men ændrede mening i løbet af de første par måneder, da de begyndt at forstå den agile tilgang.

En masse mennesker hævder, at agile metoder ikke kan anvendes på store projekter. Vi (ThoughtWorks) har haft god succes med agile projekter med omkring 100 mennesker og flere kontinenter. Trods dette vil jeg foreslå plukke noget mindre til at starte med. Store projekter er i sagens natur vanskeligere alligevel, så det er bedre at begynde at lære om et projekt af en mere håndterbar størrelse.

Nogle mennesker rådgive plukke et projekt med ringe effekt på forretningen til at starte med, den måde, hvis noget går galt så er der færre skader. Men en uvæsentlig projekt ofte gør en dårlig test, idet ingen bekymrer sig meget om udfaldet. Jeg foretrækker at råde folk til at tage et projekt, der er en lille smule mere kritisk, end du er komfortabel med.

Måske er det vigtigste ting du kan gøre, er at finde en person mere erfarne i agile metoder til at hjælpe dig med at lære. Når nogen gør noget nyt de uundgåeligt begå fejl. Finde nogen, der allerede har gjort masser af fejl, så du kan undgå at gøre dem selv. Igen det er noget sandt for enhver ny teknologi eller teknik, en god mentor er værd sin vægt i guld. Selvfølgelig er dette råd er self servering siden ThoughtWorks og mange af mine venner i branchen gør mentorordninger agile metoder. Det ændrer ikke det faktum, at jeg tror stærkt på betydningen af ​​at finde en god mentor.

Og når du har fundet en god mentor, følger deres råd. Det er meget nemt at gætte meget af dette, og jeg har lært af erfaring, at mange teknikker ikke rigtig kan forstås, indtil du har gjort et rimeligt forsøg på at afprøve dem. Et af de bedste eksempler, jeg hørte, var en kunde hos os, der besluttede at prøve ekstrem programmering for et par måneder. I denne periode gjorde de det klart, at de ville gøre, hvad mentor sagde selv om de troede, det var en dårlig idé. Ved slutningen af ​​denne prøveperiode de ville stoppe og beslutte, om de ønskede at fortsætte med nogen af ​​de ideer, eller vende tilbage til den tidligere måde at arbejde på. (I tilfælde af du skulle have spekuleret over de besluttede at fortsætte med XP.)

Et af de åbne spørgsmål om agile metoder er, hvor randbetingelser ligger. Et af de problemer med nogen ny teknik er, at du ikke er rigtig klar over, hvor randbetingelserne indtil du krydser over dem og mislykkes. Agile metoder er stadig for ung til at se nok indsats for at få en fornemmelse af, hvor grænserne er. Dette er yderligere forstærket af det faktum, at det er så svært at beslutte, hvad succes og fiasko betyde i software udvikling, samt for mange forskellige faktorer for nemt at pin ned kilden til problemer.

Så hvor skal du ikke bruge en agil metode? Jeg tror, ​​det primært kommer ned til folket. Hvis de involverede personer ikke er interesseret i den slags intense samarbejde, adræt arbejde kræver, det kommer til at være en stor kamp for at få dem til at arbejde med det. Især tror jeg, at dette betyder, at du bør aldrig forsøge at påtvinge adræt arbejder på et hold, der ikke ønsker at prøve det.

Der har været masser af erfaring med agile metoder i løbet af de sidste ti år. Hos ThoughtWorks vi altid bruge en agil tilgang, hvis vores kunder er villige til, som de fleste af den tid, de er. Jeg (og vi) fortsætte med at være store fans af denne måde at arbejde på.