Waarom de architectuur van webapps zo belangrijk is
Misschien heb je al eens nagedacht over het laten ontwikkelen van een applicatie. Dat gebeurt meestal omdat je de wens hebt om een praktisch probleem op te lossen, zoals het automatiseren van een taak die nu nog handmatig wordt uitgevoerd. Zoals je hebt gelezen in onze blog over het minimum viable product, is het belangrijk dat je goed nadenkt over de essentie van de app die je voor ogen hebt. Daarmee valt of staat de applicatie, want de kern is datgene wat jouw probleem moet oplossen. In dit artikel lees je waarom het belangrijk is in een vroeg stadium na te denken over de architectuur van je app.
2 groepen, 2 uitdagingen: 1 oplossing
Bij Seleno zien we ruwweg 2 groepen. De ene groep ondernemers heeft jaren geleden een webapplicatie ontwikkeld, de andere groep loopt met het idee om dat te gaan doen.
Behoor je tot de eerste groep? Dan is de kans groot dat je applicatie door de tijd heen steeds verder is uitgebreid. Er is steeds functionaliteit toegevoegd, zonder dat er goed is gekeken naar de architectuur. Dit leidt tot de welbekende spaghetti-code. Het gevolg is dat je app niet meer schaalbaar is en de kans op downtime en andere problemen alleen maar toeneemt. En dat kan gevolgen hebben voor de continuïteit binnen je bedrijf.
Heb je nog geen app, maar speel je met het idee om er een te laten ontwikkelen? Dan is dit hét moment om na te denken over de architectuur van je webapplicatie. Dat is net zo belangrijk als wanneer je een huis laat bouwen. Dat doe je meestal ook niet zonder tekeningen en uitgewerkte plannen.
Bij beide groepen is de oplossing hetzelfde: samen kijken we naar de problemen die je app op moet lossen, welke functies de app moet bevatten en hoe we de applicatie schaalbaar, veilig en flexibel kunnen maken.
Het probleem met schaalbaarheid
Veilige en flexibele software ontwikkelen is niet de grootste uitdaging. Schaalbaarheid is dat vaak wel. Je kunt schaalbaarheid in deze situatie onderverdelen in functies, performance en kennis.
Schaalbaarheid in functies
Als je al eens een app hebt laten ontwikkelen, heb je er waarschijnlijk steeds nieuwe functies aan toegevoegd. Maar meestal gaat dat op een manier die geen schoonheidsprijs verdient. Er wordt als het ware wat aan de bestaande app ‘geknutseld’, een deel van de bestaande code wordt gekopieerd en aangepast. Dat komt de betrouwbaarheid niet ten goede. Ook is dit na verloop van tijd niet meer schaalbaar. Dat komt omdat er angst ontstaat dat een wijziging op zo veel plekken doorgevoerd moet worden, dat het risico op problemen te groot wordt. Het gevolg is dat je je applicatie niet meer kunt updaten met nieuwe functies, waardoor hij langzaam maar zeker steeds minder nuttig wordt.
Om dit te voorkomen, denk je bij het laten ontwikkelen van een applicatie goed na over de functies die je nodig hebt. Sommige functies wil je nu direct hebben, andere functies mogen later ontwikkeld worden. Daar houden we dan in de architectuur al rekening mee. Ook kun je slim ontwikkelen, zodat je ook onvoorziene functies eenvoudig en toekomstvast kunt toevoegen.
Schaalbaarheid & performance
Ook performance kan op termijn een probleem zijn. Dit komt meestal omdat software verouderd raakt en na een aantal jaren niet langer ondersteund wordt. Maar bijvoorbeeld ook omdat de serverconfiguratie zo is ingericht dat alles door 1 machine is gedaan. Dit betekent dat als die machine tegen de grenzen van zijn kunnen loopt, je applicatie niet verder kan groeien. Beter is het om alles in losse onderdelen te ontwikkelen, waardoor elke server zijn eigen taak vervult. Zo kan er eenvoudig opgeschaald worden. Ook dit bespreek je bij het ontwikkelen van de architectuur.
Schaalbaarheid beperkt door kennis
Met name oudere applicaties zijn vaak door 1 persoon gebouwd. De kennisoverdracht is meestal ook verre van optimaal, door beperkte documentatie of specifieke kennis die niet iedereen bezit. Daarnaast speelt ook de keuze voor de programmeertaal een belangrijke rol. Kies je voor een populair framework , dan is de kans groter dat er personeel of freelancers te vinden zijn met ervaring. Nadeel daarvan is dat er veel verschillende niveaus van developers zijn en dat een programmeertaal zo populair kan zijn dat je geen goede developers kunt vinden. Allemaal keuzes waar je bij het maken van een architectuur mee te maken krijgt.
Goede architectuur zorgt voor groei!
We hebben in een eerdere blog over een lokale developmentomgeving kunnen lezen dat dit bijdraagt aan het snel op kunnen schalen van een app. Met een lokale ontwikkelomgeving kunnen zowel in- als externe developers op dezelfde omgeving werken om nieuwe features te ontwikkelen. Dit is ook typisch een onderwerp dat je in de architectuur van je app vastlegt. Je moet er nu al voor zorgen dat alle benodigde services, zoals de webservice, caching service en databaseservice een goede schaalbare basis vormen die ook eenvoudig mee kan groeien met de capaciteit die nodig is. Hiermee kan je sneller doorgroeien zonder dat dit later problemen geeft met complexe migraties van data.
Voordat het te laat is…
Juist in de beginfase van een applicatie heb je de kans om zonder beperkingen na te denken over hoe je ideaalplaatje eruitziet. Zo zorg je ervoor dat je nog jarenlang plezier hebt van je app. Met onze ruime ervaring op het gebied van software engineering kunnen we je in deze fase goed ondersteunen.
Dit artikel is onderdeel van een reeks die je alles vertelt over software engineering. In het vorige artikel ging het over het belang van een minimum viable product Het artikel hierna vertelt je alles over de optimale inrichting van het versiebeheer. Je kunt natuurlijk ook de overkoepelende blog over software engineering lezen, waar we alle stappen in het proces bij langs gaan.