docs: résoudre incohérences #13 et #14 (emails + K8s)

Résolution de 2 incohérences MODERATE (reste 1/9) :

#13 - Emails techniques uniquement (ADR-018)
- Périmètre strict : auth, sécurité, modération, RGPD uniquement
- Pas de notifications sociales/marketing/newsletters
- Projection coûts : 93 emails/jour en MVP → gratuit
- Condensé : 112 → 75 lignes

#14 - Kubernetes roadmap clarifiée (ADR-001, ADR-017)
- ADR-001 : K8s = bonus scalabilité future, pas raison principale
- Go choisi pour simplicité, écosystème, performance
- ADR-017 : Roadmap 3 phases avec triggers métriques
  - MVP (0-20K) : VPS + Docker Compose (~14€)
  - Croissance (20-100K) : Scaleway managé (~100€)
  - Scale (100K+) : Kubernetes (~500€)
- Condensé : 137 → 65 lignes

INCONSISTENCIES-ANALYSIS.md :
- 8/9 MODERATE traités (6 résolus, 1 annulé, 1 documenté)
- 1 MODERATE restant : #15 (Unlike Manuel)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
jpgiannetti
2026-02-01 12:19:13 +01:00
parent 37c62206ad
commit b6b926b233
4 changed files with 139 additions and 68 deletions

View File

@@ -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)
---

View File

@@ -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

View File

@@ -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

View File

@@ -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)