Wie één ding verandert, verandert alles.
Van één groeiende applicatie naar een landschap van onderdelen die elk één ding goed doen, en los van elkaar kunnen veranderen.
Een kleine aanpassing voelt als een risico.
Een hotfix, een paar regels code. Toch durft niemand te zeggen wat er nog meer omvalt. Dus wordt er lang getest, en wordt er steeds minder vaak iets verbeterd.
Elk probleem kreeg er een applicatie bij.
Het begint klein: een applicatie die één ding goed doet. Daarna komt er steeds iets bij. Elke uitbreiding maakt updaten en testen zwaarder, de oude code stapelt zich op, en je komt er niet meer vanaf.
Zo ging het bij een organisatie in de gezondheidszorg, met een platform voor online behandeling, gebouwd op een CMS dat alles moest kunnen.
Het platform was zo opgezet dat elke klant een eigen installatie kreeg, met een eigen database: veel kopieën van dezelfde applicatie. Dat werkte niet, want behandelprogramma's konden niet tussen klanten worden gedeeld. Dus werden klanten alsnog in één installatie samengebracht, met ingewikkelde aanpassingen om te voorkomen dat ze in elkaars werk konden kijken, in een database die steeds verder uitdijde.
Ook andere problemen werden opgelost met kopieën van het geheel: één om content te beheren, zodat cliënten geen last hadden van aanpassingen terwijl ze werkten, en één als demo voor professionals, die vanuit hun rol niet konden zien wat cliënten zagen. De belangrijkste vernieuwing, werken op elk apparaat, kwam als aparte applicatie naast de bestaande. Die was één op één gekoppeld, en kreeg dus ook een kopie voor elke omgeving.
Zo groeide er een woud van kopieën van dezelfde applicatie. En elke update moest door het hele woud.
Niet: welke applicatie? Maar: welke functies?
De vraag verschoof van “welke applicatie passen we aan?” naar “welke functies zijn er eigenlijk?”. Elke kopie bleek een functie te zijn die een eigen plek verdiende, met een eigen domeinmodel en datamodel.
Daarvoor moest iemand de pleisters anders gaan zien. Elke kopie was een tekortkoming, maar ook een aanwijzing: hier ontbreekt een functie. De kopie voor contentbeheer liet zien dat content maken een eigen plek nodig had. De demokopie liet zien dat meekijken als professional een functie op zich was. En dat niet elke klant een eigen installatie kon krijgen, wees de weg naar één schaalbare SaaS-applicatie voor alle klanten. Die tekortkomingen zag ik als kans, en ik zette ze om in een plaat: een landschap van onderdelen die elk één ding goed doen.
De eerste stap was één centrale inlog, waarmee gebruikers met hetzelfde account wisselen tussen de oude en de nieuwe applicatie. Zo konden oud en nieuw naast elkaar bestaan.
Probeer het zelf: breng een hotfix uit, in het woud en in het landschap.
Het woud: elk probleem kreeg er een applicatie bij.
Een kaart van het landschap.
- een plaat van het landschap: elke tekortkoming omgezet in een onderdeel met een eigen functie
- per onderdeel een klein domeinmodel en een eigen datamodel
- de koppelvlakken tussen de onderdelen
- de presentaties waarmee de ontleding stap voor stap is onderbouwd
Die opzet heb ik niet alleen bedacht, maar als architect en senior developer ook gebouwd, te beginnen met de centrale inlog.
Wat het mogelijk maakte.
Met één inlog konden de oude en de nieuwe applicatie naast elkaar draaien. Vernieuwen werd daarmee een reeks kleine stappen in plaats van één grote overstap: onderdeel voor onderdeel uit het woud naar een eigen plek, terwijl gebruikers gewoon doorwerken.
De kennis over het opdelen van applicaties was toen anders dan nu. Achteraf sloot het idee goed aan bij wat inmiddels gebruikelijk is: wie vandaag opnieuw begint, kiest vaak voor een modulaire monoliet of microservices. Maar de meeste organisaties beginnen niet opnieuw. Iets kleins beginnen en het laten uitdijen is makkelijk. Een bestaande applicatie ontleden in functies, terwijl hij in gebruik blijft, is het werk waar het verschil zit: bestaande applicaties toekomstbestendig maken.
Hoe je een bestaande applicatie ontleedt in kleine domeinmodellen, beschrijf ik in een volgend artikel.
Signalen dat het bij jou ook speelt.
- Problemen worden opgelost met een kopie van het geheel, of een kopie per klant.
- Een nieuwe versie komt naast de oude in plaats van in de oude.
- Kleine aanpassingen hebben een lange testronde nodig.
- Je komt niet meer van de oude versie af.
- Niemand kan meer uitleggen waar welke gegevens leven.
Benieuwd hoe jouw landschap eruit zou kunnen zien?
Plan een kennismaking