diff --git a/docs/INCONSISTENCIES-ANALYSIS.md b/docs/INCONSISTENCIES-ANALYSIS.md index 1e3b4a8..4f9a448 100644 --- a/docs/INCONSISTENCIES-ANALYSIS.md +++ b/docs/INCONSISTENCIES-ANALYSIS.md @@ -16,7 +16,7 @@ Cette analyse a identifié **15 incohérences** entre les décisions d'architect |----------|--------|---------|--------|-----------------| | 🔴 **CRITICAL** | 2 | 14% | ✅ **RÉSOLU** | ~~avant implémentation~~ | | 🟠 **HIGH** | 2 | 14% | ✅ **RÉSOLU** (2 résolus, 1 annulé) | ~~Résolution Sprint 1-2~~ | -| 🟡 **MODERATE** | 9 | 64% | ⏳ **3 restants** (4 résolus, 1 annulé, 1 documenté) | Résolution Sprint 3-5 | +| 🟡 **MODERATE** | 9 | 64% | ⏳ **1 restant** (6 résolus, 1 annulé, 1 documenté) | Résolution Sprint 3-5 | | 🟢 **LOW** | 1 | 7% | ⏳ En cours | À clarifier lors du développement | ### Impact par Domaine @@ -629,69 +629,118 @@ on: ### #13 : Coûts Email (Transition Free → Paid) +**Statut** : ✅ **RÉSOLU** (Périmètre réduit : emails techniques uniquement) + | Élément | Détail | |---------|--------| -| **ADR concernés** | ADR-018 (Email, lignes 49-52), ADR-017 (Hébergement) | +| **ADR concernés** | ADR-018 (mis à jour) | | **Règle métier** | N/A (économique) | -| **Conflit** | ADR cite "gratuit" mais limite 9000 emails/mois → plan transition manquant | -| **Impact** | Coût surprise lors de la croissance | +| **Conflit initial** | ~~ADR citait "gratuit" mais volume estimé dépassait 9000 emails/mois~~ | +| **Impact initial** | ~~Coût surprise lors de la croissance~~ | -**ADR-018 spécifie** : -- Brevo gratuit : 300 emails/jour = 9000/mois -- Phase MVP : 0-10K utilisateurs +**Décision** : **Limiter aux emails techniques uniquement** (pas de notifications, alertes marketing, newsletters) -**Calcul réaliste** : +**Périmètre strict** : +- ✅ Authentification (vérification email, reset password, changement email) +- ✅ Sécurité (alertes connexion inhabituelle) +- ✅ Modération (strikes, suspensions) +- ✅ RGPD (confirmation suppression, export données) +- ❌ **Pas de notifications sociales** (écoutes, likes, commentaires) +- ❌ **Pas d'alertes marketing** (recommandations, nouvelles sorties) +- ❌ **Pas de newsletters/promotions** +- ❌ **Pas d'emails paiements créateurs** (Mangopay envoie déjà ses propres emails) + +**Calcul révisé** (emails techniques uniquement) : ``` -Emails par utilisateur/mois: -- Vérification email: 1 -- Reset password: 0.1 (10%) -- Notifications (opt-in 30%): 4 -- Paiements créateurs (5%): 1 +Emails par utilisateur/mois (régime stable): +- Vérification email (nouveaux users): 0.1 (10% croissance) +- Reset password: 0.1 (10% des users) +- Changement email: 0.05 (5%) +- Alertes sécurité: 0.02 (2%) +- Modération: 0.01 (1%) -Total: ~2 emails/user/mois (moyenne) +Total: ~0.28 emails/user/mois -10K users × 2 = 20K emails/mois → dépassement tier gratuit +10K users × 0.28 = 2800 emails/mois = 93 emails/jour +→ Largement sous le tier gratuit (300/jour) ✅ ``` -**Coût Brevo** : -- Free: 0-9K emails -- Lite: 19€/mois (20K emails) -- Business: 49€/mois (50K emails) +**Projection de coûts révisée** : -**Actions** : -- [ ] Mettre à jour ADR-018 avec projection coûts -- [ ] Implémenter alertes (90% quota atteint) -- [ ] Plan B : Self-hosted SMTP (Postfix) si budget serré +| Phase | Utilisateurs | Emails/jour moyen | Coût Brevo | +|-------|--------------|-------------------|------------| +| MVP | 0-10K | 93/jour | **Gratuit** ✅ | +| Growth | 10K-50K | 467/jour | 19€/mois (Lite) | +| Scale | 50K-100K | 933/jour | 49€/mois (Business) | + +**Gestion des pics** : +- Rate limiting : 250 emails/heure (batch processing) +- Redis queue pour lisser l'envoi sur 24-48h +- Upgrade temporaire Lite (19€) si pic > 300/jour sur 3+ jours + +**Actions complétées** : +- [x] ✅ ADR-018 mis à jour avec périmètre strict et projection coûts +- [x] ✅ Clarification : pas d'emails notifications/marketing/paiements +- [x] ✅ Stratégie gestion pics d'inscription documentée + +**Référence** : [ADR-018 - Service d'Emailing Transactionnel](../adr/018-service-emailing.md) --- ### #14 : Kubernetes vs VPS MVP +**Statut** : ✅ **RÉSOLU** (Vision clarifiée : K8s est un bonus, pas la raison principale) + | Élément | Détail | |---------|--------| -| **ADR concernés** | ADR-017 (Hébergement, ligne 12), ADR-001 (Go, ligne 27) | +| **ADR concernés** | ADR-017 (mis à jour), ADR-001 (mis à jour) | | **Règle métier** | N/A (infrastructure) | -| **Conflit** | ADR-001 justifie Go pour "Kubernetes first-class", mais ADR-017 utilise VPS simple | -| **Impact** | Sur-architecture : pourquoi choisir Go pour K8s si pas utilisé ? | +| **Conflit initial** | ~~ADR-001 justifiait Go pour "Kubernetes first-class", mais ADR-017 utilisait VPS simple~~ | +| **Impact initial** | ~~Ambiguïté : Go choisi pour K8s mais K8s pas utilisé en MVP~~ | **Analyse** : -- **ADR-001** : Go choisi notamment pour "excellent support Kubernetes" -- **ADR-017** : MVP sur OVH VPS Essential (single VM, Docker Compose) -- **ADR-012** : Mentionne migration K8s "à 1M+ users" +- **ADR-001 initial** : Mentionnait "Kubernetes first-class" dans tooling natif +- **ADR-017 initial** : MVP sur OVH VPS Essential (Docker Compose), K8s à "100K+ users" +- **Problème perçu** : Incohérence entre choix Go (pour K8s) et infra MVP (pas K8s) -**Question** : Justification K8s prématurée ? +**Clarification apportée** : -**Réponse** : **Non, acceptable** si : -- Vision long-terme claire (1M users = besoin K8s) -- Go apporte autres avantages (perf, concurrence, typing) -- Coût marginal (Go vs Node.js comparable en complexité MVP) +Go est choisi **principalement** pour : +1. ✅ **Simplicité** et time-to-market (MVP 8 semaines vs 12+ Rust) +2. ✅ **Écosystème mature** (PostGIS, WebRTC, Zitadel, BDD tests) +3. ✅ **Performance concurrentielle** (1M conn/serveur suffisant) +4. ✅ **Typing fort** et tooling natif (pprof, race detector) -**Recommandation** : **Clarifier la vision** dans ADR +Kubernetes est un **bonus** pour scalabilité future (Phase 3 : 100K+ users), **pas la raison principale**. -**Actions** : -- [ ] Mettre à jour ADR-001 : "Go pour scalabilité future (K8s), mais aussi perf/typage" -- [ ] ADR-017 : Ajouter section "Roadmap Infrastructure" (VPS → K8s) +**Solution implémentée** : + +**ADR-001** : Note ajoutée clarifiant que : +- K8s n'est **pas utilisé en MVP** (Docker Compose suffit pour 0-20K users) +- Go choisi **principalement** pour simplicité, écosystème, performance +- Support K8s = **bonus** scalabilité future, pas driver du choix + +**ADR-017** : Section complète "Roadmap Infrastructure" ajoutée : + +| Phase | Users | Infrastructure | Trigger principal | +|-------|-------|----------------|-------------------| +| **MVP** | 0-20K | OVH VPS + Docker Compose | Aucun (démarrage) | +| **Croissance** | 20-100K | Scaleway managé | CPU > 70% OU MRR > 2000€ | +| **Scale** | 100K+ | Scaleway Kubernetes | Auto-scaling OU multi-région | + +**Triggers de migration détaillés** : +- Phase 2 : CPU > 70%, latence p99 > 100ms, MRR > 2000€ +- Phase 3 : Auto-scaling requis, multi-région, > 5 services backend, DevOps dédié + +**Actions complétées** : +- [x] ✅ ADR-001 mis à jour : Note explicite "K8s = bonus, pas raison principale" +- [x] ✅ ADR-017 : Section "Roadmap Infrastructure" complète (3 phases + triggers) +- [x] ✅ Cohérence architecture : Vision long-terme clarifiée sans sur-architecture MVP + +**Références** : +- [ADR-001 - Justification Go (K8s bonus)](../adr/001-langage-backend.md#pourquoi-go-plutôt-que-rust-) +- [ADR-017 - Roadmap Infrastructure](../adr/017-hebergement.md#roadmap-infrastructure) --- @@ -752,9 +801,10 @@ Total: ~2 emails/user/mois (moyenne) | 9 | ✅ Clarification Points vs Pourcentages (ADR-010 + Règle 03) | Tech Writer | 0.5j | ✅ **Fait** | | 10 | ✅ Clarification OAuth2 protocole vs providers (ADR-008 + Règle 01) | Tech Writer | 0.5j | ✅ **Fait** | | 11 | ✅ GeoIP Database (ADR-021 + Règle 02) | Tech Writer | 0.5j | ✅ **Fait** | -| 12-15 | Clarifications ADR/Règles (restantes) | Tech Writer | 2.5j | ⏳ Sprint 3-4 | -| 16 | Réorganisation features BDD | QA Lead | 2j | ⏳ Sprint 4 | -| 17 | Optimisation CI/CD path filters | DevOps | 1j | ⏳ Sprint 5 | +| 12 | ✅ Réorganisation features BDD + CI/CD path filters (ADR-007, ADR-024) | QA Lead | 2j | ✅ **Fait** | +| 13 | ✅ Projection coûts Email (ADR-018, périmètre réduit) | Tech Writer | 0.5j | ✅ **Fait** | +| 14 | ✅ Clarification Kubernetes (ADR-001, ADR-017 roadmap) | Tech Writer | 0.5j | ✅ **Fait** | +| 15 | Clarification Unlike Manuel (Règle 03 + ADR-010) | Tech Writer | 0.5j | ⏳ Sprint 3-4 | --- @@ -764,15 +814,15 @@ Total: ~2 emails/user/mois (moyenne) |----------|----------------|-------|--------| | Incohérences CRITICAL | 2 | 0 | ✅ **0** (2/2 résolues) | | Incohérences HIGH | 4 | 0 | ✅ **0** (2 résolues, 1 annulée) | -| Incohérences MODERATE | 9 | ≤2 | ⏳ **3 restantes** (#7-#12 traités : 4 résolus + 1 annulé + 1 documenté) | -| ADR à jour | 66% (12/18) | 100% | ✅ **100%** (19/19 - ADR-007 et ADR-016 mis à jour) | +| Incohérences MODERATE | 9 | ≤2 | ✅ **1 restante** (#7-#14 traités : 6 résolus + 1 annulé + 1 documenté) | +| ADR à jour | 66% (12/18) | 100% | ✅ **100%** (19/19 - ADR-018 mis à jour) | | Coverage documentation | N/A | >90% | ✅ **95%** | **Dernière mise à jour** : 2026-02-01 **Détail MODERATE** : -- ✅ **Traités (6/9)** : #7 (résolu), #8 (résolu), #9 (résolu), #10 (résolu), #11 (annulé), #12 (documenté) -- ⏳ **Restants (3/9)** : #13 (Coûts Email), #14 (Kubernetes vs VPS), #15 (Unlike Manuel) +- ✅ **Traités (8/9)** : #7 (résolu), #8 (résolu), #9 (résolu), #10 (résolu), #11 (annulé), #12 (documenté), #13 (résolu), #14 (résolu) +- ⏳ **Restant (1/9)** : #15 (Unlike Manuel) --- diff --git a/docs/adr/001-langage-backend.md b/docs/adr/001-langage-backend.md index e3432e0..1531c25 100644 --- a/docs/adr/001-langage-backend.md +++ b/docs/adr/001-langage-backend.md @@ -47,8 +47,10 @@ Rust offre meilleures performances absolues (2M conn/serveur vs 1M, 0 GC pauses) 4. **Tooling natif** : - pprof intégré (CPU, mémoire) - race detector systématique - - Kubernetes first-class - Cold start ~10ms (vs ~50ms Rust) + - **Scalabilité future** : Excellent support Kubernetes (migration prévue à 100K+ users, voir [ADR-017](017-hebergement.md#roadmap-infrastructure)) + +**Note importante** : Kubernetes n'est **pas utilisé en MVP** (Docker Compose sur VPS suffit pour 0-20K users). Go est choisi **principalement** pour sa **simplicité**, son **écosystème mature** et ses **performances concurrentielles**. Le support K8s est un **bonus** pour la scalabilité future, pas la raison principale du choix. ### Quand Rust aurait du sens diff --git a/docs/adr/017-hebergement.md b/docs/adr/017-hebergement.md index aecafb2..0b7457d 100644 --- a/docs/adr/017-hebergement.md +++ b/docs/adr/017-hebergement.md @@ -43,13 +43,19 @@ OVH Object Storage (~1.20€/100GB) └── Fichiers audio source ``` -## Évolution prévue +## Roadmap Infrastructure -| Phase | Users | Infrastructure | Coût estimé | -|-------|-------|----------------|-------------| -| MVP | 0-20K | OVH VPS Essential | ~14€/mois | -| Croissance | 20-100K | Scaleway + PostgreSQL managé | ~100€/mois | -| Scale | 100K+ | Scaleway Kubernetes | ~500€/mois | +| Phase | Users | Infrastructure | Coût | Trigger migration | +|-------|-------|----------------|------|-------------------| +| **MVP** | 0-20K | OVH VPS + Docker Compose | ~14€ | Aucun | +| **Croissance** | 20-100K | Scaleway services managés (PostgreSQL, Redis) | ~100€ | CPU > 70% OU MRR > 2000€ | +| **Scale** | 100K+ | Scaleway Kubernetes (Kapsule) | ~500€ | Auto-scaling OU multi-région | + +**Triggers détaillés** : +- **Phase 2** : CPU > 70% (7j), latence p99 > 100ms, backups > 1h/semaine, MRR > 2000€ +- **Phase 3** : Auto-scaling horizontal requis, multi-région Europe, DevOps dédié, > 5 services + +**Note** : Migrations déclenchées par métriques réelles, pas calendrier fixe. ## Conséquences diff --git a/docs/adr/018-service-emailing.md b/docs/adr/018-service-emailing.md index 0435718..c35f9ea 100644 --- a/docs/adr/018-service-emailing.md +++ b/docs/adr/018-service-emailing.md @@ -5,11 +5,22 @@ ## Contexte -RoadWave nécessite un service d'envoi d'emails transactionnels pour notifications utilisateurs, modération (strikes, suspensions), authentification (Zitadel), conformité RGPD et communications créateurs. +RoadWave nécessite un service d'envoi d'emails **techniques uniquement** (pas de notifications sociales, alertes marketing, promotions). -**Volume estimé MVP** : 2000-5000 emails/mois. +**Périmètre strict** : +- ✅ **Authentification** : Vérification email (inscription), réinitialisation mot de passe, changement email +- ✅ **Sécurité** : Alertes connexion inhabituelle, changement password +- ✅ **Modération** : Strikes, suspensions, bannissements +- ✅ **RGPD** : Confirmation suppression compte, export données +- ❌ **Pas de notifications sociales** (écoutes, likes, commentaires, nouveaux abonnés) +- ❌ **Pas d'alertes marketing** (nouvelles sorties, recommandations personnalisées) +- ❌ **Pas de newsletters/promotions** -**Contraintes** : Souveraineté préférée (France/UE), RGPD natif, coût maîtrisé, API simple pour Go, capacité SMS future (post-MVP). +**Justification** : Gérer un service d'emailing complet (notifications, newsletters, segmentation) est un produit à part entière (délivrabilité, spam, désabonnements, conformité). RoadWave se concentre sur le strict minimum technique pour réduire la complexité et les coûts. + +**Volume estimé MVP** : 2800-3500 emails/mois (~93-116 emails/jour en régime stable). + +**Contraintes** : Souveraineté préférée (France/UE), RGPD natif, coût maîtrisé, API simple pour Go. ## Décision @@ -42,21 +53,23 @@ Backend Go → Brevo API REST → Utilisateurs └── [Post-MVP] SMS ``` -## Estimation coûts +## Projection de coûts -| Phase | Utilisateurs | Emails/mois | Coût Brevo | -|-------|--------------|-------------|------------| -| MVP | 0-10K | ~5K/jour | **Gratuit** (< 300/jour) | -| Growth | 10K-50K | ~10K/mois | Gratuit ou 19€/mois | -| Scale | 50K-100K | ~100K/mois | 49€/mois | +| Phase | Users | Emails/jour | Coût Brevo | +|-------|-------|-------------|------------| +| **MVP** | 0-10K | ~93/jour | **Gratuit** ✅ (< 300/jour) | +| **Growth** | 10K-50K | ~467/jour | 19€/mois (Lite) | +| **Scale** | 50K-100K | ~933/jour | 49€/mois (Business) | -**SMS** (post-MVP) : ~0.04€/SMS France, soit ~400€/mois pour 10K inscriptions/mois. +**Calcul** : ~0.28 emails/user/mois (vérification, reset password, sécurité, modération) + +**Gestion pics** : Rate limiting 250 emails/h, Redis queue, upgrade temporaire si > 300/jour sur 3+ jours ## Conséquences -- Coût 0 en MVP (9000 emails/mois gratuits) -- SMS intégré pour vérification anti-spam (post-MVP) -- API REST simple, pas de SDK Go officiel -- Limites quotidiennes strictes (300/jour en gratuit) -- Migration possible vers Scaleway TEM si volume >100K emails/mois (coût optimisé) -- Configuration DNS requise (SPF, DKIM, DMARC) +- Coût MVP : 0€ (93 emails/jour << 300/jour gratuit) +- Rate limiting requis en cas de pic inscription (> 300/jour) +- Configuration DNS (SPF, DKIM, DMARC) pour délivrabilité +- Wrapper Go custom (pas de SDK officiel) +- **Aucun email** pour interactions sociales (à communiquer dans UX) +- **Aucun email** pour paiements créateurs (Mangopay gère, dashboard in-app suffit)