- Databaseverbindingen hergebruiken in plaats van per verzoek openen.
- Langlopend werk uit het verzoek halen.
- Netjes reageren als een dienst je afremt: wachten, opnieuw proberen, anders een melding.
- Een hostingplan zonder slaapstand zodra je de link deelt.
- Eenmalig meten wat er gebeurt bij tientallen gelijktijdige verzoeken.
Hoeveel gebruikers kan een prototype aan?
Een prototype dat prima werkt als jij het test, kan al struikelen bij twintig mensen tegelijk, en dat komt bijna nooit doordat de server te klein is. Het knelt vrijwel altijd op een limiet: het aantal databaseverbindingen, een externe dienst die je afremt, of zwaar werk dat in het verzoek zelf gebeurt terwijl de gebruiker wacht. Hieronder staat waar het misgaat, hoe je het herkent en hoeveel je prototype eigenlijk aan moet kunnen.
Het korte antwoord
Vrijwel elk schaalprobleem in een prototype is een limiet die geraakt wordt, geen tekort aan rekenkracht.
Als je alleen bent, doorloopt je prototype één pad tegelijk. Zodra er meerdere mensen op zitten, vechten die paden om dezelfde databaseverbinding, dezelfde plek in de wachtrij, dezelfde externe dienst met een eigen limiet. Het beeld is verwarrend: de app is loodzwaar en tegelijk doet de processor vrijwel niets. Er wordt niet gerekend, er wordt gewacht.
Dat is een ander probleem dan een prototype dat live helemaal niet opstart. Werkt je app lokaal wel en op de server niet, dan zit de fout in de omgeving, en daarover gaat een prototype dat lokaal werkt maar niet live. Deze pagina gaat over het geval daarna: het staat live en werkt, maar bezwijkt zodra er echt mensen tegelijk op zitten.
Wat gelijktijdig gebruik eigenlijk betekent
Bezoekersaantallen zeggen weinig. Wat telt is hoeveel werk er tegelijk openstaat.
Jij denkt in bezoekers per maand, je server denkt in verzoeken die nu nog niet klaar zijn. Een paar honderd bezoekers per dag, netjes verspreid, betekent zelden meer dan een handvol mensen die echt tegelijk iets doen. Wat je omver duwt is niet het gemiddelde maar de piek: de mailing, de presentatie waarin je de link op het scherm zet.
Zelfs dan is het aantal mensen niet de goede maatstaf. Wat de capaciteit bepaalt is hoeveel verzoeken elkaar overlappen en hoe lang elk verzoek bezig is. Eén handeling die seconden duurt, omdat er een bestand wordt ingelezen of een AI-model wordt aangeroepen, houdt al die tijd een plek bezet. Twintig mensen op die ene knop vragen meer van je systeem dan duizend mensen die de homepage bekijken.
De vijf plekken waar het in de praktijk knelt
Deze vijf zie je bijna altijd terug, en geen ervan wordt opgelost door een zwaardere machine.
- Databaseverbindingen die per gebruiker worden geopend. Een database staat maar een beperkt aantal gelijktijdige verbindingen toe, lager dan mensen verwachten. In snel gebouwde code opent elke handeling zijn eigen verbinding en geeft die niet netjes terug. Bij twintig gebruikers raak je de limiet: nieuwe verzoeken wachten of mislukken terwijl de processor niets doet. Wat helpt is een gedeelde voorraad verbindingen, geen zwaardere machine.
- Zwaar werk dat in het verzoek zelf gebeurt. Een bestand omzetten, een rapport genereren, een AI-model iets laten schrijven: in een prototype gebeurt dat terwijl de gebruiker naar een laadscherm kijkt. Doen meerdere mensen dat tegelijk, dan bezet elk verzoek een plek in de beperkte ruimte van je server en staat iedereen in de rij, ook wie alleen de startpagina wilde zien. Haal dat werk uit het verzoek: aannemen, bevestigen, later leveren.
- Externe API's met hun eigen rem. Leunt je prototype op een mailprovider, een betaaldienst of een AI-model, dan geldt daar een limiet op hoeveel je in korte tijd mag aanroepen. Die rem staat bij de leverancier, dus je haalt hem niet weg door je eigen omgeving te vergroten. Bovendien delen alle gebruikers meestal één sleutel, dus de limiet geldt voor iedereen samen.
- Twee mensen die tegelijk hetzelfde record bewerken. Geen snelheidsprobleem maar een correctheidsprobleem, en juist daarom gemeen. Beiden openen hetzelfde item, beiden slaan op, en de laatste overschrijft de wijziging van de eerste zonder melding. Zelfde categorie: voorraad die dubbel verkocht wordt, een afspraak die dubbel geboekt wordt. Bij één gebruiker kan dit niet gebeuren, dus in je testperiode zie je het nooit.
- Een omgeving die in slaap valt. Veel goedkope en gratis hostingplannen zetten je applicatie stil als er een tijd niemand langskomt, en starten hem pas bij het volgende verzoek weer op. De rekening gaat naar de verkeerde persoon: jij deelt de link, de ontvanger klikt als eerste na een stille periode en wacht, terwijl het bij jou even later prima werkt. Zie een prototype hosten na de bouwdag.
Hoe je het herkent, en waarom bijschalen zelden helpt
Een limiet gedraagt zich anders dan een tekort. Aan het patroon zie je welke van de twee je hebt.
Een echt capaciteitstekort verloopt geleidelijk: het wordt drukker en alles wordt beetje bij beetje trager. Een limiet gedraagt zich als een schakelaar. Tot een bepaald punt is alles normaal, daarboven valt het in één keer om, en zodra de piek voorbij is werkt alles weer alsof er nooit iets was. Daarom blijft dit vaak onopgemerkt: tegen de tijd dat jij kijkt, is het bewijs verdwenen.
Dat is ook waarom de eerste reflex, een groter hostingpakket, meestal niets oplevert. Meer rekenkracht verandert niets aan het aantal verbindingen dat je database toestaat, niets aan de rem van je mailprovider en niets aan twee mensen die hetzelfde record overschrijven. Meten is goedkoper dan gokken: de enige vraag is waar een verzoek op staat te wachten, en dat is vaak al zichtbaar met een tijdmeting rond de verdachte handelingen.
Wat je nu regelt en wat je bewust laat liggen
De linkerkolom voorkomt de meest voorkomende ellende met beperkt werk. De rechterkolom kun je uitstellen tot je weet dat je het nodig hebt.
- Meerdere servers met verkeersverdeling ervoor.
- Cachelagen en een aparte wachtrij-infrastructuur.
- Database-optimalisatie op basis van vermoedens in plaats van metingen.
- Draaien in meerdere regio's voor gebruikers die je nog niet hebt.
Hoeveel moet het eigenlijk aankunnen?
De vraag omdraaien scheelt werk aan iets waar nog niemand om heeft gevraagd.
Bouwen voor duizenden gebruikers terwijl je er nog geen tien hebt, is de duurste manier om een idee te toetsen. Elke voorziening kost bouwtijd, maakt aanpassen moeilijker en moet onderhouden worden, ook als de drukte nooit komt. En dat is het normale scenario: de meeste validatie-prototypes komen nooit in de buurt van een echt schaalprobleem.
De bruikbaarder vraag is niet hoeveel je prototype aankan, maar hoeveel het aan moet kunnen om je volgende beslissing te nemen. Een team van vijftien dat ermee moet werken is een andere bovengrens dan één demo aan een investeerder. In beide gevallen zit je ruim binnen wat een eenvoudige opzet aankan, zolang de knelpunten hierboven niet in je code zitten. Klopt het idee, dan is dat het moment om de rest te bouwen: van prototype naar productie beschrijft dat werk, en wanneer een prototype productierijp is geeft de vragen waarmee je die stap inschat.
Veelgestelde vragen
Hoeveel gebruikers kan een AI-prototype tegelijk aan?
Daar is geen vast getal voor. Het hangt niet af van het aantal mensen, maar van hoeveel trage handelingen tegelijk openstaan. Zit er een handeling in die seconden duurt, zoals een AI-aanroep, dan loopt de wachtrij bij een handvol gelijktijdige gebruikers al vol.
Waarom wordt mijn app traag terwijl de server bijna niets doet?
Omdat er niet gerekend wordt maar gewacht: op een vrije databaseverbinding, op een externe dienst of op elkaar in de wachtrij. Een lage processorbelasting bij trage pagina's is juist het signaal dat je tegen een limiet aanloopt, niet tegen een tekort aan capaciteit.
Helpt een groter hostingpakket tegen gelijktijdig gebruik?
Zelden. Meer rekenkracht verandert niets aan het aantal verbindingen dat je database toestaat, niets aan de limiet van een leverancier en niets aan twee gebruikers die hetzelfde record overschrijven. Zoek eerst uit waar een verzoek op staat te wachten.
Wat is het verschil met een prototype dat lokaal wel werkt en live niet?
Dat is een ander probleem. Start je prototype live helemaal niet, dan zit de fout in de omgeving: instellingen, paden, sleutels. Deze pagina gaat over een prototype dat wel live staat en werkt, maar bezwijkt onder gelijktijdig gebruik.
Waarom duurt het zo lang voordat de eerste bezoeker iets ziet?
Veel goedkope en gratis hostingplannen zetten je applicatie stil als er een tijd niemand komt, en starten hem pas bij het volgende verzoek weer op. Die eerste bezoeker betaalt de opstarttijd. Deel je de link met testgebruikers, kies dan een omgeving die blijft draaien.
Wat gebeurt er als twee mensen tegelijk hetzelfde bewerken?
In de meeste snel gebouwde prototypes wint degene die als laatste opslaat, en verdwijnt de wijziging van de ander zonder melding. Zelfde categorie: voorraad die dubbel verkocht wordt. Het wordt niet traag, het wordt stil fout.
Moet ik mijn prototype meteen schaalbaar bouwen?
Nee. Bouwen voor duizenden gebruikers terwijl je er nog geen tien hebt, kost bouwtijd en onderhoud waar niets tegenover staat. Bepaal hoeveel gelijktijdig gebruik je nodig hebt voor je volgende beslissing en meet wanneer die grens in zicht komt.