Adres
Utrecht, Veenendaal

Werktijden
Maandag tot en met vrijdag: 9.00 tot 17.00 uur
Weekend: 10.00 tot 17.00 uur

Een configureerbare rapportage-engine voor het Qfact-platform. Gebruikers stellen zelf de gewenste views samen, wat 25 of meer veelgevraagde use cases dekt zonder dat er een developer aan te pas komt.

  • OpdrachtgeverQfact, een SaaS-platform voor complexe analyses
  • Periode2023
  • RolHet hele traject geleid, van functioneel ontwerp tot release
  • Opgeleverd25 of meer use cases voor selfservice-rapportage
  • Samenstelbare views met filters, kolomselectie en aggregaties, samengesteld door degene die het rapport wil.
  • MySQL-queries die op runtime uit die configuratie worden gegenereerd en uit tabellen lezen die daarvoor op orde worden gehouden.
  • Van A tot Z verantwoordelijk: functioneel ontwerp, architectuur, implementatie en release.

Context

Elk rapportageverzoek dat bij een developer belandt, kost een plek in een sprint en komt drie maanden later weer terug in een iets andere vorm. Qfact had er een gestage stroom van, en tegelijk werden de bestaande analysemethodes trager naarmate de data waarover ze liepen groeide. Beide problemen hadden hetzelfde antwoord.

De uitdaging

Een configureerbare rapportagetool is makkelijk slecht te bouwen. Geef gebruikers te weinig en elke echte vraag heeft alsnog een developer nodig. Geef ze een query builder en je hebt ze een manier gegeven om het platform op een dinsdag om elf uur plat te leggen. De engine moest open genoeg zijn om de binnenkomende verzoeken te dekken en gesloten genoeg om snel te blijven op data die nog steeds groeide.

Wat ik deed

  • Van functioneel ontwerp tot release geleid, inclusief het deel waarin je uitzoekt welke verzoeken eigenlijk hetzelfde verzoek in een ander jasje zijn.
  • Samen met de software architect en een senior developer de architectuur ontworpen, als nieuwe service binnen het bestaande microservices-landschap in plaats van als extra verantwoordelijkheid die aan een bestaande service werd vastgeplakt.
  • Samenstelbare views gebouwd, met filters, kolomselectie en aggregaties, zodat een use case wordt samengesteld door degene die hem wil.
  • MySQL-queries dynamisch gegenereerd, uit die configuratie, wat een vast rapport verandert in 25 of meer rapporten zonder 25 implementaties.
  • Speciaal gebouwde rapportagetabellen in sync gehouden, via geplande jobs, zodat een complex rapport laadt uit data die er al voor gevormd is in plaats van uit een join die wordt berekend terwijl de gebruiker wacht.

Het resultaat

  • Gebruikers bedienen zelf 25 of meer veelgevraagde use cases.
  • Complexe rapporten laden snel, op datavolumes die eerder juist het probleem waren.
  • Rapportageverzoeken kosten geen sprintcapaciteit van developers meer.

Gebruikte technologieën

  • Node.js: De rapportageservice.
  • TypeScript: De taal binnen de hele service.
  • Python: Het datawerk achter de rapportgeneratie.
  • MySQL: Rapportopslag en de dynamisch gegenereerde queries daarover.
  • MongoDB: Configuratie en ondersteunende data.
  • Microservices: De architectuur waarin de service is gebouwd.
  • GraphQL: De API-laag over het platform.
  • OAuth 2.0: Autorisatie op de platform-API's waarlangs de rapportageservice wordt benaderd.
  • Vue.js: De interface waar een rapport wordt geconfigureerd.
  • Jest: Geautomatiseerde tests rond de engine.

Self serve reporting is de moeite van het bouwen waard wanneer dezelfde vraag steeds terugkomt, en ik kan je vrij snel vertellen of die van jou in aanmerking komt.