Quand la fonctionnalité dont vous avez besoin n’existe pas
Les solutions standards permettent aujourd’hui de répondre rapidement à de nombreux besoins.
CMS, extensions, logiciels SaaS, API et services en ligne offrent des milliers de fonctionnalités prêtes à l’emploi.
Nous les utilisons lorsqu’elles répondent correctement au besoin.
Mais il arrive un moment où l’on commence à contourner les limites de l’outil : multiplication des extensions, exports manuels, données copiées d’un logiciel à un autre, règles métier impossibles à reproduire ou fonctionnalités presque adaptées… mais jamais tout à fait.
C’est là qu’un développement spécifique peut devenir pertinent.
À l’Agence des Nouveaux Médias, nous développons des fonctionnalités sur mesure lorsque l’existant ne permet plus de répondre proprement au besoin.
Développer uniquement ce qui doit l’être
Développement spécifique ne signifie pas nécessairement tout reconstruire.
C’est même souvent l’inverse.
Un site ou un logiciel existant peut parfaitement remplir 90 % de sa mission.
Il serait absurde de le remplacer uniquement parce qu’une fonctionnalité manque.
Nous cherchons donc d’abord à déterminer si le besoin peut être satisfait :
- par la configuration de l’existant ;
- par une extension fiable ;
- par une API ;
- par la connexion avec un autre service ;
- par une automatisation ;
- ou par un développement spécifique.
Nous ne redéveloppons pas ce qui existe déjà correctement.
Le sur-mesure intervient lorsque celui-ci apporte une véritable valeur.
Ajouter une fonctionnalité à un site existant
Un développement spécifique peut permettre d’ajouter une fonction précise à un site sans remettre en cause son architecture générale.
Par exemple :
- moteur de recherche avancé ;
- formulaire métier ;
- espace utilisateur ;
- tableau de bord ;
- système d’inscription ;
- gestion de droits ;
- annuaire ;
- géolocalisation ;
- paiement ;
- abonnement ;
- import ou export ;
- génération de documents ;
- notifications ;
- système de réservation ;
- workflow de validation ;
- connexion avec un logiciel externe ;
- automatisation d’une opération.
Le développement s’intègre alors autant que possible dans l’environnement existant.
Développement de plugins SPIP
Sur SPIP, nous privilégions le développement sous forme de plugin lorsqu’une fonctionnalité doit être correctement isolée du squelette et du cœur.
Un plugin peut ajouter :
- des objets éditoriaux ;
- des tables SQL ;
- des formulaires ;
- des autorisations ;
- des traitements ;
- des tâches programmées ;
- des interfaces privées ;
- des API ;
- des fonctionnalités publiques.
Cette séparation facilite les mises à jour et permet de distinguer clairement le métier, les contenus et la présentation.
Développements spécifiques WordPress
Nous pouvons également intervenir sur WordPress.
Lorsqu’une fonctionnalité ne peut pas être correctement obtenue avec une extension existante, un développement spécifique peut éviter d’empiler plusieurs plugins qui ne répondent chacun qu’à une partie du besoin.
Selon le contexte, cela peut prendre la forme d’un plugin, d’une extension d’un thème enfant, d’un connecteur ou d’une fonctionnalité dédiée.
Avant de développer, nous vérifions néanmoins que l’écosystème WordPress ne propose pas déjà une solution suffisamment fiable.
Le développement sur mesure doit résoudre un problème, pas satisfaire le plaisir de redévelopper.
Connecter deux outils qui ne communiquent pas
Une grande partie des besoins actuels ne consiste plus à créer un nouvel outil, mais à faire communiquer ceux qui existent déjà.
Votre site reçoit une demande.
Votre CRM doit la récupérer.
Un email doit être envoyé.
Une facture doit être créée.
Un collaborateur doit être averti.
Le client doit pouvoir suivre son dossier.
Lorsque les outils disposent d’API ou de mécanismes d’échange, nous pouvons développer les connecteurs nécessaires.
Cela permet d’éviter les doubles saisies et de créer un processus continu entre plusieurs services.
Développement et intégration d’API
Une API permet à deux systèmes informatiques d’échanger des informations ou des commandes.
Nous pouvons intervenir pour :
- utiliser une API existante ;
- connecter un site à un service tiers ;
- envoyer des informations vers une plateforme ;
- récupérer et synchroniser des données ;
- développer des points d’accès pour un service ;
- sécuriser les échanges ;
- gérer les erreurs et reprises.
Le développement ne s’arrête pas au scénario où tout fonctionne.
Il faut également prévoir :
Que se passe-t-il lorsque le service distant ne répond pas ?
Que se passe-t-il lorsque les données sont incorrectes ?
Comment reprendre une opération interrompue ?
Comment savoir qu’une synchronisation a échoué ?
La gestion de ces situations fait partie du développement.
Imports et exports de données
Nous développons également des mécanismes permettant d’importer ou d’exporter des données.
CSV, tableur, base SQL, flux ou API peuvent être utilisés selon les sources disponibles.
Pour un import simple, le traitement peut être immédiat.
Pour une synchronisation plus sensible, nous pouvons mettre en place :
- staging ;
- contrôles de format ;
- normalisation ;
- détection des doublons ;
- rapprochement avec les données existantes ;
- détection des modifications ;
- gestion des ambiguïtés ;
- prévisualisation ;
- journalisation ;
- validation avant application.
Importer une donnée est facile. Savoir si elle doit remplacer une donnée existante est souvent beaucoup plus complexe.
Moteurs de recherche sur mesure
Un moteur de recherche interne ne doit pas nécessairement se limiter à chercher une suite exacte de caractères.
Selon les projets, nous pouvons travailler sur :
- recherche plein texte ;
- plusieurs critères simultanés ;
- filtres ;
- synonymes ;
- normalisation des termes ;
- autocomplétion ;
- pertinence ;
- pondération des résultats ;
- géolocalisation ;
- distance ;
- mécanismes de repli lorsqu’aucun résultat exact n’existe.
L’objectif est simple :
aider l’utilisateur à trouver une réponse même lorsqu’il ne connaît pas exactement les mots utilisés dans la base.
Géolocalisation et cartographie
Certains projets nécessitent de travailler avec des adresses et des coordonnées géographiques.
Nous pouvons intégrer :
- géocodage ;
- cartes ;
- recherche autour d’une position ;
- calcul de distances ;
- classement géographique ;
- filtres par zone ;
- données géographiques.
La géolocalisation devient particulièrement intéressante pour les annuaires, points de vente, professionnels ou services de proximité.
Paiement et abonnements
Un développement spécifique peut également intégrer des fonctionnalités de paiement.
Selon le projet et le prestataire utilisé, cela peut comprendre :
- paiement ponctuel ;
- abonnement ;
- période d’essai ;
- différents plans ;
- changement d’offre ;
- renouvellement ;
- facturation ;
- suivi des paiements ;
- gestion des droits associés à l’abonnement.
Le paiement ne doit cependant pas être traité comme une fonctionnalité isolée.
Un abonnement doit correspondre à des droits clairement définis dans l’application.
Le système doit également savoir quoi faire lorsqu’un abonnement commence, expire, est renouvelé, annulé ou rencontre un problème de paiement.
Automatisations et traitements programmés
Certaines fonctions n’ont pas besoin d’être déclenchées manuellement.
Nous pouvons développer des traitements périodiques ou différés :
- synchronisation ;
- contrôle de données ;
- relance ;
- notification ;
- génération de rapports ;
- nettoyage ;
- mise à jour ;
- import ;
- vérification d’un état ;
- surveillance d’une anomalie.
Ces traitements doivent être conçus pour pouvoir être suivis.
Une automatisation silencieuse qui échoue pendant plusieurs mois sans que personne ne le sache n’est pas une bonne automatisation.
Nous cherchons donc à prévoir selon les enjeux :
- statut d’exécution ;
- logs ;
- erreurs ;
- compte rendu ;
- possibilité de relancer ;
- alertes.
Découvrir notre approche de l’automatisation
Intégrer l’intelligence artificielle
Certaines fonctionnalités peuvent désormais s’appuyer sur des modèles d’intelligence artificielle.
Par exemple :
- classification de textes ;
- extraction d’informations ;
- résumé ;
- analyse documentaire ;
- recherche sémantique ;
- aide à la rédaction ;
- qualification d’une demande ;
- rapprochement de données.
Nous pouvons connecter ces services à une application existante.
Mais leur intégration nécessite de réfléchir à plusieurs questions :
- quelles données sont envoyées ?
- quelle fiabilité attendons-nous ?
- comment traiter une réponse incertaine ?
- faut-il une validation humaine ?
- que se passe-t-il lorsque le service est indisponible ?
- quel est le coût du traitement ?
Une fonctionnalité IA reste une fonctionnalité informatique : elle doit être conçue, contrôlée et intégrée au reste du système.
Reprendre un développement existant
Nous pouvons également intervenir sur du code que nous n’avons pas écrit.
Avant de le modifier, nous cherchons à comprendre :
- son rôle ;
- son architecture ;
- ses dépendances ;
- les données qu’il manipule ;
- les effets de bord possibles ;
- son niveau de documentation ;
- les conditions dans lesquelles il est utilisé.
Lorsque cela est nécessaire, nous pouvons progressivement restructurer certaines parties plutôt que tout réécrire.
Un code ancien n’est pas nécessairement un mauvais code. Un code qui fonctionne et dont on comprend les limites peut avoir une grande valeur.
Corriger sans casser
Sur une application existante, une modification apparemment simple peut avoir des conséquences ailleurs.
Nous essayons donc de distinguer :
- correction ;
- évolution fonctionnelle ;
- refactorisation ;
- migration ;
- nettoyage technique.
Lorsque plusieurs sujets doivent être traités, nous préférons procéder progressivement et vérifier le comportement du système à chaque étape.
Pour les opérations sensibles, sauvegarde et possibilité de retour arrière doivent être prévues.
La première qualité d’une évolution est de ne pas casser ce qui fonctionnait déjà.
Sécurité
Tout développement accessible depuis Internet doit prendre en compte la sécurité.
Nous portons notamment attention à :
- validation des données reçues ;
- authentification ;
- autorisations ;
- protection contre les requêtes malveillantes ;
- secrets et clés API ;
- fichiers envoyés ;
- accès aux données ;
- journalisation ;
- mises à jour des dépendances.
Le niveau de protection doit être adapté aux données et aux opérations concernées.
Documenter ce qui est spécifique
Plus une fonctionnalité est spécifique, plus sa documentation devient importante.
Nous cherchons donc à documenter les éléments nécessaires à sa maintenance :
- objectif ;
- fonctionnement général ;
- dépendances ;
- configuration ;
- tâches programmées ;
- données importantes ;
- procédures particulières.
Cette documentation permet de comprendre plus facilement le système plusieurs mois ou plusieurs années après sa création.
Elle réduit également la dépendance envers la personne qui a initialement développé la fonctionnalité.
Développement spécifique ou application métier ?
La frontière peut parfois sembler mince.
Nous parlons de développement spécifique lorsqu’il s’agit principalement d’ajouter ou d’adapter une fonctionnalité dans un environnement existant.
Nous parlons plutôt d’application métier lorsque plusieurs fonctionnalités sont réunies pour construire un outil complet autour d’un processus ou d’une activité.
Dans les deux cas, notre méthode reste la même :
comprendre le besoin avant d’écrire le code.
Vous avez besoin d’une fonction qui n’existe pas ?
Vous avez trouvé plusieurs extensions, mais aucune ne correspond réellement à votre besoin ?
Vos équipes effectuent manuellement une opération qui pourrait être intégrée au site ?
Deux de vos outils possèdent chacun les informations dont l’autre aurait besoin ?
Vous avez un ancien développement que plus personne ne souhaite modifier ?