How to build an incredibly fast internet application

I just received two bits of good news about an internet-application that was built under my management. I have to be a bit mysterious about the project itself as I’ve signed a NDA but it’s an application that will be visited extremely often with a totally unpredictable planning. Luckily I love a challenge.

NOTE: This project has gone live since the writing of the blog . It was for the Dutch Monarchy and the Orange Foundation, the largest charity of the Netherlands, on occasion of the inauguration of the new Dutch King Willem-Alexander.

So the good news was:

  1. Our stress tests showed we are over-performing by 10-100 times.
  2. The company that audited us (KPMG) said: “The application was made with love and we don’t see that very often’. They actually said LOVE and  the L-word is not used lightly by this large consultancy firm (and they hardly had any critical points at all).

So I’m a happy camper and thought I would share our approach with you. I’m focusing on performance issues here even though we paid just as much attention to usability, security, browser compatibility, etc etc.

Let me be fair and tell you that I’m just the person that comes up with concepts, knows a bit about the technology and manages things, so who am I to take credit for such a monster of an application? I worked with my Maximonster team:  Marc Worrell, Arjan Scherpenisse and Joost Faber and together with the brilliant team at my former company ICATT interactive media.

First of all, what is  fast?

To test the application, we’re using a scenario that simulates a user going through the application. It’s a simulation of many different types of browsers in about the same percentages as the real world (x% IE, Y% Firefox etc).  We ran tests of up to 400 people doing a complete task in 0.8 seconds. We were serving 120 Megabit/second.
In our case this compares to about 30.000 concurrent users. Enough to run 150.000 users in an hour. And all this while the application runs as smoothly as when it runs with 10 users.  We ran this on two servers, while we will be using at least three and can quickly  deploy more if needed. Why not test further? Well… our test server just can’t do it right now and for now it’s enough – we underpromised anyway. We estimate that we can double or triple this easily.

So here’s how to do it from a birds eye view.

The obvious things

Build a light application and pay attention to performance issues all the time. Every query, every piece of script is going to count. Don’t use images if you don’t need to, don’t add design to things that don’t need it. If you are working for a client, keep stressing the performance issue even if you get on there nerves. They never will be grateful: if there are no problems, nobody will thank you. If there are problems, you will be remembered so you might as well point out the risks ahead of time.


In the past year we have built “Elastic Zontonic”, an architecture developed in Erlang that makes it possible to add nodes (virtual servers or hardware) on the fly. Zotonic is a framework built in Erlang which makes it possible for us to build applications and offers us a backend which gives a lot of controls out of the box.

Each Zotonic nodes does the same as the next one and can fail. We don’t even care if it does. If nodes go down, the others will consolidate missing data. If the node comes back up, it’s great but if not, the others will be just as happy.

Have a stress tester with some good software

In our case we used Visual Studio running off a virtual server running at Rackspace. Rackspace sells servers time by the hour, so you can do this quite easily. Stress testing itself is complicated and hard to understand. You’ll need time from the developers to help build a stress-script and you’ll need to do it several times. Some user scenarios really can’t be simulated and you’ll have to make some guesses. Though we haven’t used it yet there are some interesting cloud based testing products being launched. If you haven’t invested in time and money into offline web-stress-software, you should definitely go that way.

Work with extremely flexible, cheap hosting

Now I’ll start this by saying: I don’t get commission from Rackspace. I compared several hosters at the start of this project and found their pricing to fit the project (our client kept part of the planning a secrete so charging by the hour makes things easier). Rackspace isn’t all perfect (some of the DNS software had some problems) but their service was great, the pricing easy to understand and they won my heart when I called them about stress testing. I had been warned that if we do extreme testing at a virtual server provider, you could get kicked out. So I called Rackspace to check this and they told me; “Oh… do what you like. We probably won’t even notice it.”  What a bold thing to say.

We actually developed a module to automatically configure servers with the Rackspace DNS API, so we might just come back.

Content delivery network

Now I’m old enough to remember the days that bandwidth was a problem for websites. Those days are over for most sites but not for high performance situations like this one. So that’s why Amazon and Rackspace offer storage for files, be it images, video’s or just documents. It takes some extra work to use a cdn (it’s a bit more complicated than just a remote ftp site) but once you’ve got it running, it takes all the stress out of storage.

Don’t have a server too far away (Ping!)

