Audit technique du produit Test equipe transverse Comité d'investissement prévu pour le 01/01/1970
Ce questionnaire vise à recueillir des informations techniques sur le produit. Une réponse positive (Oui) est généralement attendue, mais une réponse négative (Non) peut être tout à fait appropriée en fonction du contexte. Dans ce cas, merci de préciser les raisons dans les commentaires.
Important : Le formulaire ne prend pas encore en charge l'édition simultanée. Si plusieurs personnes travaillent dessus en même temps, cela risque d'écraser les réponses des autres.
Merci pour votre contribution.
Infrastructure Opération Stockage Architecture Accessibilité Open source Dev XP Sécurité L'application est-elle déployée chez un hébergeur souverain ?Entreprise et serveurs en Union Européenne
https://www.numerique.gouv.fr/services/cloud/doctrine/
https://www.numerique.gouv.fr/services/cloud/regles-doctrine/#contenu
L'infrastructure de votre application est-elle scalable facilement, même manuellement ?
Est-ce que l'application peut faire face à une montée en charge grâce à l'autoscaling ?
L'application est-elle déployée en haute disponibilité ?Cela implique d'avoir plusieurs instances pouvant répondre aux requêtes avec un load balancer. Ainsi, en cas de crash d'une instance les requêtes peuvent toujours être servies aux autres instances.
Les bases de données sont-elles déployées en haute disponibilité ?Redondance avec master/slave
Votre infrastructure est-elle gérée "As Code" ?L'Infrastructure as Code (IaC) vous permet de documenter les changements d'infra et de remonter vos applications suite à un désastre. Par exemple Terraform ou son équivalent open source "OpenTOFU"
Votre application a-t-elle un nom de domaine en .gouv.fr ?
Monitorez-vous votre infrastructure ? Si oui, avec quels outils ?Par exemple avec des outils type Grafana, Newrelic, datadog
Pour le monitoring de votre application, utilisez-vous l'instance Sentry proposée par l'Incubateur ?
Recevez-vous une alerte en cas de downtime sur le produit ?par ex: updown.io (proposé par l'Incubateur)
Recevez-vous une alerte en cas d'anomalie sur le produit ?Site très lent (alertes Grafana ou autre), utilisation serveurs anormale (disques durs, RAM, CPU), erreurs applicatives (alertes Sentry), etc...
Un système de log centralisé est-il en place (ELK / etc…) ? Si oui quel outil ?
Monitorez-vous les requetes lentes de votre base de données ?
Publiez-vous un postmortem après un incident de production ? Quel public y a accès ?
Votre service utilise-t-il un CDN (Réseau de Diffusion de Contenus) ?https://fr.wikipedia.org/wiki/R%C3%A9seau_de_diffusion_de_contenu
Un outil de mesure de statistiques web type Matomo est-il en place ?
Une procédure de backup et restore de la base de donnée est-elle en place ?
Votre base de données est-elle infogérée (managée) ?Managée complètement par votre PaaS
Les données sont-elles chiffrées au repos (at rest) ?Cela a pour but d'empêcher l'utilisation des données dans le cas d'une intrusion par exemple.
La base de données a-t-elle un schéma homogène (Casse, Langue, ...) ?https://fr.wikipedia.org/wiki/Sensibilit%C3%A9_%C3%A0_la_casse
Votre base de données comporte-t-elle des contraintes d'intégrité ?Contraintes de clé primaire, clé étrangère, d'unicité, etc...
Avez-vous un processus de migration de schéma automatisé ?Fourni par exemple par Prisma, Doctrine, ...
Utilisez vous un outil de visualisation des données de type metabase ?Par exemple pour exposer vos indicateurs. Si oui, précisez l'outil
Y-a-t-il un readme permettant de contribuer au projet de manière autonome ?Faire tourner le projet en local, pratiques de contribution, ...
Existe t-il un document de traitement des données (politique de confidentialité) ?Si oui, mettre le lien en commentaire
https://rdv.anct.gouv.fr/politique_de_confidentialite
Existe t-il un DAT (Dossier d'Architecture Technique) ? (si oui, merci de mettre le lien en commentaire)https://gitlab.com/groups/incubateur-territoires/startups/infrastructures-numeriques/-/wikis/Dossier-d'architecture-technique
https://github.com/betagouv/rdv-service-public/blob/production/docs/architecture-technique.md
Le DAT contient-il un diagramme du schéma de base de donnée ?
Le DAT liste-t-il tous vos outils (logs, monitoring, ...) ?
Un Single Sign-On (SSO) est-il implémenté pour vos utilisateurs ?ProConnect / AgentConnect / MonComptePro
Existe-t-il une séparation claire entre la couche métier et la couche de présentation ?
Votre équipe adhère-t-elle à un pattern d'organisation de code prédéfini et documenté ?Proposé par votre framework ou MVC / DDD / Autre
Appliquez-vous des pratiques d’éco-conception ? Saisissez en commentaire le score obtenu sur le site https://www.ecoindex.fr/
Documentez-vous vos décisions d'architecture ?
Si oui merci de mettre le lien en commentairehttps://blog.octo.com/architecture-decision-record
https://github.com/joelparkerhenderson/architecture-decision-record
https://en.wikipedia.org/wiki/Architectural_decision#cite_note-15
https://github.com/betagouv/rdv-service-public/tree/production/docs/decisions
Votre application est-elle stateless ?Stocker des données localement peut rendre la gestion opérationnelle plus complexe et risquée, notamment lors du passage à l'échelle. Il est préférable d'utiliser un autre service (base de données, stockage objet...) pour persister de la donnée.
Utilisez-vous un ORM ?ORM : Outil qui traduit les données entre la base de données et les objets du code.
Ex : Hibernate, SQLAlchemy, Entity Framework.
Appliquez-vous les principes de KISS ou YAGNI dans le développement de ce produit ?https://fr.wikipedia.org/wiki/Principe_KISS
https://fr.wikipedia.org/wiki/YAGNI
Appliquez-vous les principes de SOLID dans le développement de ce produit ?https://fr.wikipedia.org/wiki/SOLID_(informatique)
Appliquez-vous les principes de 12Factor dans le développement de ce produit ?https://12factor.net/fr/
Votre produit inclut-il une déclaration d'accessibilité ?si oui, donnez le lien en commentaire
Avez-vous déjà fait le diagnostic flash ?
https://design.numerique.gouv.fr/outils/diagnostic-flash/
Votre produit utilise-t-il le DSFR ?
Existe t-il des tests de performances côté client (lighthouse) ?
Le code est-il sur un repo public (GitHub/GitLab) ?
Avez-vous un fichier de licence dans le repository ?Aide au choix de la license : https://licence-libre.incubateur.anct.gouv.fr/
Existe t-il un fichier de contribution ? https://contributing.md/
https://gitlab.com/incubateur-territoires/startups/espace-sur-demande/application/-/blob/develop/CONTRIBUTING.md
Les données du produit sont-elles disponibles sur data.gouv.fr ?
L'API du projet est-elle publique ?Même si certains endpoint sont protégés par un système d'authentification
Votre API est-elle documentée publiquement ?Swagger, OpenAPI, etc...
Un fichier publiccode.yml est-il présent dans votre repository ?Au sein de l'incubateur nous portons les valeurs du code public, ce document permet une meilleur découvrabilité de votre projet public.
https://yml.publiccode.tools/
Publiez-vous le budget de votre startup ?
Contrôlez-vous automatiquement que vos dépendances (librairies) sont à jour ?Par exemple avec Dependabot
Secure > security configuration (GitLab)
Votre stack technique (langages, runtimes, bases de données, infrastructure) est-elle à jour ?Secure > security configuration (GitLab)
Avez-vous un outil d'analyse statique du code en place ?Complexité cyclomatique, ...
Par exemple SonarQube ou GitLab Code Quality
Exécutez-vous systématiquement les tests automatisés pour chaque Pull Request ?
Le code est-il parcouru à 80% par les tests automatisés (code coverage) ?
L'acceptation de nouveau code dans la branche principale passe-t-elle par des pull requests ?
Les pull requests sont-elles auditées par un autre développeur que l’auteur ?
Les branches principales sont-elles protégées d’un commit direct ?
Un pipeline d’intégration continue est-il en place ?
Toute l'équipe travaille-t-elle sur un backlog commun dans le meme outil ? Par exemple un board Trello ou des issues GitLab
Un standard de formatage de code et un linter sont-il en place ?
En moyenne, un bug simple est-il corrigé et déployé en moins d'une heure ?
Un nouveau développeur arrivant sur le projet livre-t-il en production lors de son premier jour ?Cette question vise à évaluer la simplicité du processus d'onboarding, pas la complexité de la contribution. On peut imaginer que le déploiement ne concerne qu'une correction de faute de frappe par exemple.
Peut-on faire tourner le produit en local en 15 minutes ?
Votre application est-elle en mono-repo ?On ne promeut pas forcément le mono-repo, on cherche avoir la vision globale sur votre produit.
Les PM / PO / Stakeholders testent-ils les développements sur un environnement de test similaire à la prod ?Ces environnements sont parfois appelés feature apps ou review apps.
Avez-vous un setup pour déployer automatiquement des features branch?des environnements ephemères pour chaque PR
La CI / CD tourne-t-elle sur les PRs en moins de 15 minutes ?
Les améliorations techniques sont-elles faciles à prioriser face aux nouvelles fonctionnalités ?Le travail de développement nécessite de travailler parfois sur des fonctionnalités du produit et d'autres fois de travailler à des sujets purements techniques qui n'apportent pas de nouvelles fonctionnalités.
Ces sujets techniques peuvent cependant parfois être critiques pour la fiabilité et la qualité de l'application. Dans ces cas, il est important de pouvoir les prioriser correctement par rapport aux nouvelles fonctionnalités.
À votre avis, est-ce que la communication avec les PM permet de correctement prioriser ces sujets ?
Disposez-vous d'un glossaire expliquant le vocabulaire métier ?
Vos utilisateurs ont-il accès à un changelog pour votre projet ?https://keepachangelog.com/fr/1.1.0/
Organisez-vous des retro d'équipes ? (précisez la fréquence en commentaire)
Appliquez-vous un standard de nommage de commits, type conventional commit ?https://www.conventionalcommits.org/fr/v1.0.0/
Utilisez-vous les chiffrement pour les données en transit ?Par exemple utilisation de HTTPS entre le client et le serveur, ou TLS entre le serveur et la base de données.
Avez-vous en place une détection des secrets dans le code exécuté sur la CI ?Par exemple détection GitLab / GitHub / SonarQube
https://docs.gitlab.com/ee/user/application_security/secret_detection/
https://gitleaks.io/
Est-ce qu'un outil de detection des fuites de secret est mis en place dans un pre-commit ?Pour détecter par exemple si quelqu'un push le .env avec des secrets de production
https://docs.gitlab.com/ee/user/application_security/secret_detection/
https://docs.gitlab.com/ee/user/application_security/secret_detection/secret_push_protection/
Utilisez-vous des MFAs (https://fr.wikipedia.org/wiki/Double_authentification) pour accéder aux interfaces d'administration de vos outils et infras ?Ex. :
- dépôt de code (GitLab, GitHub...)
- accès à l'interface d'administration de l'hébergeur
- sentry
- grafana
- plus généralement, tous les outils qui concourent au bon fonctionnement du service...
Utilisez vous des commits signés ?https://docs.gitlab.com/ee/user/project/repository/signed_commits/
https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits
Ce produit a t-il reçu une homologations de sécurité (RGS) ?
Ce produit dispose t-il d'un dossier sur le service MonServiceSécurisé suivi par le responsable sécurité de l'incubateur ?
Disposez-vous d'une politique de sécurité ?https://fr.wikipedia.org/wiki/Politique_de_s%C3%A9curit%C3%A9_du_syst%C3%A8me_d%27information
Disposez-vous d'une procédure de réponse aux incidents de sécurité ?
Utilisez-vous un gestionnaire de mots de passe pour la génération, le stockage et le partage de secrets au sein de la startup ?https://www.notion.so/incubateurdesterritoires/La-boite-outils-tech-41e41e42094e4a85b876520a03cb044c?pvs=4#616778a9ecac45faa06373845ae2dbdb
Tous les membres de l'équipe utilisent-ils un gestionnaire de mot de passe pour leurs accès nominatifs aux outils de dev et d'infra ?Par exemple le compte de l'hébergeur, le compte GitLab ou GitHub...
https://www.notion.so/incubateurdesterritoires/La-boite-outils-tech-41e41e42094e4a85b876520a03cb044c?pvs=4#616778a9ecac45faa06373845ae2dbdb
Tous les mots de passes utilisés sont-ils uniques et générés aléatoirement ?(via un gestionnaire de mots de passe par exemple)
Un lien security.txt est-il mis en place sur votre service ?https://securitytxt.org/
Les horloges de vos serveurs sont-elles synchronisées (NTP) ?La synchronisation des horloges entre les différents serveurs/services permet de garantir l'intégrité temporelle, prérequis indispensable notamment pour les logs.
Votre produit est-il protégé par un service anti-DDoS (déni de service distribué) ?https://cyber.gouv.fr/publications/denis-de-service-distribues-ddos