Hej vÀnner. Jag ser ofta samma mönster, sÀrskilt inom outsourcing. Bristen pÄ en tydlig arbetsprocess i team pÄ olika projekt.
Det viktigaste Àr att programmerarna inte förstÄr hur man ska kommunicera med kunden och varandra. Hur man bygger en kontinuerlig utvecklingsprocess av kvalitetsprodukter. Hur man planerar sin arbetsdag och sina sprintar.
Allt detta leder i slutĂ€ndan till missade deadlines, övertid, stĂ€ndiga konflikter om vem som Ă€r skyldig och missnöje bland kunderna â vart och hur allt gĂ„r. Ganska ofta leder detta till att programmerare, och ibland hela team, byts ut. Förlust av kunder, sĂ€mre rykte och sĂ„ vidare.
Under en tid hamnade jag pÄ ett sÄdant projekt dÀr alla dessa problem fanns.
Ingen ville ta ansvar för projektet (ett stort tjÀnstmÀrkte marketplace), omsÀttningen var skrÀmmande, och kunden var vÀldigt otÄlig. CEOn kom över och sa till mig att jag hade rÀtt erfarenhet, sÄ nu har du chansen. Ta projektet om du vill. Misslyckas du, stÀnger vi projektet och sparkar alla. Lyckas du, sÄ blir det fantastiskt, och du fÄr leda och utveckla det som du anser nödvÀndigt. Tillslut blev jag teamledare för projektet och allt lÄg pÄ mina axlar.
Det första jag gjorde var att utveckla en arbetsprocess frÄn grunden, som motsvarade min vision dÄ, och jag skrev en arbetsbeskrivning för teamet. Att implementera detta var inte lÀtt. Men efter ungefÀr en mÄnad var allt pÄ plats, utvecklarna och kunden vÀnjde sig, och allt blev lugnt och bekvÀmt. För att visa teamet att detta inte bara var en "storm i ett vattenglas", utan en verklig lösning pÄ situationen, tog jag pÄ mig den största delen av ansvaret och avlastade teamet frÄn jobbiga rutiner.
Det har nu gÄtt ett och ett halvt Är, och projektet utvecklas utan övertid, utan "rÄttkapplöpning" och med minskad stress. NÄgon i det gamla teamet ville inte jobba sÄ hÀr och lÀmnade, medan andra verkligen uppskattade de transparenta reglerna. Men i slutÀndan Àr alla i teamet mycket motiverade och har full förstÄelse för det stora projektet, bÄde frontend och backend. Vi har en djup förstÄelse för hela kodbasen och all affÀrslogik. Vi har till och med kommit till den punkt dÀr vi inte bara Àr " paddlare", utan sjÀlva kommer pÄ mÄnga affÀrsprocesser och nya funktioner som verket verkligen uppskattat.
Tack vare vÄr metod har kunden valt att bestÀlla ytterligare en marknadsplats frÄn vÄrt företag, vilket glÀdjer oss.
Eftersom det fungerar för mitt projekt kan det kanske ocksÄ hjÀlpa nÄgon annan. SÄ hÀr sÄg processen ut som hjÀlpte oss att rÀdda projektet:
Teamets arbete i projektet 'Mitt favoritprojekt'
a) Inom teamprocessen (mellan utvecklarna)
- Alla uppgifter skapas i Jira-systemet
- Varje uppgift ska beskrivas sÄ utförligt som möjligt och utföra enbart en ÄtgÀrd
- Om en funktion Àr tillrÀckligt komplex delas den upp i flera smÄ tasks
- Teamet arbetar med funktionerna som en enda uppgift. Först gör vi tillsammans en funktion, skickar den för testning, och dÀrefter tar vi nÀsta.
- Varje uppgift mÀrks, antingen för backend eller frontend
- Det finns olika typer av uppgifter och buggar. De mÄste anges korrekt.
- Efter att uppgiften har slutförts omvandlas den till statusen kodgranskning (samtidigt skapas en pull request till sin kollega)
- Den som utförde uppgiften spÄrar omedelbart sin tid för denna uppgift
- Efter kodgranskningen godkÀnns PR och dÀrefter merges uppgiften av den som utförde det in i mastergrenen, och de Àndrar statusen till redo för deployment pÄ dev server.
- Alla uppgifter som Àr klara för deployment pÄ dev-servern deployas av teamledaren (hans ansvarsomrÄde), ibland av ett teammedlem om det Àr nÄgot brÄdskande. Efter deployment övergÄr alla uppgifter frÄn redo för deployment pÄ dev till status - redo för testning pÄ dev
- Alla uppgifter testas av kunden
- NÀr kunden har testat uppgiften pÄ dev överförs den till statusen redo för deployment pÄ prod
- För deployment pÄ prod har vi en separat gren dÀr vi merges master endast före deployment
- Om kunden hittar buggar under testningen Äterför han uppgiften för revidering och sÀtter statusen Äterförd för revidering. PÄ sÄ sÀtt separerar vi nya uppgifter frÄn de som inte passerade testningen
- I slutĂ€ndan passerar alla uppgifter frĂ„n skapande till avslut: To Do â In Development â Code Review â Ready deploy to dev â QA on dev â (Return to dev) â Ready deploy to prod â QA on prod â Done
- Varje utvecklare testar sin egen kod sjÀlvstÀndigt, inklusive som anvÀndare av webbplatsen. Ingen merge av grenen med huvudgrenen tillÄts om det inte Àr helt sÀkert att koden fungerar.
- Varje uppgift har sina prioriteringar. Prioriteringarna faststÀlls antingen av bestÀllaren eller teamledaren.
- Utvecklare utför först och frÀmst de prioriterade uppgifterna.
- Utvecklare kan tilldela uppgifter till varandra om olika buggar har hittats i systemet eller om en uppgift bestÄr av arbete frÄn flera specialister.
- Alla uppgifter som bestÀllaren skapar gÄr till teamledaren, som bedömer dem och antingen ber bestÀllaren att justera dem eller tilldelar dem till en av teammedlemmarna.
- Alla uppgifter som Àr klara för deployment till dev eller prod gÄr Àven till teamledaren, som sjÀlv avgör nÀr och hur deploy ska göras. Efter varje deployment mÄste teamledaren (eller en teammedlem) informera bestÀllaren om detta. Dessutom mÄste de Àndra status för uppgifter till redo för testning pÄ dev/prod.
- Varje dag pÄ samma tid (för oss Àr det kl. 12.00) hÄller vi ett möte mellan alla teammedlemmar.
- Var och en rapporterar pÄ mötet, inklusive teamledaren, vad han gjorde igÄr, vad han planerar att göra idag. Vad som inte fungerar och varför. PÄ sÄ sÀtt Àr hela teamet medvetet om vem som gör vad och i vilket skede projektet befinner sig. Detta ger oss möjlighet att förutsÀga och justera vÄra uppskattningar och deadlines om det behövs.
- PÄ mötet meddelar teamledaren Àven om alla förÀndringar i projektet och nivÄn av aktuella buggar som inte har hittats av bestÀllaren. Alla buggar utreds och tilldelas varje teammedlem för att ÄtgÀrdas.
- PÄ mötet tilldelar teamledaren uppgifter till varje individ, med hÀnsyn till de nuvarande arbetsbelastningarna för utvecklarna, deras yrkesskicklighet samt med hÀnsyn till hur nÀra en viss uppgift Àr det som utvecklaren för tillfÀllet arbetar med.
- PÄ mötet utvecklar teamledaren en övergripande strategi för arkitektur och affÀrslogik. Efter detta diskuterar hela teamet det och fattar beslut om att göra justeringar eller godkÀnna den aktuella strategin.
- Varje utvecklare skriver kod och bygger algoritmer sjÀlvstÀndigt inom en gemensam arkitektur och affÀrslogik. Varje person kan uttrycka sin vision av genomförandet, men ingen tvingas att göra det pÄ ett visst sÀtt. Varje beslut motiveras. Om det finns en bÀttre lösning men ingen tid för den just nu, skapas en uppgift i JIRA för framtida refaktorering av en specifik del av koden.
- NÀr en utvecklare har tagit en uppgift i arbete, Àndrar han dess status till 'Under utveckling'. All kommunikation kring att klargöra uppgiften med bestÀllaren ligger pÄ utvecklarens axlar. Tekniska frÄgor kan stÀllas till teamledaren eller kollegor.
- Om utvecklaren inte förstÄr kÀrnan i uppgiften, och bestÀllaren inte lyckas förklara den tydligt, gÄr han vidare till nÀsta uppgift. Den aktuella uppgiften tas över av teamledaren som sedan diskuterar den med bestÀllaren.
- Varje dag ska utvecklaren skriva i kundchatten om vilka uppgifter han arbetade med igÄr och vilka han kommer att arbeta med idag.
- Arbetsprocessen följer Scrum. Allt Àr uppdelat i sprintar. Varje sprint varar i tvÄ veckor.
- Sprintarna skapas, fylls med innehÄll och stÀngs av teamledaren.
- Om projektet har strikta tidsfrister försöker vi estimera alla uppgifter. DÀrifrÄn skapar vi en sprint. Om bestÀllaren försöker lÀgga till fler uppgifter i sprinten sÀtter vi prioriteringar och flyttar vissa uppgifter till nÀsta sprint.
b) Processen för arbete med bestÀllaren
- Varje utvecklare kan och bör kommunicera med bestÀllaren.
- Man fÄr inte lÄta bestÀllaren pÄtvinga sina spelregler. Det Àr viktigt att pÄ ett artigt och vÀnligt sÀtt lÄta bestÀllaren förstÄ att vi Àr specialister inom vÄrt omrÄde och det Àr bara vi som ska bygga upp arbetsprocesserna och involvera bestÀllaren i dem.
- Det Àr lÀmpligt, innan man börjar implementera nÄgon funktionalitet, att skapa ett flödesschema för hela den logiska processen för funktionen (work flow). Det ska skickas för bekrÀftelse till bestÀllaren. Detta gÀller endast komplex och otydlig funktionalitet, till exempel betalningssystem, notificationssystem etc. Det kommer att göra det möjligt att tydligare förstÄ vad bestÀllaren verkligen behöver, bevara dokumentationen för funktionen och skydda sig mot att bestÀllaren i framtiden sÀger att vi inte gjorde det som han bad om.
- Vi sparar alla diagram/flödesscheman/logik osv. i Confluence/Jira, dÀr vi ber kunden bekrÀfta korrektheten av den framtida implementeringen i kommentarerna.
- Vi försöker att inte överbelasta kunden med tekniska detaljer. Om vi behöver förstÄelse för hur kunden vill ha det, ritar vi primitiva algoritmer i form av flödesscheman som kunden kan förstÄ och sjÀlv rÀtta/tweaka.
- Om kunden hittar en bugg i projektet ber vi dem att noggrant beskriva den i Jira. Under vilka omstÀndigheter den uppstod, nÀr, vilken ÄtgÀrdssekvens kunden följde vid testning. Vi ber dem att bifoga skÀrmdumpar.
- Vi försöker varje dag, max varannan dag, att göra en deploy till utvecklingsservern. Kunden börjar dÄ testa funktionaliteten och projektet stÄr inte stilla. Detta fungerar ocksÄ som en markör för kunden att projektet Àr under full utveckling och att ingen berÀttar sagor.
- Det hÀnder ofta att kunden inte riktigt förstÄr vad de överhuvudtaget behöver. Eftersom de skapar ett nytt företag med Ànnu inte etablerade processer. DÀrför Àr det en vanlig situation att vi kastar hela kodbitar i papperskorgen och omarbetar logiken i applikationen. DÀrav följer att man inte bör tÀcka allt med tester. Det Àr meningsfullt att tÀcka endast kritiskt viktig funktionalitet med tester, och det med vissa förbehÄll.
- Det finns situationer nÀr teamet inser att vi inte hÄller vÄra tidsfrister. DÄ gör vi en snabb granskning av uppgifterna och meddelar kunden om detta omedelbart. Som en lösning pÄ situationen föreslÄr vi att lansera den viktiga och kritiska funktionaliteten i tid, medan resten kan skjutas till efter release.
- Om kunden börjar pÄhittar olika uppgifter frÄn huvudet, börjar fantisera och förklara med fingrarna, ber vi dem att ge oss en skiss pÄ sidan och flödet med logik som helt ska beskriva beteendet hos hela mallen och dess element.
- Innan vi tar oss an nĂ„gon uppgift mĂ„ste vi sĂ€kerstĂ€lla att den hĂ€r funktionen ingick i vĂ„ra avtalsvillkor. Om det Ă€r en ny funktion som gĂ„r utöver vĂ„ra ursprungliga överenskommelser, sĂ„ mĂ„ste vi uppskatta denna funktion ((ungefĂ€rlig tidsram + 30%) x 2) och informera kunden om att det kommer att ta sĂ„ hĂ€r lĂ„ng tid, plus att deadline flyttas fram med tiden för uppskattningen multiplicerat med tvĂ„. Om vi kan göra uppgiften snabbare â fantastiskt, alla vinner pĂ„ det. Om inte, har vi haft en sĂ€kerhetsmarginal.
v) Vad vi inte accepterar i teamet:
- Brist pÄ ansvar, oorganiseradhet, glömska
- Att "skjuta upp". Om du inte kan utföra uppgiften eller inte vet hur, mÄste du omedelbart informera teamledaren istÀllet för att vÀnta till sista stund.
- Skryter och överdrifter frĂ„n en person som inte har bevisat sina förmĂ„gor och professionalism med handlingar. Om de har bevisat det, gĂ„r det bra, inom rimliga grĂ€nser đ
- BedrĂ€geri i alla dess former. Om uppgiften inte Ă€r klar, ska du inte Ă€ndra statusen till klar och skriva i kundens chatt att den Ă€r redo. Datorn kraschade, systemet föll bort, hunden tuggade pĂ„ bĂ€rbara datorn â allt detta Ă€r oacceptabelt. Om det verkligen Ă€r en force majeure, mĂ„ste teamledaren omedelbart informeras.
- NÀr specialisten alltid Àr offline och svÄrt att nÄ under arbetstid.
- Toxicitet i teamet accepteras inte! Om nÄgon Àr oense, samlas alla för ett möte och diskuterar och löser det.
Och ytterligare nÄgra frÄgor/teser som jag ibland stÀller till min kund för att undanröja alla missförstÄnd:
- Vilka Àr era kvalitetskriterier?
- Hur avgör ni om det finns problem i projektet eller inte?
- Om ni bryter mot alla vÄra rekommendationer och rÄd för förÀndringar/förbÀttringar, bÀr ni alla risker sjÀlva.
- Alla större Àndringar i projektet (t.ex. alla möjliga extra flöden) kan leda till möjliga buggar (som vi naturligtvis kommer att ÄtgÀrda)
- Det Àr omöjligt att förstÄ vilket problem som har intrÀffat i projektet pÄ bara nÄgra minuter, Àn mindre att lösa det direkt.
- Vi arbetar efter ett specifikt produktflöde (Uppgifter i Jira â Utveckling â Testning â Deployment). Det innebĂ€r att vi inte kan reagera pĂ„ hela flödet av förfrĂ„gningar och klagomĂ„l i chatt.
- Programmer Àr just programmerare och inte professionella testare, och de kan inte sÀkerstÀlla tillrÀcklig kvalitet pÄ projektets tester.
- Ansvarigheten för slutlig testning och godkÀnnande av uppgifter i produktion ligger helt pÄ er.
- Om vi redan har pÄbörjat en uppgift kan vi inte omedelbart byta till andra uppgifter förrÀn vi har slutfört den aktuella, annars leder det till Ànnu fler buggar och ökad utvecklingstid.
- Antalet personer i teamet har minskat (pÄ grund av semester eller sjukdom), men arbetsbördan har ökat och vi kan fysiskt inte hinna med allt ni vill.
- Er begÀran att göra deployment i produktion utan testade uppgifter i utveckling Àr endast ert risktagande, och inte utvecklarnas.
- NÀr ni stÀller oklara uppgifter, utan korrekt flöde, utan designskisser, krÀver det av oss mycket mer arbete och lÀngre implementationstid, eftersom vi istÀllet för er mÄste utföra ytterligare arbetskapacitet.
- Eventuella buggar, utan detaljerad beskrivning av deras uppkomst och skÀrmdumpar, ger oss ingen möjlighet att förstÄ vad som gÄtt fel och hur vi ska reproducera den buggen.
- Projektet krÀver stÀndig utveckling och förbÀttringar för att öka prestanda och sÀkerhet. DÀrför lÀgger teamet en del av sin tid pÄ dessa förbÀttringar.
- Eftersom vi ibland har övertid (akuta fixar) mÄste vi kompensera för det pÄ andra dagar.
Som regel förstÄr kunden omgÄende att det inte Àr sÄ enkelt med mjukvaruutveckling, och bara vilja Àr uppenbarligen inte tillrÀckligt.
Detta Àr det hela. Jag lÀmnar kvar mÄnga förhandlingar och den initiala justeringen av alla processer bakom kulisserna, men i slutÀndan har allt ordnat sig. Jag kan sÀga att den hÀr processen blivit nÄgon slags "Silverkula" för oss. Nya personer som kom till projektet kunde omedelbart delta i arbetet frÄn första dagen, eftersom alla processer Àr dokumenterade, och dokumentationen samt arkitekturen i diagramform gav en tydlig bild av vad vi alla gör hÀr.
P. S. Jag vill ŃŃĐŸŃĐœĐžŃŃ, ŃŃĐŸ Ń ĐœĐ°Ń ĐœĐ”Ń ĐŒĐ”ĐœĐ”ĐŽĐ¶Đ”Ńа ĐżŃĐŸĐ”ĐșŃа. ĐĐœ Đ”ŃŃŃ Ń ŃŃĐŸŃĐŸĐœŃ Đ·Đ°ĐșазŃĐžĐșа. ĐĄĐŸĐČŃĐ”ĐŒ ĐœĐ” ŃĐ”Ń ĐœĐ°ŃŃ. ĐŃĐŸĐ”ĐșŃ Đ”ĐČŃĐŸĐżĐ”ĐčŃĐșĐžĐč. ĐŃŃ ĐșĐŸĐŒĐŒŃĐœĐžĐșаŃĐžŃ ŃĐŸĐ»ŃĐșĐŸ ĐœĐ° Đ°ĐœĐłĐ»ĐžĐčŃĐșĐŸĐŒ.
Lycka till med projekten. BrÀnn inte ut er och försök förbÀttra era processer.
KĂ€llan finns i min .
KĂ€lla: habr.com
