La conception et la réalisation ne sont pas des phases séparées. Une architecture qui ne peut pas être implémentée, et du code écrit sans comprendre le système dans lequel il vit, produisent le même résultat : quelque chose qui fonctionne jusqu'à ce que la pression de l'usage réel révèle ce qui n'a jamais été vraiment pensé.
Nous concevons des systèmes et écrivons le logiciel qui les fait tourner — en traitant chaque décision architecturale et chaque ligne de code comme faisant partie du même travail continu. Que la mission commence par une conception from scratch, une base de code qui a besoin de structure, ou une plateforme d'infrastructure qui a besoin d'outillage sur mesure, le travail part des fondamentaux et aboutit à quelque chose que vous pouvez transmettre à la prochaine personne.
La première question est rarement « quelle technologie ? » — c'est « où vont les frontières ? » Les décisions de décomposition de services prises tôt sont coûteuses à défaire. Nous abordons la conception de systèmes en partant du modèle opérationnel : comment ceci sera-t-il déployé, supervisé, mis à jour et récupéré après une panne, avant de s'engager dans une topologie de composants.
Les décisions de topologie réseau se cumulent dans le temps. Un réseau plat qui atteint vingt hôtes devient un problème de gestion ; rétroajouter la segmentation VLAN sur un environnement établi est pénible. L'identité construite comme une réflexion tardive produit un ensemble fragmenté de credentials — un par application, sans révocation centrale, sans piste d'audit. Nous concevons les deux comme des exigences de premier ordre dès le départ.
Du logiciel sur mesure pour de vrais problèmes opérationnels — le type de travail où les outils standard ne conviennent pas tout à fait, et le problème est suffisamment spécifique pour justifier quelque chose de construit correctement. Nous écrivons du code de production en Rust, Python et shell, choisissant le bon outil pour chaque tâche et veillant à ce que ce que nous construisons puisse être lu, testé et maintenu par quiconque vient après.
Ce site est un exemple fonctionnel : un serveur web multilingue auto-hébergé écrit en Rust, servant des requêtes sans aucun I/O fichier à l'exécution, déployé comme conteneur Podman et construit par un pipeline CI Forgejo auto-hébergé. Chaque décision architecturale est visible, auditable et remplaçable.
Rust — pour les services où les performances, la taille du binaire et la correction comptent. Pas de garbage collector, pas d'allocations cachées, démarrage en millisecondes. Services HTTP construits sur Axum et le runtime asynchrone de Tokio.
Python — pour l'automatisation, les pipelines de données, le code de collage, et tout contexte où la vitesse d'itération compte plus que le débit. L'écosystème pour l'automatisation d'infrastructure — clients REST, orchestration SSH, SDK cloud — est mature et pratique.
Shell scripting — pour l'automatisation des déploiements, les scripts d'init, et tout ce qui compose les outils Unix existants. Un script Bash bien structuré et bien testé est souvent la bonne réponse et la plus facile à déboguer à 2h du matin.
Une grande partie du travail de développement le plus précieux au niveau de la couche infrastructure est l'automatisation qui supprime la nécessité pour les humains de répéter les mêmes étapes. Nous construisons des outils qui parlent à l'API Proxmox, génèrent de la configuration à partir de gabarits, vérifient l'état du système et câblent des pipelines CI de bout en bout.
Toutes les missions ne commencent pas par une conception from scratch. Nous intervenons aussi sur des systèmes déjà construits — en produisant des revues d'architecture, en identifiant les risques et en rédigeant des Architecture Decision Records pour capturer le contexte qui n'existe actuellement que dans la tête des gens.
Des équipes d'ingénierie qui ont dépassé leur configuration initiale et doivent faire des choix délibérés sur la direction à prendre. Des équipes infrastructure qui ont besoin d'une automatisation de confiance — des outils qui se comportent de façon prévisible et peuvent être transmis à la prochaine personne sans briefing oral. Quiconque a hérité d'un système et doit le comprendre clairement avant de le modifier.