Het ontwikkelen van Collaborative Editing voor een van onze SaaS Producten

De afgelopen tijd heeft ons development team gewerkt aan de ontwikkeling van een Collaborative Editing functionaliteit voor een van onze ventures: Notulen Software, een B2B SaaS product waarmee het vergaderproces geoptimaliseerd wordt. In dit blog vertellen wij hoe de ontwikkeling van Collaborative Editing tot stand is gekomen.

Waarom Collaborative Editing?

Veel Notulen Software klanten gebruikten in het verleden Google Drive voor de verslaglegging van hun meetings. Allen zijn super enthousiast over de vele verbeteringen die Notulen Software biedt ten opzichte van Google Drive, maar één feedbackpunt kwam met regelmaat terug: “In Google Drive is het super fijn om met meerdere mensen tegelijkertijd te kunnen werken aan een agendapunt, in Notulen Software kan er helaas slechts één persoon op hetzelfde moment typen”.

Een feedbackpunt dat wij volledig begrijpen. Daarom is er een toffe uitdaging doorgezet naar ons development team: ontwikkel een collaborative editing functionaliteit voor Notulen Software!

Collaborative Editing ontwikkeling

De ontwikkeling

De grote uitdaging van de ontwikkeling van een collaborative editing functionaliteit zit hem in dat alle wijzigingen die iedereen doet goed verwerkt worden. Wijzigingen die in een verkeerde volgorde of tegelijk binnenkomen, moeten juist verwerkt worden. Er mogen geen dingen verloren gaan of overschreven worden.

Er zijn verschillende operational transformation algoritmes bekeken, waarbij er gezocht is naar een versie met een single source of truth. Dit is belangrijk, omdat alle data opgeslagen moet worden in de database. Vanuit dit perspectief is er voor gekozen om een admissibility-based transformation algoritme te implementeren.

Er zijn vervolgens enkele wijzigingen gedaan aan het ABT algoritme. ABT is namelijk peer-to-peer. Het development team heeft zelf een implementatie gemaakt die niet peer-to-peer is en kan werken met een single source of truth. Ook is er Undo Support ingebouwd waarmee is verzekerd dat het gebruik van Control-Z zonder problemen verloopt. Je wilt natuurlijk niet dat jouw Control-Z de wijzigingen van jouw collega’s doet verdwijnen.

De server die is opgezet om operational transformation in real time te doen, is geschreven in Node.js met het Express framework en communiceert via websockets met de verbonden clients. Waar Notulen Software is ontwikkeld in Laravel, staat de collaborative editing server in een losse microservice.

De operational transformation server moest ook geïmplementeerd worden in de frontend, welke is geschreven in React. De editor die al werd gebruikt in Notulen Software ondersteunt delta’s. Deze delta’s worden gebruikt om wijzigingen naar de operational transformation server te sturen en ontvangen.

Doorontwikkeling

De eerste oplevering was een basisimplementatie van collaborative editing. Deze is door en door getest en steeds verder uitgebreid. Er is eerst een versie gemaakt waarin wijzigingen in de tekst zichtbaar waren. Vervolgens is er gestart met ook cursors van andere personen realtime zichtbaar maken. Zo is er gegarandeerd dat de Notulen Software gebruikers nog blijer zijn dat ze zijn geswitched van Google Drive naar Notulen Software.