L’essentiel d’un projet réussi en dix points

Il y a souvent le client et l’équipe de développement.
L’équipe de développement est responsable d’une tâche de la plus haute importance : développer un site ou une application dernière génération pour une entreprise.
Il peut s’agir d’un besoin pour exposer des services en interne ou en externe.
Comment suivre un tel projet et que faut-il absolument ne pas négliger ?
L’essentiel en dix points.

1 / Une équipe avec des profils adaptés

Ne demandez jamais à un back de faire du front …

Il faut en effet des experts :

  • Un Front (ou +) (React, Angular, …)
    Il va suivre les maquettes faites par le graphiste-designer créées pour répondre aux besoins des utilisateurs. Une série d’interviews a normalement été réalisée afin de connaître leurs attentes et de permettre la création d’un produit qui soit le leur.
  • Un Back (ou +) (Python, why not?)
    Il va définir l’ensemble de la logique du code et l’articulation de toutes les briques techniques de la solution, de l’authentification aux APIs et à l’ensemble des autres services utilisés (Bases de données, …).
  • Un Devops (ou +)
    Il va être responsable de la création de l’ensemble des services nécessaires au fonctionnement de la solution.
    Il va automatiser la mise en service de tout ce sur quoi repose la solution et permettre la haute disponibilité et tout ce qu’on peut attendre d’une solution dernier cri.
  • Un Data Engineer (ou +)
    Il va travailler sur la mise en place et la configuration des services destinés au traitement de données volumineuses.
    Il va également définir les processus liés à la mise à jour des modèles de machine learning et la manière de les exploiter.
  • Un Data Scientist (ou +)
    Il va intervenir sur la mise en place des pipelines de transformation de données : data transformation jusqu’à la prédiction.

Cette liste n’est pas exhaustive… Bien entendu, toutes les personnes impliquées sur le projet font partie intégrante de l’équipe de développement.
Le Product Owner, par exemple, va permettre au projet d’avancer et de répondre aux attentes de l’entreprise.

2 / Automatiser un maximum

L’automatisation doit permettre de relancer l’ensemble des services from scratch en quelques minutes et en limitant un maximum le besoin d’actions manuelles.
L’idéal pour un projet réussi est de permettre, par exemple au Product Owner, de cliquer sur un bouton pour déployer ou mettre à jour l’ensemble de la solution avec le dernier code.

3 / Versionner le code

Le code évolue, la solution se perfectionne.
Il est important qu’un non-technique puisse avoir une idée de l’ensemble de ce qui a été fait.
Le versioning le permet par cet enchainement de commits et chaque commit a une description qui lui est associée.
Cela permet également de revenir à une version précédente du code en cas de besoin.
Il y a des principes comme :

Une nouvelle fonctionnalité = une nouvelle branche !

4 / Avoir un code propre

Il est important que le code soit lisible. Pour cela, il y a souvent des principes à respecter en fonction du langage de programmation.
Citons par exemple PEP8 pour Python.

DRY : Don’t Repeat Yourself
KISS: Keep It Simple, Stupid

5 / Avoir un code testé

Un code testé permet de prévenir les risques de régression.
Ainsi, toute fonctionnalité devrait avoir un ensemble de tests automatisés assurant son bon fonctionnement.
De même, un pourcentage devrait être calculé pour permettre d’avoir une idée de la couverture du code par les tests.
Ces tests devraient être exécutés automatiquement à chaque push (Github, Bitbucket, …).

6 / Documenter est important

Documenter le code et les décisions prises permet à un nouvel arrivant de monter plus rapidement sur le projet.
Il faut rendre facile ce processus de documentation et documenter dès le début.

La documentation au plus proche du code c’est plus facile à maintenir.

Il faut aussi bien du texte et des schémas, notamment celui détaillant l’architecture et l’ensemble des services utilisés.

7 / Avoir accès aux logs est primordial

Les logs doivent exister et être faciles d’accès.
Il doit y avoir aussi bien des logs pour le Back que pour le Front.
L’accès aux logs et l’exhaustivité de ces dernières devrait permettre de comprendre l’origine d’une erreur / d’un bug quand ça survient.

8 / Avoir une méthodologie efficace

Les outils utilisés doivent permettre de travailler plus efficacement en tant qu’équipe. La méthodologie Agile permet par exemple d’avoir un point quotidien (le standup) pour connaitre l’avancement de chacun et les points nécessitant plus d’attentions. C’est également l’occasion de demander l’aide à une autre personne de l’équipe sur ces sujets.

Tout seul on va plus vite, ensemble on va plus loin

La solution se développe en plusieurs sprints. La première version étant mises en production en très peu de temps !

Si chacun est expert de sa partie, ce n’est pas rare qu’un front fasse du pair-programming avec un back, etc.
Autre pratique courante, toute avancée dans le code (front, back ou infrastructure) devrait donner lieu à une pull-request permettant à d’autres membres de l’équipe de prendre connaissance et d’approuver ou non ce qui a été fait.
C’est ces pratiques qui font qu’un projet a des fondations plus robustes et que la solution en fin de développement répond ou non aux attentes.

9 / Impliquer les utilisateurs

Les utilisateurs doivent pouvoir prendre part au développement afin de donner leurs impressions le plus tôt possible (et pas uniquement une fois le produit finalisé).
A la fin de chaque sprint, il faudrait inviter les utilisateurs, leur présenter l’ensemble des développement réalisés, les prochaines étapes, etc.

10 / Communiquer sur ce qui est réalisé

La communication autour d’un produit / d’une solution innovante devrait être entreprise dès le début et dépasser le noyau composé des personnes qui testent et permettent sa réalisation.

@ bientôt sur DataSciencePost