Agile ontwikkeling werd oorspronkelijk bedacht voor geclusterde teams of teams die fysiek samen in hetzelfde kantoor zijn gevestigd. In overeenstemming met het idee dat 'de meest efficiënte en effectieve methode om informatie over te brengen naar en binnen een ontwikkelingsteam face-to-face gesprekken zijn', waren vroege agile teams bedoeld om samen te werken in de directe nabijheid.
Maar tegenwoordig hebben de meeste bedrijven een paar of zelfs meerdere gedistribueerde teams. Dit is niet alleen een trend, het is ook logisch. Gedistribueerde teams kunnen de klok rond aan projecten werken en sterk talent is te vinden in minder concurrerende markten. (Om nog maar te zwijgen van het feit dat talent gemakkelijk behouden blijft door geen ongewenste verhuizing te eisen.) Maar de voordelen van gedistribueerde teams komen niet zonder enige concessies. Voor veel gedistribueerde teams is het moeilijk om de agile praktijk van face-to-face interacties over te nemen.
Andere uitdagingen voor gedistribueerde softwareteams:
- Coördineren tussen tijdzones
- Een goed verstandhouding opbouwen als iedereen niet in hetzelfde kantoor zit
- Samenwerking tussen verschillende ontwikkelculturen
- Vergaderingen of informele gesprekken plannen wanneer beide teams maar een paar uur (of minder) tegelijkertijd online zijn
Dit zijn echte problemen. Maar ze zijn niet onoplosbaar. Laten we eens kijken naar enkele strategieën om de kloof tussen lokale en externe kantoren te helpen overbruggen, en ideeën onderzoeken om ook andere potentiële issues te helpen verminderen.
Wereldwijde teams structureren
Een goede softwarearchitectuur vereist een modulair ontwerp, dus structureer je teams op dezelfde manier. Elk kantoor moet zelfvoorzienend zijn in het ontwikkelen van één stuk technologie, waardoor de hoeveelheid samenwerking met teams in andere tijdzones tot een minimum wordt beperkt en ze over het algemeen autonoom worden. Wanneer teams op verschillende locaties aan een project moeten meewerken, kunnen ze zich concentreren op hun integratiepunten en API's.
Code-reviews spelen ook een belangrijke rol. Omdat mensen op verschillende tijdstippen online zijn, zorgt de distributie van kennis over de code tussen kantoren ervoor dat support en onderhoud veel gemakkelijker zijn. Als er een productie-issue ontstaat wanneer het team niet online is, kan een ander kantoor gemakkelijk ingrijpen om het issue te ondersteunen en op te lossen dankzij de knowhow die is opgedaan met cross-team- of cross-locatiecode reviews.
Goede betrekkingen opbouwen
Het is belangrijk om in elk programma (en vooral in agile programma's) een solide verstandhouding in het hele team te hebben. Persoonlijk contact bouwt vertrouwen op, minimaliseert gemiste verwachtingen, vergemakkelijkt zelforganisatie en verhoogt het moreel. Neem binnen je kantoor de tijd om iedereen in je team te leren kennen. En doe zoveel mogelijk hetzelfde met de mensen waarmee je werkt in externe kantoren. Persoonlijke connecties zijn belangrijk. Hoe sterker ze worden, hoe groter de kans om deze collega's als alle anderen te zien, in plaats van verre collega's uit onbekende plaatsen zonder goede relaties.
Bij Atlassian plaatst elke nieuwe medewerker een 'introductieblog' op onze interne Confluence-installatie, de tool voor contentsamenwerking van Atlassian. De blog introduceert de nieuwe medewerker zowel professioneel als persoonlijk (hobby's, interesses, familie enz.), wat echt helpt de kloof tussen kantoren te overbruggen. Hoe beter we elkaar kennen als mensen, hoe sterker we samenwerken als teams.
Bovenal vervangt niets face-to-face ontmoetingen. Teamleden in elk kantoor zullen profiteren van regelmatig direct contact, met inbegrip van videoconferenties en bezoeken aan externe kantoren.
Tools voor videoconferenties zoals Zoom helpen de kloof tussen teams te overbruggen, vooral voor gedistribueerde agile teams. Teams die op Zoom vertrouwen, moeten zich echter bewust zijn van bepaalde beperkingen.
- Videoconferenties bieden vaak niet meer dan een heel korte contactperiode, terwijl werken in hetzelfde kantoor veel meer inzicht geeft in de wereld van een ander: uitdagingen, successen en kansen.
- Zoom heeft netwerkproblemen heel goed aangepakt. Toch kunnen er momenten zijn waarop netwerkproblemen optreden tussen kantoren, waardoor video en audio schokkerig of moeilijk te begrijpen zijn.
- De meeste mensen beschouwen Zoom-videoconferenties nog steeds als formeel ingeplande tijd. Het kost tijd om een cultuur te creëren waarin videochats worden gebruikt voor spontane informele gesprekken. Gebruik ook instant messaging-tools zoals Slack voor snelle vragen.
Om bepaalde problemen met videoconferenties te helpen verminderen, moedig je teamleden aan om wekelijkse 1:1 videochatsessies te houden. Deze kunnen minder formeel zijn en het informeel delen van kennis vergemakkelijken. Teamgenoten kunnen deze kansen gebruiken om een goede verstandhouding op te bouwen en beter samen te werken.
Onthoud dat toon, stem en houding een belangrijke rol spelen in communicatie. Persoonlijke ontmoetingen helpen het team externe collega's beter te leren kennen, wat op zijn beurt toekomstige videoconferenties effectiever maakt.
Of het nu gaat om een huis of een product, je moet de visie definiëren en de strategische thema's schetsen. Zie thema's als aandachtsgebieden voor de hele organisatie. Waar wil je je op concentreren in de volgende drie, zes, twaalf maanden? Waar wil je tijd en resources aan besteden? Prestaties, gebruikerservaring, beveiliging, nieuwe competitieve functies (toch maar een bubbelbad?), of een combinatie van dit alles?
Detacheringen zijn tijdelijke opdrachten in een nieuwe functie of locatie, variërend van enkele weken tot een jaar. Ze zijn niet alleen een effectieve manier om een goede verstandhouding op te bouwen en cultuur binnen het team te verspreiden, maar ook een geweldige manier voor medewerkers om een andere cultuur te ervaren.
Een harmonieuze ontwikkelingscultuur opbouwen
Er zijn vier eenvoudige manieren waarop teams het werken in verschillende regio's gemakkelijker kunnen maken en een gemeenschappelijke ontwikkelaarscultuur kunnen delen:
- Breng beslissingen in alle regio's duidelijk over
- Minimaliseer frictie bij het opzetten van de ontwikkelomgeving
- Definieer duidelijk wat 'gereed' is
- Maak richtlijnen voor het indienen van effectieve bugrapporten
Laten we dat opsplitsen.
Ten eerste wordt communicatie veel moeilijker wanneer je van een gedeeld kantoor overstapt naar een gedistribueerde cultuur. De eerste uitdaging is het team erin te trainen om te begrijpen dat, wanneer er beslissingen worden genomen, deze moeten worden gecommuniceerd. Dit klinkt misschien voor de hand liggend, maar het wordt gemakkelijk vergeten! Vaak worden belangrijke beslissingen genomen in de wandelgangen, tijdens informele lokale teamvergaderingen of door individuen. Bovendien kan het gemakkelijk zijn om kleine beslissingen als onbelangrijk af te doen.
Communiceer zelfs de kleinste details totdat beide kantoren een gezonde groove vinden.
Wanneer beslissingen worden genomen, moet iedereen in elk kantoor deze beslissingen begrijpen en idealiter ook waarom deze zijn genomen. Gebruik geen e-mail. Het is te gemakkelijk om belangrijke informatie te verliezen. Gebruik een contentmanagementsysteem zoals een wiki waar teamleden gemakkelijk naar updates binnen het hele team kunnen bladeren (en op de hoogte kunnen worden gesteld van updates via e-mail of de groepschattool van Slack). Je kunt Slack ook gebruiken om kanalen aan te maken voor individuele personen en teams om te kunnen communiceren en updates te bekijken. Vertragingen die worden veroorzaakt doordat teamleden aan verouderde informatie werken, een obstakel tegenkomen en vervolgens een vraag moeten stellen, kosten het team aanzienlijk meer tijd dan proactief informatie te delen.
Bij Atlassian delen we updates over projecten en doelen tussen teams. We worden op de hoogte gebracht van updates via een wekelijkse e-mail met een samenvatting of via Slack. Hierdoor kunnen onze teams transparant communiceren en de context van andermans werk begrijpen, zodat de volgende vragen kunnen worden beantwoord:
- Wat doen we?
- Waarom?
- WIE WERKT ER AAN?
- Voortgang van het werk
Ten tweede maken consistente ontwikkelomgevingen in het hele team het gemakkelijker om samen te werken en problemen op te sporen. Besteed de tijd aan het maken van een eenvoudige handleiding 'Aan de slag' en elimineer wrijving op de eerste dag door de opzet zoveel mogelijk te automatiseren.
Ten derde, wanneer je op meerdere kantoren werkt, maken duidelijke normen over de definitie van 'volledig' het gemakkelijker om verwachtingen te beheren en een goede verstandhouding op te bouwen tussen teams. Een degelijke definitie van 'volledig' elimineert dubbelzinnigheid in het werk. Wanneer je bijvoorbeeld een release verzendt waarbij meerdere teams betrokken zijn, moet je duidelijk maken wat 'volledig' betekent: code geschreven, pull request gemaakt, code beoordeeld, getest en samengevoegd in de juiste branch.
En tot slot betekent gedistribueerde ontwikkeling dat niet iedereen online is als er problemen optreden. Met duidelijke richtlijnen voor bugrapporten en instructies voor probleemoplossing is het voor iedereen in het team gemakkelijker om een issue op te sporen. Codebeoordeling en goede geautomatiseerde tests delen ook kennis over de codebase en stellen het betrokken team in staat om de oplossing te maken en te valideren dat de wijziging geen onverwachte bijwerkingen heeft. Geen enkel team wordt dus een blocker.
De gouden uren maximaal benutten
Elke fotograaf weet dat de 'gouden uren' (net voor en na zonsopgang en zonsondergang) een van de meest effectieve momenten zijn om geweldige landschapsfoto's te maken. De gouden uren voor gedistribueerde softwareteams zijn wanneer de lokale en externe teams zich tegelijkertijd in hun respectieve kantoren bevinden. Als alle teams op kantoor zijn, is dit een geweldige tijd voor stand-ups.
Voor teams die werk delen tussen tijdzones, is een stand-up een goed moment om het stokje door te geven, zodat het team dat net online komt, verder kan gaan waar het andere team was gebleven. Als een stand-up via een videoconferentie wordt gehouden, is het gemakkelijk om vragen te stellen en snel aan de slag te gaan, zodat iedereen aan het werk kan zodra de vergadering is afgelopen.
Soms staan kantoren zo ver uit elkaar dat vergaderingen voor één team enige vorm van hinder zullen veroorzaken. (Om 5 uur opstaan voor een stand-up met het andere team? Umm... nee bedankt.) Roteer de vergadertijden om te lasten te delen en te voorkomen dat het externe team voortdurend te maken heeft met onprettige werktijden die het moreel gegarandeerd onderuit halen. Houd de betrokkenheid van het hele team bij stand-ups nauwlettend in de gaten. Als er te veel spanning is of het team er weinig mee kan, gaan teamleden afhaken en stoppen ze met luisteren of delen. En een stand-up hoeft niet absoluut een dagelijkse vergadering te zijn. Ontmoet het externe team een paar keer per week en gebruik de andere dagen voor een lokale stand-up. Een stand-up hoeft net zo min altijd 's ochtends plaats te vinden. Het tijdstip dat het meest geschikt is voor alle betrokkenen, is het beste moment van de dag.
Elk team is gedistribueerd
In een gedistribueerde organisatie is de realiteit dat elk team extern is. Alle teams moeten zich aanpassen en leren hoe ze werk tussen kantoren kunnen delen, effectief kunnen communiceren en een consistente cultuur in verschillende regio's kunnen ontwikkelen. De meest effectieve teams zorgen er niet alleen voor dat het externe kantoor voldoet aan de cultuur van het hoofdkantoor, omdat ze begrijpen dat elk kantoor iets van de anderen kan leren. Ze proberen succesvolle praktijken op alle locaties te vinden en te delen. Ze omarmen ook 'wij' in plaats van een 'ons' versus 'hen'-cultuur.
Want een andere realiteit is dat ze van tijd tot tijd gedistribueerd worden. Zakenreizen brengen leden buiten het kantoor, en af en toe thuiswerken kan werknemers helpen de balans tussen werk en privé beter te beheren. Teams die zowel structuur als transparantie omarmen, schalen efficiënter op. Wanneer je project buiten je kantoor schaalt, wordt de cultuur zo opgezet dat deze op natuurlijke wijze het juiste doet.