Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

GOALS

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

VOUS VENEZ DE TOUCHER l’ÉCHEC DU DOIGT

Slide 17

Slide 17 text

Architecture 02 Les fondations de l’échec.

Slide 18

Slide 18 text

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 !

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Order CAS SIMPLE User Payment Products Brand

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

ARCHITECTURE DISTRIBUÉE Front dev 1 2 3 ∞

Slide 25

Slide 25 text

SELF DDOS

Slide 26

Slide 26 text

CONCEPTION Un MCD et c’est plié.

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

HAUTE PROBABILITÉ DE RÉUSSITE

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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.

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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.

Slide 34

Slide 34 text

FONDATIONS ECHOUEES

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

JAVASCRIPT CLIENT-SIDE Mettez-en le plus possible !

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

TESTING Tester c’est douter

Slide 41

Slide 41 text

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 !

Slide 42

Slide 42 text

101% CODE COVERED Parce que vous le valez bien.

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

MUTATION TESTING 5 System Under Test

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

MÉTRIQUE DANGEREUSEMENT UTILE

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

PAGINATION Page 1

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

Imports/Exports

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

JAVASCRIPT SERVER-SIDE Et pourquoi pas ?

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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.

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

GIT May the --force be with you.

Slide 69

Slide 69 text

GITFLOW Ou une adaptation ...

Slide 70

Slide 70 text

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.

Slide 71

Slide 71 text

VOUS ÊTES EN SITUATION D’ÉCHEC

Slide 72

Slide 72 text

Infrastructure 04 Luc, ajoute une barrette de RAM.

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

No content

Slide 77

Slide 77 text

No content

Slide 78

Slide 78 text

No content

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

MONITORING Rien ne vaut la surprise d’un disque plein

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

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

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

BACKUPS La semaine prochaine©

Slide 87

Slide 87 text

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

Slide 88

Slide 88 text

Database 05 TRUNCATE success

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

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

Slide 91

Slide 91 text

No content

Slide 92

Slide 92 text

No content

Slide 93

Slide 93 text

No content

Slide 94

Slide 94 text

No content

Slide 95

Slide 95 text

No content

Slide 96

Slide 96 text

No content

Slide 97

Slide 97 text

PAGINATION Page 2

Slide 98

Slide 98 text

No content

Slide 99

Slide 99 text

No content

Slide 100

Slide 100 text

No content

Slide 101

Slide 101 text

No content

Slide 102

Slide 102 text

TROP DE MAÎTRISE TUE l’ÉCHEC

Slide 103

Slide 103 text

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

Slide 104

Slide 104 text

No content

Slide 105

Slide 105 text

No content

Slide 106

Slide 106 text

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

Slide 107

Slide 107 text

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

Slide 108

Slide 108 text

CONCLUSIONS 06

Slide 109

Slide 109 text

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