One reason you might think that hosting at a hoster like Rackspace is a bad idea is that they are far away and the responstime (measured by the ping time) is much lower if the server is far away. Luckily we found out that Rackspace has a datacenter in the UK, making it much faster for us (in Amsterdam) that it would be in the USA.  Most of the visitors will be coming from the Netherlands so that’s important. The difference can be quite dramatic. Before (!) we started, we checked a few sites hosted at the site in the UK and found a ping of 7-8 ms which is fine compared to a server in the US.

Unlimited loadbalancing

Loadbalancing is a tricky subject. You have to configure things and it’s quite common that things go wrong if a loadbalancer looses track of the server. One thing we got from Rackspace is for all practical purposes and unlimited loadbalancer. It’s not free and all data is charged for but it’s cheap enough and it’s one less thing to worry about. What we did to make things a lot simpler is to have a sessionless application. This certainly not always possible but if you can, there are lots of reasons for it.


From a less technical perspective: really underpromise. What ever an individual developer will think, combining technology in general makes things go slower. And if you’re talking hundreds of thousands or millions of users, things will be really massively slower. So – be smart and under promise, add extra hosting budget to your plan, add redundancy and expect the worse.  We actually expected our application to run on one third of the hardware that we are using. And when one of the nodes did actually crash during our first major stress test, we were happy to see everything kept running smoothly. Your client will be totally impressed when things are even faster than they expected.

Michiel Klønhammer

Thanks to Marc Worrell and Arjan Scherpenisse!

So looking for an Erlang dream team? Check out and get in touch.

The perfect web 2.0 application

While analyzing office 2.0 software, I had a deep insite. I found the single factor connecting all successful web 2.0 applications.

I’ll let you have a look at several very interesting applications and give you a chance if you see it too:  Highrise (CRM by 37Signals – also the writers of some brilliant web2.0 businessbooks), Funella (online CRM), Xero (online accounting), CapsuleCRM, Batchbook, and Relenta.

This slideshow requires JavaScript.

