Upgrade to Pro — share decks privately, control downloads, hide ads and more …

La stratégie de l'échec

La stratégie de l'échec

par Quentin Schuler & Stéphane PY

Stéphane PY

January 16, 2020
Tweet

More Decks by Stéphane PY

Other Decks in Programming

Transcript

  1. Harvard Business School of Echec LA STRATÉGIE DE L’ÉCHEC

  2. GOALS

  3. SOMMAIRE VIE DU PROJET /** * L’architecture */ 01 03

    02 04 05 06 LE CODE INFRASTRUCTURE DATABASE CONCLUSIONS ARCHITECTURE /** * La vie du projet */ /** * Le code */ /** * L’infrastructure */ /** * La database */ /** * Les conclusions */
  4. Stéphane Py Freelance @steph_py Alias Luc Quentin Schuler Tocard à

    temps plein @neosyne Alias Luc
  5. Vie du projet 01 Avant, pendant, et après. Parfois même,

    bien longtemps après.
  6. DÉMARRER LE PROJET EN RETARD Rien ne vaut de courir,

    il faut partir en retard.
  7. PLANNING IDÉAL JAN 14 Conception et estimation de la charge

    FEB 02 APR 16 MAR 10 MAY 30 Rassurer le client sur l’avancement des développements Démarrage des développements Date de Livraison initialement prévue Signature du projet avec le client
  8. AMBIGUOUS LANGUAGE Parler le même langage que son client risque

    de créer des situations gênantes de compréhension totale.
  9. LE CLIENT “Le caissier cherche les sièges disponibles côte à

    côte et les réserve pour le couple de clients.” LUC MEETING CLIENT
  10. LE CLIENT “Le caissier cherche les sièges disponibles côte à

    côte et les réserve pour le couple de clients.” LUC “On va créer une AbstractFactory qui buildera une Reservation sur une Range donnée pour l’affecter à l’AppUser avant persistance.” MEETING CLIENT
  11. UNDER-ANTICIPATION Si le client l’a évoqué, c’est probablement facultatif.

  12. LE CLIENT “Nous souhaitons tester la solution sur le marché

    français avant d’aller à l’international. A terme, l’application sera maintenu par nos équipes.” LUC “C’est noté !” MEETING CLIENT
  13. LUC “Aucune idée ! Mais il ne souhaite ni solution

    d’i18n ni documentation.” LUC “De quoi à besoin le client ?” BRIEF INTERNE
  14. OVER-ANTICIPATION Si le client ne l’a pas demandé, c’est parce

    qu’il ne sait pas encore qu’il en a besoin.
  15. LUC Une API GraphQL, en DDD / CQRS / Event

    Sourcing. Des capacités d’i18n, un serveur OAuth2 et un frontend jQuery. LUC “De quoi à besoin le client ?” BRIEF INTERNE
  16. VOUS VENEZ DE TOUCHER l’ÉCHEC DU DOIGT

  17. Architecture 02 Les fondations de l’échec.

  18. MICROSERVICES Une architecture en microservices mal maîtrisée introduit des problèmes

    de communication (async, réseau), infrastructure, distribution, performances, etc. Mais qu’est-ce que c’est fun !
  19. Modular monolith Monolithic big ball of mud Microservices Distributed big

    ball of mud Number of deployment units Modularity © Simon Brown
  20. Modular monolith Monolithic big ball of mud Microservices Distributed big

    ball of mud Number of deployment units Modularity © Simon Brown
  21. Modular monolith Monolithic big ball of mud Microservices Distributed big

    ball of mud Number of deployment units Modularity © Simon Brown
  22. Order CAS SIMPLE User Payment Products Brand

  23. LUC “Peux-tu m’afficher une liste des ventes.” LUC “Évidement !”

    CAS SIMPLE
  24. ARCHITECTURE DISTRIBUÉE Front dev 1 2 3 ∞

  25. SELF DDOS

  26. CONCEPTION Un MCD et c’est plié.

  27. EVENT STORMING User validate cart Seats were booked Send booking

    confirmation to an external system User select a movie Seats were booked for 10 minutes User select seats Send user a confirmation email
  28. HAUTE PROBABILITÉ DE RÉUSSITE

  29. MCD user id email_address plain_text_password booking seat booking_seat movie_room booking_id

    seat_id id reference id movie_room_id reference id user_id booking_date
  30. CHRONOLOGIE MCD Conception du MCD. Jeter tous les besoins métiers

    dans un schéma de base de donnée. FACTURATION Envoyer une bonne grosse facture au client. Après tout, le travail est terminé puisque le MCD est fait. DÉVELOPPEMENT Démarrer le développement (c.f. Planning Idéal) Il suffit de 5 min pour écrire les entités et le CRUD associé.
  31. DÉSINTÉGRATION CONTINUE La CI, permet d’avoir du feedback régulier sur

    les développements. De grandes sociétés ont prospéré grâce à ses méthodes. Ne le permettons plus. Ensemble, prions contre la CI.
  32. Commentez les tests Commenter les tests (oui même ceux qui

    fonctionnent… surtout ceux qui fonctionnent !) Random Success Rien de mieux qu’une CI qui échoue de temps en temps… “Relance-là“ dit Luc. CI failing Une CI qui échoue depuis des mois… ça permet de mettre à la poubelle tous les tests rapidement
  33. AMBITIOUS STACK Vous venez de rentrer un projet stratégique pour

    la survie de votre entreprise mais vous n’avez jamais fait de Kubernetes / Docker / DDD / CQRS / Event Sourcing / Microservices / GraphQL / RabbitMQ. C’est le moment d’échouer. Donnez tout ce que vous avez.
  34. FONDATIONS ECHOUEES

  35. Le code 03 Pseudo-code : while company has money do

    fail.
  36. JAVASCRIPT CLIENT-SIDE Mettez-en le plus possible !

  37. ANEMIC MODEL C’est l’occasion de rentrer dans la get/set.

  38. None
  39. None
  40. TESTING Tester c’est douter

  41. Régressions Maintenabilité Introduire de nouveaux bugs est un fondement de

    l’échec. Il ne faut pas laisser la chance à vos successeurs de rattraper le coup. Il se devront d’être dignes de vous ! Stress Rien ne vaut le stress d’un déploiement un vendredi soir d’une nouvelle fonctionnalité développée par un nouveau dev junior sur une app sans tests Abandon Le manque de test peut mener à l’abandon du projet ou à la naissance d’une nouvelle architecture. Soyez très vigilant, l’échec doit vous survivre !
  42. 101% CODE COVERED Parce que vous le valez bien.

  43. None
  44. None
  45. None
  46. None
  47. MUTATION TESTING 5 System Under Test

  48. MUTATION TESTING 5 104 System Under Test Mutations générées

  49. MUTATION TESTING 5 104 87 System Under Test Mutations générées

    Mutants éliminés
  50. MÉTRIQUE DANGEREUSEMENT UTILE

  51. VOLUMÉTRIE Chargez tout en mémoire. Luc ajoutera une barette de

    RAM si besoin.
  52. None
  53. None
  54. None
  55. PAGINATION Page 1

  56. None
  57. None
  58. None
  59. Imports/Exports

  60. None
  61. None
  62. JAVASCRIPT SERVER-SIDE Et pourquoi pas ?

  63. EDITOR Windows Bloc-notes / macOS X TextEdit. C’est gratuit et

    stable ! Ou Emacs pour déconner...
  64. CODING STANDARDS Nous sommes tous différents, cultivons cette différence !

    Mélangez tabulations et espaces. CamelCase, snake_case, et sHiT_cAse. T’as baisé mon code, j’ai baisé mon code. On est quitte.
  65. None
  66. PREFER-UNSTABLE $ composer require russian/roulette:dev-master

  67. PREFER-STALE $ composer require symfony/symfony:2.3.*

  68. GIT May the --force be with you.

  69. GITFLOW Ou une adaptation ...

  70. Une branche Pas de fork Cela permettra de multiplier les

    conflits par le nombre de personnes travaillant sur le projet * 42. Des messages pas clairs Je que l'homme de la situation Luc. Je que dossier bleu et vous sur une centaine de tableaux très clairs, vous semaine prochaine et sans faute ! Commitez-tous ! Mots de pases, clefs SSH, vendors, logs… Ainsi que les node_modules si vous en avez rien à foutre de la planète.
  71. VOUS ÊTES EN SITUATION D’ÉCHEC

  72. Infrastructure 04 Luc, ajoute une barrette de RAM.

  73. PRODUCTION Un environnement pour les gouverner tous ! Staging, PreProd

    & co sont clairement des buzzwords inutiles.
  74. ROLLBACK ROLLBACK Qu’est-ce qui peut bien se passer de terrible

    pour qu’on en ai besoin ?
  75. NO-LOG, NO-CRY Je ne logue jamais rien. Je suis dans

    un escape game quand ça plante. Et en plus c’est gratuit.
  76. None
  77. None
  78. None
  79. None
  80. Avec des handlers bien pensés de monolog, une personne pourrait

    être informé par slack / mail / sms / … et pourrait endiguer l’échec. A éviter.
  81. MONITORING Rien ne vaut la surprise d’un disque plein

  82. Utilisez un outil ... Grafana / Datadog / Kibana /

    ….
  83. Ne le configurez pas ! Comme ça il y aura

    des problèmes, mais personne ne les verra.
  84. SCALE 100 Parce qu'on est pas certain que ça ne

    va pas tomber
  85. Archi parfaite pour mon site web quasi-statique Varnish Kong (api

    gateway) apache fpm Redis Master Slave Slave x100 SGBD Haproxy apache fpm apache fpm apache fpm
  86. BACKUPS La semaine prochaine©

  87. La procrastination est un raccourci vers l’échec, utilisez-le.

  88. Database 05 TRUNCATE success

  89. MySQL Meilleure base de donnée open-source of the entire universe

    and beyond. https://www.youtube.com/watch?v=emgJtr9tIME
  90. MaybeSQL Le NoSQL c’est complètement has-been. Voici venu l’ère du

    MaybeSQL.
  91. None
  92. None
  93. None
  94. None
  95. None
  96. None
  97. PAGINATION Page 2

  98. None
  99. None
  100. None
  101. None
  102. TROP DE MAÎTRISE TUE l’ÉCHEC

  103. N+(0.01-1 - 10 ✕ 10 + 1) for each items

    in collection of each collection items of each each. Je clair Luc, ne pas ?
  104. None
  105. None
  106. MongoDB Très haute probabilité d’échec !

  107. C’EST LA STRATÉGIE DE l’ÉCHEC

  108. CONCLUSIONS 06

  109. CREDITS: This presentation template was created by Slidesgo, including icons

    by Flaticon, and infographics & images by Freepik. Please keep this slide for attribution. Posez-nous deux questions ! MERCI [email protected] +33 6 31 86 95 84 Freelance [email protected] +33 6 74 80 51 06 Neosyne - Freelance