pas de devs pas de code, pas de code pas d'appli. Pas d'appli ... pas d'appli
Aujourd’hui c’est la grève on code pas, on no code !
On range les fourches et les torches! Je vous entends au fond de la vallée des développeurs gronder le vent de la révolte !
J’ai moi aussi mes préjugés et mes doutes sur le low code / no code, mais la curiosité l’emporte sur la crainte, faut que je teste le bouzin :)
Et comme vous savez que je suis un fanboy GCP devant l’éternel, on va faire ça sur Appsheet :)
L’idée d’Application
Ceux qui me connaissent savent à quel point j’aime la bière! Par le plus grand des hasards, j’ai trouvé cette pépite technologique ! https://punkapi.com/
Hé ouais, c’est bien une API qui expose le catalogue Brewdog :)
Nous partons sur l’idée complètement capitaliste et moche de faire une app qui affiche les bières de brewdog, pas de poursuites judiciaires svp, c’est juste un PoC no code sans aucun but commercial derrière :)
Bon ça serait plus éthique et plus proche de mes valeurs de proposer uniquement des microbrasseries et des bières crafts, mais comme l’API brewdog semble bien faite et que je n’ai pas l’intention de publier l’app de toute façon, on va dire que les multinationales gagnent cette manche :)
Pardon à l’ensemble de la filière artisanale brassicole française …
specs + première impression
On va partir sur un bête affichage de produit pour commencer, l’api retourne les produits, une photo et des infos sur les bières. On crée un template de type Simple Aventory.
OK, sans rien faire on à une application qui affiche des objets “outils”, des métadonnées sur les outils et des images.
Je clique un peu partout, je vois qu’on peut changer des couleurs. Ajouter des champs de formulaire, autoriser ou non les modifications de données.
On a une application qui permet d’ajouter des produits 1 par 1 via l’interface graphique et afficher proprement les objets.
On peut modifier cette feuille de calcul manuellement en brut (et/ou automatiser un import en bricolant un peu éventuellement) En fouillant mon drive accroché à mon app, je trouve un dossier appsheet avec mes images et “ma base de données”.
item-345 Hammer Framing hammer Items_Images/item-345.Image.211436.png
item-567 T-Square T-square with metric ruler Items_Images/item-567.Image.211512.png
Première couche de sel
J’ai envie de râler, donc je vais le faire maintenant et probablement tout le long de cet article.
Google drive comme source de données ? Vraiment ?
C’est à la fois du génie et un peu dangereux non ?
Du génie parce que:
- C’est noob friendly, tout le monde peut ouvrir une feuille de calcul et éditer des données.
- les modifications sont versionnées et un audit de drive peut vous dire qui a modifié quoi.
- Drive permet facilement de copier coller les données de manière simple.
Dangereux:
-
trop facile de casser le modèle de donnée et faire des erreurs manuelles
-
sécurité
- qui contrôle le drive ? (1 collègue unique ? Et si son compte est suspendu ? L’application aussi ?)
- si le mot de passe est compromis, bye bye données
- si on synchronise le drive avec un ou plusieurs disques local, un grand nombre de problèmes s’ajoute
-
pour les mêmes raisons qu’une feuille Excel n’est pas une source viable de données
- mauvais scaling, que se passe-t-il si on augmente considérablement le volume de données ?
- pas de requêtes avancées type SQL, analyse compliquée du jeu de données
- travail collaboratif compliqué
Néanmoins même si j’ai ces réserves pour le moment, ça m’intéresse de voir jusqu’où je peux aller avec cette petite appli.
“Injection de donnée”
Je ne me tape pas le remplissage spreedsheet et images via l’interface graphique de l’application c’est mort, on va vite fait formater les données et importer les images. Mais on va faire comme si on n’avait pas trop de skill de devs et faire une solution en mode démerde, rapidos crados.
J’ai besoin d’un truc sous cette forme
Item ID Name Description Image
J’ai toutes les infos sous forme d’un énorme JSON, il me faut juste les données filtrées et retournées sous la bonne forme.
Un coup d’internet, et on va tenter du gros SQL des familles, haha hey, ce n’est pas du code, techniquement c’est juste une requête de données.
https://anandsunderraman.github.io/jsonsqlonline/#/createDB
curl https://api.punkapi.com/v2/beers
énorme JSON ici
Oh, mais oui, quel plaisir, sans même faire une requête jq compliquée ou une seule ligne de Python ou de Bash.
export en CSV en plus, impeccable …
Alors qu’en fait pas du tout !
Il y a des virgules dans mes descriptions, le cas classique et ça décale tout …
Pas grave, on peut extraire un plus petit JSON déjà et le convertir avec un autre outil en ligne.
https://www.convertcsv.com/json-to-csv.htm
Avec les bonnes options, j’ai un truc comme ça
Il me reste à filtrer les URL d’image pour avoir le nom des fichiers, plutôt que l’URL vers l’image.
techniquement toujours pas une ligne de code, j’ai piqué la regex sur internet directement, hihi
pas d’altération de l’ordre des images, copié, collé, oublié :)
maintenant le download des images
Je le fais pour la science hein :) sinon j’aurai fait une boucle Bash avec Curl.
J’ai même fait une formule spreadsheet pour concaténer le chemin de mes images, c’est dire si je fais un effort pour ne pas faire d’efforts.
Et ça marche plutôt bien avec 25 bouteilles …
et si on chargeait spreadsheet comme un âne ?
Bon, à partir de maintenant, on a besoin d’outil un peu plus puissant pour faire un gros volume dupliqué cohérent de donnée.
Copier les données en boucle, mettre des id numérotés proprement, mettre des id d’inventaire générés aléatoirement.
on fait des bidouilles à base de briques et de awk. des trucs un peu sales comme ça :)
cat new_inventory|awk -F '\t' '{print $3 "\t" $4}' |awk '{print system("tr -dc \047[:alnum:]\047 </dev/urandom | head -c6") "\t" "item-"NR "\t" $0}' > inventory_clean
cat new_database|awk -F '\t' '{print $2 "\t" $3 "\t" $4}' |awk '{print "item-"NR "\t" $0}'| head -n 100000 > yo
Ça passe pour un volume de 10.000 bières et 10.000 inventaire de ces bières.
On tente un scale x10 et tout ça en mode copier-coller sale dans l’interface de Google spreadsheet.
autant dire qu’à 100.000 lignes de produits et pareil en inventaire, l’interface de spreadsheet lag un peu du cul :)
Mais ça rentre, et une fois chargé, l’appli m’affiche la liste de tous mes produits en stream à la demande à priori.
Je n’ai pas compté, je ne sais pas s’il en manque un ou deux :)
à savoir, il y a des limites qu’on ne peut pas dépasser
https://spreadsheetpoint.com/google-sheets-limitations/
Mais pour une petite à moyenne Appli qui affiche des trucs c’est plutôt pas vilain.
Je pense que passé cette limite de toute façon l’application est à peine fonctionnelle.
Il faudra un truc un peu plus malin que juste afficher tous les produits en scroling infini et barre de recherche.
Corruption de donnée, on pète tout
Bon maintenant, on va faire mal aux données comme si on avait pourri l’encodage du fichier spreadsheet . Pour voir à quel point ça craint de péter les données internes de notre appli.
on va mettre des trucs un peu comme ça partout dans la feuille de calcul
�S]��oɇ�E���2��
Et bien madames et monsieurs, même si ça affiche nos caractères salement, les images cassées sont remplacées par des images d’erreurs. L’application ne part pas complètement en vrille, et tout ce qui est frontend de l’appli ne bronche pas !
Je dis bravo, c’est très solide malgré le pourrissage de la base !
On peut revenir à la version précédente de la donnée en utilisant le versionning intégré de google drive.
Et si je supprime carrément le dossier dans drive ? il se passe quoi ? Je peux restaurer mon dossier ?
Une fois dans la corbeille drive, on a jusqu’à 30 jours pour le récupérer, si on le supprime de la corbeille c’est définitif.
C’est un niveau plutôt bon de protection contre la suppression accidentelle, mais il faut quand même une autre source de sauvegarde en cas de suppression malveillante.
Customisation
On peut faire des taches automatisées sur événements et lancer des notifications email, SMS, créer des fichiers sur template. Pour ce genre de mission très simple, c’est appréciable d’avoir une interface simple et rapide.
On peut rajouter des vues et ce qui est appréciable c’est qu’elles sont déjà fonctionnelles. C’est sympa, car on a des résultats très rapidement, très bon point, on teste les trucs, ça plait ou ça ne plait pas :)
Ce qui est très dérangeant, c’est que l’appli nous force un schéma de pensée, on adapte notre besoin à l’outil et non l’inverse. Dans la majorité des cas, on n’a pas besoin de réinventer la roue, mais parfois ça ne rentre pas dans les cases.
La personnalisation est plus fonctionnelle qu’autre chose, on ne peut pas vraiment customiser avec nos couleurs et nos choix esthétique discutables.
Pas d’innovation possible en UI, pas de JavaScript fantaisiste avec des transitions innovantes, pas de créativité.
Backup Monitoring Alerting
Je vous conseille fortement de faire un backup différentiel vers GCS ou un autre blob storage. Je n’ai pas trouvé d’outils clef en main pour faire ça :)
Si vous n’avez aucun moyen technique de le faire, vous pouvez toujours faire des sauvegardes manuelles sur un disque externe et les mettre au coffre.
En ce qui concerne le monitoring et l’alerting sur le niveau de disponibilité de l’application, aucun moyen n’est fourni dans l’application pour être informé du niveau de disponibilité.
ça implique 2 choses:
- pas de moyen de savoir si l’application est disponible ou pas en temps réel
- pas d’idée du niveau de disponibilité de l’application (mis à part les SLA Google)
Je vous invite fortement à la prudence et je vais citer une phrase qu’on attribue à Ronald Regan, qui l’aura piqué à l’Union soviétique qui l’aura piqué à Lénine et que j’ai entendu de la bouche d’un sergent-chef de l’armée de Terre.
La confiance n’exclut pas le contrôle
Je vous conseille de mettre en place au minimum un outil automatisé de availability monitoring tel que Pingdom (mais il en existe plein d’autres). L’outil vous permet de mesurer le taux de disponibilité de votre site en faisant des requêtes automatisées sur l’URL de votre choix. Il envoie aussi des alertes via Slack ou email.
Vous devriez aussi probablement surveiller les autres produits SaaS connectés à votre application si vous avez une application plus complexe.
Combien ça coûte ?
https://solutions.appsheet.com/pricing
C’est là que la fête commence. 5 dollars par tête par mois au moins cher, à partir de 10 utilisateurs.
10 dollars pour avoir le droit de créer des groupes d’utilisateurs, faire des actions planifiées, changer la donnée sur évènement bref une application professionnelle et utilisable sérieusement
ça peut sembler excessif quand on dépasse 1000 personnes, mais les plans entreprise et entreprise plus n’ont même pas de prix affiché ;) Donc aucune idée de combien on met au porte-monnaie au final quand on a des contraintes entreprises un peu sérieuses.
Au final pour une application avec un niveau de customisation et d’entreprise branding proche de zéro, à mettre en perspective avec le coût du dev et de l’hébergement d’une solution 100% custom.
Et alors si tu as dans l’idée d’utiliser une vraie base de données et de vrais outils puissants, on verra si Google te fait un prix sympa :)
- Tu veux des permissions fines pour tes utilisateurs ? planche à billets
- Tu veux une vraie base de données ? planche à billets
- Tu veux travailler à plusieurs ? planche à billets
- Tu veux une authentification auth0 ? planche à billets
Conclusion
Alors on est bien d’accord que j’ai à peine effleuré la complexité de l’outil. On peut dire que mon raisonnement est un peu simplet pour la capacité que ce genre d’outil débloque.
Ça pose des questions qui dépassent simplement l’idée de juste avoir l’indépendance de créer une application “sans code/codeurs”. On s’accroche fortement au prestataire du service et on paye pour une solution SaaS avec la promesse d’avoir une application qui répond à notre besoin. On pense s’épargner la démarche d’expliquer notre besoin aux développeurs de faire des ping-pongs de réunion et d’esquiver les problèmes de bugs et d’égo.
Mais regardez mon appli, j’ai cliqué trois trucs et ça marche, champagne et prank ça part en prod :) Je suis parti sans specs et sans même une vague idée de quoi faire, j’avais juste des données.
Est-ce que juste afficher des données sans erreurs et donner la possibilité de les modifier avec un template simple défini et sans erreur est une prouesse technique ? OUI
Est-ce que si j’ai vraiment des besoins de customisation et des tâches backend complexes à réaliser sur mes données je recommande cet outil ? Absolument pas
Je pense que la limite se pose là, cet outil dans mon use case est simplement une feuille de calcul déportée dans un enrobage applicatif. Un genre d’Excel amélioré si vous voulez … Au final, si tu as aucune spec et que tu pars à la zob, tu pars avec moins de contraintes en no code, mais c’est pas sûr que ton appli ne soit pas aussi bancale à l’arrivée.
En utilisant les templates déjà existants (avec un nombre assez conséquent d’use cases), on a une promesse d’application générique déjà fonctionnelle. C’est génial si ton besoin rentre pile-poil dedans et que tu as des besoins simples.
Par contre, que faire si tu as un truc un peu pourri et déviant, comme tout bon projet qu’on ne respecte pas ?
Et si tu as une fonctionnalité clef qui n’existe pas dans ton outil et bien tu es Tintin pour le clafoutis !
- Où sont la créativité et le plaisir de maintenir une solution claquée au sol ?
- Le son de l’alerte d’astreinte qui vient déclencher l’instinct de guerre et la routine zombie clavier ?
- Quid du plaisir incroyable de niquer ta nuit et d’être déphasé comme un retour de bar, la journée qui suit ?
- Les longues réunions de suivis de bugs, avec un backlog de la taille du kilimanjaro ?
On est dans la maltraitance de cerveaux et on sacrifie la créativité et l’innovation pour la productivité et l’efficacité. Une armée de singes cliqueurs peut-elle venir à bout de quelques singes copistes stackoverflow artisans ?
Est ce que cliquer c’est coder ?
Est ce que combattre une interface est aussi pénible que combattre un développeur ?
Est ce que forcer sa spec dans un outil est aussi joussif que forcer un dev à faire rentrer ta spec dans son dev ?
Mais bon, si Monique de la compta peut travailler sans interruption et sans bugs bloquants, Si les gars de l’entrepôt n’ont plus l’excuse de l’outil pourri pour faire des pauses, on se dirige petit à petit dans un monde efficace et froid, ou l’algorithme dirigera nos vies.
C’est ça que vous voulez ? des Applis qui fonctionnent ? ça me dégoute :)
Mais ne vous inquiétez pas, pour toutes les autres applications, et pour maintenir l’application qui fait des applications, il faudra toujours du monde. Il faudra toujours faire un pas dans l’openspace infernal des devs ou plus personne ne va plus. Répondre poliment aux vannes techniques des devs, que personne ne comprend.
Et si on décide finalement de sortir les plus pouilleux et les plus gênants, peut être qu’on pourra recycler les autres pour vous dire où est ce qu’il faut cliquer ?
On se dit rendez-vous dans 10/20 ans dans le métro.
à votre bon cœur messieurs dames, un NFT, une brewdog, une réunion, contre un script Bash, promis je râle pas trop :)
Mais non, le futur n’a pas besoin d’être aussi dystopique, y’a de la place pour les deux mondes.
On peut parfaitement faire des applis très génériques en no code pour les besoins récurrents et identifiés comme non variant, et faire des putains d’œuvres d’art et de l’innovation incroyable avec du code :)
Encore une fois j’enfonce des portes dégondées, mais les deux mondes peuvent cohabiter, et pour ceux qui ont peur de perdre leur travail, je les encourage à se réinventer. Le monde d’aujourd’hui et de demain est de plus en plus changeant et votre capacité d’adaptation fera la différence dans le monde de demain.
Aujourd’hui dev (met ici, ta ou tes technos préférés), demain peut être fermier dans le métavers, meh
Bon, ce n’est pas tout ça, mais je vais tenter un petit algorithme de machine learning pour écrire mes articles, j’en ai marre de faire tout ça à la main :)