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

    View full-size slide

  2. 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
    */

    View full-size slide

  3. Stéphane Py
    Freelance
    @steph_py
    Alias Luc
    Quentin Schuler
    Tocard à temps plein
    @neosyne
    Alias Luc

    View full-size slide

  4. Vie du projet
    01
    Avant, pendant, et après. Parfois même, bien longtemps après.

    View full-size slide

  5. DÉMARRER LE PROJET EN RETARD
    Rien ne vaut de courir, il faut partir en retard.

    View full-size slide

  6. 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

    View full-size slide

  7. AMBIGUOUS LANGUAGE
    Parler le même langage que son client risque de créer des situations
    gênantes de compréhension totale.

    View full-size slide

  8. 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

    View full-size slide

  9. 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

    View full-size slide

  10. UNDER-ANTICIPATION
    Si le client l’a évoqué, c’est probablement facultatif.

    View full-size slide

  11. 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

    View full-size slide

  12. LUC
    “Aucune idée ! Mais il ne
    souhaite ni solution d’i18n ni
    documentation.”
    LUC
    “De quoi à besoin le client ?”
    BRIEF INTERNE

    View full-size slide

  13. OVER-ANTICIPATION
    Si le client ne l’a pas demandé,
    c’est parce qu’il ne sait pas encore qu’il en a besoin.

    View full-size slide

  14. 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

    View full-size slide

  15. VOUS VENEZ DE
    TOUCHER l’ÉCHEC DU DOIGT

    View full-size slide

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

    View full-size slide

  17. 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 !

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  21. Order
    CAS SIMPLE
    User
    Payment
    Products
    Brand

    View full-size slide

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

    View full-size slide

  23. ARCHITECTURE DISTRIBUÉE
    Front dev
    1 2
    3

    View full-size slide

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

    View full-size slide

  25. 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

    View full-size slide

  26. HAUTE PROBABILITÉ
    DE RÉUSSITE

    View full-size slide

  27. 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

    View full-size slide

  28. 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é.

    View full-size slide

  29. 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.

    View full-size slide

  30. 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

    View full-size slide

  31. 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.

    View full-size slide

  32. FONDATIONS ECHOUEES

    View full-size slide

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

    View full-size slide

  34. JAVASCRIPT CLIENT-SIDE
    Mettez-en le plus possible !

    View full-size slide

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

    View full-size slide

  36. TESTING
    Tester c’est douter

    View full-size slide

  37. 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
    !

    View full-size slide

  38. 101% CODE COVERED
    Parce que vous le valez bien.

    View full-size slide

  39. MUTATION TESTING
    5 System Under Test

    View full-size slide

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

    View full-size slide

  41. MUTATION TESTING
    5
    104
    87
    System Under Test
    Mutations générées
    Mutants éliminés

    View full-size slide

  42. MÉTRIQUE
    DANGEREUSEMENT UTILE

    View full-size slide

  43. VOLUMÉTRIE
    Chargez tout en mémoire.
    Luc ajoutera une barette de RAM si besoin.

    View full-size slide

  44. PAGINATION
    Page 1

    View full-size slide

  45. Imports/Exports

    View full-size slide

  46. JAVASCRIPT SERVER-SIDE
    Et pourquoi pas ?

    View full-size slide

  47. EDITOR
    Windows Bloc-notes / macOS X TextEdit.
    C’est gratuit et stable !
    Ou Emacs pour déconner...

    View full-size slide

  48. 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.

    View full-size slide

  49. PREFER-UNSTABLE
    $ composer require russian/roulette:dev-master

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  52. GITFLOW
    Ou une adaptation ...

    View full-size slide

  53. 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.

    View full-size slide

  54. VOUS ÊTES
    EN SITUATION D’ÉCHEC

    View full-size slide

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

    View full-size slide

  56. PRODUCTION
    Un environnement pour les gouverner tous !
    Staging, PreProd & co sont clairement des buzzwords inutiles.

    View full-size slide

  57. ROLLBACK ROLLBACK
    Qu’est-ce qui peut bien se passer de terrible pour qu’on en ai besoin ?

    View full-size slide

  58. NO-LOG, NO-CRY
    Je ne logue jamais rien.
    Je suis dans un escape game quand ça plante.
    Et en plus c’est gratuit.

    View full-size slide

  59. Avec des handlers bien pensés de
    monolog, une personne pourrait être
    informé par slack / mail / sms / … et
    pourrait endiguer l’échec.
    A éviter.

    View full-size slide

  60. MONITORING
    Rien ne vaut la surprise d’un disque plein

    View full-size slide

  61. Utilisez un outil ...
    Grafana / Datadog / Kibana / ….

    View full-size slide

  62. Ne le configurez pas !
    Comme ça il y aura des problèmes, mais personne
    ne les verra.

    View full-size slide

  63. SCALE 100
    Parce qu'on est pas certain que ça ne va pas tomber

    View full-size slide

  64. 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

    View full-size slide

  65. BACKUPS
    La semaine prochaine©

    View full-size slide

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

    View full-size slide

  67. Database
    05
    TRUNCATE success

    View full-size slide

  68. MySQL
    Meilleure base de donnée open-source
    of the entire universe and beyond.
    https://www.youtube.com/watch?v=emgJtr9tIME

    View full-size slide

  69. MaybeSQL
    Le NoSQL c’est complètement has-been.
    Voici venu l’ère du MaybeSQL.

    View full-size slide

  70. PAGINATION
    Page 2

    View full-size slide

  71. TROP DE MAÎTRISE
    TUE l’ÉCHEC

    View full-size slide

  72. N+(0.01-1 - 10 ✕ 10 + 1)
    for each items in collection of each collection items of each each.
    Je clair Luc, ne pas ?

    View full-size slide

  73. MongoDB
    Très haute probabilité d’échec !

    View full-size slide

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

    View full-size slide

  75. CONCLUSIONS
    06

    View full-size slide

  76. 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

    View full-size slide