Iron Triangle

L’« Iron Triangle » est un concept développé par Dr. Martin Barnes dans le début des années 1970, s’identifiant par un triangle dont chaque sommet représente les trois composantes cruciales d’un projet et leur interrelations, que sont (ces trois points peuvent être différents selon les sources, parfois :

  • Les ressources : les coûts à immobiliser pour ce faire
  • Le temps : la priorisation et le temps imparti pour le projet
  • Le périmètre défini du projet : les fonctionnalités prévues

Pourquoi « Iron Triangle »?

Parce que l’on ne peut changer une des contraintes sans impacter les deux autres composantes

Dans l’Iron Triangle traditionnel, seulement les fonctionnalités définies au préalable vont rester fixes. Les ressources et le temps vont être estimés au mieux, mais seront les variables à considérer pour mener à bien un projet avec tout ce qui a été demandé. En d’autres termes, c’est une approche « Cycle en V » ou encore « Waterfall » du product development.

Et dans le monde agile ?

Contrairement aux projets cycle en V, dans un projet AGILE les composantes de temps et de ressources sont fixées à l’avance. C’est dans ce cas où les fonctionnalités ne seront pas forcément définies à l’avance, bien au contraire. Un socle de base est souvent convenu pour test de fonctionnalités (ce que l’on appelle le MVP pour Minimum Viable Product).

Cette approche permet de répondre, notamment dans le domaine du développement, aux délais de mise sur le marché en développant les fonctions essentielles du produit mais en sacrifiant certaines fonctionnalités jugées non indispensables. Etant très flexible, le but est de récupérer un maximum de retours des utilisateurs sur la valeur (à le service/fonctionnalité mises en avant) délivrée. Ceci permettra une adaptation du produit en retirant, ajoutant définitivement ou créant des fonctionnalités compte tenu des retours utilisateurs récupérés.

Image 1

Mais comment définit-on la valeur afin de mener à bien un projet AGILE ?

Comme dit plus haut, ce sont les retours des utilisateurs qui vont pouvoir beaucoup aider à cerner les fonctionnalités attendues afin de prioriser les futures améliorations. Néanmoins, la valeur ne se limite pas à ça.

Le Modèle de Kano développé par Noriaki Kano 1984, permet de prendre en compte les attentes explicites ainsi que de faire émerger certains besoins latents ou implicites des potentiels clients.

Image 2

Ci-dessus le modèle de Kano schématisé sur le point de vue de la perception client

Cet outil est souvent piloté par un questionnaire en deux parties distinctes :

  • La première pour traiter les perceptions du client devant des caractéristiques produit.
  • La seconde partie pour traiter les perceptions client en l’absence de ces mêmes caractéristiques. (I.e. les questionnaires de satisfaction que l’on reçoit régulièrement par email sont un exemple de ce style de questionnaire, souvent orientés pour déceler de potentiels besoins pour adresser de nouvelles fonctionnalités, services, etc.)

Après la réalisation de cette étape cruciale, et une fois les besoins bien identifiés, ceux-ci doivent être priorisés. Cette étape est extrêmement importante pour pouvoir être réactif au vu des attentes client.

Une méthode est très utilisée, notamment dans le domaine du développement : la méthode MoSCoW. En d’autres termes :

  • Must have : Les besoins vitaux pour l’utilité produit
  • Should have : Les besoins qui seraient nécessaires
  • Could have : les besoins qui seront plus perçus comme du confort
  • Won’t have : des besoins que l’on peut qualifier un peu de “luxe” et qui n’ont qu’un impact faible

Une fois ces deux étapes effectuées, cela permet d’avoir une vision beaucoup plus claire des besoins des clients. Cela aura aussi permis de mettre en avant tous les points clés d’un produit en posant des questions aux clients, et par conséquent d’aligner les parties prenantes du projet pour mener à bien celui-ci.

Pour conclure, ceci n’est qu’un aperçu du sujet mais il existe d’autres étapes intéressantes pour maximiser le ciblage de ces besoins. Néanmoins le framework qu’offre la méthode AGILE est beaucoup plus dynamique et orienté sur le besoin client du moment. Les remises en question et adaptations sont donc fréquentes. La valeur à fournir n’est pas quelque chose qui est défini au prime abord, mais évolue durant tout le cycle du produit.

 

François N.

Sources :
Source 1  Source 2  Source 3

Comment motiver au XXIe siècle ?

En matière de motivation des employés, on peut facilement rapprocher la méthode traditionnelle à la fameuse expression « La carotte ou le bâton ». L’entreprise promet de récompenser les salariés les plus performants et parallèlement, de punir les moins bons.

Selon Dan Pink dans La vérité sur ce qui nous motive (Riverhead Books, 2009) ; plusieurs expériences démontrent que ce système de motivation pouvait faire ses preuves pour des tâches simples et répétitives, mais qu’il devenait inefficient voire contre-productif pour des activités plus créatives et scientifiques Dans les années 2000, aux Etats-Unis, les activités considérées comme créatives (réflexion, conception, etc) représentaient 70% du travail à réaliser tandis que les tâches mécaniques et le suivi de processus ne représentaient que 30% du travail.

Aujourd’hui, tenir compte de la différence des natures du travail est essentielle, surtout quand on est manager. Ainsi, pour présenter un travail de type mécanique et considéré comme peu valorisant, il est conseillé d’adopter les démarches suivantes :

  • Expliquer le contexte, donner le cadre et montrer à quel point il est importance de le faire
  • Reconnaître que la tâche n’est pas toujours amusante mais qu’elle justifiera d’un récompense à la clé
  • Laisser les employés réaliser la tâche de façon autonome (chacun à sa façon)

À l’inverse, quand il s’agit de tâches plus créatives, les effets de la méthode traditionnelle peuvent s’avérer être l’opposé du résultat souhaité sur l’individu ou l’équipe. Les effets les plus couramment observés sont les suivants :

  • Augmentation de la concentration
  • Accoutumance au système de la carotte : efforts = récompense obligatoire
  • Diminution de la motivation intrinsèque
  • Vision à court terme privilégiée
  • Réduction de la performance et de la créativité
  • Incitation à tricher, simplifier et développer un comportement immoral

Les expériences et études menées par les économistes, psychologues et sociologues du monde entier (Titmuss, Gluksberg, Twain …) au sujet de la motivation montrent depuis plusieurs années que lorsque l’on demande une tâche créative à son équipe, les éléments clés de la réussite sont :

  • L’autonomie : faire comme on veut et où on veut
  • La maîtrise : ni trop facile, ni trop difficile
  • La finalité : ce qu’on fait a un sens dans la vie, en adéquation avec nos valeurs

Ci-après un récapitulatif permettant d’appréhender ces 3 piliers de la motivation :

Conditions de l’autonomie Lois de la maîtrise Domaines de manifestation de la finalité
  1. Décider de ce qu’on fait.
  2. Quand on le fait.
  3. Comment on le fait.
  4. Avec qui on le fait.
  1. C’est un état d’esprit (selon Carol Dweck) composé du :
    –  Fixed Mindset : nos croyances déterminent notre manière d’interpréter nos expériences.
    –  Growth Mindset : Envisager nos possibilités non pas comme étant finies mais améliorables à l’infini.
  2. C’est une souffrance, qui suppose des difficultés et une pratique délibérée en vue de s’améliorer.
  3. C’est une asymptote (on ne l’atteint jamais à 100%).
  1. Les objectifs : où le profit est un moyen.
  2. Le discours : mettre l’accent sur autre chose que l’intérêt personnel.
  3. La politique : permettant aux salariés de trouver eux-mêmes un sens à ce qu’ils font.

3

Quelques outils pour faire progresser son équipe vers le nouveau système : motivation 3.0

Accorder pendant 6 mois 10% de temps libre aux collaborateurs pour se consacrer à développer des idées/projets de leur choix, en dehors de leur travail.
Variante : tous les 3 mois  accorder 24h d’autonomie avec une production obligatoire à rendre le lendemain en s’inspirant du défi « FedEx days ».

Encourager des récompenses spontanées entre collègues.
Exemple : tout salarié qui fait quelque chose d’exceptionnel peut se voir verser une prime de XX euros par un collègue, en temps réel. Les primes peuvent être issue d’un pot ou budget commun financé par l’entreprise.

Faire un audit anonyme d’autonomie :

Poser 4 questions notées de 0 à 10 + une question ouverte pour recueillir les idées. Faire ensuite une moyenne par question (domaine ) et une moyenne générale de l’autonomie :

Q1 : Etes-vous autonome dans vos tâches et dans la façon d’occuper vos journées de travail ?
Q2 : … dans votre emploi du temps, vos heures d’arrivée et de départ et la façon d’occuper vs heures de travail ?
Q3 :  … dans la façon dont vous assumez vis responsabilités au travail ?
Q4 : … par rapport à la composition de votre équipe au travail i.e le choix de vos collaborateurs/contributeurs ?

Céder le contrôle.
Impliquer les salariés dans la détermination des objectifs.

Adopter un vocabulaire « non contraignant ».

Au lieu de convoquer les collaborateurs, leurs permettre de venir voir les managers par eux-mêmes dans le cadre d’une permanence hebdomadaire, par exemple.

Travailler sur la finalité.
Demander aux salariés « Quelle est la finalité de votre entreprise ? », regrouper les post-it et faire un bilan par la suite pour en tirer des conclusions constructives.

Constituer une équipe équilibrée.

Assigner des tâches ni trop faciles ni trop difficiles pour éprouver la sensation de « flow » i.e. de fluidité dans le travail.
Encourager la collaboration plutôt que la compétition.
Faire évoluer les collaborateurs dans le temps.
Motiver l’équipe avec une finalité plutôt qu’une récompense (mission commune).

5

La récompense et la rémunération sous motivation 3.0

La récompense

Toute récompense extrinsèque doit être inattendue et offerte une fois le travail terminé. Il est également recommandé d’envisager des récompenses non matérielles comme des félicitations/feedbacks pour valoriser ses collaborateurs et leurs témoigner de la reconnaissance.

Quelques règles de base :

  • La récompense doit être adéquate et cohérente, en comparaison à des travaux similaires et/ou à la concurrence
  • Le travail demandé doit respecter les 3 piliers de la motivation : autonomie, maîtrise et finalité
  • L’urgence et l’importance du travail ont été expliqués.

La rémunération

La rémunération n’est pas un élément de motivation en soi. Un manque de rémunération est en revanche un facteur majeur de démotivation, par conséquent il est recommandé ce qui suit :

  • Veiller à l’équité interne et externe
  • Payer un peu plus que la moyenne pour :
  • Attirer les meilleurs talents
  • Réduire le turnover
  • Améliorer l’implication des collaborateurs
  • Échapper aux primes occasionnelles
  • Si on évalue la performance, utiliser des critères larges, orientés vers le long terme et une rémunération variable pas trop importante pour ne pas se focaliser dessus
  • Toute récompense doit aider à atteindre la maîtrise i.e. il faut récompenser/complimenter sur la méthode et non sur le résultat.

Avec tous ces éléments en tête, vous avez toutes les clés pour manager autrement, susciter et maintenir durablement la motivation de votre équipe.

Juba N.A.

La cooptation : une stratégie gagnante en cabinet de conseil et ESN !

« Les amis de mes amis sont mes amis »

Cet adage vaut en mathématiques, en amitié, mais également et plus que tout en Société de Conseil !

Chez EXteam, nous avons l’objectif d’avoir 50% de nos recrutements par le biais de la cooptation.

Qui de mieux qualifié que nos collaborateurs experts pour détecter l’expertise et le Mindset ?
Le lien de confiance établi nous permet de nous reposer sur eux pour valider le potentiel des futurs collaborateurs !

Nous favorisons donc toute l’année la cooptation en récompensant les embauches initiées par nos collaborateurs par une jolie prime qui va de 1500€ à 3000€ (selon les initiatives, la qualité des propositions et les concours en place).

Les concours ponctuels sont encore plus attractifs pour rebooster les propositions de CV !
Justement, pour cette nouvelle saison estivale qui démarre, nous venons de lancer le Grand Concours de l’été : EXTEAM COOPT’AIRLINE : Cooptez, voyagez !

Cooptation

Le suivi des candidatures et de leurs statuts se fait sur notre Réseau social Interne pour toujours plus de transparence !

Si vous êtes à la recherche d’une super société de conseil, avec une vraie identité, et que vous souhaitez vous aussi pouvoir monter à bord de l’EXTEAM COOPT’AIRLINE, n’hésitez pas à nous envoyer vos CV à recrutement@exteam.fr

Journée boueuse sous le soleil de Beynes !

Une équipe de braves collaborateurs a bravé la boue, la chaleur et les kilomètres pour porter haut les couleurs d’EXTEAM !
Découvrez la vidéo de cette belle journée pleine de cohésion et d’entraide !

MEET-UP EXTEAM : X ROAD, la carte à tout faire

En Estonie, on crée sa société en 18 minutes, on déclare ses charges sociales en 10minutes.
94% des particuliers payent leurs impôts en ligne et les suffrages s’expriment de plus en plus par un vote internet.
Les démarches quotidiennes sont simplifiées et rendues plus rapide grâce au digital. Le système repose sur une petite carte à puce, intégrée dans la carte d’identité de chaque citoyen. 800 années de travail ont ainsi été économisées depuis la création du système X-ROAD.
EXteam vous propose un voyage dans la première société digitale au monde !

EXTEAM a fêté ses 5 ans d’existence !

Retour en images sur notre séminaire spécial 5 ANS EXTEAM !
Team Building, repas gastronomiques, détente, jeux, soirée dansante, et ambiance de folie pour fêter comme il se doit 5 belles années d’existence dans ce lieu hors du commun !
Quelle belle équipe !
Merci à toutes les personnes qui ont contribué à nous faire grandir, qui font de nous ce que nous sommes aujourd’hui, et ce que nous serons demain !

Le Big Data en 2018

Ce n’est plus un secret, le nombre de données à stocker ne cesse d’augmenter. Qu’est ce que le BIG DATA ? Quels sont les fournisseurs, les technologies et les méthodologies qui permettent de gérer ces exaoctets d’informations ? Qu’est ce qu’un DATA LAKE ? Quelles sont les limites de confidentialité et d’étiques liées au traitement des données ?

Réponses en images grâce au MEET UP « Le Big Data en 2018″ animé chez EXteam par notre collaborateur Juba Nait Abdesselam.

Les slides :

La vidéo du MEET UP :

EXteam recrute un EXPERT TECHNIQUE JAVA/DEVOPS (H/F)

Mission :

– La réalisation d’audits d’applications JEE, préventifs ou curatifs, principalement orientés disponibilité, performances et sécurité.
– La prise en charge des missions de conseil et expertise JEE à destination des équipes en charge de la réalisation des applications ainsi que les équipes en charge des infrastructures d’hébergement de celles-ci.
– La participation et/ou le pilotage des task forces en tant qu’expert Java/JEE.
– Expertise et accompagnement dans la mise en place des toolchains Dev’Ops

Environnement technique :

Expérience de plusieurs années en développement Java/JEE
Très bonne connaissance de frameworks java du marché (servlet, web services, spring, Angular, hibernate .)
Bonnes compétences: IBM Websphere Application Server ou autre solution de serveur d’application JEE
Une maitrise de la sécurité WEB
Une connaissance des outils d’introspection (Introscope, dynaTrace) est un plus.
Expérience en tant qu’utilisateur ou concepteur de toolchain de développement et des outils du marché (Git, Jenkins, et/ou autres)
Expérience de la méthodologie scrum agile

LES FONCTIONS

Contribution de SAVANE VAMARA / Ingénieur Java Big Data EXteam chez EDF.

Les fonctions sont les pièces maîtresses dans les langages de programmation fonctionnelles.

fonctionNous allons explorer certaines propriétés des fonctions et voir comment nous pouvons les utiliser dans un langage de programmation fonctionnel.

Définition de la fonction

Une fonction est une boîte noire qui, lorsqu’on lui donne une entrée nous donne toujours la même sortie.

Une fonction n’a aucun effet secondaire, et s’il y en a , il pourrait s’agir d’une procédure mais pas une fonction.

La fonction est un terme qui vient des mathématiques et il n’y a pas de concept d’effet secondaire là-dedans.

Les valeurs en entrée à une fonction sont appelées « domaine d’une fonction ».

La sortie d’une fonction s’appelle codomain et l’ensemble des sorties sont appelées l’ image de la fonction.

Nous pouvons décomposer comme ceci:

f: A -> B

A est le domaine et B est le codomaine.

Comme nous l’avons dit A est le domaine B est le codomaine et [2, 4, 6] est l’image de la fonction.

Arité

L’arité est le nombre d’arguments qu’une fonction peut prendre.

Nous disons que l’arité de f(x: Int) est 1. C’est une fonction unaire ou c’est une fonction avec un argument.

AritéPar conséquent l’arité d’une fonction peut être exprimée avec un nombre ou de terme.

Unaire, binaire, ternaire, etc …

Ce sont des mots qui viennent du latin mais on utilise généralement le grec au lieu du latin.

On peut dire aussi que l’arité d’une fonction est monadique , dyadique ou triadique.

Composition de la fonction

La composition de la fonction est l’une des bases de la programmation fonctionnelle.

Composition de la fonction

L’idée est que si vous avez une fonction f = A->B et une fonction g = B->C vous pouvez créer une 3ème fonction h = A->C qui utilise en interne f et g pour créer ce C qui est: h = g(f(x)).

Si nous l’exprimons en termes mathématiques, nous pouvons dire que h = f∘g “h est égal à f après g” ou ce qui est le même:

Un exemple de composition de fonction est : h = Cgf

def intToString(i: Int) : String = i.toString

def stringToDouble(s: String) : Double = s.toDouble

val composedFunction = stringToDouble _ compose intToString

Nous avons déclaré deux fonctions intToString et stringToDouble, lorsque nous les composons, nous créons une troisième fonction qui accepte un int et renvoie un double.

Donc si nous l’appelons:

composedFunction(“32”) il retourne 32.0 qui est le résultat après la conversion de cette chaîne en int et du int en un double.

Notez que lors de la composition des fonctions est appliquée de droite à gauche cette fois: intToString et puis stringToDouble.

intToString - stringToDouble

Nous pouvons faire la même chose sans modifier l’ordre des fonctions avec la fonction andThen ce sera comme ceci:

val composedFunction2 = intToString _ andThen stringToDouble

C’est pareil et à mon avis moins déroutant…

Cette dernière expression pourrait être énoncée sans les opérateurs infixes comme suit:

val composedFunction2 = (intToString(_)).andThen(stringToDouble)

Fonctions d’ordre supérieur

L’idée derrière les fonctions d’ordre supérieur est que les fonctions sont des valeurs donc les fonctions peuvent être transmises comme les entiers, les chaînes, etc …

Fonctions

Les fonctions qui acceptent d’autres fonctions comme arguments ou fonctions de retour sont appelées des fonctions d’ordre supérieur.

Un exemple d’une fonction d’ordre supérieur vraiment commune est map, sa définition dans la classe List de Scala est:

def map[B](f: A => B): List[B]

La signification de map est d’appliquer une transformation à chaque élément de la liste et de renvoyer une nouvelle liste avec tous les nouveaux éléments transformés.

Si un langage supporte des fonctions d’ordre supérieur, nous disons que les fonctions dans cette langue sont traitées comme des first class citizen, c’est-à-dire que les fonctions sont des fonctions de première classe.

First Class

Donc quand nous nous référons à un langage de programmation, nous disons que la langue supporte les first class citizen mais si nous nous référons à une fonction nous disons que la fonction est une fonction de première classe.

L’un des usages pratiques des fonctions d’ordre supérieur est de créer des fonctions en ligne que nous appelons des fonctions anonymes ou des littéraux de fonction.

Un exemple utilisant la carte précédemment définie pourrait être ceci:

List(1).map(i => i + 1)

Comme vous pouvez le voir, la fonction i => i + 1 est passée en argument de la mapfonction.

Application partielle

Application partielle signifie que pour une fonction qui accepte un certain nombre d’arguments N nous pouvons fixer ou lier certains de ses arguments qu’il faut pour réduire l’arité de la fonction.

Considérez ces deux fonctions:

def sum(a: Int, b: Int) = a + b

def sumOfOneWith(a: Int) = sum(1, a)

Notez que sumOfOne la somme des fonctions est partiellement appliquée en réduisant son arité à 1.

C’est très utile et si vous jetez un coup d’œil sur Internet vous verrez des personnes utiliser cette technique en remplacement de l’injection de dépendance.

Currying

Currying ou la curification est une technique qui nous permet de décomposer une fonction avec arité N (où N est > 1) dans une chaîne d’appels à des fonctions plus petites avec une arité 1.

Voyons un exemple:

def sumCurried = (a: Int) => (b: Int) => a + b

sumCurried(1)(1) == 2

Maintenant sumCurried est une fonction qui renvoie une autre fonction et cette dernière calcule le résultat.

En faisant cela nous avons réduit l’arité de la somme à 1 en l’exprimant comme une fonction plus petite.

Scala peut automatiquement activer une fonction en utilisant la curriedfonction, un exemple de la version précédente de sum:

sum _ curried

Ceci est un exemple d’implémentation de curry ou la curification:

def curry[A, B, C](f: (A, B) => C): A => (B => C) = a => b => f(a, b)

Ce qu’il fait c’est de recevoir une fonction avec arité 2 , de retourner une fonction avec une arité 1 , qui retourne une autre fonction avec une arité 1 et finalement cette fonction appelle la fonction donnée avec les paramètres requis.

Prenez le temps de digérer cela et si vous en avez l’occasion, amusez-vous un peu jusqu’à ce que vous compreniez le concept.

C’est une technique puissante mais il faut du temps pour bien la comprendre.

Nous pouvons aussi bien curifié une fonction.

C’est le même concept mais tout autour nous prenons une fonction avec moins d’arité et nous la convertissons en une autre avec une plus grande arité.

Le double de la fonction précédente est:

def uncurry[A, B, C](f: A => (B => C)): (A, B) => C = (a, b) => f(a)(b)

Cette fois il prend une fonction avec une arité 1 et renvoie une fonction avec une arité 2 qui applique finalement ces arguments à l’original.

Currying VS application partielle

Alors quelle est la différence entre curry ou curification et application partielle?

Comme nous l’avons déjà dit:

Currying ou curification:
Possibilité de décomposer une fonction avec arité N (où N est > 1) dans une chaîne d’appels à des fonctions plus petites avec arité 1

Application partielle:
Possibilité d’appliquer une fonction avec un ensemble donné d’arguments pour réduire l’arité de la fonction d’origine.

Une exigence de faire une application partielle est que la fonction est déjà curifié pour que nous puissions appliquer les arguments un par un.

Contact

N’hésitez pas à nous solliciter pour vos projets ou pour en savoir plus sur nos expertises, nos offres et nos domaines de compétences.