Bij Sping ontwikkelen we online diensten en platformen waar nog geen standaardoplossing voor voorhanden is, òf omdat maatwerk een alternatief is.
Software productontwikkeling doen we bij voorkeur niet op basis van waterval maar Agile. Dit zorgt voor een een korte ‘time-2-market’ en behoud van flexibiliteit tijdens de ontwikkeling. Dit vraagt ook flexibiliteit in de code waarbij we niet in willen leveren op kwaliteit. Naast dat we maatwerk applicaties bouwen, doen wij ook veel support, onderhoud, updating en monitoring voor Ruby on Rails applicaties.
Projectbudget en planningen staan altijd onder druk. Daarom zijn voordelen van Ruby onder andere dat de Ruby-community in de loop der jaren al veel ‘bouwstenen’ en ‘halffabrikaten’ heeft opgeleverd die wij kunnen en mogen inzetten voor onze eigen projecten. We hoeven dus niet alles van ‘scratch’ te ontwikkelen, daarmee zijn wij in staat om een snellere implementatietijd te bereiken en kosten te reduceren.
Een mooi gevolg daarvan is dat we de hoeveelheid maatwerk beperkt houden met behoud van snelheid en kwaliteit. Met RoR zetten we in ‘no-time’ een minimum viable product online en blijven we continu updates releasen met behoud van kwaliteit door automated testing (test driven development). Dat komt onder andere door de laagdrempeligheid en goede leesbaarheid met functionaliteiten die eenvoudig uit te breiden zijn binnen RoR.
Omdat Ruby OpenSource is en er voldoende webbureau’s zijn die ondersteuning en ontwikkeling bieden voor Ruby on Rails is de kans zeer klein op een “vendor-lockin”. Dat betekent dat je overal aan kennis kan komen, en er niet één partij is die je kan “gijzelen” met de code.
Korte development tijd door gebruik van “halffabrikaten” en “bouwstenen”
Hoge kwaliteit door Test driven development en makkelijke functies.
Geen “vendor-lockin” omdat het OpenSource.
Onze Wizards zijn helemaal weg van RoR, en dat is niet zonder reden natuurlijk. Dit komt door een aantal dingen zoals dat de Ruby-programmeertaal de mogelijkheid geeft tot meta-programmeren waarvan Rails veel gebruikmaakt. Dit resulteert in programmeercode die vaak goed leesbaar is en eenvoudig te begrijpen, te onderhouden en uit te breiden valt
Daarmee zijn belangrijke voordelen ten opzichte van andere ontwikkel frameworks zoals Java (spring/struts/faces) en PHP/memcached onder andere:
Tot nu toe alleen maar voordelen? Nee, Ruby on Rails heeft – net als alle andere frameworks en talen- ook zo zijn nadelen. Daarom zijn en blijven wij kritisch over de keuze van onze technologie. Sterker nog: wij kiezen altijd de beste technologie voor de oplossing van onze klanten.
Wij kiezen niet voor Ruby als er bijvoorbeeld een ‘taalbarrière’ is of bij ‘multi-thread’ toepassingen met veel parallelle/simultane taken. Maar ook wanneer de klant specifieke wensen heeft over het ontwikkelframework, bijvoorbeeld wanneer er een bedrijfspolicy is om JAVA te gebruiken of als de applicatie nadien in beheer moet worden genomen door een afdeling waar PHP of Windows de ‘standaard’ is.
De applicaties die in Ruby on Rails zijn ontwikkeld vergen meer resources dan een vergelijkbare applicatie in Java of NodeJS
Een van de oorzaken hiervan is dat Rails een ‘threaded’ server heeft. Een threaded server wil zeggen dat elke aanvraag richting de server, zijn eigen proces en dus ‘thread’ heeft. Elke server heeft maar een maximaal aantal threads, en kan dus maar zoveel aanvragen behandelen.
Stel nou dat het proces van de aanvraag moet wachten en dus een thread bezet houd, dan kan het zijn dat als alle processen moeten wachten ook alle threads bezet zijn de server niks meer behandeld totdat er een thread vrij komt.
Om het even makkelijker te maken: zie het als een parkeerplaats. Als alle plekken bezet zijn, dan kunnen er geen nieuwe auto’s bij. De aanvragen kunnen dan dus niet behandeld worden.
Wat je zou kunnen doen bij threaded servers, is het bijplaatsen van servers. Maar dit kan flinke kosten met zich meebrengen.
Als alternatief voor threaded servers zijn er event based servers. Het voordeel van dit type server is dat een wachtend proces geen thread gebruikt – als er calls moeten wachten op bijvoorbeeld een API call, dan kan de webserver nog steeds nieuwe requests aannemen. Als die geen API call nodig hebben, kunnen deze direct afgehandeld worden.
Zie het dit keer als een McDrive, als je moet wachten op je grote bestelling dan wacht je op een parkeerplek, maar als je iets kleins hebt kan je het direct ophalen en meenemen. Zo is het dus ook met Event based servers, de hoofdlijn is nooit bezet zodat hij altijd aanvragen kan behandelen, en wachtende processen die krijgen een aparte “wachtplek” op de server.
Er zijn een hoop programmeertalen die event-based web-frameworks hebben; zoals bij voorbeeld scala(play2), elixr(phoenix) en NodeJS (express/sails). Binnen het Sping team gaat de voorkeur uit naar het implementeren van systemen op basis van NodeJS; in de onderliggende taal (Javascript) is het Sping team zeer bedreven. Ook kent NodeJS in de rest van de wereld een grotere aanhang. Hierdoor heeft de taal net zoals bij RoR veel voordelen vanuit de community. Een actieve community betekent vaak dat er goed onderhoud word gepleegd aan de taal en framework.
Soms is een combinatie de beste oplossing. Bijvoorbeeld door de high performance ‘multi-thread’ toepassingen te bouwen op basis van NodeJS, het webframework Sails en de overige ‘webdelen’ implementeren op basis van RoR. Hierbij kunnen we dan alsnog gebruik maken vele features die Rails biedt, zoals snel een compleet product af te leveren (denk aan login, database management etc). Door de backend in NodeJS/Sails te bouwen (high volume/high speed) en de frontend in Ruby on Rails te bouwen (full featured) gebruiken we de best-of-both-worlds om tot een goed platform te komen.
No employee selected.
Kolibrie verwerkt per jaar meer dan 10.000 aanmeldingen. Deze moesten stuk voor stuk met de hand verwerkt worden. Met de software en app voor medewerkers die we met Kolibrie hebben gemaakt is het registreren van een werknemer nu 40x sneller! Wat voorheen een week duurde, kan nu in 4 uur gedaan worden.
Bekijk de case