Ingénierie de logiciels pour le secteur public qui passent un audit

L'ingénierie de logiciels pour le secteur public n'est pas plus difficile parce que le domaine est compliqué. Elle est plus difficile parce que chaque décision que vous prenez devient une preuve. Un auditeur examinera votre gestion des données, vos contrôles d'accès, votre logique de calcul et votre pipeline de déploiement. Si vous ne pouvez pas justifier votre travail, le produit échoue indépendamment du fait qu'il fonctionne correctement. C'est la contrainte qui a façonné la façon dont j'ai construit OptimalTax, une plateforme de déclarations fiscales automatisées qui a atteint 99 % de précision de calcul fiscal en production.
La piste d'audit est une décision architecturale, pas un ajout de journalisation tardif
La plupart des équipes ajoutent la journalisation tardivement. Elles instrumentent le chemin heureux, déploient, puis rétrofittent l'observabilité quand quelque chose se casse. Sur une plateforme fiscale, cet ordre est inversé. Avant d'écrire une seule fonction de calcul, j'ai défini ce qu'un auditeur aurait besoin pour reconstruire indépendamment n'importe quel résultat. Cela signifiait l'event sourcing au niveau de la couche de calcul, pas seulement des journaux d'application. Chaque entrée, chaque version de règle appliquée et chaque sortie est stockée en tant qu'enregistrement immuable avec un horodatage et un ID de corrélation.
La conséquence pratique est que le modèle de données est plus volumineux qu'il ne doit l'être pour le produit orienté utilisateur. C'est un compromis délibéré. Un citoyen devrait pouvoir déposer une déclaration. Une autorité fiscale devrait pouvoir reproduire cette déclaration à partir des premiers principes trois ans plus tard. Les deux exigences vivent dans le même système, et elles tirent dans des directions différentes.
Le versioning des règles est le problème que personne ne scope correctement
La loi fiscale change. Les taux changent, les seuils changent, les catégories de déductions changent. Une implémentation naïve intègre ces valeurs dans le code d'application ou un fichier de configuration et redéploie quand les règles changent. Cela fonctionne jusqu'à ce qu'un utilisateur modifie une déclaration déposée selon un ensemble de règles antérieur, ou qu'un auditeur demande pourquoi un calcul de 2024 diffère d'un calcul de 2026.
J'ai résolu cela en traitant les règles fiscales comme des entités de données versionnées, pas comme de la configuration. Chaque ensemble de règles porte une fenêtre de validité. Le moteur de calcul sélectionne la version applicable en fonction de la date de dépôt, pas de la date actuelle. La modification d'une ancienne déclaration réexécute l'ensemble de règles d'origine. Le système ne perd jamais la capacité de reproduire les résultats historiques, parce que les règles qui les ont produits sont toujours dans la base de données.
Ce n'est pas un motif nouveau. C'est une pratique standard dans les systèmes financiers. L'erreur que je vois sur les projets du secteur public est que les équipes savent que le motif existe mais ne scopent pas le chemin de migration. Vous devez décider tôt si vous migrez les définitions de règles héritées dans le nouveau modèle ou si vous exécutez des systèmes parallèles pendant la transition. Sur OptimalTax, nous avons migré. La route du système parallèle crée des risques de cohérence pires que le coût de la migration.
L'attestation de développement sécurisé est maintenant une exigence d'approvisionnement
Selon les directives de la CISA appliquées tout au long de 2025 et 2026, les fournisseurs de logiciels vendant aux agences fédérales américaines doivent soumettre un formulaire d'attestation de développement logiciel sécurisé certifiant la conformité avec NIST SP 800-218. Ce n'est pas un exercice de cocher des cases. Cela nécessite des preuves démontrables de modélisation des menaces, de pratiques de codage sécurisé et d'une chaîne d'approvisionnement logicielle vérifiable.
Je construis selon cette norme indépendamment du fait qu'un client spécifique exige le formulaire. La raison est pratique, pas idéologique. Une plateforme qui peut passer l'examen de conformité NIST SP 800-218 est aussi une plateforme qui survivra à un examen d'approvisionnement au Royaume-Uni, à un audit RGPD en Allemagne et à une évaluation de la protection des données au Cameroun. Les contraintes convergent. L'épinglage des dépendances, les commits signés, l'analyse statique en CI et les modèles de menaces documentés ne sont pas une surcharge. C'est la posture de sécurité minimale viable pour toute plateforme réglementée.
Pour la plateforme de services financiers que j'ai construite dans le secteur fintech, la même discipline a produit une réduction de 30 % des temps de réponse en partie parce que la suppression des dépendances non vérifiées a également supprimé les surcharges. L'hygiène de la chaîne d'approvisionnement sécurisée et les performances ne sont pas en tension.
Le contrôle d'accès doit refléter le modèle de permission réel, pas un modèle simplifié
Les services gouvernementaux orientés vers les citoyens ont au moins trois types d'acteurs distincts : le citoyen, l'agent de cas et l'auditeur. Chacun a besoin d'une vue différente des mêmes données. Le citoyen voit ses propres dossiers. L'agent de cas voit les dossiers qui lui sont assignés, avec un accès en écriture limité aux cas actifs. L'auditeur a un accès en lecture seule à un sous-ensemble défini, avec chaque accès enregistré.
Le mode de défaillance que j'ai vu sur les bases de code héritées est le contrôle d'accès basé sur les rôles qui a été conçu pour deux rôles puis étendu pour en couvrir cinq. Vous vous retrouvez avec des drapeaux booléens, des exceptions de middleware et une logique de permission dispersée dans la couche de service. Il devient impossible de raisonner sur ce qu'un acteur donné peut réellement faire.
Je modélise les permissions comme un concept de domaine de première classe dès le départ. Chaque permission est explicite, nommée et attachée à un type de ressource et à une action. La couche de contrôle d'accès est un module unique et testable. Quand le modèle de permission change, il y a un seul endroit pour le changer, et la suite de tests vous dit immédiatement si vous avez cassé une limite existante.
À quoi ressemble une base de code prête pour la production du secteur public en pratique
Les choses qui distinguent une plateforme réglementée d'une application web standard sont pour la plupart invisibles pour l'utilisateur final. Elles apparaissent dans la révision de code, dans le pipeline de déploiement et dans le runbook de réponse aux incidents.
Sur une plateforme construite selon cette norme, vous trouverez :
- Des enregistrements d'audit immuables écrits avant que la réponse orientée utilisateur soit retournée
- Des entités de règles versionnées avec des fenêtres de validité explicites
- Des fichiers de verrouillage de dépendances validés en CI
- Une documentation de modèle de menaces mise à jour parallèlement aux changements de fonctionnalités
- Le contrôle d'accès comme module de domaine testable, pas des drapeaux de middleware
- Des runbooks qui spécifient exactement ce qu'un ingénieur d'astreinte fait quand une discordance de calcul est signalée
Aucun de ceux-ci n'est exotique. C'est l'application disciplinée de motifs qui existent dans la littérature d'ingénierie. La difficulté est de tous les faire de manière cohérente, sous la pression des délais, quand un chef de produit demande pourquoi la fonctionnalité prend plus de temps que l'estimation.
La réponse que je donne est que le temps supplémentaire n'est pas du dorure. C'est le coût de construire quelque chose qu'un auditeur peut inspecter sans trouver de surprises. Une plateforme qui échoue un examen de conformité coûte bien plus à corriger qu'elle n'aurait coûté à construire correctement.
Le dossier d'ingénierie est ouvert si vous voulez le consulter
L'étude de cas OptimalTax est un point de données. L'index de travail couvre la gamme complète : fintech, SaaS, produits IA, systèmes de conception, livraison d'entreprise. Si vous évaluez si ce type de construction est réel, la lentille d'ingénierie approfondit l'architecture, les choix de stack et les compromis que je fais et pourquoi.
Si vous évaluez un fournisseur ou une approche technique pour une plateforme réglementée, c'est exactement la conversation pour laquelle je suis configuré. Le formulaire de contact est l'itinéraire direct.
Envie d'en discuter ?
Parlons-en.