Notre Tech-Stack

Programmation, frameworks, méthodes et outils

Nous travaillons principalement avec Go, Ruby on Rails, Java, Objective-C et JavaScript (en mettant l'accent sur React et Node.js) pour nos services. Notre plateforme, fournie par notre équipe DevOps, est entièrement basée sur les services d'AWS, nous n'avons aucun serveur en interne. Notre travail de développement est basé sur le modèle CI/CD (Intégration Continue / Livraison Continue), ce qui nous permet de mettre rapidement et efficacement à disposition des logiciels. Nous utilisons également TDD (Développement piloté par les tests) et la programmation en binôme pour garantir la qualité souhaitée de notre logiciel. Nous suivons une approche de développement axée sur la disponibilité et la scalabilité du logiciel.

Architecture microservices

Pour nous assurer d'être rapides et innovants, nous avons une architecture modulaire "interchangeable". Les nouvelles fonctionnalités ne peuvent être déployées rapidement que si elles sont développées et testées indépendamment en tant que service. Nos applications web sont une fédération de services web intégrés via des API définies. Les microservices jouent un rôle important en tant que plus petit type de service web. La décomposition d'une application complexe en microservices nous permet de développer chaque service de manière continue et à différentes vitesses de développement. Même les systèmes hérités existants peuvent être intégrés à cette architecture.

Architecture Headless/Decoupled

Nous suivons l'approche API-first. Notre backend est headless et déconnecté de l'agent utilisateur. Avec des technologies telles que OpenAPI/Swagger, nous essayons de rendre le client aussi flexible que possible. La sécurité est améliorée en isolant les services et en protégeant l'API. En plus de REST, nous utilisons également GraphQL pour accéder à l'API. Mais nous nous soucions aussi de l'interface utilisateur. Nos développeurs/designers (DevSigners) soutiennent le développement d'interfaces utilisateur offrant une expérience utilisateur captivante et une utilisation intuitive.

Méthodes

La qualité des logiciels que nous développons est l'un des aspects les plus importants de notre travail. Pour répondre aux normes les plus élevées, nous utilisons les méthodes suivantes.

Développement Agile / Scrum

Nous développons toujours du logiciel de manière agile. Grâce à une série de sprints limités dans le temps, nous obtenons des résultats utilisables dès que possible (MVP), restons flexibles et créons une base pour une évolution continue durable de nos applications. Nous utilisons la méthode Scrum et les sprints durent généralement de 10 à 30 jours de projet. Chaque sprint commence par une réunion de planification et se termine par un examen du sprint, au cours duquel les résultats obtenus sont validés et leur acceptation est vérifiée. De plus, des rétrospectives régulières ont lieu pour améliorer continuellement le travail d'équipe et l'efficacité.

TDD (Développement piloté par les tests)

Pour identifier les erreurs avant qu'elles ne se produisent, nous effectuons des tests complets et automatisés. Au lieu de programmer du code en premier, nous commençons par développer le test unitaire approprié. Les tests unitaires qui résultent du TDD, font également partie intégrante du processus d'intégration continue/livraison continue (CI/CD). Avec des pipelines tels que AWS CodePipeline ou Travis CI, nous soutenons notre processus de développement, qui inclut également tous les tests unitaires et d'intégration.

Programmation en binôme

Nous travaillons en équipes. Lorsque deux développeurs travaillent ensemble sur une histoire ou une tâche, c'est une approche productive. Il y a moins de bugs, la qualité du code est améliorée, la charge de travail est réduite et les connaissances sont partagées. Nos équipes bénéficient d'un mentorat intensif, utilisent des formations et des nano-diplômes et procèdent à des révisions internes du code.

Outils

La sélection des bons outils est la clé de notre travail, car elle a un impact crucial sur la performance de l'équipe et la qualité du code. C'est pourquoi nous utilisons les meilleurs outils éprouvés pour nos projets.

GitHub

Le code source de toutes les applications que nous créons est stocké dans des référentiels GitHub. Ce service est utilisé pour le contrôle de version, les problèmes, les examens de code, les déploiements, etc. Pour organiser les référentiels, nous utilisons Git-Flow.

Amazon API Gateway

Amazon API Gateway est un service AWS pour créer, publier, gérer, surveiller et sécuriser des APIs REST, HTTP et WebSocket de toutes tailles.

AWS CodePipeline

AWS CodePipeline est un service d'intégration continue et de livraison continue que nous utilisons pour modéliser, visualiser et publier automatiquement notre logiciel. Dans nos projets, nous utilisons différentes pipelines (environnements virtuels) configurées pour réagir aux actions définies dans les branches Git. Dès qu'un code est mis à jour, le processus se lance automatiquement.

AWS CodeBuild

AWS CodeBuild est un service entièrement géré pour l'intégration continue. Nous l'utilisons pour compiler le code source, exécuter des tests et générer des packages logiciels livrables. Dans un projet CodeBuild, les packages sont installés et l'application est construite. En même temps, des tests automatiques (d'intégration) sont effectués. De plus, nous définissons des critères d'acceptation pour que l'application réponde à toutes les exigences. Lorsque l'application a passé tous les tests, alors elle est déployée.

AWS CodeDeploy

CodeDeploy est un service utilisé pour déployer le contenu des pages (publiques) et les redirections vers le compartiment S3. Les fonctions Lambda sont mises à jour au besoin, leurs nouvelles versions sont associées à CloudFront Distribution (CFD) et le cache CFD est invalidé.

Langages, frameworks & outils (extrait)

Infrastructure cloud (extrait)

Bases de données (extrait)