Did you see it? It’s the green button. Every web2.0 application seems to need a green button. I’m not sure but I think that the people at 37Signals might have defined the green button first and it seems everyone agrees this will lead to more sales. Well… not everyone as CapsuleCRM chose orange (very bold) and Relenta doesn’t have a button at all (what are they thinking 🙂

Actually the range of applications Ive been looking at, show that the online office is really a real option for anyone trying to avoid costs and cumbersom local servers.

Alles “in the cloud”

Wie mij volgt, weet dat ik onlangs de transitie heb gemaakt van een goed georganiseerd internet bureau met flink wat personeel naar een fonkel nieuwe start-up. Het is niet mis wat je dan allemaal niet meer hebt. Geen systeembeheer, geen inhuis administratie, geen inkoop van lunch. Gelukkig kon ik vandaag met mijn ex- collega’s (ze zitten in het gebouw) vandaar nog wel WK kijken, want zelfs een megagroot flatscreen heb ik niet. Wat een armoede.
Nu heb ieder nadeel een voordeel – om in voetbal-termen te blijven praten (waarom keek Cruyff eigenlijk zo zorgelijk  tijdens Nederland-Denemarken?). Nu dat ik weer klein moet beginnen, moet ik ook slim zijn. Ik formuleer voor de nieuwe groei een aantal strategische principes. Een van de belangrijke daarvan is Everything in the cloud.
Dus (op een espresso-apparaat na) niets meer fysiek op kantoor. En alles moet elders worden gehost. Bij iedere beslissing wordt de cloud-lat streng gehanteerd.
Hier even de oplossing tot nu toe op een rij:
E-mail in the cloud: geen Exchange meer maar Google Apps. Voor 40 Euro per gebruiker/per maand biedt Google een exchange-vervanger die het ook nog prima doet samen met Outlook. Onderschat niet dat je veel werk in de instellingen en configuratie moet investeren (en Exchange heeft ook wel tal van voordelen), maar je kunt het als je een beetje handig bent zelf doen. In the cloud.
Telefoon in the cloud: Vergeet die lompe en dure centrale maar neem een virutele VOIP centrale. Kost 14 euro + tikken per toestel per maand bij BelCentrale. En de nerd in mij wordt aangesproken door met zo’n degelijk Cisco toestel te bellen.
Domeinregistraties in the cloud: geen eigen DNS meer (ieder Internet bedrijf moet de volledige controle over domein instellingen hebben), maar een hosted partij. Ik ben uitgekomen bij EuroDNS, een Luxemburgse partij die in tegenstelling tot partijen zoals ENOM of GoDaddy ook Nederlandse domeinen host. OXXA – een Nederlandse partij viel af wegens technische fouten.
File sharing & backup in the cloud: zoals velen van jullie heb ik op korte termijn daarvoor DropBox ontdekt. Dropbox biedt een onwaarschijnlijk stabiele oplossing. Google Apps (waar ik dus al voor betaal) biedt wel 25 Gb ruimte per persoon I (ik gebruik nu 3%) maar daar heb je weer zoiets als MemeoConnet  voor nodig  – het werd mij te veel gedoe. Als code-repository gebruiken we BitBucket. Mooi spul.
Code Distribution in the cloud: voor het verspreiden van de code die wij teruggeven aan de community gebruiken wij Google Code.
Remote beheer in the cloud: ik gebruikte al jaren LogMeIn voor het remote beheer van de computers van mijn ouders. Voor 5 gebruikers is dat gratis. Werkt ongeloofelijk goed.
VPN in the cloud – ik heb ontdekt dat LogMeIn (die mij dus al iets gratis gaven) ook virtuele VPN biedt. Dus veilige netwerken zonder de technische complexiteit. Ik heb er nog geen ervaring mee dus laat weten als je het gebruikt.
Administratie in the cloud:  ik heb met mijn administratiekantoor afgesproken dat we dit eind dit jaar rond hebben. Zij gebruiken het Multivers maar ook Multivers biedt nu een hosted versie zodat ondernemingen betere toegang hebben tot de diensten van hun administratiekantoren. Er zijn al tal van goede concurrenten zoals Reeleezee van internetpionier Jan Jacobs.
Kantoor in the cloud: ik heb nu het geluk om een kantoor te gebruiken dat plug&play is op een geweldige locatie in het centrum van Amsterdam. Met alles in de cloud heb ik bijna geen ruimte meer nodig.
Hosting in the cloud: dit heet eigenlijk virtualisatie. Dit zette ik al eerder in voor een datacentrum via Uniserver – en was daar zo tevreden mee dat zij een portret maakte over mijn nieuwe nachtrust.
Papier in the cloud:  ik ben nog niet zo ver maar een ex-collega gooit met gemak ieder stuk papier in een lowcost HP scanner die direct naar PDF scant. Weg mappen en gedoe. Bij een bedrijf zoals Stork hebben zij een service centrum waar twee man full time alles inscannen zodat alles in de cloud beschikbaar wordt.
Ja – het begint er een beetje op te lijken. En wat gaan wij dan doen met dit alles? Wij maken KLAS.NL. En ja, KLAS.NL wordt aangeboden in the cloud. Zoals het hoort.
En wat kost eigenlijk zo’n megagroot flatscreen? Nu dat alles in de cloud staat heb ik nog wel een plekje over 🙂

iPad – will it blend?

De e-book hype dendert voort. Met de introductie van de iPad schrijft de media met alle liefde over de wachtrijen voor de winkels in San Fransisco. Wat zou het kosten om een paar rijen aan figuranten te bestellen? Maar heeft het zin om zo’n ding te kopen? Ik blijf er bij dat de huidige e-books en ook de iPad een tussentechnologie is.  Het is het gewoon net niet al is het wel erg mooi gemaakt. Het is gewoon net geen computer en zeker geen telefoon. Het ondersteunt geen Flash en heeft ook weer geen super goede batterij. Als je het zelfde apparaat zou maken met een een volledig OS, Wifi en een een uitklapbaar keyboard en je noemt het LapTopMetAanraakscherm dan heb je wel een prima apparaat. Dus…

Maar goed – bij de introductie van een nieuwe gadget is het altijd weer leuk om een BlendTec video te maken. Kan iemand mij vertellen waar je een BlendTec blender in Nederland kan krijgen? BlendTec moet met de Wil it Blend? serie toch een van de beste viral series ever gemaakt. Ik wil een BlendTec blender!

De beloofde webrichtlijnen

De laatste jaren hebben vele webontwikkelaars een beetje om de befaamde webrichtlijnen (regels om sites toegankelijker te maken voor onder andere visueel gehandicapten) heen gedanst. Niet altijd met goed gevolg.

Dat gaat als volgt:
– De webrichtlijnen worden ontdekt.
– Er wordt ontdekt dat er verschrikkelijk veel regels te zijn (125!)
– Met veel moeite wordt een deel van de richtlijnen gevolgd voor een paar projecten
– Opdrachtgevers blijken het helemaal niet zo belangrijk te vinden en hebben er geen budget voor over.
– De webrichtlijnen worden gevolgd maar de redacteuren vergeten dat de inhoud van een site de toegankelijkheid ook bepaald (zie afbeelding!)
– Het enthousiasme voor de webrichtlijnen neemt af

Ik heb dit patroon al bij diverse bouwers van websites gezien. Nu komen er nieuwe richtlijnen en ik hoop van harte dat nu er betere handvaten worden gegeven om in ieder geval op praktische wijze een deel van de toegankelijkheid worden te bereiken. Wij wachten ook met spanning af welke richtlijnen er gegeven worden voor Web 2.0 sites. Want dat is belooft!

Zie  BZK en Stichting Waarmerk werken samen aan nieuwe versie webrichtlijnen

Blindengeleidde pad

Toegankelijkheid is een samenspel tussen bouw en ‘content’
Zie At5 – Ik ben Ans voor voorbeelden hoe het fout kan gaan in de fysieke wereld.

Internet Explorer 6 mag niet worden begraven op 4 maart.

Zoals bekend is de browsermarkt erg in beweging. Veel gepubliceerde statistieken laten zien dat Internet Explorer onder de 50% komt te liggen en dat IE6 bijna niet meer gebruikt zou worden. Dat sluit aan bij de berichten over het doodverklaren van IE6 door Google. Go Google Go! Er is intussen ook een begrafenis waar je  naar toe kan op 4 maart Passende kleding vereist.

Dat is reden om toch nauwkeurig te kijken naar de trend bij Nederlandse sites. In onderstaand geval hebben wij gekeken naar getallen van een onderwijssite. ICATT en andere ontwikkelaars willen namelijk heel graag van IE6 af omdat het veel extra aandacht vergt en creatieve oplossingen soms in de weg staat.

Het blijkt echter dat wij de begrafenis moeten annuleren want er wordt nog door 7% van de bezoekers met IE6 gewerkt. Wij weten dat bij sommige sites dit zelfs procenten hoger ligt.  Met name de overheid en sommige grote bedrijven blijven stug vasthouden aan oude browsers.

Internet Explorer versies

Een startup doodmaken in 8 stappen

Vandaag werd mij gevraagd waar je op moet letten als je een nieuw concept wil opstarten op internet. Een start-up zeg maar.

Je weet iets van een bepaald vakgebied en je hebt het geniale concept bedacht. Je moet alleen nog een site bouwen en misschien nog iets met e-mail…. Ja misschien nog een koppeling en we denken aan uitbreiding naar het buitenland….

Dat is al de vierde keer dat ik in dit gesprek zit in de afgelopen zes maanden. De ideeën zijn allemaal goed maar de weg naar een werkende internet-site  waar ook nog mensen naar toe komen is lang en hobbelig.

In zoverre ik weet heb ik nu twee van de vier voorgoed van het idee afgepraat.
Ik heb ze veel geld bespaard geloof ik.

Vandaag was ik bescheiden en liet het businessmodel met rust (was ook niet slecht) en luisterde naar het idee. Ik gaf mijn ideeën alleen prijs als het om de implementatie ging. Daar was ik tenslotte om gevraagd.

Ik eindigde met een mentale lijst die ik “Hoe herken ik een gedoemd Internet startup die nooit moet beginnen” noem.

1. De uitvinder heeft naar eigen zeggen heel lang nagedacht maar nog niets opgeschreven
2. Er is niemand in het project met enig zicht op technologie
3. Er wordt met een ontwikkelaar gesproken zonder enige vorm van briefing
4. Er is niemand met een marketing-achtergrond en er wordt geen geld hiervoor gereserveerd
5. Er is niet gesproken met de doelgroep
6. Er wordt veel tijd besteed aan non-disclosure verklaringen terwijl er voorbeelden van concurrenten zijn met het zelfde idee
7. Er wordt neergekeken op vergelijkbare initiatieven zonder die goed te kennen
8. Er wordt gedacht dat het allemaal niet heel moeilijk kan zijn

De start-up van vandaag ging net goed. Nu nog de lange en hobbelige weg.