Comment la visite d'une usine
m'a aidé à construire de meilleures applications
@matthieuauger
Scrum
1 semaine
Product Owner
Equipe technique
Mon problème
Scrum montre les problèmes quotidiens
Mais ne les explique pas
Hier j'ai fait ...
Aujourd'hui je fais ...
J'ai rencontré ... problèmes
customer satisfaction
employee satisfaction
mutual trust between employee and management
Just in time
Jidoka
Just in time
Fin 2017 : Départ pour Toyota City
Andon !
je n'ai plus de colle
Chaine de production en marche
Chaine de production arrêtée
1) Remettre la chaine en route
Je ne vais pas livrer à temps
Chaine de production en marche
1) Remettre la chaine en route
2) Décrire ce qui s'est passé
3) Résoudre le problème avec l'équipe
Le temps entre un problème et sa description est réduite
Ne pas pouvoir livrer à temps déclenche la demande d'aide plus tôt
11h30 : ETQU, je peux voir la classe d'actif d'un fonds
12h : ETQU, je peux m'inscrire à la newsletter
Si tout se passe bien, je peux livrer à 11h30
12h : ETQLead, je fais une grosse refacto en sous-marin
Chaine de production en marche
1) Remettre la chaine en route
Conception
Développement
Code Review
Andon !
Chaine de production arrêtée
Pair-Programming
Fonctionnalité
Fonctionnalité
Je ne vais pas livrer à temps
Chaine de production en marche
1) Remettre la chaine en route
2) Comprendre ce qui s'est passé
Conception
Développement
Code Review
Pair-Programming
« Qu'est-ce qui t'a empêché de livrer à temps ? »
Fonctionnalité
« J'ai perdu 20 min à reproduire le bug en local »
« J'avais une page blanche en lançant mon application »
« J'ai créé une nouvelle route d'API, j'ai mal copié une configuration existante et j'ai mis du temps à comprendre pourquoi »
« Je ne savais pas mettre générer une migration »
Plein de petits problèmes
qu'il faut résoudre...
17h30
Ajout du shift Kaizen : 30 minutes quotidiennes pour résoudre les petits problèmes
J'avais une page blanche en lançant mon application »
J'ai perdu 40 minutes à chercher pourquoi, et j'ai livré mon ticket en retard »
Problème
Impact
Situation
Cause
-
Pourquoi ? Erreur dans le navigateur
-
Pourquoi ? Erreur au moment du build
-
Pourquoi ? La ligne de code FundsearchCompartment.propTypes ne compile pas
-
Pourquoi ? La lib n'est pas installée 'prop-types' n'est pas installée
- Pourquoi ? Je n'ai pas fait `yarn install`
-
Pourquoi ? La lib n'est pas installée 'prop-types' n'est pas installée
-
Pourquoi ? La ligne de code FundsearchCompartment.propTypes ne compile pas
-
Pourquoi ? Erreur au moment du build
# ...
function changed {
git diff --name-only $PREV_COMMIT $POST_COMMIT | grep "^$1" > /dev/null 2>&1
}
if [[ -f yarn.lock ]]; then
if changed 'yarn.lock'; then
echo -e "$REDCOLOR yarn.lock has changed. You must run yarn install$NOCOLOR"
fi
fi
Autonomation
https://github.com/lyrixx/dotfiles/blob/master/git-template/hooks/post-checkout
Page blanche en lançant l'application
librarie prop-types pas installée
git-hooks sur yarn.lock
plus de page blanche à cause de libraires non installées
30/04
Suivi des problèmes
« J'ai perdu 20 min à reproduire le bug en local »
# Allow to extract profile :
# staging.[...].com/intermediaire-selectionneur-de-fonds/fundsheet/[...]
# to the necessary format for :
# localhost:5010/#/fundsheet
var country = component_configuration.country;
var language = component_configuration.language;
var profile = component_configuration.profile;
var id = component_configuration.code;
var output = `version: full\n
fundshare_generic_id: ${id}\n
country: ${country}\n
language: ${language}\n
profile: ${profile}`;
prompt("Copy paste the following into localhost:5010/#/fundsheet", output);
« J'ai créé une nouvelle route d'API, j'ai mal copié une configuration existante et j'ai mis du temps à comprendre pourquoi »
"New route": {
"prefix": "route",
"body": [
"\"\"\"",
"Defines the blueprint for ${1:${TM_FILENAME_BASE}}",
"\"\"\"",
"from flask import Blueprint",
"from flask.ext.restful import Api",
"",
"from resources import ${2:${TM_FILENAME_BASE/([a-z])([a-z]*)(?:_+([a-z])([a-z]*))?(?:_+([a-z])([a-z]*))?(?:_+([a-z])([a-z]*))?(?:_+([a-z])([a-z]*))?/${1:/upcase}$2${3:/upcase}$4${5:/upcase}$6${7:/upcase}$8${9:/upcase}$10/}}Resource",
"",
"${3:${TM_FILENAME_BASE/(.*)/${1:/upcase}/}}_BLUEPRINT = Blueprint('${TM_FILENAME_BASE}', __name__)",
"Api(${3:${TM_FILENAME_BASE/(.*)/${1:/upcase}/}}_BLUEPRINT).add_resource(${2:${TM_FILENAME_BASE/([a-z])([a-z]*)(?:_+([a-z])([a-z]*))?(?:_+([a-z])([a-z]*))?(?:_+([a-z])([a-z]*))?(?:_+([a-z])([a-z]*))?/${1:/upcase}$2${3:/upcase}$4${5:/upcase}$6${7:/upcase}$8${9:/upcase}$10/}}Resource, '/${1:${TM_FILENAME_BASE}}', endpoint='${1:${TM_FILENAME_BASE}}')"
],
"description": "Create a new route"
},
> Snippets pour l'IDE
« Je ne savais pas mettre à jour un submodule »
Rédaction d'un standard + Formation en one to one avec l'architecte
Bilan
customer satisfaction
employee satisfaction
mutual trust between employee and management
Just in time
Jidoka
Responsibility
Safety
Progress
Control
"J'ai les compétences"
"Je suis protégé"
"Je trouve de l'intérêt dans ce que je fais"
"Je peux controller mon environnement
Merci
How visiting a factory helps me build better websites
By Matthieu Auger
How visiting a factory helps me build better websites
- 415