Architecture technique

Contexte

Le MVP de Psynergy a rencontré son public. Il faut maintenant mettre en place une architecture technique solide en vue des évolutions à venir.

Enjeux

  • Mettre en place une architecture robuste
  • Mettre en place le tooling nécessaire pour maintenir une codebase pérenne
  • Choisir des technologies robustes

Choix

J’ai fais le choix d’utiliser le même langage pour tous les aspects de la solution. De cette manière un nouveau dev qui arrive sur le projet peut monter en compétence très rapidemment. Le but étant que chaque dev puisse travailler sur toutes les composantes du projet. Je trouve que les découpages front/back ne sont pas utiles quand les équipes sont composées de moins de 8 devs. Ici tout le monde est fullstack et même devOps.

En résumé :

  • API : NodeJS + Typescript
  • Backoffice : ReactJS (w/ Vite) - Typescript
  • App : React Native + Typescript
  • Landing : NextJS

Ces choix auront été très efficace car les nouveaux devs sont devenus opérationnels très rapidement. De plus en prenant en niveau sur du front, ils devenaient meilleurs en back et inversement. Sans parler du fait que recruter des développeurs qui excellent dans 3 langages (ou plus) différents c’est compliqué. Une techno bien ciblée = recrutement facilité.

Autre points :

  • Base de données PostgreSQL + Prisma comme ORM
  • Utilisation de TurboRepo pour build
  • Monorepo modulaire
  • CI/CD via Github Actions
  • AWS pour stockage (S3)
  • AWS pour les traitements vidéos (MediaConvert)
  • Déploiements sur Kubernetes via Helm
  • Utilisation de FastLane pour build les apps
  • Tests unitaires via Vitest + bdd de test sur docker
  • Prettier
  • ESLint
  • Tailwind pour le css (React Native inclu)
  • Builds iOS et Android sur Mac M1 (Scaleway) pour accélérer les temps de build (7 fois plus rapide que via le build des VM de Github)
Aperçu de l’architecture modulaire
Aperçu de l’architecture modulaire