Agile of traditioneel? De juiste teamstructuur om software te ontwikkelen
#development #project management
De ontwikkeling in software van begin tot eind, door verschillende fasen heen, is een complex proces waarvoor een multidisciplinaire samenwerking nodig is.
Een gemeenschappelijke factor waardoor verschillende IT-projecten vaak mislukken, is een inefficiënte teamstructuur voor de ontwikkeling van software.
Dit probleem benadrukt de behoefte aan duidelijk gedefinieerde rollen, waarbij elke rol verantwoordelijkheden heeft. Het is belangrijker dan een vaste, hiërarchische structuur om duidelijke afgekaderde taken toe te wijzen en zo een efficiënte samenwerking te bevorderen.
In vergelijking met een traditioneel ontwikkelteam, wordt er steeds meer gebruik gemaakt van een Agile teamstructuur die door middel van een flexibele benadering een betere samenwerking mogelijk maakt voor het ontwikkelen van software.
In dit artikel gaan we in op hoe een Agile team verschilt van de traditionele structuur, samen met het ontleden van de gemeenschappelijke rollen en verantwoordelijkheden voor softwareontwikkeling teams.
Teamstructuur voor softwareontwikkeling
De traditionele benadering van softwareontwikkeling is een stapsgewijs proces waarbij de ene fase moet zijn afgerond voordat de volgende kan beginnen. Daarbij houdt het team doorgaans vast aan een vooraf gedefinieerde volgorde en hiërarchie van de workflow, waarbij elke afwijking wordt behandeld als een uitzondering die volgt op een strikt goedkeuringsproces.
Aan de andere kant is de Agile methode een meer repeterende en flexibele benadering die wordt gekenmerkt door meer aanpasbare en zelfsturende teams.
Enkele andere veel voorkomende verschillen tussen de rollen en verantwoordelijkheden van Agile- en traditionele software ontwikkeling teams worden hieronder nader toegelicht:
In een traditioneel team is het ingewikkeld om veranderingen door te voeren vanwege de objectieve structuur die een grondige herevaluatie van het plan vereist voordat het kan worden omgezet. Voor Agile-teamleden maakt de vereenvoudigde structuur innovatie op individueel niveau mogelijk, waardoor teams efficiënte alternatieven kunnen voorstellen.
In een traditioneel team is de projectmanager verantwoordelijk voor het gehele project. Bij Agile teams zijn deze verantwoordelijkheden verdeeld, wat resulteert meer transparantie, omdat het gehele team aansprakelijk is.
In een traditioneel model moet het team, wanneer een probleem zich voordoet, deze escaleren naar de projectmanager, wat leidt tot langere oplossingstijden. Echter bij Agile teams kunnen problemen intern worden opgelost, omdat ze de bevoegdheid hebben om beslissingen of te nemen en wijzigingen door te voeren.
Hoewel zowel traditionele als Agile teamstructuren verschillen in de manier waarop ze werken, hebben beide modellen individuele rollen die veel overeenkomen. In de onderstaande secties bespreken we de meest voorkomende rollen van de teamstructuur in softwareontwikkeling.
Wie zijn de teamleden in softwareontwikkeling?
Hieronder volgen de meest voorkomende rollen in een projectteam en hun verantwoordelijkheden in een veel voorkomende structuur in softwareontwikkeling:
Product Owner
In een Agile teamstructuur vertegenwoordigt de producteigenaar zowel de eindgebruiker als de zakelijke belanghebbenden bij het nemen van beslissingen inzake het product.
Omdat een producteigenaar de verantwoording draagt voor zowel interne als externe partijen van het software project, vereist de rol dat het individu een diepgaand begrip heeft van zowel het zakelijke aspect als de gebruikerservaring.
Enkele veel voorkomende verantwoordelijkheden van een Product Owner zijn:
Fungeren als schakel tussen de zakelijke belanghebbenden, het ontwikkelteam en de eindgebruiker
Eindverantwoordelijk voor de volledige scope van het project
Verfijnen van vereisten indien nodig in lijn met de projectvisie en de bedrijfsdoelstellingen
Product roadmap definiëren, inclusief financiële projectie, rekening houdend met zowel de risico's als de kansen in de markt
Product Manager/Scrum Master
In een Agile team wordt een productmanager/scrummaster vaak beschreven als het uitvoerend lid van het ontwikkelingsteam dat verantwoordelijk is voor de gehele cyclus van het product, van het begin van het idee tot de release van de software.
In tegenstelling tot een producteigenaar werkt een productmanager voornamelijk met interne partijen vanuit technisch oogpunt en leidt hij alle fasen van de levenscyclus van de ontwikkeling.
Enkele veel voorkomende verantwoordelijkheden van een Product Manager/Scrum Master zijn:
Nauw samenwerken met de Product Owner om de roadmap samen te stellen
Voorwaarden opsplitsen in user stories (gebruikersverhalen) die worden verdeeld in projects prints
Marktonderzoek doen ter ondersteuning van de productontwikkeling
Features prioriteren voor elke release
Het management voorzien van regelmatige project updates
Activiteiten rondom productlancering aansturen in samenwerking met andere teams zoals marketing en sales
Het team van developers, DevOps engineers, testers en UI/UX designers aansturen
Business Analyst
Een van de belangrijkste rollen van een software ontwikkelingsteam is die van een Business Analyst (BA) die betrokken is vanaf de beginfase van de ontwikkelingscyclus tot en met de goedkeuring van de klant.
Het is aan de BA, die de initiële due diligence, het samenstellen van vereisten en de gap-analyse aanstuurt, om analyses te maken en inzicht te krijgen in het bedrijfsmodel van de klant. Het is daarom belangrijk dat deze persoon een brede kennis van het bedrijf heeft, zowel vanuit technisch, financieel als economisch oogpunt.
Enkele veel voorkomende rollen en verantwoordelijkheden van een BA zijn:
- Het samenstellen van de technische vereisten vanuit een zakelijk oogpunt
- Bijdragen aan het ontwerpen van wireframes, mockups en de basis van het product
- Het vastleggen van vereisten en ervoor zorgen dat ze aansluiten bij huidige beleid
- Het opzetten van het beleid en de procedures om aan kwaliteitseisen te voldoen
- Het leveren input om de ontwikkelingsstrategie te bepalen
Software Architect
Zodra de vereisten zijn vastgelegd door de Business Analyst, neemt de Software Architect het ontwerp van de technische architectuur over.
De software-architect is verantwoordelijk voor het vaststellen van de juiste tech stack, het ontwerpen van het platform, het ontwerpen van applicatielagen en het schetsen van coderingsstandaarden.
Een Software Architect moet beschikken over hands-on ervaring met coderen, kennis van software-architectuur patronen, bewust zijn van nieuwe technologieën en inhoudelijke kennis hebben van de vereisten op het gebied van bestuur en beleid.
Enkele veel voorkomende rollen en verantwoordelijkheden van een Software Architect zijn:
Eindverantwoordelijk voor het maken van High-Level Design (HLD) en Low-Level Design (LLD) architecture documenten
Het uitdenken van zowel functionele als niet-functionele vereisten van de software
Het kiezen van tools en frameworks die optimaal zijn voor de voorgestelde architectuur
Het identificeren van tools van derden, externe API's en integratie architectuur
Het vastleggen van de coderingsnormen voor het project en ervoor zorgen dat deze normen worden nageleefd om software van hoge kwaliteit te garanderen
Software Developer(s)
De kern van een software ontwikkelingsteam zijn de softwareontwikkelaars - degenen die verantwoordelijk zijn voor het vertalen van functies en vereisten in coderegels waaruit de software bestaat.
Ontwikkelaarsrollen kunnen in twee groepen worden ingedeeld, afhankelijk van welk deel van de software ze ontwikkelen.
Frontend Developer
Frontend Developers zijn verantwoordelijk voor het ontwikkelen van de visuele laag van de software waar de eindgebruikers gebruik van maken. Hoewel een van hun kerntaken is om de interface van de software te ontwikkelen, moeten ze ook rekening houden hoe de frontend communiceert met andere lagen van de software, waaronder middleware en backend.
Enkele veel voorkomende verantwoordelijkheden van een Frontend Developer zijn:
Het vertalen van de gebruikersinterface naar verschillende elementen en lagen van de applicatie, waaronder webpagina's, mobiele app-pagina's, zoekfunctionaliteiten, browsercompatibiliteit, enz.
Het ontwikkelen van responspagina's voor verschillende apparaten
Het ontwerpen van toegankelijkheid voor gebruikers met speciale behoeften
Het schrijven van efficiënte codes die gegevens uit de gegevenslaag halen en uitvoer genereren op de presentatielaag
Backend Developer
Zowel de Backend Developer als de Frontend Developer werken samen om de applicatie in zijn geheel te ontwikkelen. Een Backend Developer schrijft codes om de logica in de applicatie te implementeren, databases samen te stellen, het configureren van compatibiliteit met de applicatieserver en API's van derden te integreren.
Enkele veel voorkomende verantwoordelijkheden van een Backend Developer zijn:
Het ontwikkelen de backend-code van de applicatie
Databases maken, configureren en beheren
Integratie endpoints voor front-end interfaces implementeren
Integratie van API's van derden
Eindverantwoordelijk voor het programmeren op systeem- en serverniveau
DevOps Engineer
DevOps is een methode voor softwareontwikkeling die een efficiënte samenwerking tussen ontwikkelings- en IT-activiteiten mogelijk maakt.
Door best practices van DevOps te implementeren, omarmen organisaties fijn geoptimaliseerde geautomatiseerde workflows die kosteneffectief en zeer efficiënt zijn.
Het is de DevOps Engineer die DevOps toepassingen implementeert, methodologieën introduceert en tools die automatisering mogelijk maken om continue integratie en levering te ondersteunen.
Enkele veel voorkomende verantwoordelijkheden van een DevOps Engineer zijn:
Het onderhouden van Continuous Integration and Continuous Delivery (CI/CD) pijplijnen
Het beheer van de infrastructuur van applicatieservers
Applicatie- en infrastructuurbewaking opzetten volgens ITSM-normen
Overbodige en repetitieve processen automatiseren door uitvoerbare scripts te schrijven
Waar nodig schaalbare en robuuste cloudoplossingen leveren
Optimalisatie van de release cyclus
User Experience (UX) Designer
In de meeste gevallen wordt het succes van een applicatie toegeschreven aan het gemak en de efficiëntie van de gebruikerservaring - die het resultaat is van een combinatie van frontend-, middleware- en backend componenten van de applicatie. Het ontwikkelen van de gebruikerservaring is een gebruikersgericht proces dat zich richt op het ontwerpen van een naadloze functionele ervaring met het gebruik van de softwareapplicatie.
Om dit te bewerkstelligen moeten User Experience Designers (UED) dergelijke bruikbaarheidservaringen onderscheiden waar de eindgebruiker mee te maken krijgt tijdens het gebruik. Een UX Designer stelt een gedetailleerd analyseplan samen om gebruiksvriendelijke navigatie- en frontend interfaces te helpen ontwikkelen.
Belangrijk detail is dat de rol van een UX Designer is om best practices te herkennen en de gebruikerservaring te definiëren in plaats van het ontwikkelen ervan.
Enkele veel voorkomende verantwoordelijkheden van een User Experience (UX) Designer zijn:
Het onderzoeken van potentieel gebruikersgedrag van de applicatie door uitgebreid gebruikersonderzoek
Het maken van online enquêtes over de bruikbaarheid en ervaring van het product
Het uitvoeren van een diepgaande concurrentieanalyse
Het uitvoeren van bruikbaarheidstests na de ontwikkeling
Het analyseren van gegevens die zijn verkregen via verschillende enquêtes en focusgroepen om nuttige informatie te winnen voor besluitvorming
Het maken van user persona's die de demografische bruikbaarheid van de applicatie beschrijven
Het definiëren van de informatiearchitectuur en sitemap
User Interface (UI) Designer
Ontwikkeling van de User Interface is vaak een opvolging op het ontwikkelproces van de User Experience.
Nadat de UX Designer heeft vastgesteld hoe gebruikers om zullen gaan met de applicatie, is het aan de UI Designer om een verfijnde en aangename gebruikersinterface te ontwikkelen voor de softwareapplicatie.
Het is de User Interface Designer die verantwoordelijk is voor het end-to-end ontwikkelen van de grafische interface van de software.
In bepaalde teamstructuren kan de rol van een UI Designer overbodig zijn, omdat er ook al een Frontend Developer is. Maar de meeste teams werken liever met beide rollen.
Terwijl de Frontend Developer zich richt op het ontwikkelen van de presentatielaag die de gebruikersinterface verbindt met de backend lagen van de applicatie, heeft de UI Designer de grafische ontwerpvaardigheden om frontend elementen te ontwikkelen. Een meer uitgebreid artikel over hoe de twee rollen verschillen, kun je hier vinden.
Enkele veel voorkomende verantwoordelijkheden van een User Interface (UI) Designer zijn:
Werkt samen met User Experience Designers om een interface te creëren die de beste gebruikerservaring biedt
Betrouwbare prototypes maken voor de toepassing
Het ontwikkelen van wireframes voor elke pagina en stap die een gebruiker kan nemen tijdens het gebruik van de software
Het ontwerpen van verschillende elementen in de gebruikersinterface, zoals pictogrammen, navigatieknoppen en widgets
Het ontwikkelen van branding voor de applicatie, inclusief logo's en kleuren
Quality Assurance Lead/Tester
Testen wordt doorgaans beschouwd als de laatste stap van de levenscyclus van softwareontwikkeling (SDLC) voordat de software uiteindelijk in productie gaat.
Voordat je live gaat, moet de software worden getest om er zeker van te zijn dat deze functioneel is, alles werkt zoals verwacht, er geen beveiligingsproblemen zijn en deze voldoet aan de zakelijke vereisten.
Quality Assurance (kwaliteitswaarborging) Leads of Software Testers zijn verantwoordelijk voor het testen van de applicatie door de verschillende fases van de levenscyclus van de software, met als doel het vinden van fouten en verifiëren dat het product geschikt is voor gebruik.
Naast het functionele aspect zijn er ook enkele andere aspecten opgenomen in de testfase, waaronder de responstijd van de applicatie, ondersteuning van de applicatie om ervoor te zorgen dat deze zonder problemen kan worden uitgerold op verschillende platforms, samen met het testen van de efficiëntie en het vermogen van de applicatie om onder uitzonderlijke omstandigheden goed te blijven werken.
Enkele veel voorkomende verantwoordelijkheden van een QA Lead/Tester zijn:
Het beoordelen van vereisten om impactanalyse uit te voeren
Het ontwikkelen van een strategisch testplan met meerdere testscenario's
Het ontwikkelen van positieve en negatieve testgevallen voor elk testscenario
Het uitvoeren van functionele tests om de bruikbaarheid van de software te verifiëren
Het uitvoeren van integratietests om ervoor te zorgen dat componenten van de software samenwerken zoals verwacht
Het uitvoeren van regressietests om vast te stellen dat een nieuwe wijziging de toepassing niet stuk maakt
Het analyseren van testresultaten en feedback geven aan het softwareontwikkelingsteam
Het bijhouden van defectenlogboek en dit bijhouden tot de defecten zijn verholpen
Het opnieuw testen van defecten en verifiëren dat deze zijn verholpen
Waar het op neerkomt
Het ontwikkelen van software is een complexe onderneming die een breed scala aan vaardigheden vereist. Om dit te doen, kunnen organisaties de traditionele- of de Agile benadering gebruiken om een softwareontwikkelingsteam te vormen.
Beide structuren verschillen in de mate van flexibiliteit, de mate van transparantie en verantwoording en de probleemoplossende stijl. Omdat een Agile model meer controle en nauwere samenwerking tussen teamleden biedt, wordt deze langzaamaan populairder ten opzichte van een traditionele teamstructuur.
Ongeacht de gekozen aanpak, het uiteindelijke doel is om softwaretoepassingen te ontwikkelen die efficiënt, veilig en gebruiksvriendelijk zijn.
Bij Enkonix zijn we er trots op dat we meerdere organisaties hebben geholpen als vertrouwde leverancier voor softwareontwikkeling. Terwijl we opereren als een uitgebreid team voor dergelijke organisaties, doen we al het vereiste werk om het juiste team te vormen, de juiste methodologieën te volgen en ons aan de beleidsnormen te houden.
Neem hier contact met ons op voor meer informatie over hoe Enkonix kan helpen bij het ontwikkelen en onderhouden van jullie softwarelevenscyclus.