# Table of Contents - [Team Topologies | Knowledge-base](#team-topologies-knowledge-base) - [Home | Knowledge-base](#home-knowledge-base) - [Unknown](#unknown) - [Unknown](#unknown) - [Unknown](#unknown) - [Software craftsmanship | Knowledge-base](#software-craftsmanship-knowledge-base) - [Unknown](#unknown) - [Unknown](#unknown) - [My Activity | Knowledge-base](#my-activity-knowledge-base) - [Practices | Knowledge-base](#practices-knowledge-base) - [Xtrem Reading | Knowledge-base](#xtrem-reading-knowledge-base) - [Forward Summit 2020 | Knowledge-base](#forward-summit-2020-knowledge-base) - [Software Architecture | Knowledge-base](#software-architecture-knowledge-base) - [Serious games | Knowledge-base](#serious-games-knowledge-base) - [Test your architecture with Archunit | Knowledge-base](#test-your-architecture-with-archunit-knowledge-base) - [Egoless Crafting | Knowledge-base](#egoless-crafting-knowledge-base) - [Leadership | Knowledge-base](#leadership-knowledge-base) - [Resources | Knowledge-base](#resources-knowledge-base) - [How to debrief a game ? | Knowledge-base](#how-to-debrief-a-game-knowledge-base) - [How to create a game | Knowledge-base](#how-to-create-a-game-knowledge-base) - [My serious games | Knowledge-base](#my-serious-games-knowledge-base) - [How to make book infographics | Knowledge-base](#how-to-make-book-infographics-knowledge-base) - [F# for OO programmers | Knowledge-base](#f-for-oo-programmers-knowledge-base) - [Unknown](#unknown) - [Towards a learning organization and beyond | Knowledge-base](#towards-a-learning-organization-and-beyond-knowledge-base) - [Lego Serious Play (LSP) | Knowledge-base](#lego-serious-play-lsp-knowledge-base) - [Learn to lead and help your team(s) to be successful | Knowledge-base](#learn-to-lead-and-help-your-team-s-to-be-successful-knowledge-base) - [LSP in your job interviews | Knowledge-base](#lsp-in-your-job-interviews-knowledge-base) - [Bref. J'ai pris une tarte dans la gueule (et ça fait extrêmement de bien) | Knowledge-base](#bref-j-ai-pris-une-tarte-dans-la-gueule-et-a-fait-extr-mement-de-bien-knowledge-base) - [Libérez vos entretiens d’embauche avec la gamification | Knowledge-base](#lib-rez-vos-entretiens-d-embauche-avec-la-gamification-knowledge-base) - [NoSQL | Knowledge-base](#nosql-knowledge-base) - [Project-to-Product Principles | Knowledge-base](#project-to-product-principles-knowledge-base) - [Unknown](#unknown) - [En route vers l’apprenance avec Xtrem Reading | Knowledge-base](#en-route-vers-l-apprenance-avec-xtrem-reading-knowledge-base) - [Pair Programming | Knowledge-base](#pair-programming-knowledge-base) - [Co-designs | Knowledge-base](#co-designs-knowledge-base) - [Unknown](#unknown) - [Agile coaching | Knowledge-base](#agile-coaching-knowledge-base) - [Become a better speaker through peer feedback | Knowledge-base](#become-a-better-speaker-through-peer-feedback-knowledge-base) - [Coaching toolbox | Knowledge-base](#coaching-toolbox-knowledge-base) - [Echelle | Knowledge-base](#echelle-knowledge-base) - [Learn leadership from the Navy SEALs | Knowledge-base](#learn-leadership-from-the-navy-seals-knowledge-base) - [Domain Modeling Made Functional | Knowledge-base](#domain-modeling-made-functional-knowledge-base) - [Testing | Knowledge-base](#testing-knowledge-base) - [Learning expedition | Knowledge-base](#learning-expedition-knowledge-base) - [How to write better assertions | Knowledge-base](#how-to-write-better-assertions-knowledge-base) - [How to read code better | Knowledge-base](#how-to-read-code-better-knowledge-base) - [Workshop | Knowledge-base](#workshop-knowledge-base) - [How to improve Team Decision making ? | Knowledge-base](#how-to-improve-team-decision-making-knowledge-base) - [Unknown](#unknown) - [Learning 3.0 | Knowledge-base](#learning-3-0-knowledge-base) - [Design sessions | Knowledge-base](#design-sessions-knowledge-base) - [The secrets to re-on-board the devs in agility | Knowledge-base](#the-secrets-to-re-on-board-the-devs-in-agility-knowledge-base) - [XTREM WATCH — Découvrez la puissance de la veille collective | Knowledge-base](#xtrem-watch-d-couvrez-la-puissance-de-la-veille-collective-knowledge-base) - [Samman Technical Coaching | Knowledge-base](#samman-technical-coaching-knowledge-base) - [Cultivate Team Learning with Xtrem Reading | Knowledge-base](#cultivate-team-learning-with-xtrem-reading-knowledge-base) - [Clean Tests | Knowledge-base](#clean-tests-knowledge-base) - [Aligning Product & Software Design | Knowledge-base](#aligning-product-software-design-knowledge-base) - [How to name our Unit Tests | Knowledge-base](#how-to-name-our-unit-tests-knowledge-base) - [My Book Infographics | Knowledge-base](#my-book-infographics-knowledge-base) - [Functional Programming made easy in C# with Language-ext | Knowledge-base](#functional-programming-made-easy-in-c-with-language-ext-knowledge-base) - [Speed boat | Knowledge-base](#speed-boat-knowledge-base) - [CDC testing made simple with Pact | Knowledge-base](#cdc-testing-made-simple-with-pact-knowledge-base) - [Sad/Mad/Glad | Knowledge-base](#sad-mad-glad-knowledge-base) - [The developers — the forgotten of agility | Knowledge-base](#the-developers-the-forgotten-of-agility-knowledge-base) - [Xanpan - a team centric agile method story | Knowledge-base](#xanpan-a-team-centric-agile-method-story-knowledge-base) - [Improve the design and testing of your micro-services through CDC Tests | Knowledge-base](#improve-the-design-and-testing-of-your-micro-services-through-cdc-tests-knowledge-base) - [Retrospectives | Knowledge-base](#retrospectives-knowledge-base) - [How to run a Community of Practices (COP) | Knowledge-base](#how-to-run-a-community-of-practices-cop-knowledge-base) - [Technical debt workshop | Knowledge-base](#technical-debt-workshop-knowledge-base) - [Story cubes | Knowledge-base](#story-cubes-knowledge-base) - [Rétro dont vous êtes le héros | Knowledge-base](#r-tro-dont-vous-tes-le-h-ros-knowledge-base) - [Movie themes | Knowledge-base](#movie-themes-knowledge-base) - [Code Review | Knowledge-base](#code-review-knowledge-base) - [Improve your test quality with Mutation testing | Knowledge-base](#improve-your-test-quality-with-mutation-testing-knowledge-base) - [Star wars theme | Knowledge-base](#star-wars-theme-knowledge-base) - [Dev ethics | Knowledge-base](#dev-ethics-knowledge-base) - [Pact broker : the missing piece of your Consumer-Driven Contract approach | Knowledge-base](#pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach-knowledge-base) - [DDD re-distilled | Knowledge-base](#ddd-re-distilled-knowledge-base) - [Mission Impossible | Knowledge-base](#mission-impossible-knowledge-base) - [The Software Craftsman | Knowledge-base](#the-software-craftsman-knowledge-base) - [Write S.O.L.I.D code | Knowledge-base](#write-s-o-l-i-d-code-knowledge-base) - [Decision Making Principles and Practices | Knowledge-base](#decision-making-principles-and-practices-knowledge-base) - [Leadership is language | Knowledge-base](#leadership-is-language-knowledge-base) - [Book notes | Knowledge-base](#book-notes-knowledge-base) - [Back to the Future | Knowledge-base](#back-to-the-future-knowledge-base) - [TDD | Knowledge-base](#tdd-knowledge-base) - [Functional Programming made easy in Java & C# | Knowledge-base](#functional-programming-made-easy-in-java-c-knowledge-base) - [Agile People: A Radical Approach for HR & Managers | Knowledge-base](#agile-people-a-radical-approach-for-hr-managers-knowledge-base) - [Building evolutionary architectures | Knowledge-base](#building-evolutionary-architectures-knowledge-base) - [Mocking | Knowledge-base](#mocking-knowledge-base) - [Retour sur mon année 2020 | Knowledge-base](#retour-sur-mon-ann-e-2020-knowledge-base) - [Boite à outils de l'intelligence émotionnelle | Knowledge-base](#boite-outils-de-l-intelligence-motionnelle-knowledge-base) - [Let's refactor (FP style) | Knowledge-base](#let-s-refactor-fp-style-knowledge-base) - [Pure functions | Knowledge-base](#pure-functions-knowledge-base) --- # Team Topologies | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies.md) . Pitch[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#pitch) ----------------------------------------------------------------------------------------------------------------- Effective software teams are essential for any organization to deliver value continuously and sustainably. But how do you build the best team organization for your specific goals, culture, and needs? Team Topologies is a practical, step-by-step, adaptive model for organizational design and team interaction based on four fundamental team types and three team interaction patterns. It is a model that treats teams as the fundamental means of delivery, where team structures and communication pathways are able to evolve with technological and organizational maturity. In Team Topologies, IT consultants Matthew Skelton and Manuel Pais share secrets of successful team patterns and interactions to help readers choose and evolve the right team patterns for their organization, making sure to keep the software healthy and optimize value streams. Team Topologies is a major step forward in organizational design for software, presenting a well-defined way for teams to interact and interrelate that helps make the resulting software architecture clearer and more sustainable, turning inter-team problems into valuable signals for the self-steering organization. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MYBkqXb8hnYm6EkUArb%252F-MYBlp4ICRTMG5JhZlRj%252Fimage.png%3Falt%3Dmedia%26token%3D285ad323-6540-4f73-8693-e7ce51e39102&width=768&dpr=3&quality=100&sign=320521d3&sv=2) Infographic[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#infographic) ----------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MYsxuYCmyQc61m3WrJg%252F-MYsyIsGLlvjJKp15hBt%252FTeam%2520Topologies.png%3Falt%3Dmedia%26token%3D1e642c2e-1418-4772-958e-1604b62c3868&width=768&dpr=3&quality=100&sign=6011856&sv=2) Team Topologies infographic [Team Topologies.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MYsxuYCmyQc61m3WrJg%2F-MYsycH0XPy5EL-FZ1sI%2FTeam%20Topologies.pdf?alt=media&token=6c339ed6-d019-443e-8d71-d9bba35f439d) PDF · 1MB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MYsxuYCmyQc61m3WrJg%2F-MYsycH0XPy5EL-FZ1sI%2FTeam%20Topologies.pdf?alt=media&token=6c339ed6-d019-443e-8d71-d9bba35f439d) High Resolution Infographic Preface[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#preface) --------------------------------------------------------------------------------------------------------------------- * A functional book * Part I - explores Conway’s law * The way organizational interrelationships constrain the design of systems we build * And how we can use this tendency to our advantage * Part II - set of static team patterns * Have been proven in the industry and the implications of choosing one pattern over another * with Conway’s law and organizational context in mind * Part III - ways to evolve the organization design * To provide powerful capabilities for innovation and rapid delivery i * How to use the Team Topologies approach to create a sensing organization that responds to the market and user demands, * And accounts for the implications this has for hiring and skills ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MYBm6Kz-RO0YhF35qSZ%252F-MYBn8_-5bvug0hzGgg0%252Fimage.png%3Falt%3Dmedia%26token%3Db5686a89-9378-4eae-9e01-fb3a6a4aa2c3&width=768&dpr=3&quality=100&sign=7d734281&sv=2) Part 1 - Team As The Means of Delivery[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#part-1-team-as-the-means-of-delivery) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * The Problem with Org Charts * Must shift our thinking from treating teams as collections of interchangeable individuals that will succeed as long as they follow the “right” process and use the “right” tools * TO treating people and technology as a single human/computer carbon/silicon sociotechnical ecosystem * We need to ensure that teams are intrinsically motivated and are given a real chance of doing their best work within such a system * Team Topologies focuses on * how to set up dynamic team structures * interaction modes that can help teams adapt quickly to new conditions * Org chart is always out os sync with reality ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MYBoLyDiP9uL_ocklgt%252F-MYBoWs-gSIiv5P5oMfk%252Fimage.png%3Falt%3Dmedia%26token%3Db88897b1-c0d7-42d0-a794-2dbdcbf7aac8&width=768&dpr=3&quality=100&sign=c8c78abf&sv=2) * By empowering teams, and treating them as fundamental building blocks * Individuals inside those teams move closer together to act as a team rather than just a group of people * Explicitly agree on interaction modes with other teams * Expectations on behaviors become clearer and inter-team trust grows _**Team structures must match the required software architecture or risk producing unintended software**_ ### Cognitive Load and Bottlenecks[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#cognitive-load-and-bottlenecks) _When cognitive load isn’t considered, teams are spread thin trying to cover an excessive amount of responsibilities and domains. Such a team lacks bandwidth to pursue mastery of their trade and struggles with the costs of switching contexts.”_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MYBpl2rL3tmTrTU_blP%252F-MYBpyv9TZpXXvQi7kv1%252Fimage.png%3Falt%3Dmedia%26token%3D91a2c543-779d-4e59-9589-635dfdaca8ed&width=768&dpr=3&quality=100&sign=df3a802b&sv=2) ### Conway's law[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#conways-law) * An organization that is arranged in functional silos * Where teams specialize in a particular function, such as QA, DBA, or security * Is unlikely to ever produce software systems that are well-architected for end-to-end flow * The Reverse Conway Maneuver * Accelerate: The Science of Dev Ops * "Our research lends support to what is sometimes called the “inverse Conway maneuver,” which states that organizations should evolve their team and organizational structure to achieve the desired architecture. The goal is for your architecture to support the ability of teams to get their work done—from design through to deployment—without requiring high-bandwidth communication between teams." > “Team assignments are the first draft of the architecture." - Michael Nygard * The fundamental _**means of delivery is the team**_ * The system architecture needs to * Enable * Encourage fast flow within each team * In practice, this means that we can follow proven software-architecture good practices: * Loose coupling—components do not hold strong dependencies on other components * High cohesion—components have clearly bounded responsibilities, and their internal elements are strongly related * _Clear and appropriate version compatibility_ * Clear and appropriate cross-team testing ### **Organization Design Requires Technical Expertise**[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#organization-design-requires-technical-expertise) > “if we have managers deciding . . . which services will be built, by which teams, we implicitly have managers deciding on the system architecture.” - Ruth Malan * How much awareness does the HR department have about software systems? * Does the group of department leaders deciding how to allocate budget across teams know of the likely effects of their choices on the viability of the software architecture? Allan Kelly’s view of a software architect’s : "More than ever I believe that someone who claims to be an **Architect needs both technical and social skills**, they need to understand people and work within the social framework. They also need a remit that is broader than pure technology—they need to **have a say in organizational structures and personnel issues**, i.e. they need to be a **manager too**." * Restrict Unnecessary Communication * Not all communication and collaboration is good * _**We need focused communication between specific teams**_ * 2 rules * The organization’s design limits the number of possible solutions for a given system’s architecture * The speed of software delivery is strongly affected by how many team dependencies the organization design instills * _**Fast flow requires restricting communication between teams**_ * Team collaboration is important for gray areas of development * Where discovery and expertise is needed to make progress “_Disbanding high-performing teams is worse than vandalism: it is corporate psychopathy._" — Allan Kelly, Project Myopia ### Team first-thinking[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#team-first-thinking) * Research by Google on their own teams * Who is on the team matters less than the team dynamics * _**When it comes to measuring performance, teams matter more than individuals**_ ### Use Small, Long-Lived Teams as the Standard[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#use-small-long-lived-teams-as-the-standard) * “team” = stable grouping of five to nine people who work toward a shared goal as a unit * > _An organization should never assign work to individuals; only to teams_ * Allowing teams to grow beyond the _**magic seven-to-nine size**_ imperils the viability of the software being built by that team (Dunbar’s number) * Trust will begin to break down * Unsuitable decisions might ensue * Organizations need to maximize **trust between people on a team** * That means limiting the number of team members #### Smaller Size Fosters Trust[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#smaller-size-fosters-trust) * Anthropological research shows that the type and depth of relationship we can have with people has clear limits : * Around five people—limit of people with whom we can hold close personal relationships and working memory * Around fifteen people—limit of people with whom we can experience deep trust * Around fifty people—limit of people with whom we can have mutual trust * Around 150 people—limit of people whose capabilities we can remember ### The Team Owns the Software[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#the-team-owns-the-software) * With small, long-lived teams in place * We can begin to improve the ownership of software * Team ownership helps to provide the vital “continuity of care” * The danger of allowing multiple teams to change the same system or subsystem * No one owns the changes made or the resulting mess * There should be no shared ownership of components, libraries, or code #### Team Members Need a Team-First Mindset[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#team-members-need-a-team-first-mindset) * Put the needs of the team above their own #### Embrace Diversity in Teams[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#embrace-diversity-in-teams) * Find Novel and creative ways * Produce more creative solutions #### Reward the Whole Team not individuals[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#reward-the-whole-team-not-individuals) ### Good Boundaries Minimize Cognitive Load[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#good-boundaries-minimize-cognitive-load) * Organizations need to _**ensure**_ that the _**cognitive load on a team is not too high**_ * Restrict Team Responsibilities to Match Team Cognitive Load * **Cognitive load** * Characterized in 1988 * By psychologist John Sweller * “_**the total amount of mental effort being used in the working memory.**_” * 3 types of cognitive load * **Intrinsic** —relates to aspects of the task fundamental to the problem space * What is the structure of a Java class? * How do I create a new method? * **Extraneous** —relates to the environment in which the task is being done * How do I deploy this component again? * How do I configure this service? * **Germane** —relates to aspects of the task that need special attention for learning or high performance * How should this service interact with the ABC service? _**With a team-first approach, the team’s responsibilities are matched to the cognitive load that the team can handle**_ ### Measure the Cognitive Load Using Relative Domain Complexity[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#measure-the-cognitive-load-using-relative-domain-complexity) * Ask the team : * “Do you feel like you’re effective and able to respond in a timely fashion to the work you are asked to do?” * Trying to determine the cognitive load of software using simple measures such as lines of code, number of modules, classes, or methods is misguided * When measuring cognitive load * what we really care about = domain complexity * how complex is the problem that we’re trying to solve with software? * A domain = a more largely applicable concept than software size #### 3 heuristics[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#id-3-heuristics) 1. Assign each domain to a single team * Instead of splitting responsibilities of a single domain to multiple teams * Split the domain into subdomains * Then assign each new subdomain to a single team 2. A single team should be able to accommodate two to three “simple” domains” 3. A team responsible for a complex domain should not have any more domains assigned to them—not even a simple one #### Design “Team APIs” and Facilitate Team Interactions[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#design-team-apis-and-facilitate-team-interactions) * Team API = an API surrounding each team * It includes : * Code: runtime endpoints, libraries, clients, UI, etc. produced by the team * Versioning: how the team communicates changes to its code and services * Wiki and documentation: especially how-to guides for the software owned by the team * Practices and principles: the team’s preferred ways of working * Communication: the team’s approach to remote communication tools, such as chat tools and video conferencing * Work information: what the team is working on now, what’s coming next, and overall priorities in the short to medium term * Other: anything else that other teams need to use to interact with the team * Team API should consider usability by other teams Part 2 - Team Topologies that Work for Flow[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#part-2-team-topologies-that-work-for-flow) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MYC1a4AyF43poTxaH32%252F-MYC2N0aVXxYNcSYUIPZ%252Fimage.png%3Falt%3Dmedia%26token%3D6c3222bb-0d8f-4bdc-94a4-fafb05ccaaf3&width=768&dpr=3&quality=100&sign=3cb62bb8&sv=2) ### Stream-Aligned teams[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#stream-aligned-teams) * “stream” : the continuous flow of work aligned to a business domain or organizational capability * Requires clarity of purpose and responsibility * Team aligned to a single, valuable stream of work * Might be * A single product or service * A single set of features * A single user journey * or a single user persona * Work on the full spectrum of delivery * **Primary team type in an organization** _**Purpose of the other fundamental team topologies is to reduce the burden on the stream-aligned teams**_ #### **Capabilities**[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#capabilities) * Application security * Commercial and operational viability analysis * Design and architecture * Development and coding * Infrastructure and operability * Metrics and monitoring * Product management and ownership * Testing and quality assurance User experience (UX) > critical not to assume each capability maps to an individual role in the team * Be able, as a team, to * understand and act upon the above capabilities * Have a mix of generalists and a few specialists #### **Expected Behaviors**[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#expected-behaviors) * Aims to produce a steady flow of feature delivery * Correct based on feedback from the latest changes * Uses an experimental approach to product evolution * Expecting to constantly learn and adapt * Team has minimal (ideally zero) hand-offs of work to other teams * Must have time and space to address code quality changes (sometimes called “tech debt”) to ensure that changing the code remains safe and easy to do. * Proactively and regularly reaches out to the supporting fundamental-topologies teams (complicated subsystem, enabling, and platform) * Feel they have achieved or are in the path to achieving “autonomy, mastery, and purpose,” the three key components of engaged knowledge workers, according to Daniel Pink ### **Enabling Teams**[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#enabling-teams) * In Accelerate High-performing teams are continuously improving their capabilities in order to stay ahead * But how can a stream-aligned team with end-to-end ownership find the space for researching, reading about, learning, and practicing new skills?” * Enabling team is composed of specialists in a given technical (or product) domain * They help bridge this capability gap * Have a strongly collaborative nature * Avoid becoming “ivory towers” of knowledge * Increase the autonomy of stream-aligned teams by growing their capabilities * With a focus on their problems first * Not the solutions per se * Should not be a permanent dependency #### **Expected Behaviors**[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#expected-behaviors-1) _The mission of enabling teams is to help stream-aligned teams acquire missing capabilities, usually around a specific technical or product management area_ * Seeks to understand the needs of stream-aligned teams * Establishing regular checkpoints * Jointly agreeing when more collaboration is needed * Stays ahead of the curve in keeping abreast of new approaches, tooling, and practices in their area of expertise * Act as a proxy for external (or internal) services that are currently too difficult for stream-aligned teams to use directly * Promotes **learning** not only inside the enabling team but across stream-aligned teams * Acting as a curator that facilitates appropriate knowledge sharing inside the organization _**Enabling teams do not exist to fix problems that arise from poor practices, poor prioritization choices, or poor code quality within stream-aligned teams**_ ### Complicated-Subsystem Teams[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#complicated-subsystem-teams) * Responsible for building and maintaining * a part of the system that depends heavily on specialist knowledge * GOAL of this team : * Reduce the cognitive load of stream-aligned teams * working on systems that include or use the complicated subsystem * Examples : * Video processing codec * Mathematical model * Real-time trade reconciliation algorithm * Transaction reporting system for financial services * Face-recognition engine * Created only when a subsystem needs mostly specialized knowledge #### **Expected Behaviors**[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#expected-behaviors-2) * Mindful of the current stage of development of the subsystem / acts accordingly * High collaboration with stream-aligned teams during early exploration and development phases * Reduced interaction and focus on the subsystem interface and feature evolution and usage during later stages * Delivery speed and quality for the subsystem is clearly higher than if/when the subsystem was being developed by a stream-aligned team * Prioritizes and delivers upcoming work * Respecting the needs of the stream-aligned teams that use the complicated subsystem ### Platform Teams[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#platform-teams) * Purpose : enable stream-aligned teams to deliver work with substantial autonomy * Provides internal services to reduce the cognitive load that would be required from stream-aligned teams to develop these underlying services _A digital platform is a foundation of self-service APIs, tools, services, knowledge and support which are arranged as a compelling internal product._ * Treat the services they offer as products * reliable * usable * fit for purpose * A thick platform might consist of the combination of several inner platform teams * Providing a myriad of services * A thin platform * could simply be a layer on top of a vendor-provided solution * Examples : * From provisioning a new server instance * To providing tools for access management and security enforcement #### **Expected Behaviors**[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#expected-behaviors-3) * Uses strong collaboration with stream-aligned teams to understand their needs * Relies on fast prototyping techniques * Involves stream-aligned team members for fast feedback * Has a strong focus on * Usability and reliability for their services * Treating the platform as a product * Regularly assesses if the services are still fit for purpose and usable * Leads by example * Using the services they provide internally (when applicable) * Partnering with stream-aligned teams and enabling teams * Consuming lower level platforms (owned by other platform teams) whenever possible * Understands that adoption of internal new services, like new technologies, is not immediate, but instead evolves along an adoption curve #### A Good Platform Is “Just Big Enough”[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#a-good-platform-is-just-big-enough) * A good platform provides * standards * templates * APIs * well-proven best practices for Dev teams to use to innovate rapidly and effectively * Thinnest Viable Platform * A list on a wiki page of underlying components or services used by consuming software ### Convert Common Team Types to the Fundamental Team Topologies[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#convert-common-team-types-to-the-fundamental-team-topologies) _"Most organizations would see major gains in effectiveness by mapping each of their teams to one of the four fundamental topologies; that is, identify which of the four fundamental topologies would represent the best way of working for each team, and then change that team’s remit to adopt the purpose and behavior patterns of that topology.”_ * Infrastructure Teams to Platform Teams * Platform is managed as a product using proven software development techniques * May be quite unfamiliar to infrastructure people * Component teams to Platform or Other Team Types * DBA teams -> enabling teams * Focus on spreading awareness of DB Perf, monitoring, ... * Tooling Teams to Enabling Teams or Part of the Platform * Converting Architecture and Architects * Most effective pattern : a part-time enabling team * Emphasizes that many decisions should be taken by implementing teams rather than left to the architecture team ### Software Boundaries or “Fracture Planes[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#software-boundaries-or-fracture-planes) _A fracture plane is a natural seam in the software system that allows the system to be split easily into two or more parts_ * Look for similar fracture planes in software * To find the natural split points that lead to software boundaries * **Fracture Plane: Business Domain Bounded Context** * A bounded context : * A unit for partitioning a larger domain (or system) model into smaller parts * Each of which represents an internally consistent business domain area * Identifying bounded contexts : * Requires a fair amount of business knowledge and technical expertise * Aligns technology with business * Reduces mismatches in terminology and “lost in translation” issues, improving the flow of changes and reducing rework * **Fracture Plane: Regulatory Compliance** * **Fracture Plane: Change Cadence** * With a monolith, every piece moves at the speed of the slowest part * Splitting off the parts of the system that typically change at different speeds allows them to change more quickly * **Fracture Plane: Team Location** * Working across different time zones aggravates communication delays and introduces bottlenecks * **Fracture Plane: Risk** * Splitting off subsystems with clearly different risk profiles allows mapping the technology changes to business appetite or regulatory * **Fracture Plane: Performance Isolation** * In particular types of systems, differentiating levels of performance might be beneficial * Splitting off such a subsystem based on particular performance demands helps to ensure * it can scale autonomously * increasing performance and reducing cost * **Fracture Plane: Technology** * **Fracture Plane: User Personas** Part 3 - Evolving Team Interactions for Innovation and Rapid Delivery[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#part-3-evolving-team-interactions-for-innovation-and-rapid-delivery) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ### Team Interaction Modes[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#team-interaction-modes) * Team topologies used should adapt and evolve to meet emerging challenges * 3 core team interaction modes that **simplify and clarify the essential interactions needed between teams building software systems** * **Collaboration** : two teams work together on a shared goal, particularly during discovery of new technology or approaches. * The overhead is valuable due to the rapid pace of learning * **X-as-a-Service** : one team consumes something provided by another team (such as an API, a tool, or a full software product). * Collaboration is minimal * **Facilitating** : one team (usually an enabling team) facilitates another team in learning or adopting a new approach. #### Well-Defined Interactions Are Key to Effective Teams[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#well-defined-interactions-are-key-to-effective-teams) “poorly defined team interactions and responsibilities are a source of friction and ineffectiveness" ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MYMEDqckSmIFLMNyrXJ%252F-MYMHeKi8FdeleLYk0Ro%252Fimage.png%3Falt%3Dmedia%26token%3D9670378d-922b-453e-836e-7e86a0ceee05&width=768&dpr=3&quality=100&sign=88abc9be&sv=2) * Teams should ask: * What kind of interaction should we have with this other team? * Should we be collaborating closely with the other team? * Should we be expecting or providing a service? * Or should we be expecting or providing facilitation? ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MYMJ1YQZxDVmBX7B1LT%252F-MYMJE1f07aewD3DLLn5%252Fimage.png%3Falt%3Dmedia%26token%3Dd99f7555-4c12-47c5-b7c4-741ad325f2f9&width=768&dpr=3&quality=100&sign=8aa9c266&sv=2) * The team on the right is providing something “as a service” to the team on the left (perhaps an API, some developer tooling, or even an entire platform). ### Choose suitable Team interaction modes[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#choose-suitable-team-interaction-modes) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MYMJ1YQZxDVmBX7B1LT%252F-MYMKBYV0UmVbD43w28b%252Fimage.png%3Falt%3Dmedia%26token%3D174e3692-018a-4125-96e7-1df84950bc3e&width=768&dpr=3&quality=100&sign=aea35a1b&sv=2) Collaboration X-as-a-Service Facilitating **Stream-aligned** Typical Typical Occasional **Enabling** Occasional Typical **Complicated-subsystem** Occasional Typical **Platform** Occasional Typical ### Constant Evolution of Team Topologies[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#constant-evolution-of-team-topologies) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MYMKvVesUFw8pmnkoeK%252F-MYMLZiE4Co2bvSOliqX%252Fimage.png%3Falt%3Dmedia%26token%3D81977fa1-f020-4f59-9027-8507994cd668&width=768&dpr=3&quality=100&sign=3e5b9d42&sv=2) ### Triggers for Evolution of Team Topologies[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#triggers-for-evolution-of-team-topologies) _it's often difficult to have the required organizational self-awareness to detect when it’s time to evolve the team structure_ * **Trigger: Software Has Grown Too Large for One Team** * Symptoms : * A startup company grows beyond fifteen people (Dunbar’s number) * Other teams spend lots of time waiting on a single team * Changes to certain components or workflows in the system routinely get assigned to the same people, even when they’re already busy or away * Team members complain about lack of system documentation * **Trigger: Delivery Cadence Is Becoming Slower** * Team members qualitatively feel it takes longer to release changes * Team velocity or throughput metrics show a clear downward variation compared to one year ago * Team members complain that the delivery process used to be simpler, with fewer steps. * Work in progress keeps increasing ### Conclusion[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#conclusion) Team Topologies alone will not produce an effective software-delivery and operations organization. Beyond the structures and dynamics suggested in this book, important additional ingredients of success include : * **A healthy organizational culture** : * an environment that supports the professional development of individuals and teams * which people feel empowered * Safe to speak * The organization expects to learn continuously * **Good engineering practices** : * Test-first design and development of all aspects of the systems * a focus on continuous delivery and operability practices * pairing and mobbing for code review * avoiding the search for a single “root cause” for incidents * designing for testability, and so on * **Healthy funding and financial practices** : * Avoiding the pernicious effects of a CapEx/OpEx * Avoiding project-driven deadlines and large-batch budgeting wherever possible * Allocating training budgets to teams or groups rather than individuals * **Clarity of business vision** : * Executive or leadership provides a clear vision and direction * with horizons at human-relevant timescales * clear reasoning behind the priorities * So people in the organization can understand how and why these were chosen. ### How to get started ?[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies#how-to-get-started) 1. **Start with the Team** * What does the team need in order to : * Act and operate as an effective team? * Own part of the software effectively? * Reduce unnecessary cognitive load? * Consume and provide software and information to other teams? 2. **Identify Suitable Streams of Change** 3. **Identify a Thinnest Viable Platform (TVP)** * Identify the services needed to support a reliable, swift flow of change in those streams 4. **Identify Capability Gaps** in Team Coaching, Mentoring, Service Management, and Documentation * Ensure that your teams are populated not just with technologists * BUT also with people who have other skills * Examples : Team coaching, Mentoring, Well written documentation 5. **Share and Practice Different Interaction Modes and Explain Principles behind New Ways of Working** [PreviousSucceeding with OKRs in Agile](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/succeding-with-okrs-in-agile) [NextThe Good Life](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/the-good-life) Last updated 5 years ago --- # Home | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/master.md) . Hi folks, I am Yoan Thirion a Technical Agile coach. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FfD9cwcwkrG23TQ91L6CC%252Fimage.png%3Falt%3Dmedia%26token%3D124cc241-c6a6-445f-b058-726e7ca74915&width=768&dpr=3&quality=100&sign=238ed5e8&sv=2) I have designed software since more than 15 years now. My various experiences in fields like banking, insurance and industrial environments at Luxembourg helped me understood what were really fundamental to succeed in that area : agility and technical excellence. That's why since a few years I am focusing on helping teams deliver well crafted software by coaching them on the implementation of agile practices. I coach teams get better at XP practices, Continuous Integration and Development, Domain Driven Design, Clean Code, BDD and many other technical practices (Mob programming, efficient code review, refactoring of legacy code, ...). Currently, I work in for a great company in Switzerland called [Pyxis-Suisse](https://pyxis-suisse.ch/) . ### If you want to know more about me[](https://yoan-thirion.gitbook.io/knowledge-base#if-you-want-to-know-more-about-me) * [My website](https://www.yoan-thirion.com/#home) * [How I work](https://promyze.com/fr/yoan-thirion-technical-agile-coaching/) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252Fxo6NXmSiRQLZYNzFABqj%252Fimage.png%3Falt%3Dmedia%26token%3Db0a2d8a0-3074-4a91-880c-c022c82664c3&width=768&dpr=3&quality=100&sign=b2718e5e&sv=2) ### How to reach me ?[](https://yoan-thirion.gitbook.io/knowledge-base#how-to-reach-me) * [Linkedin](https://www.linkedin.com/in/yoanthirion/) * [Twitter](https://twitter.com/yot88) [NextSamman Technical Coaching](https://yoan-thirion.gitbook.io/knowledge-base/samman-technical-coaching) Last updated 1 year ago * [If you want to know more about me](https://yoan-thirion.gitbook.io/knowledge-base#if-you-want-to-know-more-about-me) * [How to reach me ?](https://yoan-thirion.gitbook.io/knowledge-base#how-to-reach-me) --- # Unknown \> For the complete documentation index, see \[llms.txt\](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending \`.md\` to page URLs; this page is available as \[Markdown\](https://yoan-thirion.gitbook.io/knowledge-base/master.md). # Home Hi folks, I am Yoan Thirion a Technical Agile coach. !\[\](/files/24eyzl8l89YRIMRWzINZ) I have designed software since more than 15 years now. My various experiences in fields like banking, insurance and industrial environments at Luxembourg helped me understood what were really fundamental to succeed in that area : agility and technical excellence. That's why since a few years I am focusing on helping teams deliver well crafted software by coaching them on the implementation of agile practices. I coach teams get better at XP practices, Continuous Integration and Development, Domain Driven Design, Clean Code, BDD and many other technical practices (Mob programming, efficient code review, refactoring of legacy code, ...). Currently, I work in for a great company in Switzerland called \[Pyxis-Suisse\](https://pyxis-suisse.ch/). ### If you want to know more about me \* \[My website\](https://www.yoan-thirion.com/#home) \* \[How I work\](https://promyze.com/fr/yoan-thirion-technical-agile-coaching/) !\[\](/files/DWx72gyQSuKxbDGNDH6A) ### How to reach me ? \* \[Linkedin\](https://www.linkedin.com/in/yoanthirion/) \* \[Twitter\](https://twitter.com/yot88) --- # Unknown \# Knowledge-base ## Knowledge-base - \[Home\](https://yoan-thirion.gitbook.io/knowledge-base/master.md): The purpose of this knowledge base is to share with the community everything that could be useful to people interested in software development, software craftsmanship, agile, leadership, coaching, ... - \[Samman Technical Coaching\](https://yoan-thirion.gitbook.io/knowledge-base/samman-technical-coaching.md): This page is dedicated to list resources than can be used when doing Samman coaching - \[Software craftsmanship\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship.md) - \[Practices\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices.md) - \[Pair Programming\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming.md) - \[Code Review\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review.md) - \[Co-designs\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs.md): From high level Architecture to Solution Design by working collaboratively - \[Design sessions\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/design-sessions.md): A technic to better design solutions in a collaborative way - \[Interview Domain Experts\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/interview-domain-experts.md): This workshop is inspired by Scott Wlaschin's one from Domain Modeling Made Functional Workshop - \[Dev ethics\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics.md): In this session we will think about our responsibility as Software Developers regarding larger communities and we will initiate our own Oaths that we will be able to apply in our day to day. - \[The Software Craftsman\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman.md): Abstract of the book "The Software Craftsman" from Sandro Mancuso - \[Egoless Crafting\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/egoless-crafting.md) - \[Technical debt workshop\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop.md): Understand what is technical debt? and how to deal with it - \[Functional Programming made easy in C# with Language-ext\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext.md): Read this article if you want to demystify Functional Programming and understand why and how to start using FP paradigms in C#. - \[F# for OO programmers\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/f-for-oo-programmers.md) - \[Domain Modeling Made Functional\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/domain-modeling-made-functional.md): Great book and workshop followed with Scott Wlaschin - \[Testing\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing.md) - \[Clean Tests\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests.md): Workshop to work on Unit Tests Practices and Anti-patterns - \[Improve the design and testing of your micro-services through CDC Tests\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests.md): In a micro-services world, testing the successful integration between services is critical for ensuring that the services won’t fail in production just because they’re not speaking the same language. - \[CDC testing made simple with Pact\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact.md) - \[Pact broker : the missing piece of your Consumer-Driven Contract approach\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach.md): Pact broker : the missing piece of your CDC approach - \[Improve your test quality with Mutation testing\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing.md): Mutation testing (or mutation analysis or program mutation) is used to design new software tests and evaluate the quality of existing software tests. - \[How to name our Unit Tests\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests.md) - \[How to write better assertions\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-write-better-assertions.md) - \[Katas\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas.md) - \[Le Coding Dojo à l'école\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/le-coding-dojo-a-lecole.md): Quand la pratique délibérée entre en salle de classe - \[TDD\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas.md) - \[Stack kata\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas/stack.md) - \[Fizzbuzz\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas/fizzbuzz.md) - \[Outside-in TDD (London Style)\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas/outside-in-tdd.md): Kata from Sandro Mancuso - \[Improve your software quality with Property-Based Testing\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/improve-your-software-quality-with-property-based-testing.md): Write bulletproof code with Property-Based Testing (PBT) - \[A journey to Property-Based Testing\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/improve-your-software-quality-with-property-based-testing/a-journey-to-property-based-testing.md) - \[Clean Code\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/clean-code.md): Hands on Clean Code - \[Clean Architecture\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/clean-architecture.md): A Craftsman's Guide to Software Structure and Design - \[Write S.O.L.I.D code\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/write-s.o.l.i.d-code.md): Learn how to write S.O.L.I.D Object Oriented code - \[Mocking\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking.md) - \[Gilded Rose (Approval Testing)\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/gilded-rose-approval-testing.md): Learn how Approval testing can help you when dealing with legacy code - \[Mikado method\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mikado-method.md): Enables you to deal with unavoidable complexities in manageable pieces during your refactorings - \[Mikado kata\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mikado-method/mikado-kata.md): Hands on Mikado method to refactoring - \[Pure functions\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions.md) - \[Theatrical players refactoring Kata\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata.md): Kata based on the work from Emily Bache. - \[Let's refactor (OOP style)\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-oop-style.md): Theatrical players refactoring Kata in Object Oriented Programming - \[Let's refactor (FP style)\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-fp-style.md): Theatrical players refactoring Kata in a Functional Programming style - \[Functional Programming made easy in Java & C#\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/functional-programming-made-easy-in-java-and-c.md): Learn FP principles and apply them in your favorite language - \[Refactoring journey\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-journey-kata.md): Practice refactoring tips to improve your day-to-day efficiency - \[Refactoring du Bouchonnois\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-du-bouchonnois.md): Kata de refactoring pour apprendre des techniques telles que Property-Based Testing, Approval Testing, Strangler, Functional Programming, .... - \[1) Se faire une idée du code\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-du-bouchonnois/1-se-faire-une-idee-du-code.md) - \[2) "Treat warnings as errors"\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-du-bouchonnois/2-treat-warnings-as-errors.md) - \[3) Let's kill some mutants\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-du-bouchonnois/3-lets-kill-some-mutants.md) - \[4) Améliorer la lisibilité des tests\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-du-bouchonnois/4-ameliorer-la-lisibilite-des-tests.md) - \[5) "Approve Everything"\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-du-bouchonnois/5-approve-everything.md) - \[6) Définir des propriétés\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-du-bouchonnois/6-definir-des-proprietes.md) - \[7) Tests d'architecture\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-du-bouchonnois/7-tests-darchitecture.md) - \[8) Use Cases\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-du-bouchonnois/8-use-cases.md) - \[9) Tell Don't Ask\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-du-bouchonnois/9-tell-dont-ask.md) - \[10) "Avoid Primitives" - Commands\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-du-bouchonnois/10-avoid-primitives-commands.md) - \[11) "Avoid Exceptions"\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-du-bouchonnois/11-avoid-exceptions.md) - \[12) "Event Sourcing"\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-du-bouchonnois/12-event-sourcing.md) - \[Software Design X-Rays\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays.md): from Adam Tornhill - \[Workshop\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop.md): Workshop to demo the power of CrimeScene and the ideas behind it. - \[The Programmer's Brain\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain.md): by Felienne Hermans - \[How to read code better\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain/how-to-read-code-better.md): Workshop to demonstrate how our programmers brain work. - \[Software Architecture\](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture.md) - \[Fundamentals of Software Architecture\](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/fundamentals-of-software-architecture.md): Abstract of the book from Mark Richards and Neal Ford - \[Aligning Product & Software Design\](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design.md): Abstract of a talk of Sandro Mancuso - \[DDD re-distilled\](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled.md): This article is an abstract of the book DDD Distilled written by Vaughn Vernon - \[Test your architecture with Archunit\](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit.md) - \[NoSQL\](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql.md) - \[Agile coaching\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching.md) - \[How to run a Community of Practices (COP)\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop.md): Patterns and anti-pattern on COPs - \[The developers — the forgotten of agility\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility.md) - \[The secrets to re-on-board the devs in agility\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility.md) - \[Coaching toolbox\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox.md) - \[Echelle\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/echelle.md): A powerful tool for 1 on 1 Solution Focus questions - \[Learning expedition\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/learning-expedition.md) - \[How to improve Team Decision making ?\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making.md): Workshop designed using 4C model to discover how to reach strong inclusive agreements with consent in self-organized teams. - \[Decision Making Principles and Practices\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices.md) - \[Learning 3.0\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0.md): SHARING is the new TEACHING - \[Retrospectives\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives.md) - \[Back to the Future\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future.md): Home made rétrospective - \[Mission Impossible\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible.md) - \[Movie themes\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/movie-themes.md) - \[Rétro dont vous êtes le héros\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros.md) - \[Sad/Mad/Glad\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/sad-mad-glad.md): Quick retro / easy to start - \[Speed boat\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat.md) - \[Star wars theme\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme.md) - \[Story cubes\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes.md): from Cédric Pontet - \[Technical Agile Coaching with the Samman Method\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/technical-agile-coaching-with-the-samman-method.md): from Emily Bache - \[Xanpan - a team centric agile method story\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story.md): Xanpan is an agile method created by Allan Kelly. - \[XTREM WATCH — Découvrez la puissance de la veille collective\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective.md): On fait tous de la veille, avec Xtrem Watch, vous ne la ferez plus jamais seule - \[Become a better speaker through peer feedback\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/become-a-better-speaker-through-peer-feedback.md) - \[Project-to-Product Principles\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/project-to-product-principles.md): Infographic made with Matthew Phillip for XP2021 - \[Leadership\](https://yoan-thirion.gitbook.io/knowledge-base/leadership.md) - \[Bref. J'ai pris une tarte dans la gueule (et ça fait extrêmement de bien)\](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien.md): Texte à paraître dans le prochain tome de Rupture Douce 7 - \[Forward Summit 2020\](https://yoan-thirion.gitbook.io/knowledge-base/leadership/forward-summit-2020.md) - \[Learn leadership from the Navy SEALs\](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals.md): Discover leadership principles that can make you lead teams to high performance and success. - \[Learn to lead and help your team(s) to be successful\](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful.md): Learn to lead with Jocko Willink former Navy SEAL - \[Towards a learning organization and beyond\](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond.md): Learn how to start your journey to the learning organization. - \[Leadership is language\](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language.md): The Hidden Power of What You Say and What You Don't - \[Serious games\](https://yoan-thirion.gitbook.io/knowledge-base/serious-games.md) - \[My serious games\](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games.md) - \[Libérez vos entretiens d’embauche avec la gamification\](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator.md): Découvrez comment transformer vos entretiens d’embauche à l’aide de la gamification. - \[How to create a game\](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game.md) - \[How to debrief a game ?\](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game.md): Some technics to debrief a game - \[Lego Serious Play (LSP)\](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp.md) - \[LSP in your job interviews\](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews.md): Lego Serious Play in your job interviews - \[Xtrem Reading\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading.md) - \[Cultivate Team Learning with Xtrem Reading\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading.md) - \[My Book Infographics\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/my-book-infographics.md) - \[How to make book infographics\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics.md) - \[En route vers l’apprenance avec Xtrem Reading\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading.md): Découvrez comment démarrer votre parcours vers cette fameuse entreprise apprenante. - \[Resources\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources.md): Here are the resources related to Xtrem Reading - \[Book notes\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes.md): Here are the Book notes taken during Xtrem Reading sessions - \[Agile People: A Radical Approach for HR & Managers\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers.md): from Pia-Maria Thoren - \[Agile testing : A Practical Guide for Testers and Agile Teams\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-testing-a-practical-guide-for-testers-and-agile-teams.md): from Lisa Crispin & Janet Gregory - \[Boite à outils de l'intelligence émotionnelle\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle.md) - \[Building a better business using Lego Serious Play method\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-a-better-business-using-lego-serious-play-method.md): from Per Kristiansen - \[Building evolutionary architectures\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures.md): from Neal Ford, Rebecca Parsons & Patrick Kua - \[Code that fits in your head\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/code-that-fits-in-your-head.md): from Mark Seemann - \[Culture Agile\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/culture-agile.md): from Jean-Claude Grosjean - \[Culture is everything\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/culture-is-everything.md): from Tristan White - \[Domain-Driven Design: The First 15 Years\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/domain-driven-design-the-first-15-years.md): Essays from the DDD Community - \[Dynamic Reteaming - The Art and Wisdom of Changing Teams\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/dynamic-reteaming-the-art-and-wisdom-of-changing-teams.md): by Heidi Helfand - \[How to avoid a Climate Disaster\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/how-to-avoid-a-climate-disaster.md): from Bill Gates - \[La liberté du commandement\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/la-liberte-du-commandement.md): Vice-amiral Loïc Finaz - \[Réaliser ses rêves, ça s'apprend\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/realiser-ses-reves-ca-sapprend.md): par Thomas Gibot - \[Refactoring at Scale\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/refactoring-at-scale.md): Maude Lemaire - \[Succeeding with OKRs in Agile\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/succeding-with-okrs-in-agile.md): from Allan Kelly - \[Team Topologies\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies.md): by Matthew Skelton and Manuel Pais - \[The Good Life\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/the-good-life.md): par Robert Waldinger, Marc M.D. Schulz - \[Tu fais quoi dans la vie\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/tu-fais-quoi-dans-la-vie.md): de Matthieu Dardaillon et Joséphine Bouchez - \[Who Does What By How Much?\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/who-does-what-by-how-much.md): by Jeff Gothelf and Josh Seiden - \[My Activity\](https://yoan-thirion.gitbook.io/knowledge-base/my-activity.md) - \[Retour sur mon année 2020\](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020.md) --- # Unknown \> For the complete documentation index, see \[llms.txt\](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending \`.md\` to page URLs; this page is available as \[Markdown\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies.md). # Team Topologies ## Pitch Effective software teams are essential for any organization to deliver value continuously and sustainably. But how do you build the best team organization for your specific goals, culture, and needs? Team Topologies is a practical, step-by-step, adaptive model for organizational design and team interaction based on four fundamental team types and three team interaction patterns. It is a model that treats teams as the fundamental means of delivery, where team structures and communication pathways are able to evolve with technological and organizational maturity. In Team Topologies, IT consultants Matthew Skelton and Manuel Pais share secrets of successful team patterns and interactions to help readers choose and evolve the right team patterns for their organization, making sure to keep the software healthy and optimize value streams. Team Topologies is a major step forward in organizational design for software, presenting a well-defined way for teams to interact and interrelate that helps make the resulting software architecture clearer and more sustainable, turning inter-team problems into valuable signals for the self-steering organization. !\[\](/files/-MYBlp4ICRTMG5JhZlRj) ## Infographic !\[Team Topologies infographic\](/files/-MYsyIsGLlvjJKp15hBt) {% file src="/files/-MYsycH0XPy5EL-FZ1sI" %} High Resolution Infographic {% endfile %} ## Preface \* A functional book \* Part I - explores Conway’s law \* The way organizational interrelationships constrain the design of systems we build \* And how we can use this tendency to our advantage \* Part II - set of static team patterns \* Have been proven in the industry and the implications of choosing one pattern over another \* with Conway’s law and organizational context in mind \* Part III - ways to evolve the organization design \* To provide powerful capabilities for innovation and rapid delivery i \* How to use the Team Topologies approach to create a sensing organization that responds to the market and user demands, \* And accounts for the implications this has for hiring and skills !\[\](/files/-MYBn8\_-5bvug0hzGgg0) ## Part 1 - Team As The Means of Delivery \* The Problem with Org Charts \* Must shift our thinking from treating teams as collections of interchangeable individuals that will succeed as long as they follow the “right” process and use the “right” tools \* TO treating people and technology as a single human/computer carbon/silicon sociotechnical ecosystem \* We need to ensure that teams are intrinsically motivated and are given a real chance of doing their best work within such a system \* Team Topologies focuses on \* how to set up dynamic team structures \* interaction modes that can help teams adapt quickly to new conditions \* Org chart is always out os sync with reality !\[\](/files/-MYBoWs-gSIiv5P5oMfk) \* By empowering teams, and treating them as fundamental building blocks \* Individuals inside those teams move closer together to act as a team rather than just a group of people \* Explicitly agree on interaction modes with other teams \* Expectations on behaviors become clearer and inter-team trust grows {% hint style="info" %} \*\*\*Team structures must match the required software architecture or risk producing unintended software\*\*\* {% endhint %} ### Cognitive Load and Bottlenecks {% hint style="info" %} \*When cognitive load isn’t considered, teams are spread thin trying to cover an excessive amount of responsibilities and domains. Such a team lacks bandwidth to pursue mastery of their trade and struggles with the costs of switching contexts.”\* {% endhint %} !\[\](/files/-MYBpyv9TZpXXvQi7kv1) ### Conway's law \* An organization that is arranged in functional silos \* Where teams specialize in a particular function, such as QA, DBA, or security \* Is unlikely to ever produce software systems that are well-architected for end-to-end flow \* The Reverse Conway Maneuver \* Accelerate: The Science of Dev Ops \* "Our research lends support to what is sometimes called the “inverse Conway maneuver,” which states that organizations should evolve their team and organizational structure to achieve the desired architecture. The goal is for your architecture to support the ability of teams to get their work done—from design through to deployment—without requiring high-bandwidth communication between teams." > “Team assignments are the first draft of the architecture." - Michael Nygard \* The fundamental \*\*\*means of delivery is the team\*\*\* \* The system architecture needs to \* Enable \* Encourage fast flow within each team \* In practice, this means that we can follow proven software-architecture good practices: \* Loose coupling—components do not hold strong dependencies on other components \* High cohesion—components have clearly bounded responsibilities, and their internal elements are strongly related \* \*Clear and appropriate version compatibility\* \* Clear and appropriate cross-team testing ### \*\*Organization Design Requires Technical Expertise\*\* > “if we have managers deciding . . . which services will be built, by which teams, we implicitly have managers deciding on the system architecture.” - Ruth Malan \* How much awareness does the HR department have about software systems? \* Does the group of department leaders deciding how to allocate budget across teams know of the likely effects of their choices on the viability of the software architecture? {% hint style="info" %} Allan Kelly’s view of a software architect’s : "More than ever I believe that someone who claims to be an \*\*Architect needs both technical and social skills\*\*, they need to understand people and work within the social framework. They also need a remit that is broader than pure technology—they need to \*\*have a say in organizational structures and personnel issues\*\*, i.e. they need to be a \*\*manager too\*\*." {% endhint %} \* Restrict Unnecessary Communication \* Not all communication and collaboration is good \* \*\*\*We need focused communication between specific teams\*\*\* \* 2 rules \* The organization’s design limits the number of possible solutions for a given system’s architecture \* The speed of software delivery is strongly affected by how many team dependencies the organization design instills \* \*\*\*Fast flow requires restricting communication between teams\*\*\* \* Team collaboration is important for gray areas of development \* Where discovery and expertise is needed to make progress {% hint style="success" %} “\*Disbanding high-performing teams is worse than vandalism: it is corporate psychopathy.\*" — Allan Kelly, Project Myopia {% endhint %} ### Team first-thinking \* Research by Google on their own teams \* Who is on the team matters less than the team dynamics \* \*\*\*When it comes to measuring performance, teams matter more than individuals\*\*\* ### Use Small, Long-Lived Teams as the Standard \* “team” = stable grouping of five to nine people who work toward a shared goal as a unit \* > \*An organization should never assign work to individuals; only to teams\* \* Allowing teams to grow beyond the \*\*\*magic seven-to-nine size\*\*\* imperils the viability of the software being built by that team (Dunbar’s number) \* Trust will begin to break down \* Unsuitable decisions might ensue \* Organizations need to maximize \*\*trust between people on a team\*\* \* That means limiting the number of team members #### Smaller Size Fosters Trust \* Anthropological research shows that the type and depth of relationship we can have with people has clear limits : \* Around five people—limit of people with whom we can hold close personal relationships and working memory \* Around fifteen people—limit of people with whom we can experience deep trust \* Around fifty people—limit of people with whom we can have mutual trust \* Around 150 people—limit of people whose capabilities we can remember ### The Team Owns the Software \* With small, long-lived teams in place \* We can begin to improve the ownership of software \* Team ownership helps to provide the vital “continuity of care” \* The danger of allowing multiple teams to change the same system or subsystem \* No one owns the changes made or the resulting mess \* There should be no shared ownership of components, libraries, or code #### Team Members Need a Team-First Mindset \* Put the needs of the team above their own #### Embrace Diversity in Teams \* Find Novel and creative ways \* Produce more creative solutions #### Reward the Whole Team not individuals ### Good Boundaries Minimize Cognitive Load \* Organizations need to \*\*\*ensure\*\*\* that the \*\*\*cognitive load on a team is not too high\*\*\* \* Restrict Team Responsibilities to Match Team Cognitive Load \* \*\*Cognitive load\*\* \* Characterized in 1988 \* By psychologist John Sweller \* “\*\*\*the total amount of mental effort being used in the working memory.\*\*\*” \* 3 types of cognitive load \* \*\*Intrinsic\*\* —relates to aspects of the task fundamental to the problem space \* What is the structure of a Java class? \* How do I create a new method? \* \*\*Extraneous\*\* —relates to the environment in which the task is being done \* How do I deploy this component again? \* How do I configure this service? \* \*\*Germane\*\* —relates to aspects of the task that need special attention for learning or high performance \* How should this service interact with the ABC service? {% hint style="info" %} \*\*\*With a team-first approach, the team’s responsibilities are matched to the cognitive load that the team can handle\*\*\* {% endhint %} ### Measure the Cognitive Load Using Relative Domain Complexity \* Ask the team : \* “Do you feel like you’re effective and able to respond in a timely fashion to the work you are asked to do?” \* Trying to determine the cognitive load of software using simple measures such as lines of code, number of modules, classes, or methods is misguided \* When measuring cognitive load \* what we really care about = domain complexity \* how complex is the problem that we’re trying to solve with software? \* A domain = a more largely applicable concept than software size #### 3 heuristics 1. Assign each domain to a single team \* Instead of splitting responsibilities of a single domain to multiple teams \* Split the domain into subdomains \* Then assign each new subdomain to a single team 2. A single team should be able to accommodate two to three “simple” domains” 3. A team responsible for a complex domain should not have any more domains assigned to them—not even a simple one #### Design “Team APIs” and Facilitate Team Interactions \* Team API = an API surrounding each team \* It includes : \* Code: runtime endpoints, libraries, clients, UI, etc. produced by the team \* Versioning: how the team communicates changes to its code and services \* Wiki and documentation: especially how-to guides for the software owned by the team \* Practices and principles: the team’s preferred ways of working \* Communication: the team’s approach to remote communication tools, such as chat tools and video conferencing \* Work information: what the team is working on now, what’s coming next, and overall priorities in the short to medium term \* Other: anything else that other teams need to use to interact with the team \* Team API should consider usability by other teams ## Part 2 - Team Topologies that Work for Flow !\[\](/files/-MYC2N0aVXxYNcSYUIPZ) ### Stream-Aligned teams \* “stream” : the continuous flow of work aligned to a business domain or organizational capability \* Requires clarity of purpose and responsibility \* Team aligned to a single, valuable stream of work \* Might be \* A single product or service \* A single set of features \* A single user journey \* or a single user persona \* Work on the full spectrum of delivery \* \*\*Primary team type in an organization\*\* {% hint style="info" %} \*\*\*Purpose of the other fundamental team topologies is to reduce the burden on the stream-aligned teams\*\*\* {% endhint %} #### \*\*Capabilities\*\* \* Application security \* Commercial and operational viability analysis \* Design and architecture \* Development and coding \* Infrastructure and operability \* Metrics and monitoring \* Product management and ownership \* Testing and quality assurance User experience (UX) > critical not to assume each capability maps to an individual role in the team \* Be able, as a team, to \* understand and act upon the above capabilities \* Have a mix of generalists and a few specialists #### \*\*Expected Behaviors\*\* \* Aims to produce a steady flow of feature delivery \* Correct based on feedback from the latest changes \* Uses an experimental approach to product evolution \* Expecting to constantly learn and adapt \* Team has minimal (ideally zero) hand-offs of work to other teams \* Must have time and space to address code quality changes (sometimes called “tech debt”) to ensure that changing the code remains safe and easy to do. \* Proactively and regularly reaches out to the supporting fundamental-topologies teams (complicated subsystem, enabling, and platform) \* Feel they have achieved or are in the path to achieving “autonomy, mastery, and purpose,” the three key components of engaged knowledge workers, according to Daniel Pink ### \*\*Enabling Teams\*\* \* In Accelerate High-performing teams are continuously improving their capabilities in order to stay ahead \* But how can a stream-aligned team with end-to-end ownership find the space for researching, reading about, learning, and practicing new skills?” \* Enabling team is composed of specialists in a given technical (or product) domain \* They help bridge this capability gap \* Have a strongly collaborative nature \* Avoid becoming “ivory towers” of knowledge \* Increase the autonomy of stream-aligned teams by growing their capabilities \* With a focus on their problems first \* Not the solutions per se \* Should not be a permanent dependency #### \*\*Expected Behaviors\*\* {% hint style="info" %} \*The mission of enabling teams is to help stream-aligned teams acquire missing capabilities, usually around a specific technical or product management area\* {% endhint %} \* Seeks to understand the needs of stream-aligned teams \* Establishing regular checkpoints \* Jointly agreeing when more collaboration is needed \* Stays ahead of the curve in keeping abreast of new approaches, tooling, and practices in their area of expertise \* Act as a proxy for external (or internal) services that are currently too difficult for stream-aligned teams to use directly \* Promotes \*\*learning\*\* not only inside the enabling team but across stream-aligned teams \* Acting as a curator that facilitates appropriate knowledge sharing inside the organization {% hint style="info" %} \*\*\*Enabling teams do not exist to fix problems that arise from poor practices, poor prioritization choices, or poor code quality within stream-aligned teams\*\*\* {% endhint %} ### Complicated-Subsystem Teams \* Responsible for building and maintaining \* a part of the system that depends heavily on specialist knowledge \* GOAL of this team : \* Reduce the cognitive load of stream-aligned teams \* working on systems that include or use the complicated subsystem \* Examples : \* Video processing codec \* Mathematical model \* Real-time trade reconciliation algorithm \* Transaction reporting system for financial services \* Face-recognition engine \* Created only when a subsystem needs mostly specialized knowledge #### \*\*Expected Behaviors\*\* \* Mindful of the current stage of development of the subsystem / acts accordingly \* High collaboration with stream-aligned teams during early exploration and development phases \* Reduced interaction and focus on the subsystem interface and feature evolution and usage during later stages \* Delivery speed and quality for the subsystem is clearly higher than if/when the subsystem was being developed by a stream-aligned team \* Prioritizes and delivers upcoming work \* Respecting the needs of the stream-aligned teams that use the complicated subsystem ### Platform Teams \* Purpose : enable stream-aligned teams to deliver work with substantial autonomy \* Provides internal services to reduce the cognitive load that would be required from stream-aligned teams to develop these underlying services {% hint style="info" %} \*A digital platform is a foundation of self-service APIs, tools, services, knowledge and support which are arranged as a compelling internal product.\* {% endhint %} \* Treat the services they offer as products \* reliable \* usable \* fit for purpose \* A thick platform might consist of the combination of several inner platform teams \* Providing a myriad of services \* A thin platform \* could simply be a layer on top of a vendor-provided solution \* Examples : \* From provisioning a new server instance \* To providing tools for access management and security enforcement #### \*\*Expected Behaviors\*\* \* Uses strong collaboration with stream-aligned teams to understand their needs \* Relies on fast prototyping techniques \* Involves stream-aligned team members for fast feedback \* Has a strong focus on \* Usability and reliability for their services \* Treating the platform as a product \* Regularly assesses if the services are still fit for purpose and usable \* Leads by example \* Using the services they provide internally (when applicable) \* Partnering with stream-aligned teams and enabling teams \* Consuming lower level platforms (owned by other platform teams) whenever possible \* Understands that adoption of internal new services, like new technologies, is not immediate, but instead evolves along an adoption curve #### A Good Platform Is “Just Big Enough” \* A good platform provides \* standards \* templates \* APIs \* well-proven best practices for Dev teams to use to innovate rapidly and effectively \* Thinnest Viable Platform \* A list on a wiki page of underlying components or services used by consuming software ### Convert Common Team Types to the Fundamental Team Topologies {% hint style="info" %} \*"Most organizations would see major gains in effectiveness by mapping each of their teams to one of the four fundamental topologies; that is, identify which of the four fundamental topologies would represent the best way of working for each team, and then change that team’s remit to adopt the purpose and behavior patterns of that topology.”\* {% endhint %} \* Infrastructure Teams to Platform Teams \* Platform is managed as a product using proven software development techniques \* May be quite unfamiliar to infrastructure people \* Component teams to Platform or Other Team Types \* DBA teams -> enabling teams \* Focus on spreading awareness of DB Perf, monitoring, ... \* Tooling Teams to Enabling Teams or Part of the Platform \* Converting Architecture and Architects \* Most effective pattern : a part-time enabling team \* Emphasizes that many decisions should be taken by implementing teams rather than left to the architecture team ### Software Boundaries or “Fracture Planes {% hint style="info" %} \*A fracture plane is a natural seam in the software system that allows the system to be split easily into two or more parts\* {% endhint %} \* Look for similar fracture planes in software \* To find the natural split points that lead to software boundaries \* \*\*Fracture Plane: Business Domain Bounded Context\*\* \* A bounded context : \* A unit for partitioning a larger domain (or system) model into smaller parts \* Each of which represents an internally consistent business domain area \* Identifying bounded contexts : \* Requires a fair amount of business knowledge and technical expertise \* Aligns technology with business \* Reduces mismatches in terminology and “lost in translation” issues, improving the flow of changes and reducing rework \* \*\*Fracture Plane: Regulatory Compliance\*\* \* \*\*Fracture Plane: Change Cadence\*\* \* With a monolith, every piece moves at the speed of the slowest part \* Splitting off the parts of the system that typically change at different speeds allows them to change more quickly \* \*\*Fracture Plane: Team Location\*\* \* Working across different time zones aggravates communication delays and introduces bottlenecks \* \*\*Fracture Plane: Risk\*\* \* Splitting off subsystems with clearly different risk profiles allows mapping the technology changes to business appetite or regulatory \* \*\*Fracture Plane: Performance Isolation\*\* \* In particular types of systems, differentiating levels of performance might be beneficial \* Splitting off such a subsystem based on particular performance demands helps to ensure \* it can scale autonomously \* increasing performance and reducing cost \* \*\*Fracture Plane: Technology\*\* \* \*\*Fracture Plane: User Personas\*\* ## Part 3 - Evolving Team Interactions for Innovation and Rapid Delivery ### Team Interaction Modes \* Team topologies used should adapt and evolve to meet emerging challenges \* 3 core team interaction modes that \*\*simplify and clarify the essential interactions needed between teams building software systems\*\* \* \*\*Collaboration\*\* : two teams work together on a shared goal, particularly during discovery of new technology or approaches. \* The overhead is valuable due to the rapid pace of learning \* \*\*X-as-a-Service\*\* : one team consumes something provided by another team (such as an API, a tool, or a full software product). \* Collaboration is minimal \* \*\*Facilitating\*\* : one team (usually an enabling team) facilitates another team in learning or adopting a new approach. #### Well-Defined Interactions Are Key to Effective Teams {% hint style="info" %} “poorly defined team interactions and responsibilities are a source of friction and ineffectiveness" {% endhint %} !\[\](/files/-MYMHeKi8FdeleLYk0Ro) \* Teams should ask: \* What kind of interaction should we have with this other team? \* Should we be collaborating closely with the other team? \* Should we be expecting or providing a service? \* Or should we be expecting or providing facilitation? !\[\](/files/-MYMJE1f07aewD3DLLn5) \* The team on the right is providing something “as a service” to the team on the left (perhaps an API, some developer tooling, or even an entire platform). ### Choose suitable Team interaction modes !\[\](/files/-MYMKBYV0UmVbD43w28b) | | Collaboration | X-as-a-Service | Facilitating | | ------------------------- | ------------- | -------------- | ------------ | | \*\*Stream-aligned\*\* | Typical | Typical | Occasional | | \*\*Enabling\*\* | Occasional | | Typical | | \*\*Complicated-subsystem\*\* | Occasional | Typical | | | \*\*Platform\*\* | Occasional | Typical | | ### Constant Evolution of Team Topologies !\[\](/files/-MYMLZiE4Co2bvSOliqX) ### Triggers for Evolution of Team Topologies {% hint style="success" %} \*it's often difficult to have the required organizational self-awareness to detect when it’s time to evolve the team structure\* {% endhint %} \* \*\*Trigger: Software Has Grown Too Large for One Team\*\* \* Symptoms : \* A startup company grows beyond fifteen people (Dunbar’s number) \* Other teams spend lots of time waiting on a single team \* Changes to certain components or workflows in the system routinely get assigned to the same people, even when they’re already busy or away \* Team members complain about lack of system documentation \* \*\*Trigger: Delivery Cadence Is Becoming Slower\*\* \* Team members qualitatively feel it takes longer to release changes \* Team velocity or throughput metrics show a clear downward variation compared to one year ago \* Team members complain that the delivery process used to be simpler, with fewer steps. \* Work in progress keeps increasing ### Conclusion Team Topologies alone will not produce an effective software-delivery and operations organization. Beyond the structures and dynamics suggested in this book, important additional ingredients of success include : \* \*\*A healthy organizational culture\*\* : \* an environment that supports the professional development of individuals and teams \* which people feel empowered \* Safe to speak \* The organization expects to learn continuously \* \*\*Good engineering practices\*\* : \* Test-first design and development of all aspects of the systems \* a focus on continuous delivery and operability practices \* pairing and mobbing for code review \* avoiding the search for a single “root cause” for incidents \* designing for testability, and so on \* \*\*Healthy funding and financial practices\*\* : \* Avoiding the pernicious effects of a CapEx/OpEx \* Avoiding project-driven deadlines and large-batch budgeting wherever possible \* Allocating training budgets to teams or groups rather than individuals \* \*\*Clarity of business vision\*\* : \* Executive or leadership provides a clear vision and direction \* with horizons at human-relevant timescales \* clear reasoning behind the priorities \* So people in the organization can understand how and why these were chosen. ### How to get started ? 1. \*\*Start with the Team\*\* \* What does the team need in order to : \* Act and operate as an effective team? \* Own part of the software effectively? \* Reduce unnecessary cognitive load? \* Consume and provide software and information to other teams? 2. \*\*Identify Suitable Streams of Change\*\* 3. \*\*Identify a Thinnest Viable Platform (TVP)\*\* \* Identify the services needed to support a reliable, swift flow of change in those streams 4. \*\*Identify Capability Gaps\*\* in Team Coaching, Mentoring, Service Management, and Documentation \* Ensure that your teams are populated not just with technologists \* BUT also with people who have other skills \* Examples : Team coaching, Mentoring, Well written documentation 5. \*\*Share and Practice Different Interaction Modes and Explain Principles behind New Ways of Working\*\* --- # Software craftsmanship | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship.md) . ### Useful Resources[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship#useful-resources) * [Mob programming facilitator guide](https://github.com/fhiegel/MobProgramming/blob/master/guide/MobProgrammingFacilitorsGuide_French.md) * [Mob programming resources](https://github.com/NazeeHajebi/Talks/blob/master/FacilitatingMobProgramming.md) #### "How to Read Complex Code" by Dr Felienne Hermans (@felienne)[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship#how-to-read-complex-code-by-dr-felienne-hermans-felienne) * Cognitive Refactoring * Video available here : [https://youtu.be/jjMlguOrWHc](https://youtu.be/jjMlguOrWHc) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-McUSwIBQ0_F2N7r5l0Q%252F-McUVO07MVuEpH3Af6J2%252FScreen%2520Shot%25202021-06-18%2520at%252015.56.29.png%3Falt%3Dmedia%26token%3D1232b486-0ee4-471e-9ddc-d93f4d9e1f41&width=768&dpr=3&quality=100&sign=930955d9&sv=2) * [Choosing an HTTP Status Code — Stop Making It Hard](https://www.codetinkerer.com/2015/12/04/choosing-an-http-status-code.html) * [How to measure Software Quality improvement](https://promyze.com/fr/quels-indicateurs-damelioration-de-la-qualite-du-code/) [PreviousSamman Technical Coaching](https://yoan-thirion.gitbook.io/knowledge-base/samman-technical-coaching) [NextPractices](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices) Last updated 4 years ago --- # Unknown \> For the complete documentation index, see \[llms.txt\](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending \`.md\` to page URLs; this page is available as \[Markdown\](https://yoan-thirion.gitbook.io/knowledge-base/samman-technical-coaching.md). # Samman Technical Coaching ## Introduction Samman Technical Coaching is a method for people who want to make a difference and improve the way software is built. I strongly advise you to read \[Emily's Bache book\](https://leanpub.com/techagilecoach) and visit \[her website\](http://sammancoaching.org/). ## Learning hours \* Discover Practices \* \[Pair Programming\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming) \* \[Code Review\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review) \* \[Interview Domain Experts\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/interview-domain-experts) \* \[Dev Ethics\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics) \* \[Technical Debt retrospective\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop) \* \[Software Design X-Rays\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays) \* \[The programmer's brain\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain) \* Languages / Libs \* \[F# for OO Programmers\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/f-for-oo-programmers) \* Testing practices \* \[How to name our Unit Tests\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests) \* \[Consumer Driven Contract Testing\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests) \* \[Improve your test quality with Mutation testing\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing) \* \[Improve your assertions with assertJ\](https://github.com/ythirion/assertj-kata) \* Software Architecture \* \[DDD re-distilled\](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled) \* \[NoSQL\](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql) \* \[Fundamentals of Software Architecture\](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/fundamentals-of-software-architecture) \* Agile Coaching \* \[How to run a Community of Practices (COP)\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop) \* \[The developers — the forgotten of agility\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility) \* \[Xanpan\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story) \* \[Drive and Intrinsic motivation\](https://speakerdeck.com/thirion/drive-and-intrinsic-motivation-a-toolkit-for-todays-managers) \* \[Leadership lessons from the Navy SEALs\](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals) \* \[Part 2\](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful) \* \[Agile HR\](https://speakerdeck.com/thirion/how) \* Xtrem \* \[En route vers l’apprenance avec Xtrem Reading\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading) \* \[XTREM WATCH — Découvrez la puissance de la veille collective\](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective) \* \[Good Morning Learning by Philippe Bourgau\](https://philippe.bourgau.net/growth-mindset-coaching-turn-remote-work-commutes-into-team-learning/?utm\_content=bufferab70c\\&utm\_medium=social\\&utm\_source=linkedin.com\\&utm\_campaign=buffer) ## Code Katas \* Craft code \* \[Clean Code\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/clean-code) \* \[Write S.O.L.I.D code\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/write-s.o.l.i.d-code) \* \[Pure Functions\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions) \* \[Clean Architecture\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/clean-architecture) \* \[Functional Programming made easy in Java & C#\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/functional-programming-made-easy-in-java-and-c) (Vavr / Language-ext) \* Test Driven Development \* \[Stack kata\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas/stack) \* \[Fizzbuzz kata\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas/fizzbuzz) \* \[Outside-in TDD\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas/outside-in-tdd) \* Testing Practices \* \[Hands-on mocking\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking) \* \[Property-Based testing\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/improve-your-software-quality-with-property-based-testing) \* \[Approval Testing with Gilded Rose kata\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/gilded-rose-approval-testing) \* Refactoring \* \[Mikado Method\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mikado-method) \* \[Theatrical players refactoring Kata\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata) (OO and FP style) \* \[Refactoring Journey\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-journey-kata) \* \[Kata Catalog\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas) ## \[Serious games\](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games) \* \[Craftsminator : découvrez le Software Craftsmanship à l'aide d'un Escape Game à base de cartes\](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator) \* \[Agile comfort zone\](https://cedricpm.s3.eu-west-3.amazonaws.com/AGILE+COMFORT+ZONE+GAME.pdf) \* \[Drive and intrinsic motivation\](https://www.dropbox.com/s/tk4kzcdl9jtwgfj/drive-and-intrinsic-motivation-game.pdf?dl=0) \* \[Craft-challenges : discover Technical Agile Practices\](https://play14.org/games/craft-challenges) \* \[Yata - a DevOps game\](https://play14.org/games/yata) \* \[Customer Journey from mars\](https://play14.org/games/my-customer-journey-from-mars) \* \[DES’PO’RATE HOUSEWIVES\](https://play14.org/games/desporate-housewives) --- # Unknown \> For the complete documentation index, see \[llms.txt\](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending \`.md\` to page URLs; this page is available as \[Markdown\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship.md). # Software craftsmanship ### Useful Resources \* \[Mob programming facilitator guide\](https://github.com/fhiegel/MobProgramming/blob/master/guide/MobProgrammingFacilitorsGuide\_French.md) \* \[Mob programming resources \](https://github.com/NazeeHajebi/Talks/blob/master/FacilitatingMobProgramming.md) #### "How to Read Complex Code" by Dr Felienne Hermans (@felienne) \* Cognitive Refactoring \* Video available here : !\[\](/files/-McUVO07MVuEpH3Af6J2) \* \[Choosing an HTTP Status Code — Stop Making It Hard\](https://www.codetinkerer.com/2015/12/04/choosing-an-http-status-code.html) \* \[How to measure Software Quality improvement\](https://promyze.com/fr/quels-indicateurs-damelioration-de-la-qualite-du-code/) --- # My Activity | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/my-activity.md) . [Retour sur mon année 2020](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020) [PreviousWho Does What By How Much?](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/who-does-what-by-how-much) [NextRetour sur mon année 2020](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020) --- # Practices | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices.md) . A compilation of team practices to use in your teams : [Pair Programming](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming) [Co-designs](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs) [Design sessions](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/design-sessions) [PreviousSoftware craftsmanship](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship) [NextPair Programming](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming) Last updated 5 years ago --- # Xtrem Reading | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading.md) . [Cultivate Team Learning with Xtrem Reading](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading) [My Book Infographics](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/my-book-infographics) [How to make book infographics](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics) [En route vers l’apprenance avec Xtrem Reading](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading) [Resources](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources) [PreviousLSP in your job interviews](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews) [NextCultivate Team Learning with Xtrem Reading](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading) Last updated 4 years ago --- # Forward Summit 2020 | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/leadership/forward-summit-2020.md) . Here are some great insights from the [Forward Summit 2020](https://fwd-summit.com/) [PreviousBref. J'ai pris une tarte dans la gueule (et ça fait extrêmement de bien)](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien) [NextLearn leadership from the Navy SEALs](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals) Last updated 5 years ago --- # Software Architecture | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture.md) . ### Resources[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture#resources) * [Would you like architects with your architecture?](https://architectelevator.com/architecture/organizing-architecture/) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdGT4H_woLZj4y8rd34%252F-MdGTLpUwYYqwjXMo_EF%252Fimage.png%3Falt%3Dmedia%26token%3D7e9f2677-67e7-490f-9181-131c594dd4d3&width=768&dpr=3&quality=100&sign=67c7e6b7&sv=2) #### Books[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture#books) * [https://github.com/mhadidg/software-architecture-books](https://github.com/mhadidg/software-architecture-books) #### Tools[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture#tools) * Creates diagrams from textual descriptions! * [https://kroki.io/](https://kroki.io/) * C4 model : [https://dev.to/simonbrown/diagramming-distributed-architectures-with-the-c4-model-51cm](https://dev.to/simonbrown/diagramming-distributed-architectures-with-the-c4-model-51cm) [PreviousHow to read code better](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain/how-to-read-code-better) [NextFundamentals of Software Architecture](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/fundamentals-of-software-architecture) Last updated 4 years ago --- # Serious games | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/serious-games.md) . What is gamification ? Serious games ?[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games#what-is-gamification-serious-games) ------------------------------------------------------------------------------------------------------------------------------------------ > “Gamification is the application of game-design elements and game principles in non-game contexts.” - Wikipedia A set of activities and processes to solve problems by using or applying the characteristics of game elements. Gamification commonly employs game design elements to improve : * User engagement * Organizational productivity * Flow * Learning * Crowdsourcing * **Employee recruitment and evaluation** * Ease of use * Usefulness of systems * ... A collection of research on gamification shows that a majority of studies on gamification find it has positive effects on individuals. [PreviousLeadership is language](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language) [NextMy serious games](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games) Last updated 6 years ago --- # Test your architecture with Archunit | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit.md) . The purpose of this workshop is to understand by the practice how a tool like [Archunit](https://www.archunit.org/) can help you ensure : * Team architecture decision * Structural rules (Class dependencies) * Coding guidelines * Naming conventions * Linguistic Anti-patterns ### Source code[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit#source-code) Source code is available [here](https://github.com/ythirion/archunit-examples) in : * Scala * C# 10 * java ### Connection - Your current software architecture[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit#connection-your-current-software-architecture) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FYKgRhRNr5Cpe0VEql3fg%252Fimage.png%3Falt%3Dmedia%26token%3D41c165d5-eac9-4bb8-ab43-1e2b0de22f67&width=768&dpr=3&quality=100&sign=953c9fa9&sv=2) ### Concepts[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit#concepts) * Explain what can be done with the different Use Cases in the slides below * Demo them with the code ### Concrete Practice[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit#concrete-practice) * Make them think about which kind of rules they are in their current projects * Often implicit ones * Let's write them with Archunit DSL ### Conclusion[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit#conclusion) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252F5TvqsmoFQqegJxxoUqEK%252Fimage.png%3Falt%3Dmedia%26token%3D596b1bcf-2361-49c1-a9af-714457b81044&width=768&dpr=3&quality=100&sign=1b15c3e7&sv=2) ### Resources[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit#resources) Slides to facilitate this workshop [PreviousDDD re-distilled](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled) [NextNoSQL](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql) Last updated 4 years ago * [Source code](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit#source-code) * [Connection - Your current software architecture](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit#connection-your-current-software-architecture) * [Concepts](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit#concepts) * [Concrete Practice](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit#concrete-practice) * [Conclusion](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit#conclusion) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit#resources) --- # Egoless Crafting | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/egoless-crafting.md) . Infographic[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/egoless-crafting#infographic) ------------------------------------------------------------------------------------------------------------------ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FxCpGZ65nS2Use47eX2Gn%252FEgoless%2520crafting.png%3Falt%3Dmedia%26token%3Df455c190-df20-4114-9051-54dabbf0ee78&width=768&dpr=3&quality=100&sign=a120cb63&sv=2) Egoless Crafting infographic [Egoless crafting.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAffO8xa1ZWmgZvfeK2%2Fuploads%2FYfmgV2kuLC1XSewlCSoa%2FEgoless%20crafting.pdf?alt=media&token=d2ea330a-8f57-4812-9a05-f8f424e02078) PDF · 216KB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAffO8xa1ZWmgZvfeK2%2Fuploads%2FYfmgV2kuLC1XSewlCSoa%2FEgoless%20crafting.pdf?alt=media&token=d2ea330a-8f57-4812-9a05-f8f424e02078) High resolution Egoless Crafting infographic Resources[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/egoless-crafting#resources) -------------------------------------------------------------------------------------------------------------- [https://egolesscrafting.org/](https://egolesscrafting.org/) [PreviousThe Software Craftsman](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman) [NextTechnical debt workshop](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop) Last updated 3 years ago * [Infographic](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/egoless-crafting#infographic) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/egoless-crafting#resources) --- # Leadership | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/leadership.md) . Resources[](https://yoan-thirion.gitbook.io/knowledge-base/leadership#resources) --------------------------------------------------------------------------------- * [Awesome engineering Management](https://github.com/ixaxaar/awesome-engineering-management) * Leadership guide for the Reluctant Leader by David Neal : [PreviousProject-to-Product Principles](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/project-to-product-principles) [NextBref. J'ai pris une tarte dans la gueule (et ça fait extrêmement de bien)](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien) Last updated 5 years ago --- # Resources | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources.md) . ### Infographic[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources#infographic) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fraw.githubusercontent.com%2Fythirion%2Fxtrem-reading%2Fmaster%2Frsc%2Fxtrem-reading-infography.png&width=768&dpr=3&quality=100&sign=d743eece&sv=2) ### Website[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources#website) [https://www.xtrem-reading.com/www.xtrem-reading.com](https://www.xtrem-reading.com/) ### Slide deck[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources#slide-deck) ### Xtrem Tech Watch[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources#xtrem-tech-watch) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fraw.githubusercontent.com%2Fythirion%2Fxtrem-reading%2Fmaster%2Frsc%2Fxtrem-tech-watch-infography.png&width=768&dpr=3&quality=100&sign=830a734e&sv=2) [PreviousEn route vers l’apprenance avec Xtrem Reading](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading) [NextBook notes](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes) Last updated 2 years ago * [Infographic](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources#infographic) * [Website](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources#website) * [Slide deck](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources#slide-deck) * [Xtrem Tech Watch](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources#xtrem-tech-watch) --- # How to debrief a game ? | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game.md) . 5 steps to debrief a game[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#id-5-steps-to-debrief-a-game) --------------------------------------------------------------------------------------------------------------------------------------------- As a facilitator you can follow those 5 steps in order to make the debrief efficient : ### **1) Feeling** **Let the participants talk**[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#id-1-feeling-let-the-participants-talk) * How did you feel during the exercise ? * What did you feel ? ### **2) Proofreading** After the feeling, **gather the facts**.[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#id-2-proofreading-after-the-feeling-gather-the-facts) * What happened ? * How did it go ? * What difficulties have emerged ? When ? ### **3) Learnings** Participants try to **theorize** their experience.[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#id-3-learnings-participants-try-to-theorize-their-experience) * What did you learn ? * What did you become aware of during this game ? * What would you have changed to reach a better result ? ### **4) Contextualization** Participants must try to **transpose it to their own professional context**.[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#id-4-contextualization-participants-must-try-to-transpose-it-to-their-own-professional-context) * What parallel could you do with your professional context ? * Have you had a sense of “déjà vu” ? * What is your interest in your work or your daily life ? * Did it seem realistic / exaggerated, why ? ### **5) Knowledge transfer** **Deliver theoretical insight** and evoke all the lessons that can be learned from the game.[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#id-5-knowledge-transfer-deliver-theoretical-insight-and-evoke-all-the-lessons-that-can-be-learned-from) > At the end, demonstrate that the **game is a formidable weapon**!!! Debriefing Cube[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#debriefing-cube) ---------------------------------------------------------------------------------------------------------------------- To debrief a game you can also use a tool called “Debriefing cube”. You can find all the informations about this cube [here](http://www.kilearning.net/TheDebriefingCube_CC-BY_v13.pdf) . ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAlIDhb0n1bXoGQRTV-%252F-MAlJYDXmWTpFC_zFwKe%252Fimage.png%3Falt%3Dmedia%26token%3D99b86b3c-4cd6-4321-a2e7-791abd09bda1&width=768&dpr=3&quality=100&sign=8eb02abc&sv=2) [PreviousHow to create a game](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game) [NextLego Serious Play (LSP)](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp) Last updated 6 years ago * [5 steps to debrief a game](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#id-5-steps-to-debrief-a-game) * [1) Feeling Let the participants talk](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#id-1-feeling-let-the-participants-talk) * [2) Proofreading After the feeling, gather the facts.](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#id-2-proofreading-after-the-feeling-gather-the-facts) * [3) Learnings Participants try to theorize their experience.](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#id-3-learnings-participants-try-to-theorize-their-experience) * [4) Contextualization Participants must try to transpose it to their own professional context.](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#id-4-contextualization-participants-must-try-to-transpose-it-to-their-own-professional-context) * [5) Knowledge transfer Deliver theoretical insight and evoke all the lessons that can be learned from the game.](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#id-5-knowledge-transfer-deliver-theoretical-insight-and-evoke-all-the-lessons-that-can-be-learned-from) * [Debriefing Cube](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game#debriefing-cube) --- # How to create a game | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game.md) . “_You can discover more about a person in an hour of play than in a year of conversation._” - Plato ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAziv5PreJiYzlKYhyE%252F-MAzk2k2M0KY3qo7iEDB%252Fimage.png%3Falt%3Dmedia%26token%3D0aa49bd6-4b0e-4659-a126-c21f3e3b3189&width=768&dpr=3&quality=100&sign=4cae6913&sv=2) ### 1) Define the purpose[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game#id-1-define-the-purpose) * What are our learning objectives ? * What do we want to demonstrate ? ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAziv5PreJiYzlKYhyE%252F-MAzkBBRZFzieORdRpVt%252Fimage.png%3Falt%3Dmedia%26token%3Dcb289dec-fc14-4685-b925-7ae31c7981c5&width=768&dpr=3&quality=100&sign=a9bae9a2&sv=2) ### 2) For who ?[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game#id-2-for-who) Define [personas](https://www.interaction-design.org/literature/article/personas-why-and-how-you-should-use-them) / who are our targets ? ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAziv5PreJiYzlKYhyE%252F-MAzkV4MNBTkeEfBEANN%252Fimage.png%3Falt%3Dmedia%26token%3D90870bec-0d99-4f19-9748-88922ab1562a&width=768&dpr=3&quality=100&sign=4d446082&sv=2) ### 3) Build a story[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game#id-3-build-a-story) Create an environment * Where * When * Who (characters ) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAziv5PreJiYzlKYhyE%252F-MAzkoF3d8KS4GvjEArf%252Fimage.png%3Falt%3Dmedia%26token%3Dfd3028b5-78c8-4157-b268-8bea47aa8255&width=768&dpr=3&quality=100&sign=6c5908fa&sv=2) ### 4) Choose or create a game play[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game#id-4-choose-or-create-a-game-play) Choose a game play (reuse the concepts of a given game) or create one. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAziv5PreJiYzlKYhyE%252F-MAzksHBHK4pzzd_a0KQ%252Fimage.png%3Falt%3Dmedia%26token%3D9d4c854a-e8b5-4719-92a5-13788c1109b2&width=768&dpr=3&quality=100&sign=ff7f446e&sv=2) #### Examples of [game mechanics](https://gusandco.net/2011/11/11/les-mecaniques-de-jeux/) :[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game#examples-of-game-mechanics) * Bluff : Je fais croire quelque chose (Poker, Perudo) * Stop ou encore : Je peux m’arrêter de jouer, ou continuer pour gagner plus de points * Course : Je gagne si j’arrive avant toi (Jeu de l’oie, Jamaica) * Programmation: Avant de jouer, je choisis parmi les différentes actions possibles * Mémoire : Si je me souviens des éléments / cartes précédemment jouées, je marque plus de points (Bonbons, Sherlock) * ... ### 5) Build the game[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game#id-5-build-the-game) Use an iterative approach to build the game : * Build a prototype * Test it * Reflect & adapt ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAziv5PreJiYzlKYhyE%252F-MAzlZU6QLFsg0a4lgnp%252Fimage.png%3Falt%3Dmedia%26token%3D42db6c07-18d5-4e3b-a5a9-7b1c3cc14649&width=768&dpr=3&quality=100&sign=5924a5b4&sv=2) [PreviousLibérez vos entretiens d’embauche avec la gamification](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator) [NextHow to debrief a game ?](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game) Last updated 6 years ago * [1) Define the purpose](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game#id-1-define-the-purpose) * [2) For who ?](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game#id-2-for-who) * [3) Build a story](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game#id-3-build-a-story) * [4) Choose or create a game play](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game#id-4-choose-or-create-a-game-play) * [5) Build the game](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game#id-5-build-the-game) --- # My serious games | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games.md) . Agile[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#agile) --------------------------------------------------------------------------------------------- ### Agile comfort zone game[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#agile-comfort-zone-game) * Spread an agile culture in your company with this small card game * [https://cedricpm.s3.eu-west-3.amazonaws.com/AGILE+COMFORT+ZONE+GAME.pdf](https://cedricpm.s3.eu-west-3.amazonaws.com/AGILE+COMFORT+ZONE+GAME.pdf) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9_PA10sA3a3I2CQSl%252F-MF9a1f--9_nhoUV5Mz6%252Fimage.png%3Falt%3Dmedia%26token%3D6cf808e8-7f1f-4cf5-b6cf-a735555fb252&width=768&dpr=3&quality=100&sign=77277d26&sv=2) ### Drive and intrinsic motivation[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#drive-and-intrinsic-motivation) * Discover the 3 pillars of intrinsic motivation * [https://www.dropbox.com/s/tk4kzcdl9jtwgfj/drive-and-intrinsic-motivation-game.pdf?dl=0](https://www.dropbox.com/s/tk4kzcdl9jtwgfj/drive-and-intrinsic-motivation-game.pdf?dl=0) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9_PA10sA3a3I2CQSl%252F-MF9aK14esijmMlk0vuX%252Fimage.png%3Falt%3Dmedia%26token%3D553e230b-fedd-43bf-9f1f-d13165697260&width=768&dpr=3&quality=100&sign=9db6109a&sv=2) ### Troublemakers[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#troublemakers) * In this game, participants will have fun and they could discover agile roles and think about forces involved inside agile transformations (for and against). * [https://play14.org/games/troublemakers](https://play14.org/games/troublemakers) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9YlglLL0inrP6DSAS%252F-MF9_2QhuVkNvpSv_UWl%252Fimage.png%3Falt%3Dmedia%26token%3D66d428ff-68ca-4120-b187-361367582311&width=768&dpr=3&quality=100&sign=bee0222e&sv=2) Technical Agile Coaching tools[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#technical-agile-coaching-tools) ----------------------------------------------------------------------------------------------------------------------------------------------- ### Craft challenges[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#craft-challenges) * Share the practices and the mindset associated to software craftsmanship and agility. * [https://play14.org/games/craft-challenges](https://play14.org/games/craft-challenges) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9ahldyQUxKg9eW5BG%252F-MF9atnTsFIz_U6A5AdP%252Fimage.png%3Falt%3Dmedia%26token%3Dc58bb54b-3d5f-420c-ba3b-01a742a17c33&width=768&dpr=3&quality=100&sign=2fd59bd1&sv=2) ### Craftsminator[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#craftsminator) * Craftsminator is an escape game based on cards that you can use in your dev recruitment process. [Libérez vos entretiens d’embauche avec la gamification](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9ahldyQUxKg9eW5BG%252F-MF9b8MqLsMjnwgigYTK%252Fimage.png%3Falt%3Dmedia%26token%3D6d74b96c-cd7b-42f0-a719-75df841e1830&width=768&dpr=3&quality=100&sign=181d7eb3&sv=2) ### Yata - a DevOps game[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#yata-a-devops-game) * This game will demonstrate major principles behind DevOps. * [https://play14.org/games/yata](https://play14.org/games/yata) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9YlglLL0inrP6DSAS%252F-MF9_DyjJcGsUXyKMF30%252Fimage.png%3Falt%3Dmedia%26token%3D5546283e-f36c-46b1-8e72-48205cf6d7a1&width=768&dpr=3&quality=100&sign=2d3fea1f&sv=2) Product Ownership[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#product-ownership) --------------------------------------------------------------------------------------------------------------------- ### **Customer Journey from mars**[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#customer-journey-from-mars) * Introduction to customer journey, story mapping, user story writing... * [https://play14.org/games/my-customer-journey-from-mars](https://play14.org/games/my-customer-journey-from-mars) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9YlglLL0inrP6DSAS%252F-MF9ZDsQAuu4tDHQJpvL%252Fimage.png%3Falt%3Dmedia%26token%3D7287b171-4302-486c-9466-57e04350db88&width=768&dpr=3&quality=100&sign=bea6dc46&sv=2) **DES’PO’RATE HOUSEWIVES** * Demonstrate how important it is for a delivery team to interact with its Product Owner * [https://play14.org/games/desporate-housewives](https://play14.org/games/desporate-housewives) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9YlglLL0inrP6DSAS%252F-MF9ZWtzOcruIvFBxESh%252Fimage.png%3Falt%3Dmedia%26token%3D51d8eb52-6099-4877-84aa-89637d4de4cd&width=768&dpr=3&quality=100&sign=2ab73fb9&sv=2) [PreviousSerious games](https://yoan-thirion.gitbook.io/knowledge-base/serious-games) [NextLibérez vos entretiens d’embauche avec la gamification](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator) Last updated 5 years ago * [Agile](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#agile) * [Agile comfort zone game](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#agile-comfort-zone-game) * [Drive and intrinsic motivation](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#drive-and-intrinsic-motivation) * [Troublemakers](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#troublemakers) * [Technical Agile Coaching tools](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#technical-agile-coaching-tools) * [Craft challenges](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#craft-challenges) * [Craftsminator](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#craftsminator) * [Yata - a DevOps game](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#yata-a-devops-game) * [Product Ownership](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#product-ownership) * [Customer Journey from mars](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games#customer-journey-from-mars) --- # How to make book infographics | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics.md) . Book infographic _is not something hard to do, just work and passion to share to be honest._ Here is the "process" I follow : ### 1) Read a book[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#id-1-read-a-book) * Yes that's not a really surprising step 😊 * Read the book by highlighting the passages that seem important * Those on which the author insists and which seem to be at fault for the rest of the book * Take notes: directly on the page or on another support ### 2) Centralize your book notes[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#id-2-centralize-your-book-notes) * Because I read paper books, I retype my notes and key passages on my computer * Add schemas if some ### 3) Filter your notes[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#id-3-filter-your-notes) Put your notes in a new file that will serve as a driver for the book infographic * Based on the notes and passages in the book, make a selection * We are not able to represent an entire book in graphic format : Limit yourself to a few key ideas and limit its explanation to a few bullet points ### 4) Infographic work[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#id-4-infographic-work) Once the "filtering" is done, we can start the infographic work * To do this, I use: [https://www.canva.com/](https://www.canva.com/) * The site contains templates to have a working base * Select a basic template and iterate on it * For each part: * Put yourself in a part of the infographic and try to represent the information in a visual way based on your filtered notes (from previous step) * Ideally use 1 pictogram per main idea -> try to select some that have the same style * Few bullet points under the headlines : 2/3 lines maximum, the more visual, the better * The tool is a vector tool, you can group parts and resize them at will * Once you have created the different parts that you want to appear on the book infographics, comes the longest moment: the assembly * Try to group the information in a coherent way by occupying the space * No worries if there are "blanks" in the infographic : we can easily fill them with geometric shapes to reinforce our design * I recommend to do several tests and ask for feedback : first feedback -> yours * Export it as a pdf or image and look at your infographic after a night of sleep * You'll see spelling mistakes and shifts or space occupancy that can be improved ### 5) Done[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#id-5-done) Once finalized, you just have to export it in PDF (high resolution) and that's it ### Some advice[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#some-advice) * Do not reformulate author ideas (they are not yours and you could alter author ideas) * It takes time to do it so you need to have a strong objective in mind * Iterate a lot by taking others feedbacks ### Objective[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#objective) I do it for multiple reasons: * Book infographics allow me to anchor in my memory what I discover through a book. * I have not found anything better at the moment. * I love to learn by reading and there are books that you like so much that you want to share them with others. * Through the infographics I hope to share my passion for these books and make others want to read them too. > Knowledge is the only thing that grows when you share it... #sharingiscaring [PreviousMy Book Infographics](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/my-book-infographics) [NextEn route vers l’apprenance avec Xtrem Reading](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading) Last updated 4 years ago * [1) Read a book](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#id-1-read-a-book) * [2) Centralize your book notes](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#id-2-centralize-your-book-notes) * [3) Filter your notes](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#id-3-filter-your-notes) * [4) Infographic work](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#id-4-infographic-work) * [5) Done](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#id-5-done) * [Some advice](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#some-advice) * [Objective](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics#objective) --- # F# for OO programmers | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/f-for-oo-programmers.md) . [PreviousFunctional Programming made easy in C# with Language-ext](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext) [NextDomain Modeling Made Functional](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/domain-modeling-made-functional) Last updated 5 years ago --- # Unknown \> For the complete documentation index, see \[llms.txt\](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending \`.md\` to page URLs; this page is available as \[Markdown\](https://yoan-thirion.gitbook.io/knowledge-base/my-activity.md). # My Activity - \[Retour sur mon année 2020\](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020.md) --- # Towards a learning organization and beyond | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond.md) . Learning organization[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#learning-organization) ---------------------------------------------------------------------------------------------------------------------------------------------------- > A learning organization is a group of people who are continually enhancing their capabilities to create what they want― **Peter M. Senge**, The Fifth Discipline: The Art & Practice of The Learning Organization ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAg7I1MP8VR_ha7WzLC%252F-MAg8u1hGGlsVNcHYuXK%252Fimage.png%3Falt%3Dmedia%26token%3Dcbc4085d-ef39-4627-9ca6-2f0d9d4893c5&width=768&dpr=3&quality=100&sign=8fbb27fe&sv=2) The five disciplines of learning organizations presented on the picture above are interrelated. Each discipline cannot stand independently. Team learning[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#a87d) --------------------------------------------------------------------------------------------------------------------------- > _The only sustainable competitive advantage for a company is to learn faster than the competitors —_ _**Arie de Gues**_ According to Peter Senge, to accomplish excellent functional team dynamics, **team-learning is a primary importance**. It is crucial for the teams to consider others as team members instead of rivals. It is the first step to set up dialogues wherein people dare to be vulnerable and express their real personality. The **working environment should be safe** where honest mistakes are forgiven. Team Learning happens when teams start ‘thinking together’ by sharing their : experience, knowledge, skills and insights with each others about how to do things better. How to stimulate team learning ?[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#id-5f6a) ------------------------------------------------------------------------------------------------------------------------------------------------- Leaders must promote and support this learning by creating a conducive environment. > Organizational leaders need to **lead by example** so they need to share their own experience, knowledge and skills as any other organization member. They need to show their interest for any learning experience. ### **Examples of learning experiences**[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#e6d2) In your organization, you can initiate this culture of learning by organizing internal events like : * **Brown bag lunches / lunch & learn** — Learning opportunities that are supplied during the employees’ lunch break. It could be a formal presentation or informal discussions about a given problem for example. * **Book club**—A space to discuss/exchange about a given book. * **Open Space Technology** — A method for structuring conversations and conferences. With this method, groups of 5 to 2,000 participants can come together and work together. The characteristic of the method is the openness put at the same time on the content but also on the form. Participants are invited to work together on an important and complex theme. * **Lean coffees** — A structured, but agenda-less meeting. Participants gather, build an agenda, and begin talking. Conversations are directed and productive because the agenda for the meeting was democratically generated. * **Lightning talks** — a very short presentation lasting only a few minutes. Several lightning talks will usually be delivered by different speakers in a single session. * **Workshop** — Organize learning/hands on workshops in which 1 team can share its experience on a given topic to the rest of the organization. * **Organizational retrospective** —An opportunity for everyone in the organization to inspect the organization and create a plan for improvements to be enacted. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2250%2F0*rBy49zuSpO1S2tXk&width=768&dpr=3&quality=100&sign=58a32dab&sv=2) Our own tools[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#id-6fb5) ------------------------------------------------------------------------------------------------------------------------------ ### Xtrem Reading[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#id-026d) A technique that allows people to **read 2 books in 1 hour in a collective way**. The format has been created to stimulate the collective intelligence and learn new stuff in group. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F3158%2F1*2hAlWgpo_AnCtdTGaWdqQw.png&width=768&dpr=3&quality=100&sign=e3cab120&sv=2) Learn more about it [here](http://bit.ly/2VnPx6g) . ### Xtrem Tech Watch[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#ed0c) A technique that allows people to **discover new topics collectively**. We use this format for our technological watch. At the end of the exercise, each group of 2 or 3 share their discoveries to the rest of the audience just like in a lightning talk. Combined with the usage of a technology radar it is a really powerful tool. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2233%2F1*F66Cwbe0Wz6cmmzDnf9YnA.png&width=768&dpr=3&quality=100&sign=fe4d326e&sv=2) Learn more about it [here](https://www.xtrem-reading.com/rsc/xtrem-tech-watch-infography.png) . ### Craft challenges[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#b84e) We love to use gamification for our day to day coaching. To share the craft culture for example we have created a game called “craft-challenges”. The game is a powerful tool to spread knowledge and build new capabilities as well. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F268%2F1*lI-pSsLHZd6fvLbGwncsEw.jpeg&width=768&dpr=3&quality=100&sign=6ab54465&sv=2) Learn more about it [here](http://bit.ly/2WDxHZz) . Conclusion[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#f7ac) ------------------------------------------------------------------------------------------------------------------------ **Starting your journey to the learning organization by stimulating team learning is a good place to start**. If you set one discipline, the interrelation between them will enable the organization to identify complexities and opportunities both internal and external to the organization.Learning organization [PreviousLearn to lead and help your team(s) to be successful](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful) [NextLeadership is language](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language) Last updated 6 years ago * [Learning organization](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#learning-organization) * [Team learning](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#a87d) * [How to stimulate team learning ?](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#id-5f6a) * [Examples of learning experiences](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#e6d2) * [Our own tools](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#id-6fb5) * [Xtrem Reading](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#id-026d) * [Xtrem Tech Watch](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#ed0c) * [Craft challenges](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#b84e) * [Conclusion](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond#f7ac) --- # Lego Serious Play (LSP) | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp.md) . What is it ?[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#what-is-it) -------------------------------------------------------------------------------------------------------------- The LEGO® SERIOUS PLAY® methodology is an innovative process designed to enhance innovation and business performance. Based on research which shows that this kind of hands-on, **minds-on learning produces a deeper, more meaningful understanding of the world and its possibilities**, the LEGO® SERIOUS PLAY® methodology deepens the reflection process and supports an effective dialogue – for everyone in the organization. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzUjXr4kJrEHQlHem6%252F-MAzbHJPQCKfFf7mdRz3%252Fimage.png%3Falt%3Dmedia%26token%3D198305c2-7cf0-4e99-ada1-26df63055d40&width=768&dpr=3&quality=100&sign=c062e781&sv=2) ### When to use it ?[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#when-to-use-it) * Team building * Retrospective * Innovation * Align people in a team / organization * Problem solving * Build a vision * Leadership development * Coaching (1 to 1, Team) * Job interview How to facilitate a session ?[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#how-to-facilitate-a-session) ------------------------------------------------------------------------------------------------------------------------------------------------ ### Big picture[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#big-picture) #### The challenge[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#the-challenge) The facilitator asks one question (clear + opened). ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzcJYUXO10xjm68FnT%252F-MAze_PYa-giLcrILWp2%252Fimage.png%3Falt%3Dmedia%26token%3D8bf0fb3b-e985-43a1-a707-6f0f705121cb&width=768&dpr=3&quality=100&sign=6ae8b0e4&sv=2) #### Metaphor - Build a model[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#metaphor-build-a-model) Participants build their own model in response to the question that has been asked. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzcJYUXO10xjm68FnT%252F-MAzeqtPU2_H6GNavkvb%252Fimage.png%3Falt%3Dmedia%26token%3Dd657c19c-ded4-46d8-b020-0022ff1a0a11&width=768&dpr=3&quality=100&sign=2f1f17e0&sv=2) #### Sharing – story telling[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#sharing-story-telling) Participants share their model’s meaning and story. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzcJYUXO10xjm68FnT%252F-MAzf48yA-VA9IaXZI6z%252Fimage.png%3Falt%3Dmedia%26token%3D03c758d9-0d78-487f-8c96-2cab5550ad91&width=768&dpr=3&quality=100&sign=653097c&sv=2) #### Questions / reflections[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#questions-reflections) Each participant asks questions about the model. ### Ice Breaker : Build a duck[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#ice-breaker-build-a-duck) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzcJYUXO10xjm68FnT%252F-MAzfV_55EeyAFTBomSg%252Fimage.png%3Falt%3Dmedia%26token%3D57ca746f-da8b-4965-9505-2d9c5cdccb3f&width=768&dpr=3&quality=100&sign=156c4aac&sv=2) * Ask the participants to build a duck with 7 bricks. * Each participant explains how it is a duck ? * Ask them to remove 3 bricks * Explain how is it still a duck ? “_Imagination is more important than knowledge._” - A. Einstein [PreviousHow to debrief a game ?](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game) [NextLSP in your job interviews](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews) Last updated 6 years ago * [What is it ?](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#what-is-it) * [When to use it ?](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#when-to-use-it) * [How to facilitate a session ?](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#how-to-facilitate-a-session) * [Big picture](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#big-picture) * [Ice Breaker : Build a duck](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp#ice-breaker-build-a-duck) --- # Learn to lead and help your team(s) to be successful | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful.md) . A few weeks ago, I have written an article called “Learn leadership from the Navy SEALs” to wrap up what I had learned from the book [_**Extreme Ownership: How U.S. Navy SEALs Lead and Win**_](https://www.amazon.com/Extreme-Ownership-U-S-Navy-SEALs-ebook/dp/B00VE4Y0Z2) by [Jocko Willink](https://twitter.com/jockowillink) and [Leif Babin](https://twitter.com/LeifBabin) . [Learn leadership from the Navy SEALs](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals) I liked the principles from this book so much that I have read the latest book from [Jocko Willink](https://twitter.com/jockowillink) : [_**LEADERSHIP STRATEGY AND TACTICS : field manual**_](https://www.amazon.com/Leadership-Strategy-Tactics-Field-Manual/dp/1250226848) released in January 2020. In this article, I will share with you what really marked me in this one. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F224%2F1*-l-A3uaK9X418m5a43dJIA.png&width=768&dpr=3&quality=100&sign=7efc6bd7&sv=2) Just like in Extreme Ownership, Jocko teaches us how to lead based on his Navy Seals and consultant experiences. The book is structured in 2 parts : Leadership strategies & Leadership tactics. Leadership strategies[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful#id-257e) ----------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2699%2F1*YLhq989f-tyCak578sfX5Q.png&width=768&dpr=3&quality=100&sign=b570e8f4&sv=2) Those are the core principles that a leader should incarnate every day. * **Detach** : a good leader needs to detach mentally from the problem to be able to see more than anyone else. * **Arrogance & humility** : arrogant leaders are not followed by their subordinates because often they do not listen to them, they think any tasks are beyond them, they use only “I” pronoun and are not inclusive. At the contrary, humble ones are. They lead by example and always say what they do and do what they say so you can trust them. They use mostly the pronoun “We” and always act for the success of their men. * **The power of relationships** : As a leader you need to create strong relationships up and down the chain. At the end leading is all about human collaborating for a given purpose. To build good relationships you need to do it by building trust and being fully transparent. You need to do it even with bad leader up the chain, it can help your team better accomplish the missions. * **Leaders are born or made ?** The answer is both. In both cases the skills required to lead are : communication (simple and clear), confidence, read people and be able to acknowledge his/her strengths and weaknesses. This last point is very important : _Good leaders build teams that counterbalances their weaknesses._ * **Leaders tell the truth :** to build trust leaders need to always tell the truth and be transparent about everything, good and bad things as well. Leaders can kill any rumors just by using this very simple tool that is truth. * **Stay humble & always learn** : a leader must constantly improve and learn to face challenges that could arise in a near future. To do so they need to remain humble and acknowledge they always have space for improvement. * **Earning influence and respect** : respect people by allowing them to give their opinion and listen to them. Really listen to them. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2699%2F1*AYLglGLmbiOi4RzrtCulzQ.png&width=768&dpr=3&quality=100&sign=dc1c6919&sv=2) * **Don’t overreact :** people don’t like when leaders overreact, it means the leader is not really in control and might make irrational decisions. In this kind of moment, detach mentally from the situation, remain calm and stay in control by taking logical decisions according to the situation. * **Self discipline :** optimal discipline is not imposed by the leader it is chosen by the team. You can not order discipline, it is not effective at all. If they truly understand the why they will discipline themselves : self discipline. _If people have no input, they have no ownership, when they have no ownership, they have no personal stake in driving mission success._ * **Pride** : it can be an aspirational influence that drives successful positive behavior. It helps people to care about what they do. You can inspire from army and sport to stimulate pride in your organizations : strong history, trophies, articles, awards, good reviews. When there is pride, team do not allow substandard performance : team polices itself. * **Giving orders** : as a leader you should not dictate orders, you should explain objectives : reveal the intents so people can elaborate plan to reach them. When plans are there, they will be really committed on it. Sometimes their plans will be different from yours and you need to accept it. Once again stay humble and let your own plan go. * **Yes-men** : never be surrounded by YES-MEN subordinates, prefer people who has : the confidence and the trust to say the truth to you, to challenge you. If you are not able to listen to this kind of people, check your ego. At the end of the part 1 of the book, Jocko introduces an exception to a principle he called : “No Bad teams, only Bad leaders”. He explains that it is possible to have a good team that delivers outstanding performance with a really bad leader. By this he wants to remind us that : * Leadership is the most important factor in the success of any team and organization * Leadership may not always come from the structural leader, it can come inside the team themselves. That’s why leaders up the chain must really well know their people to detect this kind of stuff. **Using leadership to teach and build**[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful#id-9afe) ----------------------------------------------------------------------------------------------------------------------------------------------------------------- _The most powerful weapon of a leader is leadership itself._ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2699%2F1*4qZcNfF1-pfr_kEfB65DcA.png&width=768&dpr=3&quality=100&sign=5543504&sv=2) It was really a slap on my face when I read it : by giving people responsibility it will teach them to be better in a multitude of ways. So as a leader it can help you : * **Fix a negative attitude** : when a person is poor performing and has a negative attitude it’s often because this person has the feeling to waste his or her talent. So give this person some responsibility, he or she could completely change of behavior and impress you. * **Teaching humility :** the medicine for lack of confidence or overconfidence if the same put the individual in charge. To do so you must mitigate the risk : select missions that apply just enough pressure and carry low enough risk. * **Building high-level team players :** good leaders develop their teams by putting junior people in charge so they become more experienced & knowledgeable. It makes them better in a really short amount of time. Leadership is a tool that can help you help your people so use it. How to succeed as a new leader[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful#id-3ac9) -------------------------------------------------------------------------------------------------------------------------------------------------------- To succeed as a new leader Jocko gives us a lot of advice : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2699%2F1*6Xj7xyFcz2Gglk88wtwGdA.png&width=768&dpr=3&quality=100&sign=12753038&sv=2) * **Be humble :** it is an honor to be in a leadership position so remain humble. Your team is counting on you to make the right decisions. * **Don’t act like you know everything :** you don’t. The team knows that. Ask smart questions, show that you have interest for people and what they do. * **Listen :** ask for advice and heed it. * **Treat people with respect :** take care of your people and they will take care of you. * **Take ownership :** as the leader you must take ownership of failures and mistakes. * **Pass credit :** pass credit for success up and down the chain. * **Work hard :** as the leader you should be working harder than anyone else in the team. You must remain that no job is beneath you. * **Have integrity :** do what you say; say what you do. Do not lie up or down the chain of command. * **Be balanced :** extreme actions and opinions are usually not good. * **Be decisive :** when it is time to make a decision, make one. * **Build relationships :** it is your main goal as a leader. A team is a group of people who have relationships & trust one another. * **Lastly, get the job done :** that is the purpose of a leader — lead a team in accomplishing a mission. Leadership self-assessment[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful#id-2959) ---------------------------------------------------------------------------------------------------------------------------------------------------- If at this moment you lead 1 or multiple teams I propose you to : * Self evaluate yourself on the principles enunciated just before through the radar below * Ask your subordinates to evaluate you as well * Compare the results to find improvement areas. To do it put your ego away and reflect on what you will find. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2699%2F1*F0WDmmTcAanhGTdC1oCM8w.png&width=768&dpr=3&quality=100&sign=6360d9a7&sv=2) “The leadership strategies and tactics in this book are to be used not so YOU can be successful; these strategies and tactics are to be used so THE TEAM can be successful” — _**Jocko WILLINK**_ I hope you enjoyed this article, if yes I strongly advice you to read the book ;-) Infographic[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful#infographic) ----------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MM0MGrhGxkO2mQgnnwn%252F-MM0MQ1T9b2Ybhxto7jp%252Fimage.png%3Falt%3Dmedia%26token%3Dcfec91ee-e407-4503-b9e6-9c570f9674a6&width=768&dpr=3&quality=100&sign=2582df55&sv=2) Home-made infographic of the book [leadership strategy.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MM0MGrhGxkO2mQgnnwn%2F-MM0N-jMnAvzpO8h20xh%2Fleadership%20strategy.pdf?alt=media&token=18a6628e-3d58-421f-bd71-5bab9561198d) PDF · 94KB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MM0MGrhGxkO2mQgnnwn%2F-MM0N-jMnAvzpO8h20xh%2Fleadership%20strategy.pdf?alt=media&token=18a6628e-3d58-421f-bd71-5bab9561198d) High resolution infographic pdf Support[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful#support) --------------------------------------------------------------------------------------------------------------------------------- Here is a slide decks based on this article : [PreviousLearn leadership from the Navy SEALs](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals) [NextTowards a learning organization and beyond](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond) Last updated 5 years ago * [Leadership strategies](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful#id-257e) * [Using leadership to teach and build](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful#id-9afe) * [How to succeed as a new leader](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful#id-3ac9) * [Leadership self-assessment](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful#id-2959) * [Infographic](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful#infographic) * [Support](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful#support) --- # LSP in your job interviews | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews.md) . Why you should use LSP during job interviews ?[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#why-you-should-use-lsp-during-job-interviews) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- With LSP it's easier to discover the real person behind the candidate mask : * Mindset * Soft skills * Imagination * Story telling * Innovation Openness * Even technical skills When you use it in interview it is no longer a "conducted" interview. You speak from equal to equal. Examples of challenges you could use[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#examples-of-challenges-you-could-use) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ### Perfect team / Organization[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#perfect-team-organization) #### How do you imagine your perfect team ?[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#how-do-you-imagine-your-perfect-team) * What are the values of the team? * What is the mindset of the team? * The mood of the team? * The communication/interactions in the team ? ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzgRufs00Pli8rlRSr%252F-MAzhSz-bMu99fqBoDkn%252Fimage.png%3Falt%3Dmedia%26token%3D483b92c4-3616-4165-9f14-4825986adb64&width=768&dpr=3&quality=100&sign=c9eaee01&sv=2) ### Motivation[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#motivation) * What are your different sources of motivation ? * How do you keep / feed your motivation ? ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzgRufs00Pli8rlRSr%252F-MAzhtbhPWCzPXkCoNtZ%252Fimage.png%3Falt%3Dmedia%26token%3Dc9a7f052-8b18-4df6-8474-96ae482144e5&width=768&dpr=3&quality=100&sign=5b06bf24&sv=2) ### Your role / job[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#your-role-job) * What is your role ? * How do you perceive this role ? * What is easy in your role? * What is difficult in your role? ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzgRufs00Pli8rlRSr%252F-MAzi31CLsriUQL_bus7%252Fimage.png%3Falt%3Dmedia%26token%3Dc31ce506-31ab-44bb-987e-c3bf736f6e88&width=768&dpr=3&quality=100&sign=30f4a6a9&sv=2) ### You in your role[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#you-in-your-role) * How do you see yourself in your role ? * How do you feel in this role ? ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzgRufs00Pli8rlRSr%252F-MAziDEqV5OZYTIk38OF%252Fimage.png%3Falt%3Dmedia%26token%3Dcce98f32-ffd9-4e71-8c20-1d85e9abd821&width=768&dpr=3&quality=100&sign=8b7476c4&sv=2) ### Agile expedition[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#agile-expedition) Imagine you have been in a great agile company for a learning expedition. You had the opportunity to observe attractive patterns of agility. * _**What are your best souvenirs of your expedition ?**_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzgRufs00Pli8rlRSr%252F-MAziOsT3W_TLdSJmO_3%252Fimage.png%3Falt%3Dmedia%26token%3Dd5c2156d-0c78-49ab-9ab4-144cb4749192&width=768&dpr=3&quality=100&sign=dc9c17c7&sv=2) ### Behavior[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#behavior) Tell me about a time your behavior had a positive impact on your team or colleagues. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzgRufs00Pli8rlRSr%252F-MAziWzo2sTWJ7s4ODhf%252Fimage.png%3Falt%3Dmedia%26token%3Da0fe87d1-0752-4770-b9dc-94e0a05ada65&width=768&dpr=3&quality=100&sign=ad518193&sv=2) ### Other challenges[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#other-challenges) * I would love to hear about your proudest professional moment. * Tell me about a time you took a risk and it succeeded. * Tell me about a time you took a risk and it failed. * What are you secrets for being more productive? ### Ask interview's feedback[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#ask-interviews-feedback) * What did you appreciated in this interview ? * What you would like to change in a future similar interview ? [PreviousLego Serious Play (LSP)](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp) [NextXtrem Reading](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading) Last updated 6 years ago * [Why you should use LSP during job interviews ?](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#why-you-should-use-lsp-during-job-interviews) * [Examples of challenges you could use](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#examples-of-challenges-you-could-use) * [Perfect team / Organization](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#perfect-team-organization) * [Motivation](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#motivation) * [Your role / job](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#your-role-job) * [You in your role](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#you-in-your-role) * [Agile expedition](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#agile-expedition) * [Behavior](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#behavior) * [Other challenges](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#other-challenges) * [Ask interview's feedback](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/lego-serious-play-lsp/lsp-in-your-job-interviews#ask-interviews-feedback) --- # Bref. J'ai pris une tarte dans la gueule (et ça fait extrêmement de bien) | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien.md) . Introduction[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#introduction) -------------------------------------------------------------------------------------------------------------------------------------------------------------- En bref, outre pouvoir passer plus de temps en famille; ce temps "gagné" en 2020 fut l'occasion pour moi de rattraper, tout du moins en partie, mes lectures en retard. Comme de nombreux passionnés je suis atteint de ce que les japonais appellent TSUNDOKU (積ん読) ou accumulation de livres**.** ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Flh3.googleusercontent.com%2FING52TopzhDktKoZv7fTadwnG6r_0El-mEq54QevXCP5l1SltueUpNGlT8DyF9TF4lLOAn-KQbTptxXZt2pbsA08HRQAOZRMVPQTG-gVexjCYXzg_3T9R-MxIs5-lpc80B6A6dc&width=768&dpr=3&quality=100&sign=e5399887&sv=2) Dans ma fameuse pile de livres m'attendait sagement le nouveau livre de L. David Marquet : "**Leadership is Language**". Tu as peut-être déjà entendu parler de lui, il a inspiré un tas de personnes avec son précédent livre "Turn the Ship Around! A True Story of Turning Followers Into Leaders” et sa prestation lors d'un Ted Talk en 2012. La promesse de son nouveau livre : proposer un nouveau manuel de leadership permettant de responsabiliser ses collaborateurs et les mettre sur la voie de l'amélioration continue le tout basé sur le langage. Tout un programme des plus excitants !!! C'est ici que commence mon "histoire". Comme toute bonne histoire, celle-ci commence par une bonne grosse "tarte dans la gueule". En effet, ce que je souhaite partager avec toi aujourd'hui c'est une pépite que j'ai découvert dans cette lecture et qui a déclenché un long questionnement en moi. C'était une tarte de puissance 20 (a minima). ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Flh6.googleusercontent.com%2FwTbkdz83286Cl2bFiLCwx__BDDxUVxmNIpsJ1pyS3LSJ575sXXDQ45zwNw5aPF0kaxxnzpoC63rFMuHqepVLbP57F_UWbto3RzGOyHOJf_Toyts41vCoqWyyEj7S9V86kBP-8_I&width=768&dpr=3&quality=100&sign=3cde69b6&sv=2) Moi après ma tarte ### D'où sort ce nombre ?[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#dou-sort-ce-nombre) A vrai dire c'est plutôt simple, la puissance de la tarte dans la gueule est proportionnelle à la profondeur de la réflexion qu'elle entraîne : P\=R∗JP = R \* J P\=R∗J Avec : * R : Profondeur de la réflexion "immédiate" en heure * J : Profondeur de la réflexion "profonde" en jour Mon objectif étant de te faire vivre toi-même ce moment, je ne t'en dirai pas plus à cette étape et te propose de dérouler un atelier (que tu pourras rejouer à l'extérieur de ce livre). Comme tout atelier que je prépare depuis ma découverte de l'excellent "[_**Training From The Back of The Room**_](https://bowperson.com/) " je l'ai préparé en utilisant le formats [4C](https://wikiagile.cesi.fr/index.php?title=4C_Canevas_de_formation) . J'en profite pour te remercier Laurent pour cette belle découverte : une autre tarte dans la gueule je dois l’admettre. Connexion[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#connexion) -------------------------------------------------------------------------------------------------------------------------------------------------------- Repense aux dernières célébrations, félicitations que tu as formulé à tes proches ou au travail : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Flh5.googleusercontent.com%2F3AtabOrunW-pr8Wuz5Ut3O0gYS0AQTzWazVUSou68ohHmShcdW48-8KPkA59_5ODFYvNpzUzGdoL1iesuJtjxD8jSb9xH959bl317goXCcBnFWTsAiIvgiwI89pnuxYY9WAHJro&width=768&dpr=3&quality=100&sign=e2e46c32&sv=2) Concepts[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#concepts) ------------------------------------------------------------------------------------------------------------------------------------------------------ En faisant moi-même cet exercice je me suis rendu compte d'une chose décrite par David Marquet : je m'inclus systématiquement dans la célébration. Nous sommes beaucoup dans ce cas-là et le faisons souvent de 2 manières : * Soit en se positionnant en tant que juge : "quel travail de dingue t'as abattu !", "tu t'es vraiment surpassé cette fois !" * On juge, souvent inconsciemment, le résultat de la personne. * Soit en s'appropriant la célébration : "je suis si fier de toi !" * Ici on transfert la récompense vers soi : c'est **je** qui est **fier**. ### Qu'est-ce que cela implique ?[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#quest-ce-que-cela-implique) C'est à ce moment précis de ma lecture que ma joue droite a commencé à sentir la tarte arriver... Prenons un exemple illustrant la suite de mes propos : ma fille range sa chambre, elle ramasse ses jouets et ses livres et les disposent afin qu’ils soient très facilement accessibles la prochaine fois, sans devoir fouiller comme les 200 fois précédentes. Elle a fini et j'arrive dans sa chambre en lui disant : "je suis tellement fier de toi que tu aies rangé ta chambre". A ce moment-là, sans le vouloir je lui vole sa motivation. En effet, je rends cette motivation extrinsèque. Au lieu d'éprouver une joie intérieure en raison de l'accomplissement lui-même. Sa satisfaction va désormais provenir d'une source extérieure : rendre ses parents fiers d'elle. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fr5yunQZKTgvL7bg9TBfpajuXBt5ZnlDBMH-esCJLSkO2wxBk2vTuJsVxR6nRhzXi9j8pvG4PCCOFPxQnFxeF9F3uKr8HtGw8jkpxgZKljOD1lhBY1PzqKZvh1cy-f9o61-9nW-Q&width=768&dpr=3&quality=100&sign=19ae8e73&sv=2) Voleur de motivation (par Aurélien Morvant) C'est exactement le genre de choses que je fais depuis maintenant 33 ans... La tarte m'a complètement assommé. Moi qui suis fan de Dan Pink et de Management 3.0, comment j'ai pu passer à côté de ça, comment j'avais fait pour ne pas m'en rendre compte plus tôt… #### Motivation extrinsèque et intrinsèque[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#motivation-extrinseque-et-intrinseque) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Flh4.googleusercontent.com%2FL6zwMLG1Vy0RPKKkkemSzg-lQccgUviB1s9IWhVSFT0V2f_203AQQKlKdWkTWDq8Hig1j4SbnXlY4QY7Wmd9BspC731xItO8LI3qkaJW5wpu9PNln5kupnLihcEwzxHBZajYCew&width=768&dpr=3&quality=100&sign=572c5d0a&sv=2) ### La solution ? "Célébrer avec" plutôt que "Célébrer pour"[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#la-solution-celebrer-avec-plutot-que-celebrer-pour) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Flh6.googleusercontent.com%2FTQHbC14LfqCQJW2uWxF956czbQCMXLDYnNgPVaLjzCVDTuDwGlFjwvRlEOxv1HprFC_LeznuJ0InSnXHakhzbiS8FB_Efv71FIv1kWWy_0hcpr_Jl-Gt8d_KeIakdjdkhiEq9Zc&width=768&dpr=3&quality=100&sign=ed8bf7c8&sv=2) Célébrer avec (par Aurélien Morvant) Ce que je t'ai décrit ci-dessus c'est ce que l'auteur appelle "Célébrer pour". Il présente une alternative permettant de préserver la motivation intrinsèque des individus qu'il a appelé : "Célébrer avec". _**L'idée derrière "Célébrer avec" est de dire qu'il faut changer la manière dont on communique : apprécier plutôt qu'évaluer, observer plutôt que juger.**_ Cela passe par : 1. Décrire ce que tu as observé et l'impact que cela a pu avoir en commençant tes phrases par "il semble que", "j'ai remarqué", "j'ai observé",... 2. Apprécier le comportement : les efforts, l'énergie mise en place 3. Inviter au Storytelling : écouter l'histoire et le voyage qui a conduit à ce résultat > Le **résultat** : un partage sincère de la joie et une discussion qui n'est plus recentrée sur soi. Je vais reformuler l'exemple ci-dessus en célébrant avec ma fille : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Flh5.googleusercontent.com%2FYNWsJ-uFo1yR8QGowbQULdqKKkjznEdH_dJJidoDRxwoQ3DGvdIKynbSzn2yx8AZCrmjIgcMg0RnDAvJfF9N2frRtLA7a1wfSGwBOfcSOmklGtwG8Jt0hoYFrjeIjAd-lm_s62I&width=768&dpr=3&quality=100&sign=7a1b3a1b&sv=2) Pratique Concrète[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#pratique-concrete) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Reprends les situations de la partie connexion et reformule les en utilisant ce qu'on vient de découvrir ensemble : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Flh4.googleusercontent.com%2FdpJuHI-m5vQELSSO7ecsWP9G8LVwyS1GReQcwOVWu2dT6qOd3h5Msm-S576w2z7wCpMs3bnyrWnMRmxjk-9CY31fwx6HH3wYzYyARhgtIIfTJKdoCzJo2wHvnSK9NGDy2UGQOOg&width=768&dpr=3&quality=100&sign=5d2bf5eb&sv=2) Conclusion[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#conclusion) ---------------------------------------------------------------------------------------------------------------------------------------------------------- Bref. Tout ça pour te dire que j'espère que tu as apprécié ce questionnement et t'invite à désapprendre la manière dont nous avons été conditionné à “célébrer pour” et à la repenser en "célébrant avec" (ou à ta sauce bien sûr). Personnellement, je dois admettre que c’est ce que “j’essaie” de faire depuis maintenant plusieurs semaines et si je devais faire un bilan : * Je suis pleinement conscient de la nécessité de “célébrer avec” * J’arrive à le faire à l’écrit (pas à tous les coups mais de plus en plus) * Mais ma spontanéité à l’oral “m’empêche” de mettre en pratique au quotidien Désapprendre n’est pas chose facile, si nos bambins y arrivent aisément ce n’est pas mon cas. Voilà un nouvel axe de travail / amélioration pour les mois à venir que le confinement m’a apporté. _**Avant de te quitter je te propose un dernier exercice : comment envisages-tu tes prochaines célébrations ?**_ [PreviousLeadership](https://yoan-thirion.gitbook.io/knowledge-base/leadership) [NextForward Summit 2020](https://yoan-thirion.gitbook.io/knowledge-base/leadership/forward-summit-2020) Last updated 5 years ago * [Introduction](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#introduction) * [D'où sort ce nombre ?](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#dou-sort-ce-nombre) * [Connexion](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#connexion) * [Concepts](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#concepts) * [Qu'est-ce que cela implique ?](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#quest-ce-que-cela-implique) * [La solution ? "Célébrer avec" plutôt que "Célébrer pour"](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#la-solution-celebrer-avec-plutot-que-celebrer-pour) * [Pratique Concrète](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#pratique-concrete) * [Conclusion](https://yoan-thirion.gitbook.io/knowledge-base/leadership/bref.-jai-pris-une-tarte-dans-la-gueule-et-ca-fait-extremement-de-bien#conclusion) --- # Libérez vos entretiens d’embauche avec la gamification | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator.md) . Pourquoi vous devriez lire cet article ?[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#pourquoi-vous-devriez-lire-cet-article) -------------------------------------------------------------------------------------------------------------------------------------------------------------- Si comme nous vous vous êtes déja posé l’une de ces questions : * Comment puis-je faire pour dynamiser mes recrutements ? * Comment puis-je mettre un candidat à l’aise lors d’un entretien ? * Comment puis-je avoir des discussions d’égal à égal ? * Comment puis-je jauger techniquement mais également humainement un candidat ? Le contexte[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-7f01) -------------------------------------------------------------------------------------------------- Nous avons tous, ou presque, dû passer des entretiens d’embauche dans notre vie. En général ce n’est pas un moment très agréable: on nous pose des questions auxquelles nous ne savons pas forcément quoi répondre, comme: * Quelle est votre plus grande faiblesse ? * Quel rapport avez-vous avec l’autorité ? * Comment réagissez-vous face au stress ? * Pourquoi vous plutôt qu’un autre ? * Que disent vos collègues de vous ? En général voilà comment les candidats réagissent à ce genre de questions : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBnXtpS-_6uXhPJRmHm%252F-MBnYCIh8HUsbMH8NeTq%252Fimage.png%3Falt%3Dmedia%26token%3Df47f42ec-2411-4031-ae37-6c2d75a3e348&width=768&dpr=3&quality=100&sign=2a46445b&sv=2) Et voici ce que cela provoque comme raisonnement chez le candidat : * Dois je lui mentir et lui faire entendre ce qu’il a envie d’entendre ? * Non, je dis la vérité ? * Mais dans ce cas-là je risque de le décevoir, non ? * Je vais mentir et adapter mon discours sur base de ses réactions, c’est plus sûr !!! Dans ce genre d’entretien, candidat et recruteur sont finalement enfermés dans une lose-lose situation. ### Pour le recruteur[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#e9ff) C’est vraiment difficile de démêler le vrai du faux dans le discours du candidat et de découvrir la « vraie » personne. ### Pour le candidat[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-95e3) C’est un moment en général désagréable à passer, durant lequel il se sent scruté et extrêmement stressé. Il en ressort en général frustré et plein d’incertitudes (“est-ce que j’ai réussi ou non ?”). Qu’en est t il des entretiens techniques ?[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-5545) --------------------------------------------------------------------------------------------------------------------------------- Dans le monde du développement, les entretiens techniques avec les développeurs ressemblent fortement aux entretiens décris ci-dessus : un maximum de questions et un maximum de stress. Les questions techniques dans le monde du développement ressemblent souvent à ceci : * Qu’est-ce qu’une classe ? * Qu’est-ce que l’héritage ? * Que signifie l’acronyme C.R.U.D ? * A.C.I.D ? * D.D.D ? * C.Q.R.S ? * T.D.D ? * B.D.D ? * A.W.S ? * H.T.T.P ? * … ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBnXtpS-_6uXhPJRmHm%252F-MBnYbH7g_jc-kL_lFlU%252Fimage.png%3Falt%3Dmedia%26token%3D6e77f0bc-4d15-4b4d-a4c8-e6d99aeb9402&width=768&dpr=3&quality=100&sign=46c26938&sv=2) La gamification au secours des entretiens d’embauche[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-4c2d) ------------------------------------------------------------------------------------------------------------------------------------------- Avec des collègues nous nous sommes posé de nombreuses questions en nous basant sur nos expériences lors de nos entretiens (en tant que candidat et/ou recruteur) : * Comment mettre un candidat **à l’aise** ? * Comment avoir des discussions **d’égal à égal** ? * Comment jauger **techniquement et également humainement** un candidat ? Nous avons alors pensé à ce que nous utilisions dans nos formations et dans notre coaching quotidien pour répondre à ces questions: la **gamification.** _L’idée était d’utiliser des éléments du domaine des jeux et du divertissement et de les appliquer dans nos entretiens d’embauche._ _Les bénéfices espérés étaient les suivants :_ * Les candidats ne se sentiront plus dans un entretien * Faire vivre une vraie mise en situation * Pas un interviewer mais un maître du jeu / facilitateur en face d’un candidat * Libérer les énergies du candidat Craftsminator[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-271d) ---------------------------------------------------------------------------------------------------- En nous inspirant des escape games à base de cartes nous avons créé le jeu “**Craftsminator**” qui permet de tester nos candidats dans un environnement sécurisé. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBnXtpS-_6uXhPJRmHm%252F-MBnqw1dW6aobFOWvn7e%252Fimage.png%3Falt%3Dmedia%26token%3D32e9dd40-2bbe-482c-85a5-f38908c279bf&width=768&dpr=3&quality=100&sign=118246f0&sv=2) Le candidat dispose d’une heure pour résoudre les différentes énigmes qui lui sont posées à travers des cartes. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBnrDGGFQFnjFwq-eiU%252F-MBnsTseBbV9mqlJ2sJN%252Fimage.png%3Falt%3Dmedia%26token%3D46e801a5-9aaf-4533-b305-6f77da5c5766&width=768&dpr=3&quality=100&sign=260edd64&sv=2) Exemple de cartes Les différentes énigmes ont été conçues afin de mettre en avant l’**appétence** à **l’agilité** et aux bonnes pratiques de développement (**Software craftsmanship**). Les **soft skills** des candidats ainsi que leur rapport au ludique sont également testés. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBnrDGGFQFnjFwq-eiU%252F-MBns9s-BCB4GTN0HlVZ%252Fimage.png%3Falt%3Dmedia%26token%3Dd2f3b061-6dc7-438c-9a1f-5f9a1ca6b485&width=768&dpr=3&quality=100&sign=1e1ab934&sv=2) Craftsminator flow Au milieu de l’aventure, les candidats sont amenés à “corriger” un bug et donc faire du **live coding**, ce qui nous permet de comprendre comment ils appréhendent une nouvelle base de code. Ce format facilite la compréhension des comportements et des schémas de pensée des candidats. Nos apprentissages[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-8576) --------------------------------------------------------------------------------------------------------- Après 1 an d’utilisation, voici ce que nous avons appris : ### Le feedback des candidats[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-79b9) * C’est disruptif * Beaucoup plus vivant qu’un entretien classique * Ça m’a permis de me détendre * C’est très ludique et interactif * On a eu de bonnes discussions * Je voudrais passer que des entretiens de ce genre En revanche, pour certains “c’est frustrant de ne pas finir” ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBnrDGGFQFnjFwq-eiU%252F-MBnrJqR6DAlcw4-B3wp%252Fimage.png%3Falt%3Dmedia%26token%3De0989861-d2de-4e9a-adff-e64cd548dc5b&width=768&dpr=3&quality=100&sign=1a00beed&sv=2) ### Notre feedback en tant que recruteurs[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-6a10) On a eu de bien meilleures interactions avec nos candidats : * De vrais discussions d’égal à égal * Le candidat nous perçoit comme un maître du jeu > C’est vraiment plus facile de dé-stresser le candidat via le jeu et c’est donc plus facile pour nous de créer un lien avec lui. Le jeu facilite la création d’un cadre de confiance mais cela requiert de la bienveillance et nécessite l’introduction du droit à l’erreur. En revanche ce genre d’entretien n’est pas fait pour tout le monde (certains sont insensibles au jeu par exemple) c’est pourquoi il est primordial en entretien de demander l’autorisation avant de lancer ce genre d’atelier. Si le candidat n’est pas partant pour ce genre d’approches, il est important d’avoir une boite à outils bien remplie afin d’être capable de rebondir. Resources[](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#resources) -------------------------------------------------------------------------------------------------- Si vous voulez **tester Craftsminator**, vous pouvez télécharger : * Les **cartes ici** : [http://bit.ly/2DvInEx](http://bit.ly/2DvInEx) * Le **guide de facilitation** [PreviousMy serious games](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games) [NextHow to create a game](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-create-a-game) Last updated 6 years ago * [Pourquoi vous devriez lire cet article ?](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#pourquoi-vous-devriez-lire-cet-article) * [Le contexte](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-7f01) * [Pour le recruteur](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#e9ff) * [Pour le candidat](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-95e3) * [Qu’en est t il des entretiens techniques ?](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-5545) * [La gamification au secours des entretiens d’embauche](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-4c2d) * [Craftsminator](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-271d) * [Nos apprentissages](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-8576) * [Le feedback des candidats](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-79b9) * [Notre feedback en tant que recruteurs](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#id-6a10) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator#resources) --- # NoSQL | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql.md) . ### Objectives :[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#objectives) * Understand what does NoSQL mean * Understand the different kind of databases hidden behind this word Connection - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#connection-10) ------------------------------------------------------------------------------------------------------------- * In pair list every Pros and Cons you have encountered with relational database * List every relational database you have already used * Group the answers Concepts - 20'[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#concepts-20) --------------------------------------------------------------------------------------------------------- ### Relational databases[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#relational-databases) * Persist data * Concurrency control * Manage transactions in an ACID way ### ACID[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#acid) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRsSsqFo_JqSr2fslcx%252F-MRsVOKv4VVy9VD8mwOJ%252Fimage.png%3Falt%3Dmedia%26token%3D1a8bd4d8-02dc-4d3d-8b29-65b9ace351d9&width=768&dpr=3&quality=100&sign=ec7db39f&sv=2) * Atomicity * "all or nothing" * One part fails => the entire transaction fails * Consistency * Bring the database from one valid state to another * All defined rules, including constraints, cascades, triggers, and any combination are respected * Isolation * Concurrent execution * Would be obtained if transactions were executed sequentially * Durability * Transaction committed : it will remain ### Cons of relational databases[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#cons-of-relational-databases) * Impedance mismatch * Relational data structures vs In-memory data structures * Performance * Distribution * Cost ### NoSQL[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#nosql) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRsVuTVyJ6UbEaSg0im%252F-MRsW0tO6L3-zetIjU0w%252Fimage.png%3Falt%3Dmedia%26token%3D5a1db134-f58e-4448-bbbe-95156f324ba1&width=768&dpr=3&quality=100&sign=83112259&sv=2) ### Different kind of NoSQL Databases[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#different-kind-of-nosql-databases) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRsVuTVyJ6UbEaSg0im%252F-MRsW75xGBqkiacPMQlL%252Fimage.png%3Falt%3Dmedia%26token%3Df82f7b01-6888-4837-8591-5d745a72ddb0&width=768&dpr=3&quality=100&sign=5a492425&sv=2) ### Why use NoSQL ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#why-use-nosql) * To improve programmer productivity : better matches an application needs * To improve data access performance * Through some combination of handling larger data volumes, reducing latency * Large volumes of rapidly changing structured, semi-structured, and unstructured data * Geographically distributed scale-out architecture * Instead of expensive, monolithic architecture Concrete Practice - 20'[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#concrete-practice-20) --------------------------------------------------------------------------------------------------------------------------- Let's play with a GraphDB call Neo4j for the next minutes : * Connect to the [platform](https://sandbox.neo4j.com/) * Play with the Cypher queries * Play with the Graph Visualization ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRsWUeRgjpevuUMJxhG%252F-MRsXu6hH4Y2YYI816NK%252Fimage.png%3Falt%3Dmedia%26token%3Da3129493-931a-4749-82bf-79605b41d47c&width=768&dpr=3&quality=100&sign=395d1b1d&sv=2) Conclusion - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#conclusion-10) ------------------------------------------------------------------------------------------------------------- _**NoSQL does not mean “Death of SQL”**_ We can now create polyglot persistence : * Uses different data storage technologies to handle varying data storage needs * Can be applied : Anywhere in an organization/in a single application Use the tool that fits the best your needs. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRsYBPAkSaGlwyvzJb7%252F-MRsYGMOP7oIzNpVLUdv%252Fimage.png%3Falt%3Dmedia%26token%3Df52fde48-9edf-4766-8836-c09a2ce27848&width=768&dpr=3&quality=100&sign=7a7f0806&sv=2) ### Remember the past[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#remember-the-past) Think about the past few years, in which development you have made this kind of database would have been useful ? * Why ? ### Resources[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#resources) #### Key Value Stores[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#key-value-stores) * Aerospike * Apache Cassandra * Berkeley DB * Couchbase Server * Redis * Riak #### Document DB[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#document-db) * CouchDB * Elasticsearch * MongoDB #### Graph DB[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#graph-db) * Neo4j * OrientDB * FlockDB #### Wide Columns Family Stores[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#wide-columns-family-stores) * Cassandra * HBase [PreviousTest your architecture with Archunit](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit) [NextAgile coaching](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching) Last updated 5 years ago * [Objectives :](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#objectives) * [Connection - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#connection-10) * [Concepts - 20'](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#concepts-20) * [Relational databases](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#relational-databases) * [ACID](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#acid) * [Cons of relational databases](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#cons-of-relational-databases) * [NoSQL](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#nosql) * [Different kind of NoSQL Databases](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#different-kind-of-nosql-databases) * [Why use NoSQL ?](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#why-use-nosql) * [Concrete Practice - 20'](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#concrete-practice-20) * [Conclusion - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#conclusion-10) * [Remember the past](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#remember-the-past) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql#resources) --- # Project-to-Product Principles | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/project-to-product-principles.md) . ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdNRSiXQRueva-Gijrr%252F-MdNSUCjWPBJokDbWtqV%252Fproject-to-product-principles-v2.png%3Falt%3Dmedia%26token%3De3cf41c9-467a-41d0-be34-8deeab820633&width=768&dpr=3&quality=100&sign=d379c807&sv=2) Project to Product infographic by Matthew Philip and Yoan thirion [2021-06-16\_PhilipMatthew\_ProjectToProductPrinciples.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MdNRSiXQRueva-Gijrr%2F-MdNS_Z-X3-0lpccoYry%2F2021-06-16_PhilipMatthew_ProjectToProductPrinciples.pdf?alt=media&token=a7b8e222-2846-4886-8cc8-c1db2114cb3e) PDF · 652KB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MdNRSiXQRueva-Gijrr%2F-MdNS_Z-X3-0lpccoYry%2F2021-06-16_PhilipMatthew_ProjectToProductPrinciples.pdf?alt=media&token=a7b8e222-2846-4886-8cc8-c1db2114cb3e) High resolution project to product infographic Original post : [https://mattphilip.wordpress.com/2021/04/08/project-to-product-principles/](https://mattphilip.wordpress.com/2021/04/08/project-to-product-principles/) [PreviousBecome a better speaker through peer feedback](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/become-a-better-speaker-through-peer-feedback) [NextLeadership](https://yoan-thirion.gitbook.io/knowledge-base/leadership) Last updated 5 years ago --- # Unknown \> For the complete documentation index, see \[llms.txt\](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending \`.md\` to page URLs; this page is available as \[Markdown\](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices.md). # Practices A compilation of team practices to use in your teams : {% content-ref url="/pages/-MRjFnChziUatcjUxuQR" %} \[Pair Programming\](/knowledge-base/software-craftsmanship/practices/pair-programming.md) {% endcontent-ref %} {% content-ref url="/pages/-MK\\\_knAZ3BDH77WuDljP" %} \[Co-designs\](/knowledge-base/software-craftsmanship/practices/co-designs.md) {% endcontent-ref %} {% content-ref url="/pages/-MK\\\_kTuAHlq0UelKSKQD" %} \[Design sessions\](/knowledge-base/software-craftsmanship/practices/design-sessions.md) {% endcontent-ref %} --- # En route vers l’apprenance avec Xtrem Reading | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading.md) . L’apprenance est une attitude permettant d’accroître sa capacité à traiter des situations complexes. C’est pourquoi elle s’impose comme une nécessité au sein de nos organisations afin de faire face à ce fameux monde [_VUCA_](https://www.vuca-world.org/) . Mais comment l’activer, et surtout l’entretenir, en entreprise ? Comment démarrer notre chemin vers cette fameuse entreprise apprenante ? À travers ces quelques lignes j’espère vous donner envie de trouver votre chemin et vous lancer. Avant tout qu’est-ce que l’apprenance ?[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#avant-tout-quest-ce-que-lapprenance) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- L’apprenance est un concept qui a été défini par Peter Senge dans son livre [_**La 5ᵉ discipline — Levier des organisations apprenantes**_](https://www.amazon.fr/cinqui%C3%A8me-discipline-Levier-organisations-apprenantes/dp/2212559372) _,_ paru dans les années 90. Pour pouvoir rester compétitive, l’économiste et professeur de management au MIT Sloan School of Management explique qu’une entreprise doit pratiquer **5 disciplines** : * La maîtrise personnelle : pour clarifier notre approche de la réalité. * Les modèles mentaux : pour apprendre à nous défaire de nos préjugés, être conscients de notre façon de percevoir et réagir. * La vision partagée : pour savoir relier des individus ensemble. * L’apprenance en équipe : pour favoriser la réflexion collective par le dialogue. * La pensée systémique : pour voir le système dans son ensemble ainsi que les interactions qui le régissent. Cette cinquième discipline est à la fois la dernière et les cinq toutes à la fois puisqu’elle requiert la pratique au minimum des quatre autres disciplines. Finalement, le message qu’il a voulu faire passer est le suivant : l’apprenance est le seul moyen pour une organisation de façonner son propre futur. C’est par ce moyen qu’elle peut passer du mode « _j’apprends pour survivre_ » (apprentissage nécessaire à ma survie / mon adaptation) au mode « _j’apprends pour générer, créer et faire émerger de nouvelles choses_ ». > _C’est l’apprentissage continu des individus composant l’organisation qui va rendre possible ce changement de mode._ Très bien. Mais elle est où l’agilité dans tout ça ?[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#b708) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- L’apprenance est au cœur de l’agilité, elle transpire dans les principes du Manifeste. Si on y réfléchit, ils créent un cadre à l’apprentissage : * Découvrir le produit qu’on construit ou développe via la réduction des boucles de _feedback._ * Apprendre à être une équipe et vivre en équipe via la création d’un environnement favorisant la confiance, l’auto-organisation et l’introspection. > _Apprenance et agilité reposent sur la même fondation : l’adaptation aux changements, tout comme la valorisation des individus, sont primordiales dans notre monde de moins en moins prédictif._ Alistair Cockburn l’a très bien illustré avec son [_Heart of Agile_](https://heartofagile.com/) que l’on peut voir comme un retour aux sources de l’Agilité. Dans celui-ci on retrouve des associations telles que _Réfléchir/Améliorations_, _Livrer/Apprendre._ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F549%2F0*GQ1pEn4bvh6zPplO.png&width=768&dpr=3&quality=100&sign=73004b6e&sv=2) L’apprentissage en entreprise[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#id-6d8c) --------------------------------------------------------------------------------------------------------------------------------------------------- L’université de Princeton a développé sur la base d’enquêtes et d’études, le modèle d’apprentissage _70/20/10_ qui découpe en trois domaines distincts notre façon d’apprendre et de nous former : * 10 % de notre apprentissage se font dans le cadre de sessions de formation traditionnelles. * 20 % ont lieu grâce aux interactions sociales, à travers nos échanges avec nos collègues et nos connaissances. * 70 % relèvent de l’expérience et de la pratique. Au sein des entreprises où je suis intervenu, la formation est majoritairement traditionnelle. Dès lors, seuls les 10 % sont stimulés via des cycles de formations traditionnels souvent délivrées en mode _descendant_. Les participants y sont convoqués sans forcément avoir été impliqués sur le choix de la formation. Ils se retrouvent à apprendre ce qu’un expert a décidé de leur enseigner sans réellement comprendre pourquoi ils le font. C’est ce qu’Alexandre Magno appelle le [_learning 1.0_](http://www.learning30.co/) qui ne laisse que très peu de place aux interactions et à l’apprentissage en groupe. Concernant les 20 %, il existe encore trop peu de pratiques au sein des organisations favorisant les échanges et la stimulation de l’intelligence collective. Et en pratique ?[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#id-0ea7) -------------------------------------------------------------------------------------------------------------------------------------- Comment pouvons-nous développer ces 20 % ? Quelles activités permettent d’apprendre continuellement ? Comment favoriser les échanges entre les collaborateurs et ainsi créer une expérience autour de l’apprentissage ? C’est avec toutes ces questions en tête que [**Cédric Tamavond**](https://www.linkedin.com/in/cedric-tamavond-b30ab917/) (coach agile) et moi-même avons mis au point une nouvelle pratique d’apprenance dont voici l’histoire. ### Petite histoire d’une pratique d’apprenance[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#b153) Tout a commencé par : * Une interrogation : à l’heure actuelle, quelles sont nos méthodes d’apprentissage ? * Et un constat : même dans un monde ultra digitalisé, [la lecture reste un des moyens les plus utilisés pour étendre ses connaissance](https://bookboon.com/en/21st-century-corporate-learning-development-ebook) , développer de nouvelles compétences ou découvrir de nouveaux sujets. > _La lecture est toujours le principal moyen d’apprendre de nouvelles choses et de tester ma compréhension. (_Bill Gates) Un point nous gênait avec la lecture : telle qu’on nous l’a enseignée, c’est une activité qui est exercée en solitaire. ### Comment rendre la lecture plus collective ?[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#e8b1) Cédric et moi avons décidé d’adopter une démarche _Design Thinking_ pour répondre à cette problématique. Cela nous a permis de définir notre problème, générer des idées, expérimenter avec des utilisateurs pour enfin aboutir à une pratique que nous avons appelée : [_**Xtrem Reading**_](https://xtrem-reading.com/) . ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F1782%2F0*54F55LtiD-H98dsY.png&width=768&dpr=3&quality=100&sign=439fad79&sv=2) ### Xtrem Reading : comment ça marche ?[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#id-6413) _Xtrem Reading_ est un format d’atelier facile à dérouler qui nécessite un facilitateur (ou plutôt un gardien du temps), une salle, des volontaires et des livres. Une session _d’Xtrem Reading_ se déroule de la manière suivante : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F180%2F1*a9dlAp44JJDZSsw0H794AA.png&width=768&dpr=3&quality=100&sign=7fd62af5&sv=2) * Les participants sont invités à _apporter un livre_ de leur choix qu’ils n’ont pas encore pu lire (souvent celui qui traîne sur leur table de nuit) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F180%2F1*FmVYN6zB94_KYzZ3qhq6mQ.png&width=768&dpr=3&quality=100&sign=8b47b5d2&sv=2) * Ils _partagent_ ensuite leur choix avec les autres participants en expliquant ce qu’ils espèrent découvrir dans ce livre. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F355%2F1*m68xHoJTibhCgRlSKZsyYQ.png&width=768&dpr=3&quality=100&sign=81db154&sv=2) * Suite au partage, les participants s’organisent pour _former des groupes d’intérêts de 2 ou 3 personnes._ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F355%2F1*6PeYXF-HJW1cJx13NL0TYA.png&width=768&dpr=3&quality=100&sign=d2903455&sv=2) Durant _2 itérations_ de 15 à 25 minutes, les participants _lisent_, en survolant, _2 livres._ **L’objectif est d’en ressortir l’essentiel pour pouvoir le présenter aux autres.** Habituellement, les personnes utilisent des techniques de lecture rapide et de prise de notes telle que le _mind mapping_ pour y parvenir aisément. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F180%2F1*jV_yeVDLf9IU_Nw8mXOQVQ.png&width=768&dpr=3&quality=100&sign=67614ad5&sv=2) Au sein de chaque groupe, 5 à 10 minutes sont consacrées par livre afin _d’exposer_ ce qui a été _découvert._ Cette étape est souvent très surprenante et intéressante puisque, sur une lecture de seulement 15 à 25 minutes, les participants sont capables de ressortir une quantité d’informations incroyable. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F180%2F1*DS4vK6VDEbXYhcVGeu30HA.png&width=768&dpr=3&quality=100&sign=33cf1f23&sv=2) A la fin, chaque lecteur peut _noter_ dans une fiche de lecture _son sentiment_ sur la facilité de lecture du livre, ainsi qu’une recommandation. Bon à savoir : ce format fonctionne très bien pour explorer des livres « techniques » ou des articles mais ne s’utilise pas pour des livres de fiction (à moins que vous ne vouliez vous gâcher le plaisir). Ce qu’on a appris avec Xtrem Reading[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#id-37de) ---------------------------------------------------------------------------------------------------------------------------------------------------------- Depuis que nous avons mis sur pied cet atelier, nous avons facilité des dizaines de sessions avec au total plus de 300 personnes différentes, et dans des contextes différents (au sein de notre entreprise avec nos pairs, chez des clients, dans des communautés spécifiques ou même lors de conférences). _Nous avons modifié le format pour pouvoir le dérouler en remote : cela fera l’objet d’un autre article._ Forts de ces expériences diverses, nous avons pu constater que : * **Lire** _**2 livres en 1 heure**_ **à la** _**Clark Kent**_ _(le super héros à la tunique bleue et au slip rouge)_ _c’est possible._ On est tous en capacité de faire… mais différemment de ce qu’on pense en premier lieu. * Lire en ayant en tête de partager est incroyablement efficace pour améliorer la rétention : **la meilleure façon d’apprendre est d’enseigner.** * On a tous des systèmes de pensée différents et c’est là où réside la vraie richesse. Lors du partage chaque lecteur peut avoir vu et retenu des choses différentes. Les croiser est incroyablement riche et va permettre de _**créer une expérience émotionnelle autour d’un livre**__._ * Cela permet aux participants de _**découvrir des sujets qu’ils n’auraient pas soupçonnés aimer**_ _;_ ou _a contrario_ de se rendre compte qu’un sujet ne les intéresse pas et cela sans avoir investi plus d’une heure de leur temps. On a rapidement pu observer un effet inattendu lorsqu’on a commencé à dérouler des sessions à l’extérieur de notre entreprise : toutes les strates des organisations se sentaient concernées et souhaitaient y participer. En effet, la volonté d’apprendre ne se limite pas aux opérationnels. Durant le temps de l’atelier, nous arrivons à casser les silos horizontaux (inter équipes ou services) mais aussi verticaux (hiérarchie) et créer de l’empathie entre des personnes qui n’ont pas pour habitude de collaborer. La route vers l’apprenance n’est pas si compliquée à partir du moment où l’organisation a compris que ses employés étaient ses partenaires privilégiés. Pour qu’elles le comprennent, vous pouvez commencer par mettre en place des pratiques permettant l’échange tels qu’_Xtrem Reading_, les rétrospectives, les _brown bag lunchs_, les _hackhathons,_ les retours d’expérience, etc. _**Rien n’est écrit, juste lancez-vous.**_ Pour aller plus loin (Questions en mode Solution Focus)[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#pour-aller-plus-loin-questions-en-mode-solution-focus) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * Tu viens de faciliter ta première session _d’Xtrem Reading._ Les gens sont ravis et discutent entre eux. Qu’est-ce que tu vois et entends ? * Qu’est-ce que tu as trouvé dans mon texte qui pourrait t’aider ? Comment ? * Une fois que tu considéreras ton organisation comme apprenante qu’est-ce qui sera différent ? J’ai écrit ce texte dans le cadre de l’écriture d’un ouvrage collectif : [Rupture Douce #06](http://www.lulu.com/shop/laurent-sarrazin/rupture-douce-06/paperback/product-24358204.html) dont le propos est de partager des histoires authentiques liées à des transformations agiles de tout type d’organisme vivant (entreprises, équipes, individus). Si vous voulez découvrir d’autres belles histoires je vous invite à découvrir les différents tomes ici : [https://laurentsarrazin78.wixsite.com/rupture-douce/home](https://laurentsarrazin78.wixsite.com/rupture-douce/home) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F202%2F0*EkM8H_JpeX8pkjnS&width=768&dpr=3&quality=100&sign=7b53e4e3&sv=2) * Retrouvez les slides utilisées pour présenter / animer des Xtrem Reading dans plusieurs conférences ici : [PreviousHow to make book infographics](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics) [NextResources](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources) Last updated 6 years ago * [Avant tout qu’est-ce que l’apprenance ?](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#avant-tout-quest-ce-que-lapprenance) * [Très bien. Mais elle est où l’agilité dans tout ça ?](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#b708) * [L’apprentissage en entreprise](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#id-6d8c) * [Et en pratique ?](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#id-0ea7) * [Petite histoire d’une pratique d’apprenance](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#b153) * [Comment rendre la lecture plus collective ?](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#e8b1) * [Xtrem Reading : comment ça marche ?](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#id-6413) * [Ce qu’on a appris avec Xtrem Reading](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#id-37de) * [Pour aller plus loin (Questions en mode Solution Focus)](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading#pour-aller-plus-loin-questions-en-mode-solution-focus) --- # Pair Programming | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming.md) . Connection - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#connection-10) ----------------------------------------------------------------------------------------------------------------------------------- * In solo, list all the pros and cons of Pair Programming * Share with the rest of the group ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRjFZHIcfGhksSZHsc6%252F-MRjG4YopxNoD9xlduSE%252Fimage.png%3Falt%3Dmedia%26token%3D8c156aed-1af4-4fb3-9d61-9a34924b1afd&width=768&dpr=3&quality=100&sign=291748b1&sv=2) Concepts - 20'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#concepts-20) ------------------------------------------------------------------------------------------------------------------------------- * Watch this [video](https://www.youtube.com/watch?v=ET3Q6zNK3Io) * Ask them what they have seen * What are the other pros and cons explained * Be sure that everyone has understood the roles : Drive / Navigator Pros Cons Instantly shared best practices / knowledge Tiring Improved design / code quality (fewer mistakes) Can create frictions Faster on-boarding Increase moral / confidence Increase team cohesion / collective ownership Instant code reviews * Pair programming is not 1 person sleeping and only one working. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRjGT5tnHuUs24GlbHC%252F-MRjGXpK_gm_t5PldLZ3%252Fimage.png%3Falt%3Dmedia%26token%3D4c722422-810a-40ed-b0f2-5faeec0b0a69&width=768&dpr=3&quality=100&sign=72dbd1ce&sv=2) ### Different styles[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#different-styles) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRjHDRcrp7OGmhFQeFA%252F-MRjHN9YjWehINkZDY4p%252Fimage.png%3Falt%3Dmedia%26token%3D1989fa13-9aae-4d0c-9b2e-ab63e6fed022&width=768&dpr=3&quality=100&sign=5e407fa3&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRjHDRcrp7OGmhFQeFA%252F-MRjHY7PoRfLD8Gz0z5j%252Fimage.png%3Falt%3Dmedia%26token%3D264ddfa0-db14-41c3-b703-fb854ae27d46&width=768&dpr=3&quality=100&sign=2b88e765&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRjHDRcrp7OGmhFQeFA%252F-MRjH_gIK9EmeddYFB0J%252Fimage.png%3Falt%3Dmedia%26token%3D8407e39b-2d5e-43fd-9b32-c4a57e18bfc9&width=768&dpr=3&quality=100&sign=b637ff59&sv=2) Ping pong when doing TDD ### What about the cost of Pair Programming ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#what-about-the-cost-of-pair-programming) * The Costs and Benefits of Pair Programming Alistair Cockburn & Laurie Williams * The development cost is approximately 15% higher * BUT this is repaid in : * Shorter and less expensive testing * Higher quality assurance * Less field support ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRjHqRxAExyXMWffq42%252F-MRjHyIJ9rrmv3iUa0PV%252Fimage.png%3Falt%3Dmedia%26token%3Db200609c-8b16-428b-93b4-7f87f4c86a34&width=768&dpr=3&quality=100&sign=611ef276&sv=2) Concrete Practice - Create your check-list - 20'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#concrete-practice-create-your-check-list-20) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * Think about key factors to make successful pair programming sessions * Create a check-list ### Example of check-list :[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#example-of-check-list) * Communicate – without violence * To propose an idea : “I think...” * To confirm agreement : “Do we agree...” * To discuss progress towards goals : “We agree...” * Avoid saying “No” / ”But” * Instead try saying, “Yes and...” * Ask “What would it take to get you in..” if you’re disagree about a proposed idea * Talk / listen a lot * Switch roles often * Take breaks / Disconnect * Chit chat when there is friction Conclusion - 5'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#conclusion-5) --------------------------------------------------------------------------------------------------------------------------------- ### How to start in your team ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#how-to-start-in-your-team) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRjHqRxAExyXMWffq42%252F-MRjIFCg8RbcSivz5Z4D%252Fimage.png%3Falt%3Dmedia%26token%3D2153a7f0-35f8-4de1-b373-76eb02f84042&width=768&dpr=3&quality=100&sign=890768b5&sv=2) Pair Programming Matrix from Jimmy Janlen * WHY ? * To do more pair programming * Visualize how much you pair during a week/sprint * HOW ? * Whenever you’ve done a pairing session, make a tick in the corresponding box [PreviousPractices](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices) [NextCode Review](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review) Last updated 5 years ago * [Connection - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#connection-10) * [Concepts - 20'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#concepts-20) * [Different styles](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#different-styles) * [What about the cost of Pair Programming ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#what-about-the-cost-of-pair-programming) * [Concrete Practice - Create your check-list - 20'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#concrete-practice-create-your-check-list-20) * [Example of check-list :](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#example-of-check-list) * [Conclusion - 5'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#conclusion-5) * [How to start in your team ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming#how-to-start-in-your-team) --- # Co-designs | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs.md) . Co-construct the design of the solutions / solution architecture in order to : * Guarantee the quality of the deliverables * Be more confident on the Solution we design → "**If you want to go fast, go alone. If you want to go far, go together." - African proverb** * Their compliance with the expectations of the various technical stakeholders (Security, Ops, DB experts, ...) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MKdfyw3PFWvW-5g7vqc%252F-MKdhcLHu1NA86b5DSTn%252Fimage.png%3Falt%3Dmedia%26token%3D44c1ceaa-abfb-4a76-93bd-4fadad554f81&width=768&dpr=3&quality=100&sign=1c2245e8&sv=2) ### Who ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs#who) #### **Required**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs#required) * Tech leads / team members from the teams concerned by the High Level Architecture * At least 1 member of the Architecture team * 1 facilitator #### Optional[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs#optional) Regarding the topics other people can have a real added value : * Other teams representatives concerned by the High Level Architecture * Enterprise Architects * Ops * Security * Domain experts * Other technical experts ### What ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs#what) For each new big feature, **bring together the team that will work on the topic as well as the technical experts in order to co-construct the future solution** including for example : * Definition of the Architecture Characteristics (Non Functional Requirements) * Based on business needs * Definition of the expected logs / monitoring solution * Definition of the integrations * Data models * Taking into account infrastructure and security constraints * ... ### How ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs#how) * **Prepare** the session : * Define the **subject** (_the need_) * Define the **objective** (_the solution_) * Prepare something to "break" * It can be draft of diagrams on a white-board for example * Identify who must / need to be there during the session * A session is **ready when it respects the Definition Of Ready** (DOR) * In a DOR you could find : Business capabilities concerned, Draft of API contract, Collaboration diagram depending on the topic of the session ### Outcomes[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs#outcomes) * ADR (Architecture Decision Record) * Explaining which decisions have been taken and why * Diagrams drawn and agreed during the session * Serve as an input for the Solution Design * Update of the Tech-radar (add something in Assess for example) ### Pros[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs#pros) * Tackle complex problems in small sessions * You have all the brilliant mind in the same space to solve the problems * Shorten feedback loops * Increase organizational Knowledge Sharing [PreviousCode Review](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review) [NextDesign sessions](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/design-sessions) Last updated 5 years ago * [Who ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs#who) * [What ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs#what) * [How ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs#how) * [Outcomes](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs#outcomes) * [Pros](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs#pros) --- # Unknown \> For the complete documentation index, see \[llms.txt\](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending \`.md\` to page URLs; this page is available as \[Markdown\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading.md). # Xtrem Reading - \[Cultivate Team Learning with Xtrem Reading\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading.md) - \[My Book Infographics\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/my-book-infographics.md) - \[How to make book infographics\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics.md) - \[En route vers l’apprenance avec Xtrem Reading\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading.md): Découvrez comment démarrer votre parcours vers cette fameuse entreprise apprenante. - \[Resources\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources.md): Here are the resources related to Xtrem Reading - \[Book notes\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes.md): Here are the Book notes taken during Xtrem Reading sessions - \[Agile People: A Radical Approach for HR & Managers\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers.md): from Pia-Maria Thoren - \[Agile testing : A Practical Guide for Testers and Agile Teams\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-testing-a-practical-guide-for-testers-and-agile-teams.md): from Lisa Crispin & Janet Gregory - \[Boite à outils de l'intelligence émotionnelle\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle.md) - \[Building a better business using Lego Serious Play method\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-a-better-business-using-lego-serious-play-method.md): from Per Kristiansen - \[Building evolutionary architectures\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures.md): from Neal Ford, Rebecca Parsons & Patrick Kua - \[Code that fits in your head\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/code-that-fits-in-your-head.md): from Mark Seemann - \[Culture Agile\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/culture-agile.md): from Jean-Claude Grosjean - \[Culture is everything\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/culture-is-everything.md): from Tristan White - \[Domain-Driven Design: The First 15 Years\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/domain-driven-design-the-first-15-years.md): Essays from the DDD Community - \[Dynamic Reteaming - The Art and Wisdom of Changing Teams\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/dynamic-reteaming-the-art-and-wisdom-of-changing-teams.md): by Heidi Helfand - \[How to avoid a Climate Disaster\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/how-to-avoid-a-climate-disaster.md): from Bill Gates - \[La liberté du commandement\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/la-liberte-du-commandement.md): Vice-amiral Loïc Finaz - \[Réaliser ses rêves, ça s'apprend\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/realiser-ses-reves-ca-sapprend.md): par Thomas Gibot - \[Refactoring at Scale\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/refactoring-at-scale.md): Maude Lemaire - \[Succeeding with OKRs in Agile\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/succeding-with-okrs-in-agile.md): from Allan Kelly - \[Team Topologies\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies.md): by Matthew Skelton and Manuel Pais - \[The Good Life\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/the-good-life.md): par Robert Waldinger, Marc M.D. Schulz - \[Tu fais quoi dans la vie\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/tu-fais-quoi-dans-la-vie.md): de Matthieu Dardaillon et Joséphine Bouchez - \[Who Does What By How Much?\](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/who-does-what-by-how-much.md): by Jeff Gothelf and Josh Seiden --- # Agile coaching | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching.md) . Resources[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching#resources) ------------------------------------------------------------------------------------- * Coaching Models * [Clear Model](https://www.businessballs.com/coaching-and-mentoring/clear-model/) * [GROW coaching model](https://www.yourcoach.be/en/coaching-tools/grow-coaching-model/) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-Mc9KYWvkoBljstXSTVn%252F-Mc9Ka9qQerLp0ev_cC8%252Fimage.png%3Falt%3Dmedia%26token%3D22e6caac-4424-4ce7-a5e9-b0bfedeb8587&width=768&dpr=3&quality=100&sign=16bb4a78&sv=2) * [MARY POPPENDIECK: Too Much of a Good Thing: Finding the Balance](https://youtu.be/gxKF26irjjQ) * Fair fights / conflicts -> Better Outcomes * Cognitive Biases * [Codex](https://www.teachthought.com/critical-thinking/the-cognitive-bias-codex-a-visual-of-180-cognitive-biases/) * [How to fight them](https://productiveclub.com/cognitive-biases/) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-Mc9Nk2GiqxeDL83hY_c%252F-Mc9Np0tbDfo6NWOlCW4%252Fimage.png%3Falt%3Dmedia%26token%3Db1056288-73cb-4f88-ae66-665f1e0476f7&width=768&dpr=3&quality=100&sign=3d7a12d5&sv=2) [PreviousNoSQL](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql) [NextHow to run a Community of Practices (COP)](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop) Last updated 5 years ago --- # Become a better speaker through peer feedback | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/become-a-better-speaker-through-peer-feedback.md) . I have often organized internal events like Brown bag lunches and at one point I asked myself : > How could we give feedback not only on the content but also on the presentation skills of the speaker ? We have created a new brown bag format to answer this question. Usually, in a brown bag there is only 1 role : the **speaker**. We wanted to have different roles assigned in the group during this kind of event to : * Favor active listening * Learn how to give feedback * Help the speakers to improve Jedi’s brown bag - Gamify your internal events[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/become-a-better-speaker-through-peer-feedback#id-2dba) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBmbpgh_VCFjwhwQ3no%252F-MBnWd6LppYUEoln6Mfv%252Fimage.png%3Falt%3Dmedia%26token%3De9ae697a-7c95-4799-88ce-aff9e53a2c38&width=768&dpr=3&quality=100&sign=f0381d50&sv=2) The format is like below : * Talk — 15’ * Questions/Answers — 5’ * Feebacks — 10’ * Reports from : Darth Vader, C3PO, Chewbacca * Collective debrief With this format we have a collective debrief not only on the content of the talk but also on the speaker performance as well. The roles[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/become-a-better-speaker-through-peer-feedback#the-roles) ----------------------------------------------------------------------------------------------------------------------------------- Find below the different roles created for such sessions. On each card you can find : * The name of the character * Its role * A short description of the role * The list of tasks to do during the brown bag * The purpose of the role for the person that will play this role ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBmbpgh_VCFjwhwQ3no%252F-MBnWz1zp7lFYuHs5qyI%252Fimage.png%3Falt%3Dmedia%26token%3D32331755-d705-41cb-90bf-bdc94cc0ac51&width=768&dpr=3&quality=100&sign=3b9613ac&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBmbpgh_VCFjwhwQ3no%252F-MBnX6TLOyqig8usaJ_L%252Fimage.png%3Falt%3Dmedia%26token%3Df1906d77-9086-42fb-8ea6-779e828147f5&width=768&dpr=3&quality=100&sign=b860957&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBmbpgh_VCFjwhwQ3no%252F-MBnX9yt8r8HweRldKNc%252Fimage.png%3Falt%3Dmedia%26token%3D3654f3e8-fcbc-4ed3-a52a-f9af5833c982&width=768&dpr=3&quality=100&sign=ccd853a0&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBmbpgh_VCFjwhwQ3no%252F-MBnXFqGsmTvJTgMOeG4%252Fimage.png%3Falt%3Dmedia%26token%3D934099d2-f038-4eb1-8107-790eead08ec3&width=768&dpr=3&quality=100&sign=54f6bc36&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBmbpgh_VCFjwhwQ3no%252F-MBnXHUIpZFWlLWbG7lg%252Fimage.png%3Falt%3Dmedia%26token%3D503283ff-cd1a-4d89-b9cb-b58dcc54a70e&width=768&dpr=3&quality=100&sign=ed60724f&sv=2) How to ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/become-a-better-speaker-through-peer-feedback#how-to) ------------------------------------------------------------------------------------------------------------------------------- At the beginning of the brown bag, each attendee can choose his/her role or you can assign roles randomly. The only one that is known in advance is the speaker role of course. You can have several persons playing the same role, the debrief will be more insightful. The prerequisite to use this tool is to already have a safe and learning environment. Resources[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/become-a-better-speaker-through-peer-feedback#resources) ----------------------------------------------------------------------------------------------------------------------------------- * Download the brown bag Jedi’s resources [here](http://bit.ly/2SBX2Th) [PreviousXTREM WATCH — Découvrez la puissance de la veille collective](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective) [NextProject-to-Product Principles](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/project-to-product-principles) Last updated 6 years ago * [Jedi’s brown bag - Gamify your internal events](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/become-a-better-speaker-through-peer-feedback#id-2dba) * [The roles](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/become-a-better-speaker-through-peer-feedback#the-roles) * [How to ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/become-a-better-speaker-through-peer-feedback#how-to) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/become-a-better-speaker-through-peer-feedback#resources) --- # Coaching toolbox | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox.md) . Resources[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox#resources) ------------------------------------------------------------------------------------------------------ A lot of good tools are available here : [![Logo](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Funtools.co%2Ficons%2Ficon-512x512.png%3Fv%3D48b6eb2cd872327651861e831bd90577&width=20&dpr=3&quality=100&sign=3b056d72&sv=2)Tools for better thinkingUntoolsHQ](https://untools.co/) [PreviousThe secrets to re-on-board the devs in agility](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility) [NextEchelle](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/echelle) Last updated 6 years ago --- # Echelle | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/echelle.md) . * On a scale from 1 to 10, how do you ... ? * 10 : I embody fully ... * 1 : means the complete opposite * Enumerate at least 10 facts that demonstrate you are already there * What else (10 more) * _**1 point higher**_ * Imagine you are 1 point higher on this scale : * Who else will see differences? * Which ones? * _**Small steps**_ * What could you do in the next 10 days that could put you on the way to this +1 ? ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MFfEbiPA91wYH6Sn5nE%252F-MFfEm2wJZrzXnl221q9%252Fechelle.png%3Falt%3Dmedia%26token%3Dafaa4bd0-d124-4798-b9db-07d6b377a76b&width=768&dpr=3&quality=100&sign=9207128f&sv=2) [PreviousCoaching toolbox](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox) [NextLearning expedition](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/learning-expedition) Last updated 5 years ago --- # Learn leadership from the Navy SEALs | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals.md) . Recently I have read a great book about leadership called [_**Extreme Ownership: How U.S. Navy SEALs Lead and Win**_](https://www.amazon.com/Extreme-Ownership-U-S-Navy-SEALs-ebook/dp/B00VE4Y0Z2) by [Jocko Willink](https://twitter.com/jockowillink) and [Leif Babin](https://twitter.com/LeifBabin) . The authors are 2 decorated retired Navy SEALs (Sea, Air and Land) officers, the US Navy military elite. They led American and allied soldiers during the battle of Ramadi in Irak. They have co-founded Echelon Front where they are leadership instructors, speakers, and executive coaches. In this book the authors want to share with us the leadership concepts they have seen work time and again, both in combat and in business. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F300%2F0*n6j0uSYHaGAaSppP.jpg&width=768&dpr=3&quality=100&sign=53827ad4&sv=2) From their point of view combat is reflective of life but amplified and intensified : the slightest mistake can have life-threatening consequences. That’s really inspiring to understand how those teams under enormous stress and stakes work as formidably efficient teams. **I really think the concepts exposed in this book should be more applied in our organizations, it could avoid a lot of disappointment and waste**. > The authors present us 12 principles based on their seals experiences. Their purpose with this book is to help other leaders achieve victory. Each of those principles are introduced in a captivating and intense way : * A description of a lived situation during their Navy Seals time (on the battlefield or during training) * The explanation of the principle they illustrated with the situation * An example of business application of the principle You can really consider the book as a starting guide to a new way of leading teams. I don’t want to spoil too much the book so I will just quickly introduce what I understood from the different principles. You will have to read the book if you want to know more. Principle 1 : Extreme ownership[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-2c21) ------------------------------------------------------------------------------------------------------------------------------------------ The entire responsibility for success and failure rests with the leader. The leader must own everything in his or her world. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjZL-9Gg9gnTPFO28f%252F-MAjaV-hxOxY_zqEkNhQ%252Fimage.png%3Falt%3Dmedia%26token%3D854aeeea-5fe7-46fe-a706-582cd4bd4b8c&width=768&dpr=3&quality=100&sign=4faff744&sv=2) ### “Leader’s ownership”[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#f8c5) When subordinates are not doing what they should, the leaders need first look in the mirror. Subordinates have not to be blamed, the leader have to check they have understood what is expected of them. Leaders have to take the full responsibility for : * Explaining the strategic mission * Developing the tactics * Explaining the strategic mission * Securing the training and resources to enable the team to properly and successfully execute ### “Subordinates ownership”[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#f3e7) Don’t make me wrong, it does not mean that subordinates have no responsibilities, it’s the opposite. If they do not understand something, he or she will take responsibility and ask superiors for explanations rather than say it wasn’t properly explained from the beginning. This principle develop the commitment to its extreme and generates dynamic. Everyone is involved and fully committed. Instead of complaining, everyone must actively look for how he or she could solve the problems. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F1930%2F1*y0QpXhPJb7Iale63OaMv5Q.png&width=768&dpr=3&quality=100&sign=f4e41ea1&sv=2) Jocko has explained this principle in this [video](https://www.youtube.com/watch?v=ljqra3BcqWM) . Principle 2 : No bad teams, only bad leaders[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#b3b0) ---------------------------------------------------------------------------------------------------------------------------------------------------- During the BUDS (Basic Underwater Demolition Seal Training), they observed that teams systematically fail when led by an incompetent leader but were successful with a competent one. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjZL-9Gg9gnTPFO28f%252F-MAj_qJ7w-pT3gM_ubRY%252Fimage.png%3Falt%3Dmedia%26token%3Dffa72827-865f-4009-a895-b78d2c8b3adb&width=768&dpr=3&quality=100&sign=88d14ff&sv=2) This concept is really hard to hear for a lot of people. It is based on humility and it’s something that leaders need to accept : _if my team is failing, it’s because I am a bad leader_. Principle 3 : Believe[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-732b) -------------------------------------------------------------------------------------------------------------------------------- > In order to convince and inspire others to follow you, you must be a true believer in the mission. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjZL-9Gg9gnTPFO28f%252F-MAjaok8YJpv-ZD_6tGy%252Fimage.png%3Falt%3Dmedia%26token%3Df7169e20-1346-4f54-8f60-d9c8d00a8c28&width=768&dpr=3&quality=100&sign=9cfa0e1d&sv=2) It is really difficult to ‘sell’ a plan, if you don’t believe in it. If you don’t understand the reasoning behind a strategy, go find the information so that you too can ‘believe’ and trust the decision taken by the hierarchy. The authors explain that worst thing to say would be _“it isn’t me, the order comes from above”_. The funny part here is that we hear that in a lot of organization. The leader must explain not just what to do, but why. Once again it is the responsibility of the subordinate leader to reach out and ask if they do not understand. Principle 4 : Check the ego[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-8d06) -------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjZL-9Gg9gnTPFO28f%252F-MAjauiTVkQQEysxE1S4%252Fimage.png%3Falt%3Dmedia%26token%3D5b9e2dfe-2ded-4169-a2a3-ca7dcaac46bf&width=768&dpr=3&quality=100&sign=4e371425&sv=2) The Navy SEALs need to operate with a high degree of humility. They are really confident in their skills but need to avoid complacent. They need to control their ego by never thinking they are too good to fail or that their enemies are not capable. Principle 5 : Cover and move[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-91ee) --------------------------------------------------------------------------------------------------------------------------------------- ‘Cover and Move’ means that before you move on the field, you always have to ensure that part of the team or another team ensures cover for the team that is moving. It is basically teamwork. All elements within the team are crucial they must work together to accomplish the mission, they mutually supporting one another for that singular purpose. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjZL-9Gg9gnTPFO28f%252F-MAjbM0uuPi_fitwTbMX%252Fimage.png%3Falt%3Dmedia%26token%3D41ad7b58-08df-44e7-8848-6634bd2c019d&width=768&dpr=3&quality=100&sign=5c9e5b58&sv=2) There is no “us” vs “them” mentality, groups within the teams must break down silos and support one another to reach the purpose of the mission. Principle 6 : Simple[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-7a52) ------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjZL-9Gg9gnTPFO28f%252F-MAjb_toLkXsj85BI805%252Fimage.png%3Falt%3Dmedia%26token%3D18423405-536f-46e7-843d-3644ac28abba&width=768&dpr=3&quality=100&sign=58ff2fe6&sv=2) Plans must be communicated in a clear and concise way. The simpler a plan is to understand, the more we are inclined to act. At the opposite, the more it is complex and obscure, the more suspicion will take over and less one will be inclined to act. Principle 7 : Prioritize and execute[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-1602) ----------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjZL-9Gg9gnTPFO28f%252F-MAjbinBFNcfX_Bd8qpe%252Fimage.png%3Falt%3Dmedia%26token%3Da0ddb003-19f1-4a75-9909-da098e399ab6&width=768&dpr=3&quality=100&sign=15071b05&sv=2) To implement Prioritize and Execute a leader in any field must : * Evaluate the highest priority problem * Lay out in simple, clear, and concise terms the highest priority effort for the team * Develop and determine a solution, seek input from key leaders and from the team where possible * Direct the execution of that solution, focusing all efforts and resources toward this priority task * Move on to the next highest priority problem. Repeat. Principle 8: Decentralized Command[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-220d) --------------------------------------------------------------------------------------------------------------------------------------------- As human beings we are not capable of managing more than six to ten people particularly when they operate in hostile territory in total secrecy and perfect autonomy. That’s why the SEALs teams are broken down into micro-teams of four to five persons with a clearly identified leader. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjZL-9Gg9gnTPFO28f%252F-MAjbwUPiUB3HN77O7-b%252Fimage.png%3Falt%3Dmedia%26token%3D632f43b4-6aef-48b0-a190-ec7ca95e787e&width=768&dpr=3&quality=100&sign=e733c44a&sv=2) Decentralized command means that the mission and its limits have been clearly defined by senior officers who have an overview of the mission but the details of execution are left to the people on the field who are in contact with its reality. The men are aware of their responsibilities and have a clear idea of what is expected of them. > They are authorized and able to make their own decisions. The prerequisite to it is to have a clear chain of command otherwise you cannot have **empowered leadership.** Principle 9 : Plan[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-4d2e) ----------------------------------------------------------------------------------------------------------------------------- _“No plan resists the first contact with the enemy”_. This quote makes total sense for men in the SEALs units. It is obvious that everything cannot be organised and planned in advance but the more precautions are taken to anticipate problems and mishaps the higher the chances of success. That’s why the mission must explain the overall purpose and desired result. Different courses of action must be explored on how best to accomplish the mission. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjZL-9Gg9gnTPFO28f%252F-MAjc5ou-F1cSHTDEDXg%252Fimage.png%3Falt%3Dmedia%26token%3D1c8a7bb4-b293-41a0-83c5-7fe70e266caa&width=768&dpr=3&quality=100&sign=98821c7e&sv=2) Once again, it is leader’s responsibility to plan for a maximum numbers of scenarios and alternative plans so as to adapt to a situation that can change at any moment. Plans must be clearly explained to all members of the team and the leader must ensure that everyone understands all aspects of the various options. Principle 10 : Leading Up and Down the Chain of Command[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#aa43) --------------------------------------------------------------------------------------------------------------------------------------------------------------- ### Leading down the chain[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-1292) Leaders must routinely communicate with their team members to help them understand their role in the overall mission. ### Leading up the chain[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-524e) If someone does not understand why decisions are being made or why a request has been denied he or she must pluck up the courage to contact the management and ask those questions up the chain. You must always push situational awareness up the chain of command. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjZL-9Gg9gnTPFO28f%252F-MAjcICAWITHM75duXua%252Fimage.png%3Falt%3Dmedia%26token%3D211a303c-1c68-4022-8c7a-a787b9338811&width=768&dpr=3&quality=100&sign=a475cf93&sv=2) _The idea here is not to complain but to act, to discuss with the hierarchy and to do everything to establish communication and mutual understanding._ Principle 11 : **Act Decisively**[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-50d5) -------------------------------------------------------------------------------------------------------------------------------------------- As a leader you must admit there is no 100 percent right solution. Waiting for the 100 percent right and certain solution leads to delay, indecision and inability to execute. On the battlefield it can lead people to death… ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjZL-9Gg9gnTPFO28f%252F-MAjcTdInRI3SMPpXiaB%252Fimage.png%3Falt%3Dmedia%26token%3D3275f277-256f-48b2-bea9-e87d0db31d9a&width=768&dpr=3&quality=100&sign=43cf482d&sv=2) They must be prepared to take a decision based on previous experience, knowledge of how the enemy operates, likely outcomes, whatever intelligence is available in the immediate moment. Principle 12 : Discipline Equals Freedom[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-0b69) --------------------------------------------------------------------------------------------------------------------------------------------------- Here is a notion that seems counter-intuitive it is what the authors call the Dichotomy of Leadership. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjZL-9Gg9gnTPFO28f%252F-MAjcaLbHRKGVIu99TzV%252Fimage.png%3Falt%3Dmedia%26token%3D3a1afbc3-6620-4df5-9388-b5f0a50c2cdd&width=768&dpr=3&quality=100&sign=88e0ecd4&sv=2) For example, the more a plan is studied with discipline and detail, the easier it will be to react faced with an unexpected situation. The more the rules of engagement or the instructions for a mission are known and clear, the more the men on the field will be able to make their own decisions. **Discipline equals Freedom**. While increased discipline most often results in more freedom, there are some teams that become so restricted by imposed discipline that they inhibit their leader’s and team’s ability to make decisions and think freely. That’s why it is really important to find the right balance. To conclude[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-5bb4) ---------------------------------------------------------------------------------------------------------------------- What I really liked in this book is that it has broken the myth that leadership in the army was limited to people that launch an order and subordinates that blindly follow them. > It is fascinating to discover those leadership principles that make a lot of echo to the agile mindset : strong vision, adaptation to change, autonomous teams, top down and bottom up transparency, decision taking, simplicity, team work, ownership, breaking silos… To go further[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-9fbe) ------------------------------------------------------------------------------------------------------------------------ * [_Extreme Ownership: How U.S. Navy SEALs Lead and Win_](https://www.amazon.com/Extreme-Ownership-U-S-Navy-SEALs-ebook/dp/B00VE4Y0Z2) by [Jocko Willink](https://twitter.com/jockowillink) and [Leif Babin](https://twitter.com/LeifBabin) * [_The Dichotomy of Leadership: Balancing the Challenges of Extreme Ownership to Lead and Win_](https://www.amazon.com/Dichotomy-Leadership-Balancing-Challenges-Ownership-ebook/dp/B079Y51FC3/ref=sr_1_1?crid=3Z2ILIHFEE8Q&keywords=dichotomy+of+leadership&qid=1578131200&s=digital-text&sprefix=dicho%2Cdigital-text%2C297&sr=1-1) by [Jocko Willink](https://twitter.com/jockowillink) and [Leif Babin](https://twitter.com/LeifBabin) * [Extreme Ownership](https://www.youtube.com/watch?v=ljqra3BcqWM) , Ted talk by [Jocko Willink](https://twitter.com/jockowillink) | TEDxUniversityofNevada [Learn to lead and help your team(s) to be successful](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful) [PreviousForward Summit 2020](https://yoan-thirion.gitbook.io/knowledge-base/leadership/forward-summit-2020) [NextLearn to lead and help your team(s) to be successful](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful) Last updated 6 years ago * [Principle 1 : Extreme ownership](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-2c21) * [“Leader’s ownership”](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#f8c5) * [“Subordinates ownership”](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#f3e7) * [Principle 2 : No bad teams, only bad leaders](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#b3b0) * [Principle 3 : Believe](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-732b) * [Principle 4 : Check the ego](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-8d06) * [Principle 5 : Cover and move](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-91ee) * [Principle 6 : Simple](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-7a52) * [Principle 7 : Prioritize and execute](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-1602) * [Principle 8: Decentralized Command](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-220d) * [Principle 9 : Plan](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-4d2e) * [Principle 10 : Leading Up and Down the Chain of Command](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#aa43) * [Leading down the chain](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-1292) * [Leading up the chain](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-524e) * [Principle 11 : Act Decisively](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-50d5) * [Principle 12 : Discipline Equals Freedom](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-0b69) * [To conclude](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-5bb4) * [To go further](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals#id-9fbe) --- # Domain Modeling Made Functional | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/domain-modeling-made-functional.md) . Workshop notes[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/domain-modeling-made-functional#workshop-notes) --------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MEXZOZVhFDoG_I5iVA6%252F-MEX_ECHmIxthxUqkbFy%252Fimage.png%3Falt%3Dmedia%26token%3D3ff91aac-64db-458d-9c08-2b4a5c30d164&width=768&dpr=3&quality=100&sign=dbb05b28&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MEXZOZVhFDoG_I5iVA6%252F-MEX_Nls3K03oJ-3NN-S%252Fimage.png%3Falt%3Dmedia%26token%3D8d09c146-43f7-420b-96ec-1cfe86d96636&width=768&dpr=3&quality=100&sign=c9272c20&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MEXZOZVhFDoG_I5iVA6%252F-MEX_PWPiIvw3YqJI-0c%252Fimage.png%3Falt%3Dmedia%26token%3D50080101-2ed0-4c2c-b949-6b7a63411728&width=768&dpr=3&quality=100&sign=f16a4bb2&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MEXZOZVhFDoG_I5iVA6%252F-MEX_d-TmROl4G76Agvn%252Fimage.png%3Falt%3Dmedia%26token%3Dd15dd971-fb24-4791-af44-28eecc8ccffc&width=768&dpr=3&quality=100&sign=4e084b5d&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MEXZOZVhFDoG_I5iVA6%252F-MEX_iWLynMGwh_yzAA8%252Fimage.png%3Falt%3Dmedia%26token%3D1887ef40-c144-4157-8ba1-4db205f283b0&width=768&dpr=3&quality=100&sign=40c253b4&sv=2) Source code[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/domain-modeling-made-functional#source-code) --------------------------------------------------------------------------------------------------------------------------------- [https://github.com/swlaschin/DmmfWorkshop](https://github.com/swlaschin/DmmfWorkshop) **Extra Material of the Workshop**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/domain-modeling-made-functional#extra-material-of-the-workshop) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * [Four Candles](https://www.youtube.com/watch?v=CNTM9iM1eVw) -- comedy sketch with lessons for DDD * [Reinventing the transaction script](https://www.youtube.com/watch?v=USSkidmaS6w) (talk) * Functional DDD * [fsharpforfunandprofit.com/ddd](https://fsharpforfunandprofit.com/ddd/) * [“Designing with Types” series](https://fsharpforfunandprofit.com/series/designing-with-types.html) on fsharpforfunandprofit.com * [Serializing a rich domain model to a database, JSON, etc](https://fsharpforfunandprofit.com/posts/serializating-your-domain-model/) * [Code from "Domain Modeling Made Functional" book](https://github.com/swlaschin/DomainModelingMadeFunctional) * [Evolving a DDD design: Microwave example project](https://github.com/swlaschin/Microwave/tree/v1) * [Functional Domain Modeling (Scala Version)](https://www.slideshare.net/pjschwarz/scala-3-by-example-algebraic-data-types-for-domain-driven-design-part-1) * Learning F# * [FSharpKoans](https://github.com/ChrisMarinos/FSharpKoans/tree/fsharp/FSharpKoans) * F# Front end: * [Elmish -- the Elm Architecture for F# frontends](https://elmish.github.io/elmish/) * There is a whole (excellent) [book on using Elmish](https://zaid-ajaj.github.io/the-elmish-book/#/) * Also [https://compositional-it.com/blog/2017/09-21-safe-elmish/index.html](https://compositional-it.com/blog/2017/09-21-safe-elmish/index.html) * F# web frameworks: * [https://safe-stack.github.io/](https://safe-stack.github.io/) * [Giraffe](https://github.com/giraffe-fsharp/Giraffe) (uses ASP.NET core) * [Suave](https://suave.io/) (standalone) * Working with JSON and databases * [Serializing your domain model](https://fsharpforfunandprofit.com/posts/serializating-your-domain-model/) -- how to share algebraic data types with the outside world * Advanced F# * [https://fsharpforfunandprofit.com/video/](https://fsharpforfunandprofit.com/video/) * [Capability-based design](https://fsharpforfunandprofit.com/cap/) talk and blog post * [Map, apply, bind and “elevated” worlds](https://fsharpforfunandprofit.com/series/map-and-bind-and-apply-oh-my.html) * [Cyclic dependencies are evil](https://fsharpforfunandprofit.com/posts/cyclic-dependencies/) * Event sourcing * [Event Sourcing - Step by step in F#](https://medium.com/@dzoukr/event-sourcing-step-by-step-in-f-be808aa0ca18) * FsUno - [https://github.com/thinkbeforecoding/FsUno](https://github.com/thinkbeforecoding/FsUno) * [A more advanced version of FsUno](https://github.com/thinkbeforecoding/FsUno.Prod) closer to what would be put in production * Adopting FP in your company * [Video: Adopting FP: A Human-First Approach](https://www.youtube.com/watch?v=vpcKnqyNdSQ) -- how to ensure that new ideas work inside a company * F# tips and example code * [F# to C# interop tips](https://gist.github.com/swlaschin/2d3e75a2ff4a87112c19309c86e0dd41) * [C# LINQ -> F# equivalents](https://gist.github.com/swlaschin/9b0f11a5fccc73a8c11f7f7551ef19a9) * [“Effective F#” gist](https://gist.github.com/swlaschin/31d5a0a2c4478e82e3ed60d653c0206b) -- a lot of guidelines for developing in F# * [DTO validation example](https://gist.github.com/swlaschin/886db5a0f8617ce6baab8c260a36e1be) * [AsyncExample.fs](https://gist.github.com/swlaschin/4ffac1a64bbfeab383cc3f0e7b09f169) -- some examples of Async * [AsyncResult Workflow Template](https://gist.github.com/swlaschin/c153c0c68d894f6e9542fb2a2cfb746e) -- demonstrates async and result workflow * [Utility.fs](https://gist.github.com/swlaschin/4e4d1b3323d120983299d21c6203e2dc) -- common classes like NonEmptyList, etc * [Testutils.fs](https://gist.github.com/swlaschin/6cc747dccdf678d192d816d1820b63ac) -- utilities for testing * [Wrapping](https://gist.github.com/thelegendofando/0a80060f4ac9a45819d8c3fcd066962c) (simple) -- AWS + Json wrappers To go further[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/domain-modeling-made-functional#to-go-further) ------------------------------------------------------------------------------------------------------------------------------------- Links for if you want to keep going after the workshop : 1. see the link at the bottom of the Google Docs file at 2. For C# compatibility, see code at: DmmfWorkshop/CSharpInterop 3. For monads and more, see slides: F-FP\_toolkit.pdf code: _**DmmfWorkshop/src/F-ImplementingWorkflows/01-Exercises.txt**_ 4. For capability-based design see: [https://fsharpforfunandprofit.com/cap/](https://fsharpforfunandprofit.com/cap/) [https://www.youtube.com/watch?v=fi1FsDW1QeY](https://www.youtube.com/watch?v=fi1FsDW1QeY) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MEXfxHrvj_wTEA82vPV%252F-MEXg-MU5-MBdT8uUV_s%252Fimage.png%3Falt%3Dmedia%26token%3Df6b16eaa-003d-43c5-89bd-a08d7a376fb3&width=768&dpr=3&quality=100&sign=d70a5c07&sv=2) Read his great book on the topic : [Domain Modeling Made Functional](https://www.amazon.com/Domain-Modeling-Made-Functional-Domain-Driven/dp/1680502549) [PreviousF# for OO programmers](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/f-for-oo-programmers) [NextTesting](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing) Last updated 6 years ago * [Workshop notes](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/domain-modeling-made-functional#workshop-notes) * [Source code](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/domain-modeling-made-functional#source-code) * [Extra Material of the Workshop](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/domain-modeling-made-functional#extra-material-of-the-workshop) * [To go further](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/domain-modeling-made-functional#to-go-further) --- # Testing | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing.md) . A Testing Strategy representation : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FaiO6E1sAMDR5Sg84KYOg%252Fimage.png%3Falt%3Dmedia%26token%3Da72c6fa1-bc3a-435a-9480-31142f9bdd59&width=300&dpr=3&quality=100&sign=851fa653&sv=2) [PreviousDomain Modeling Made Functional](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/domain-modeling-made-functional) [NextClean Tests](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests) Last updated 4 years ago --- # Learning expedition | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/learning-expedition.md) . Imagine that you have just returned from a "_**learning expedition**_" in companies where you have observed... (a very beautiful form of agility for example) You are now back at your own office. > _**It's time to share your memories.**_ How to ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/learning-expedition#how-to) ---------------------------------------------------------------------------------------------------------------------- Split the group in smaller ones (of 4 to 5 people) At the end of the exercise, the objective for the team is to present their consolidated observations. 1. **Initiation** : in solo, ask to the participants to write as many observations as they made during their expedition (on sticky note to easily reorganize ideas). - _**5'**_ 2. **Sharing** (1/2) : participants share inside their group their observations. - _**5'**_ 3. **Reflective break** : each group take a reflective break to decide which actions they need to do to be able to reach their objective - _**2'**_ 4. **Sharing** (2/2) : each group continues the sharing part - _**5'**_ 5. **Finalize your story** : finalize group story by clustering ideas and agree on the story telling - _**5'**_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-ME6f5oPen2W3VBwNPED%252F-ME6o1rd0u3T6KMnkX2R%252Fimage.png%3Falt%3Dmedia%26token%3De3f6cce1-1ad4-4222-bbb8-3827cfc47d50&width=768&dpr=3&quality=100&sign=9451c31d&sv=2) ### Global sharing / Pollination - 15'[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/learning-expedition#global-sharing-pollination-15) * Let each group decides who will present the story of their own group * The other participants can go to the other groups and listen their stories - **10'** * All the participants go back to their initial groups and share their discoveries - **5'** ### Story telling[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/learning-expedition#story-telling) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-ME6f5oPen2W3VBwNPED%252F-ME6mtu7Mj2NXOZDZKCC%252Fimage.png%3Falt%3Dmedia%26token%3Dde4a0a78-0918-473f-b49d-fd6a2508dbc6&width=768&dpr=3&quality=100&sign=52559ffc&sv=2) [PreviousEchelle](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/echelle) [NextHow to improve Team Decision making ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making) Last updated 6 years ago * [How to ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/learning-expedition#how-to) * [Global sharing / Pollination - 15'](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/learning-expedition#global-sharing-pollination-15) * [Story telling](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/learning-expedition#story-telling) --- # How to write better assertions | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-write-better-assertions.md) . Write better assertions by using Fluent APIs : * [https://github.com/ythirion/assertj-kata](https://github.com/ythirion/assertj-kata/) [PreviousHow to name our Unit Tests](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests) [NextKatas](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas) Last updated 5 years ago --- # How to read code better | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain/how-to-read-code-better.md) . ### Objectives :[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain/how-to-read-code-better#objectives) * Understand how our brain works in front of code * Get some tips to improve our daily life * Flashcards to learn quickly new syntax / spaced repetition * Chunking code strategies * Techniques to read complex code Connection - Code reader 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain/how-to-read-code-better#connection-code-reader-10) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MiegcV81pgbtr3ElNVS%252F-MiegjCnc_ZOIW6jxbLp%252Fimage.png%3Falt%3Dmedia%26token%3Da9d23b8d-b409-42fb-8786-ac30792809d4&width=768&dpr=3&quality=100&sign=166b5282&sv=2) Ask participants to : * Choose a code snippet * Take a few minutes to read / understand it - 5' * Add notes on your snippet - 5' * Why did you choose this piece of code ? * What makes it easy to understand the code ? * What makes it hard to understand the code ? [code-snippets.zip](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MiegcV81pgbtr3ElNVS%2F-Miegrl65D3iU_7WaQzc%2Fcode-snippets.zip?alt=media&token=c45e5cdd-7e38-43ec-b33e-82b0f9be18cc) archive · 315KB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MiegcV81pgbtr3ElNVS%2F-Miegrl65D3iU_7WaQzc%2Fcode-snippets.zip?alt=media&token=c45e5cdd-7e38-43ec-b33e-82b0f9be18cc) Code snippets examples Debrief it and relate to the confusion related to code. Concepts - 30'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain/how-to-read-code-better#concepts-30) -------------------------------------------------------------------------------------------------------------------------------------------------- Concrete Practice - Create your own Flashcards 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain/how-to-read-code-better#concrete-practice-create-your-own-flashcards-10) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * Think of the top 10 programming concepts you always have trouble remembering * Make a set of flashcards for each of the concepts and try using them **Example** : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MiehfvXZAxLdvLCgr1d%252F-Miejuuvw1Ei-5XEM4Rk%252Fimage.png%3Falt%3Dmedia%26token%3Dcafb7a7d-9336-4b7e-b98c-8e7c19a1cc1e&width=768&dpr=3&quality=100&sign=f4ca8e8d&sv=2) Conclusion - 5'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain/how-to-read-code-better#conclusion-5) ---------------------------------------------------------------------------------------------------------------------------------------------------- * Debrief on the learning of the day * Ask participants to stick their name * Ask them why here ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MiehfvXZAxLdvLCgr1d%252F-Miek50oP5ZHWIs-RqUR%252Fimage.png%3Falt%3Dmedia%26token%3D3dc9c9a0-8c48-40d4-a243-2a86a86db6db&width=768&dpr=3&quality=100&sign=cf167312&sv=2) [PreviousThe Programmer's Brain](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain) [NextSoftware Architecture](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture) Last updated 4 years ago * [Objectives :](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain/how-to-read-code-better#objectives) * [Connection - Code reader 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain/how-to-read-code-better#connection-code-reader-10) * [Concepts - 30'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain/how-to-read-code-better#concepts-30) * [Concrete Practice - Create your own Flashcards 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain/how-to-read-code-better#concrete-practice-create-your-own-flashcards-10) * [Conclusion - 5'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain/how-to-read-code-better#conclusion-5) --- # Workshop | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop.md) . ### Objectives :[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#objectives) * Understand how to fix technical debt with Code Analysis. Connection - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#connection-10) ---------------------------------------------------------------------------------------------------------------------------------------- In pair answer to those questions, in your team : * What is technical debt ? * What is the difference between technical debt and legacy code ? * How do you quantify your technical debt ? * How do you use your Static Code Analysis tools ? * What could be improved ? Concepts - 20'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#concepts-20) ------------------------------------------------------------------------------------------------------------------------------------ Go through this page [Software Design X-Rays](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MUEG1T7Fl8eDdXL16i2%252F-MUELkZymIIT9eqLco8u%252FSoftware-Design%2520X-Rays.png%3Falt%3Dmedia%26token%3Dbb9c3988-6605-48b9-8caf-35790d3b629e&width=768&dpr=3&quality=100&sign=71646e1d&sv=2) Concrete Practice - 20'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#concrete-practice-20) ------------------------------------------------------------------------------------------------------------------------------------------------------ In pair select 1 exercise (in each exercise you will investigate in a code base of your choice with [CodeScene](https://codescene.io/) ) - **15'** * Find Refactoring Candidates : * [ASP .NET Core](https://codescene.io/projects/1690/jobs/52744/results/code/hotspots/system-map) * [Docker](https://codescene.io/projects/169/jobs/3964/results/code/hotspots/system-map) * [Rails](https://codescene.io/projects/1699/jobs/4265/results/code/hotspots/system-map) * Prioritize Hotspots : * [Linux](https://codescene.io/projects/1740/jobs/4358/results/code/hotspots/system-map) * Identify change patterns : * [e-Commerce site](https://codescene.io/projects/1593/jobs/3920/results/code/temporalcoupling/by-commits) * [PhpSpreadSheet](https://codescene.io/projects/1579/jobs/3839/results/code/temporalcoupling/by-commits) * Find the Experts in [Kubernetes](https://codescene.io/projects/1823/jobs/4598/results/social/knowledge/individuals) * Off-boarding, what if someone leaves the project? * [Clojure](https://codescene.io/projects/1824/jobs/4597/results/social/knowledge/individuals?aspect=loss) * [Git](https://codescene.io/projects/1664/jobs/4156/results/social/knowledge/individuals?aspect=loss) #### Collective debriefing - What are your findings ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#collective-debriefing-what-are-your-findings) Conclusion - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#conclusion-10) ---------------------------------------------------------------------------------------------------------------------------------------- There is so much more to do with what we already have. #### Demo of CodeCharta with SonarQube Data :[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#demo-of-codecharta-with-sonarqube-data) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MUESzoeIEGSLP0vlN8g%252F-MUETkDtWde_RZ2hiQrC%252Fimage.png%3Falt%3Dmedia%26token%3D0d87bf57-31b4-4315-9e1b-cf38def7ba1d&width=768&dpr=3&quality=100&sign=1048f9f7&sv=2) #### Demo of code-forensics[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#demo-of-code-forensics) * Clone a repository * Run analysis through : [![Logo](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fgithub.com%2Ffluidicon.png&width=20&dpr=3&quality=100&sign=553c72a7&sv=2)GitHub - ythirion/code-forensics: Scripts to use code-forensicsGitHub](https://github.com/ythirion/code-forensics) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MUsN812XZBGV_p_gfca%252F-MUsNiITEbR9LfTcRJI5%252Fimage.png%3Falt%3Dmedia%26token%3Dcf021935-0260-45f6-a200-0b74d7c77861&width=768&dpr=3&quality=100&sign=8c927c1e&sv=2) #### Resources[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#resources) * [Codecharta](https://github.com/MaibornWolff/codecharta) * [CodeScene](https://codescene.com/) * [Code-maat](https://github.com/adamtornhill/code-maat) * [code-forensics](https://github.com/smontanari/code-forensics) * [code-forensics scripts](https://github.com/ythirion/code-forensics) [PreviousSoftware Design X-Rays](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays) [NextThe Programmer's Brain](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain) Last updated 5 years ago * [Objectives :](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#objectives) * [Connection - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#connection-10) * [Concepts - 20'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#concepts-20) * [Concrete Practice - 20'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#concrete-practice-20) * [Conclusion - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays/workshop#conclusion-10) Copy sh run-analysis.sh --projectName= --repositoryPath= --- # How to improve Team Decision making ? | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making.md) . Connection[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#connection) --------------------------------------------------------------------------------------------------------------------------- ### Materials[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#materials) * [Dixit cards](https://www.libellud.com/dixit-2/) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCRh_xcSKUceIXxy1zD%252F-MCRhlTVQ0k1szWHoSGW%252Fimage.png%3Falt%3Dmedia%26token%3Dd6c8fe7c-9415-4668-9cad-a43f730f9fdd&width=768&dpr=3&quality=100&sign=70370db7&sv=2) ### Dixit problem solving[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#dixit-problem-solving) Find a volunteer among the participants who recently had an issue regarding decision making inside his/her team. Ask to the volunteer : * Draw a random card * Ask this question : "_**How this card represents the situation you encountered ?**_" * Ask for details on the card (only open questions) * Example : "What about this color ?" * The others are invited to ask questions as well * Once everyone understood the problem, the volunteer is invited to draw a second card * Ask this question : "_**How this card represents a solution to your previous problem that you could have experimented at the time ?**_" * The others are invited to ask questions as well * They can also propose solutions by referring to the card * Draw a last card : * Ask this question : "_**Imagine you had tried the solution you identified on the second card, what happened?**_" ### Debrief the activity with all the participants :[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#debrief-the-activity-with-all-the-participants) * _What value did you see in this activity ?_ * _What did you learn ?_ * _How it has been helpful ?_ Concepts[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#concepts) ----------------------------------------------------------------------------------------------------------------------- [Decision Making Principles and Practices](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices) Concrete Practice[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#concrete-practice) ----------------------------------------------------------------------------------------------------------------------------------------- ### Feedforward[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#feedforward) The "feedforward" consists to formulate requests or propose future-oriented options or solutions, as opposed to the feedback technique, which looks back on a past situation. _**Example**_ : _**For your next**_ report, I suggest that you divide the summary of your activities by date or by function (budget, planning, operations management, ...). _**So that**_ it will be easier to read it, to find the information I need and to refer to it later. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCSJ-ymKnhorecsPF9d%252F-MCSJMfyomqTGsc43iSo%252Fimage.png%3Falt%3Dmedia%26token%3D342a5e91-3519-4890-be17-c2dda9e23d62&width=768&dpr=3&quality=100&sign=f3d080e1&sv=2) * Regarding decision making formulate a _FeedForward_ to yourself : _**For your next ... I invite you to .... so that...**_ * If you are OK, share it with the rest of the attendees Conclusion[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#conclusion) --------------------------------------------------------------------------------------------------------------------------- A simple ROTI : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCSJ-ymKnhorecsPF9d%252F-MCSJbHTdoGGVEqv61qB%252Fimage.png%3Falt%3Dmedia%26token%3D32b5ba26-2fbd-4925-8512-ce796c7429c3&width=768&dpr=3&quality=100&sign=52d388f1&sv=2) [PreviousLearning expedition](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox/learning-expedition) [NextDecision Making Principles and Practices](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices) Last updated 6 years ago * [Connection](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#connection) * [Materials](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#materials) * [Dixit problem solving](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#dixit-problem-solving) * [Debrief the activity with all the participants :](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#debrief-the-activity-with-all-the-participants) * [Concepts](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#concepts) * [Concrete Practice](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#concrete-practice) * [Feedforward](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#feedforward) * [Conclusion](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making#conclusion) --- # Unknown \> For the complete documentation index, see \[llms.txt\](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending \`.md\` to page URLs; this page is available as \[Markdown\](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture.md). # Software Architecture ### Resources \* \[Would you like architects with your architecture?\](https://architectelevator.com/architecture/organizing-architecture/) !\[\](/files/-MdGTLpUwYYqwjXMo\_EF) #### Books \* #### Tools \* Creates diagrams from textual descriptions! \* \* C4 model : --- # Learning 3.0 | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0.md) . The principles on this page come from the book [Learning 3.0 : How creative workers learn](https://www.amazon.fr/How-Creative-Workers-Learn-creativity-ebook/dp/B013K8K1CU) from Alexandre Magno. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCQwikDhK3mLbHUEViv%252F-MCQxlzU3ZJJeNnn2NsY%252Fimage.png%3Falt%3Dmedia%26token%3Dac5cd975-678c-4807-b1db-8cf3a289a0c0&width=768&dpr=3&quality=100&sign=84efd508&sv=2) 2 types of learning[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#id-2-types-of-learning) ------------------------------------------------------------------------------------------------------------------------- ### Prescriptive[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#prescriptive) * Based on knowledge and skills that are pre-determined for the learners. * Learners = empty containers into which the expert must deposit knowledge. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCQwikDhK3mLbHUEViv%252F-MCQyWJJgs973qrxlfl0%252Fimage.png%3Falt%3Dmedia%26token%3Ded0e5986-6b56-4a4c-8227-b4e04eb0e16e&width=768&dpr=3&quality=100&sign=722e7b7b&sv=2) ### Emergent[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#emergent) * Self-organized learning. * Arises in unpredictable environments within a context in which learners organize : * The process * The learning destinations ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCQwikDhK3mLbHUEViv%252F-MCQyXgs7KRhQ-WOVAjs%252Fimage.png%3Falt%3Dmedia%26token%3D145c9add-11d6-40a0-857b-abec5477382a&width=768&dpr=3&quality=100&sign=c7f644db&sv=2) 3 versions of learning[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#id-3-versions-of-learning) ------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCQwikDhK3mLbHUEViv%252F-MCQzQmx4PzLEiU1yRhq%252Fimage.png%3Falt%3Dmedia%26token%3D31f007a0-839b-4b2f-87b2-61513d2b1c7f&width=768&dpr=3&quality=100&sign=c3cbaede&sv=2) Learning 3.0[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#learning-3.0) -------------------------------------------------------------------------------------------------------- * All _**about stories and ideas**_ more than about lessons and advice * Learning is _**related to real work**_; it’s not outside it * The one who learns becomes the _**protagonist**_, having higher (or total) influence on the product and on the process of learning * _**Learning emerges from the connection of stories, ideas, and practice**_, and equal discussion through a problematized situation from the real world * Challenging good and best practices is encouraged from the _**intentional confrontation of multiple perspectives**_ * _**Viewing the learning is more important than measuring it**_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCQwikDhK3mLbHUEViv%252F-MCQzywq3nS8pOLlo5aH%252Fimage.png%3Falt%3Dmedia%26token%3D872dbe28-54e7-4036-9ae3-fab58534c5e9&width=768&dpr=3&quality=100&sign=3b073039&sv=2) ### The Creative Worker[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#the-creative-worker) * A creative worker is someone who, _**when faced with a problem, raises alternatives instead of limiting herself to known solutions**_. * A big part of the abilities you will need to discover _**start with the word “self”**_: e.g. self-knowledge, self-discovery, self-development, and self-motivation. * For creative workers, the _**learning must emerge from practice**_, of real problems and solutions. * Creative workers create and nurture communities around them and through those communities emerges a big part of the learning necessary to deal with the professional challenges of the twenty-first century. _The greater the love for what you do, the greater your curiosity and your will to explore, and your capacity to be creative._ ### The flow[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#the-flow) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCQwikDhK3mLbHUEViv%252F-MCR0PZhsiggRl4MGDBX%252Fimage.png%3Falt%3Dmedia%26token%3Dd51075c4-2163-43f1-97aa-c8e0325ad3a4&width=768&dpr=3&quality=100&sign=fc4d8881&sv=2) ### How to ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#how-to) You can use the "Learning Canvas" : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCQwikDhK3mLbHUEViv%252F-MCR0bb8qbOBhH150nFq%252Fimage.png%3Falt%3Dmedia%26token%3Db5383245-2f0f-4f9c-9abd-8932faa80dbc&width=768&dpr=3&quality=100&sign=3cd3ed5&sv=2) Infography[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#infography) ---------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCQwikDhK3mLbHUEViv%252F-MCR1jOz_QdB6ZmoRup5%252Fimage.png%3Falt%3Dmedia%26token%3De2b286d4-f54e-41c9-9310-2955d9796c6a&width=768&dpr=3&quality=100&sign=e529f844&sv=2) Source : https://medium.com/changingdojo/learning30-as-enabler-for-product-innovation-a84c1eda2a5f Resources[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#resources) -------------------------------------------------------------------------------------------------- * [Website](https://www.learning30.co/resources) * [How Liberating Structures and Learning 3.0 Are Complementary](https://medium.com/the-liberators/how-liberating-structures-and-learning-3-0-are-complementary-25551a06c400) [PreviousDecision Making Principles and Practices](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices) [NextRetrospectives](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives) Last updated 6 years ago * [2 types of learning](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#id-2-types-of-learning) * [Prescriptive](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#prescriptive) * [Emergent](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#emergent) * [3 versions of learning](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#id-3-versions-of-learning) * [Learning 3.0](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#learning-3.0) * [The Creative Worker](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#the-creative-worker) * [The flow](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#the-flow) * [How to ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#how-to) * [Infography](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#infography) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0#resources) --- # Design sessions | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/design-sessions.md) . When I was fully in Dev Teams it is a practice we used to define the implementations of our features. It consists in brainstorming and aligning at the beginning of each feature implementation. ### How to ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/design-sessions#how-to) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MKdZoCuGt233J0AaZ4M%252F-MKddILFfduwRcdXHt2Y%252Fimage.png%3Falt%3Dmedia%26token%3D2b4546fb-6727-4959-bdb0-f5a68c52ee68&width=768&dpr=3&quality=100&sign=aafdf4f1&sv=2) Once a team member wants to open a new Product Backlog Item, User Story or feature implementation, we do an instant meeting in front of a whiteboard and a computer. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MKdZoCuGt233J0AaZ4M%252F-MKde1yWx98qImgQS36F%252Fimage.png%3Falt%3Dmedia%26token%3Dc0777eb8-fa8a-4063-b1d5-4f9bed9a320f&width=768&dpr=3&quality=100&sign=d2a1443d&sv=2) * We start by agreeing on its definition * Be sure we are all aligned on what needs to be done ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MKdZoCuGt233J0AaZ4M%252F-MKdeJsEAYXH3ms3hq4-%252Fimage.png%3Falt%3Dmedia%26token%3D60a388e6-5a23-4b80-a57a-4c0cec17fbcf&width=768&dpr=3&quality=100&sign=ae01828a&sv=2) We use the whiteboard to align ourselves on the different flows to implement ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MKdZoCuGt233J0AaZ4M%252F-MKdecZMOV4Ghq97bwmR%252Fimage.png%3Falt%3Dmedia%26token%3D1d1b6108-7b41-470d-b961-1f6ab7d947a6&width=768&dpr=3&quality=100&sign=b53eee7e&sv=2) * We open the source code or create a new one and start designing the contracts : * From our external layers (APIs for example) to our Domain model * POCOs / POJOs * DTOs / Commands * We don't implement anything except of the contracts * We throw exceptions `throw new NotImplementedException()` * BUT we agree on the naming / parameters * We put TODOs in the code to be clear what is expected to implement * Later on I have learned that this TODO approach to implementation had a name : [Puzzle Driven Development](https://www.yegor256.com/2010/03/04/pdd.html) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MKdZoCuGt233J0AaZ4M%252F-MKdeoCO34bmGwnKFhDm%252Fimage.png%3Falt%3Dmedia%26token%3D31a58a96-3e9d-4e6c-8b85-c52c71718da2&width=768&dpr=3&quality=100&sign=6921c426&sv=2) The whole team or part of it can now work on the implementation by knowing exactly what to do. ### Pros[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/design-sessions#pros) * Instant alignment feedback on what needs to be done * Increased knowledge sharing * Quick up-skilling for new-joiners * Better solution when designed collaboratively * "Alone we go faster together we go further" * Save a lot of times * Avoid feedback loops (in code reviews for example) when no team alignment * Reinforce the collective ownership feeling inside the team * Help to shape a real team spirit as well * Everyone is involved at the beginning of everything ### Infography[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/design-sessions#infography) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MKdZoCuGt233J0AaZ4M%252F-MKdaqQcCCDQQ4fZ2xC8%252Fimage.png%3Falt%3Dmedia%26token%3D8bf00d62-506a-4048-870f-ac985cc4017c&width=768&dpr=3&quality=100&sign=9cd96dfd&sv=2) [PreviousCo-designs](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs) [NextInterview Domain Experts](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/interview-domain-experts) Last updated 5 years ago * [How to ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/design-sessions#how-to) * [Pros](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/design-sessions#pros) * [Infography](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/design-sessions#infography) --- # The secrets to re-on-board the devs in agility | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility.md) . Why you should read this article[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-9ed9) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Like we have seen in the previous article. **Agility has been diverted and no longer belongs to developers.** The aim of this article is to provide some keys to re-on-board developers into it. The software craftsmanship[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-3581) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- In **2008**, Uncle Bob, one the 17 from the agile manifesto, shared this kind of concerns about agility. For him agile was **too much focus on the process** (how to build the product fast and how to build the right product). From his point of view developers were considered only as executes and not as caring people. > For those reasons, he wanted to add a fifth value in the agile manifesto: _**“Craftsmanship over Execution”**_ (“Craftsmanship over Crap” in the first version). The whole idea was to reduce the gap between the agile and technical world by emphasizing the importance of people’s skills when it comes to software development. He wanted to **focus on technical excellence that is crucially important to deliver value.** The same year he has initiated the Software craftsmanship movement with a new manifesto: [**the manifesto for software craftsmanship**](http://manifesto.softwarecraftsmanship.org/) . ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9VhTCMVOnxEldhWdb%252F-MF9Vn2W_A_TpkgcAE_E%252Fimage.png%3Falt%3Dmedia%26token%3D0e2a8c50-bb4d-4e18-91b1-1c5561478aed&width=768&dpr=3&quality=100&sign=ba02168e&sv=2) ### Well-crafted software[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-8276) We need to create high quality code : * Automated tests * Business languages in the code * Simple design ### Steadily Adding Value[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-2620) * Constantly improve the code * Apply the boy scout rule ### A Community of Professionals[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#cc82) * We teach anyone with a willingness to learn (sharing, mentoring) ### Productive Partnerships[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#a0d4) * We partner with our customers to understand their business. * We do not propose solutions until we are sure we have found the right problem. * We are not factory workers, so we need to say NO when it’s for our customers good. This movement still exists, and some books have been written on it like the best-seller _“_[_The Software craftsman_](https://www.amazon.com/Software-Craftsman-Professionalism-Pragmatism-Robert/dp/0134052501/ref=sr_1_1?crid=N0T8YXEJOQ65&keywords=the+software+craftsman&qid=1560456764&s=gateway&sprefix=the+software+crafts%2Caps%2C263&sr=8-1) _” from_ [_Sandro Mancuso_](https://twitter.com/sandromancuso) . eXtreme Programming (XP)[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#d48e) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- If we think about the way products are built with waterfall approaches everything is **disruptive** in a framework scrum. We want to deliver in an iterative and incremental way, there are new roles and there are plenty of events promoting communication, collaboration and continuous improvement. Planning is handled totally differently with a product backlog, documentation is done in a “just in time” way. Teams need to implement software development practices to support iterative and incremental approach. To do so, there is a lot of answers in XP like : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9VhTCMVOnxEldhWdb%252F-MF9W194klFDVx9FmvKx%252Fimage.png%3Falt%3Dmedia%26token%3Dc6529b4b-1fa9-4b86-a5c2-6e5c7ba9ffec&width=768&dpr=3&quality=100&sign=7e7e6134&sv=2) * [**Test Driven Development**](https://en.wikipedia.org/wiki/Test-driven_development) : an extreme approach to software development that ensures every line of code is tested because before writing any line of production code you **must** start with a test. * [**Pair programming**](https://en.wikipedia.org/wiki/Pair_programming) : 2 developers on the same computer to write code collaboratively (improve quality, knowledge sharing and reinforce the collective ownership feeling). * [**Continuous integration**](https://en.wikipedia.org/wiki/Continuous_integration) : integration of the code in a central repository every day multiple times. Refactoring (the practice of improving code continuously) is at the center of everything in XP because by essence nothing is definitive, we are continuously adapting. > _**Developers need to be trained and coached on XP because it provides a lot of practices that make possible to build and deliver a product in an iterative and incremental way.**_ XP should be more pushed as an alternative to Scrum. It could re-conciliate developers with agility. Invest on **agile** technical coaching[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-4f47) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- > A lot of energy and money are spent by companies on new roles that emerged from frameworks like scrum (Product Owner, Scum Master), BUT what about the people that really build the products? What about technical practices and excellence? Companies need to invest in agile technical coaching that promotes excellence and spreads the practices that are really useful for the teams to deliver a quality product. > It is what I do since many years now. I strongly believe that developers are really the key to an agile transformation and companies need to on-board them from the beginning in their agile journey. Since many years now I have developed approach and tools that help to train and coach developers on the technical side of agility. At the time with some colleagues we have developed a card game that promote this mindset : [![Logo](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fagilepartner.github.io%2Fcraft-challenges%2Fassets%2Fimages%2Ffavicon%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=d00d9f01&sv=2)CRAFT CHALLENGES : Homeagilepartner.github.io](https://agilepartner.github.io/craft-challenges/) Value developer’s work[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-0b76) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- With agile values and principles developer’s work should be valued and they should work in an environment where they are not considered as “code monkeys”. To create this culture, companies need to invest in a really simple but powerful tool: **feedback**. It’s not something people learned at school but it’s something people need to learn. As agile enthusiasts we need to help people to give feedback to each other’s. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9XdqRH5URq2EZ0H9N%252F-MF9XeXWwF0EMdiN-XIy%252Fimage.png%3Falt%3Dmedia%26token%3D06945dc3-ff83-42fd-a14c-8dd62d0762ea&width=768&dpr=3&quality=100&sign=4b437abd&sv=2) When you think about the skills required to be a developer at the moment (front-end, back-end, security concerns, architecture, operability, …) you easily understand how much they are keen to learn new stuff every days. Not that much jobs are like this. Being a developer requires a lot of intrinsic motivation to learn and master new stuff every day. Developers push organizations to innovate and they should receive more feedback for doing it. Change the HR processes[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-6a59) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Developers should be **proud to be developers** but in many companies the peter’s principle is applied: ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F508%2F1*1F11bQb0p3KzxhmHO64Xlw.png&width=768&dpr=3&quality=100&sign=3a90a02a&sv=2) * A very good developer has success, so he is promoted as tech lead * As a good tech lead, he is promoted as software architect * As a good software architect, he is promoted as CIO of the company and **at this position he fails.** He fails because skills required for a CIO position is not technical ones, is more about management skills and maybe this developer was only a technical guy that wanted to work on technical stuff. It’s sad to see that human resources processes are still founded on this kind of archaic principles. If people want a raise they need to go up in their companies, they need to have a huge job name that does not mean anything for anyone. There is often no alternative. Sometimes people are lost in a job that do not fit them only because this kind of culture. As agile enthusiasts we need to help HR to change and really promote this culture of being proud of being developers. We need to help them revisit career path. Avoid agile dictators[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-7587) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9XdqRH5URq2EZ0H9N%252F-MF9Y3fF17hOaqLgkahG%252Fimage.png%3Falt%3Dmedia%26token%3D908b3796-6935-4f54-b0c7-606bfc615d0e&width=768&dpr=3&quality=100&sign=ae6832b0&sv=2) Often agile has a bad image in developers mind because they have only met **agile dictators/evangelists that crucially lacked pragmatism**. Those kind of people have negative impact on team’s health (self organizers). Because agile coaching is pretty new, companies do not really know what to expect from it. So they are confident in theirs partners to do the right stuff and often the right stuff for agile coaches is to push agility to the extreme without any pragmatism and sometimes by forgetting the heart of agile. We need to spread the idea that **agile coaches** are not evangelists nor dictators but **pragmatic people**. **Agility requires pragmatism, so we must demonstrate it and incarnate it everyday.** [PreviousThe developers — the forgotten of agility](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility) [NextCoaching toolbox](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/coaching-toolbox) Last updated 5 years ago * [Why you should read this article](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-9ed9) * [The software craftsmanship](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-3581) * [Well-crafted software](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-8276) * [Steadily Adding Value](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-2620) * [A Community of Professionals](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#cc82) * [Productive Partnerships](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#a0d4) * [eXtreme Programming (XP)](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#d48e) * [Invest on agile technical coaching](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-4f47) * [Value developer’s work](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-0b76) * [Change the HR processes](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-6a59) * [Avoid agile dictators](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility#id-7587) --- # XTREM WATCH — Découvrez la puissance de la veille collective | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective.md) . Pour … quoi ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#pour-...-quoi) -------------------------------------------------------------------------------------------------------------------------------------------------------- La veille est une activité habituellement individuelle, avec Xtrem Watch on la rend : * **Collective** : ce qui permet de partager et découvrir de nouveaux sujets qui ne sont pas dans notre radar * **Continue** : répond à la problématique du manque de temps. On se bloque des créneaux afin de pouvoir effectuer des activités de veille non plus en best effort mais sur notre temps de travail. Nous avons créé ce format d’atelier en nous basant sur notre vécu avec [Xtrem Reading](https://medium.com/@yoan.thirion/en-route-vers-lapprenance-avec-xtrem-reading-fc460112cabb?source=friends_link&sk=f6fd28e5084b3e5033fdf6424b335f02) en nous posant une question : > Quelle autre activité solitaire pourrait bénéficier de l’intelligence collective et s’enrichir avec des interactions ? Quoi ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#df69) ---------------------------------------------------------------------------------------------------------------------------------------- Cet atelier permet : * Aux participants de comprendre qu’il n’est pas nécessaire de préparer un sujet parfaitement pour le présenter : revenir à une certaine simplicité * De stimuler l’apprenance au sein d’un groupe de personnes / d’une organisation : apprendre ensemble et construire de nouvelles connaissances permettant d’innover et faire face à l’incertitude * D’aider des personnes qui n’ont pas l’habitude de prendre la parole en public à le faire : démystifier l’activité « d’orateur » * De se tenir à jour des dernières tendances aussi bien professionnelles que personnelles * De construire un esprit d’équipe et d’entraide A chaque fois qu’on organise une session les participants sont surpris : * D’avoir appris autant en si peu de temps * De la richesse des interactions * De la capacité collective à trouver de l’information, la synthétiser, se l’approprier et la restituer Ils ne croient pas que ce soit possible de consolider de quoi présenter aux autres participants à la fin de l’activité. Pourtant on doit bien souvent mettre fin aux discussions tellement les gens ont de choses à partager. Comment faire ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#id-5baf) ---------------------------------------------------------------------------------------------------------------------------------------------------- ### L’invitation[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#id-4491) Lorsque nous organisons cette activité, nous envoyons massivement une invitation par email mais aussi à l’aide d’affiches physiques. L’idée est de toucher un maximum de personnes. _**On souhaite en attirer avec des centres d’intérêt variées ainsi que des compétences totalement différentes les unes des autres**_. Habituellement, nous attirons des développeurs ou architectes, des managers IT ou business, des personnes des RH, … Le secret est de réussir à susciter l’intérêt à l’aide d’une invitation impactante et inclusive : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F319%2F1*kAT0SjBa8TVALgdgemFAqg.png&width=768&dpr=3&quality=100&sign=7345c251&sv=2) Exemple d’invitation ### Organisation de l’espace / matériel nécessaire[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#organisation-de-lespace-materiel-necessaire) _Matériel pour chaque participant :_ * Un ordinateur portable ou un smartphone permettant d’effectuer des recherches _Matériel de facilitation :_ * Des post-its pour l’idéation * Des marqueurs (1 / participant) * Un ou plusieurs mur(s) — pas le plus difficile à trouver ;-) * L’infographie ci-dessous qui explique le format et sert de support de facilitation ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAgFEcH8m39RX5MhYNH%252F-MAgGhkzTEhSvmwOc35k%252Fimage.png%3Falt%3Dmedia%26token%3D31849e6a-4a02-4cd0-a3b3-b013b850c554&width=768&dpr=3&quality=100&sign=6b61c6b4&sv=2) _L’activité peut également se faire avec tout ou partie des participants à distance dans ce cas-là on peut utiliser des outils comme Miro ou Trello pour la partie idéation._ ### La distribution de la participation[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#id-79df) L’atelier est conçu de manière à alterner travail individuel et en groupe (de 2 ou 3). Il faut un minimum de 4 participants (de quoi former 2 groupes) pour pouvoir se lancer. On vous conseille de planifier des sessions d’1h30 cela permet de dérouler l’atelier sans mettre la pression aux participants et ainsi en tirer le maximum pour tous. ### Etapes et timing[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#id-9e54) Une session **se déroule de la manière suivante** : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F346%2F1*fNHkzYkr9-l0V50MXrbVWQ.png&width=768&dpr=3&quality=100&sign=952987de&sv=2) Les participants sont invités à _**brainstormer**_ pendant 5 minutes afin de générer un maximum de post-its sur lesquels ils inscrivent des sujets qu’ils souhaitent vraiment découvrir durant la session. Ils utilisent en général leurs smartphones pour cela : fils twitter, sites d’information, Reddit, … ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F346%2F1*wnmA4oLyGdrLgtlaUi-66A.png&width=768&dpr=3&quality=100&sign=6ed8f713&sv=2) Chaque participant vient coller ses post-its sur le mur d’idéation et pour chacun d’entre eux _**expose rapidement le concept**_ (1 minute / participant) associé et pourquoi il veut le découvrir durant cette session. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F346%2F1*7jO67euOoeeD91HUAlsJoA.png&width=768&dpr=3&quality=100&sign=a584c7cf&sv=2) Une fois que tout le monde a présenté ses sujets le facilitateur _**invite les participants à voter**_ pour les sujets qu’ils veulent tacler durant cette session (le plus souvent on utilise le dot voting car efficace peu importe la taille du groupe). ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F502%2F1*5NXR4luc-Jf_--ngzvN9hw.png&width=768&dpr=3&quality=100&sign=2a36251&sv=2) Suite à la priorisation, les participants s’organisent pour _**former des groupes d’intérêts**_ de 2 ou 3 personnes. Ils en profitent pour se déplacer et constituer des groupes physiquement localisés. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F349%2F1*9lmJM23jjw7E7carl9gpRw.png&width=768&dpr=3&quality=100&sign=173584ad&sv=2) Chacun va alors avoir 5 minutes pour _**se plonger dans le sujet**_ et ainsi rechercher via son smartphone ou un ordinateur un maximum d’informations sur le sujet de son groupe. L’idée est de croiser un maximum de sources différentes et de ratisser large dans cette étape. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F349%2F1*SDnj38GgLuS5vnTfQcoJhg.png&width=768&dpr=3&quality=100&sign=321bde73&sv=2) Au sein de chaque groupe les participants vont _**échanger sur leurs découvertes**_, présenter ce qu’ils ont trouvé et à l’aide de quelles sources. A la fin de ces 5 minutes le groupe a déterminé ce _**sur quoi il souhaite aller plus loin**_ et s’est réparti les catégories à traiter. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F349%2F1*oofqayFMYP8sjvW-NRTq9Q.png&width=768&dpr=3&quality=100&sign=c3ab6f81&sv=2) Suite à la synchronisation chacun repart se plonger sur les catégories à traiter. Ils plongent encore un peu _**plus profondément dans le sujet**_. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F349%2F1*QE9EjDR9s5483kfQpPc-Qw.png&width=768&dpr=3&quality=100&sign=60ba2d06&sv=2) Chaque membre du groupe a désormais passé une dizaine de minutes à creuser le sujet. Il est temps de faire profiter les autres de ces pépites. Le groupe a alors 10 minutes pour _**préparer son partage à l’assemblée**_. Cela peut se faire à l’aide slides, de mind maps, d’images ou de sketch note, … il n’y a pas de limite à la créativité. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F776%2F1*pmt7DTlzjY3a2V7Nf6rdyg.png&width=768&dpr=3&quality=100&sign=8472f51a&sv=2) Le partage se fait en plusieurs étapes : Chaque groupe déroule sa _**présentation**_, le facilitateur invite les participants à poser des questions et finit par poser des questions à propos de l’_**utilité de ces découvertes pour les participants aussi bien professionnellement que personnellement**_. Voici quelques exemples de sujets taclés dernièrement durant nos sessions : * Burn-out vs dépression * La cryptographie quantique * Les web components * C’est quoi un bullshit job * Le mutation testing quesaco * Comment améliorer ma prise de parole en public * … Les sujets peuvent être vraiment très variés et sont le reflet de l’intérêt des participants à un moment précis dans le temps. ### Bons Tuyaux & Pièges[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#id-74f0) Pour réussir cette activité il faut vraiment réussir à la lancer dans la bonne humeur et mettre tout le monde dans un état d’esprit de partage. > _En tant que facilitateur il est primordial de préciser que cette activité ne permet que d’effleurer des sujets et permettre de découvrir si oui ou non on a envie d’investir plus de temps sur sa découverte._ Il faut également introduire la limite de l’exercice : pas de vérification possible des sources en si peu de temps. _**PRO TIP**_ _: En tant que facilitateur ne reste pas dans l’ombre, intègre un groupe et participe à l’atelier ; les temps sont assez longs et par expérience faciliter et participer est tout à fait faisable avec ce format._ ### Variations[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#c0aa) Ce que vous pourriez expérimenter : * Organiser ce genre de session sur des domaines bien spécifiques afin de faire découvrir les expertises des uns et des autres : casser les silos en douceur * Lancer un challenge sur le format de restitution : faire en sorte ce soit un challenge ? sketch note, utiliser un logiciel particulier, dans une autre langue que la langue maternelle, … [PreviousXanpan - a team centric agile method story](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story) [NextBecome a better speaker through peer feedback](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/become-a-better-speaker-through-peer-feedback) Last updated 6 years ago * [Pour … quoi ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#pour-...-quoi) * [Quoi ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#df69) * [Comment faire ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#id-5baf) * [L’invitation](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#id-4491) * [Organisation de l’espace / matériel nécessaire](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#organisation-de-lespace-materiel-necessaire) * [La distribution de la participation](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#id-79df) * [Etapes et timing](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#id-9e54) * [Bons Tuyaux & Pièges](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#id-74f0) * [Variations](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective#c0aa) --- # Samman Technical Coaching | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/samman-technical-coaching.md) . Introduction[](https://yoan-thirion.gitbook.io/knowledge-base/samman-technical-coaching#introduction) ------------------------------------------------------------------------------------------------------ Samman Technical Coaching is a method for people who want to make a difference and improve the way software is built. I strongly advise you to read [Emily's Bache book](https://leanpub.com/techagilecoach) and visit [her website](http://sammancoaching.org/) . Learning hours[](https://yoan-thirion.gitbook.io/knowledge-base/samman-technical-coaching#learning-hours) ---------------------------------------------------------------------------------------------------------- * Discover Practices * [Pair Programming](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming) * [Code Review](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review) * [Interview Domain Experts](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/interview-domain-experts) * [Dev Ethics](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics) * [Technical Debt retrospective](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop) * [Software Design X-Rays](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/software-design-x-rays) * [The programmer's brain](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-programmers-brain) * Languages / Libs * [F# for OO Programmers](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/f-for-oo-programmers) * Testing practices * [How to name our Unit Tests](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests) * [Consumer Driven Contract Testing](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests) * [Improve your test quality with Mutation testing](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing) * [Improve your assertions with assertJ](https://github.com/ythirion/assertj-kata) * Software Architecture * [DDD re-distilled](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled) * [NoSQL](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/nosql) * [Fundamentals of Software Architecture](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/fundamentals-of-software-architecture) * Agile Coaching * [How to run a Community of Practices (COP)](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop) * [The developers — the forgotten of agility](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility) * [Xanpan](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story) * [Drive and Intrinsic motivation](https://speakerdeck.com/thirion/drive-and-intrinsic-motivation-a-toolkit-for-todays-managers) * [Leadership lessons from the Navy SEALs](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals) * [Part 2](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-to-lead-and-help-your-team-s-to-be-successful) * [Agile HR](https://speakerdeck.com/thirion/how) * Xtrem * [En route vers l’apprenance avec Xtrem Reading](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/en-route-vers-lapprenance-avec-xtrem-reading) * [XTREM WATCH — Découvrez la puissance de la veille collective](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective) * [Good Morning Learning by Philippe Bourgau](https://philippe.bourgau.net/growth-mindset-coaching-turn-remote-work-commutes-into-team-learning/?utm_content=bufferab70c&utm_medium=social&utm_source=linkedin.com&utm_campaign=buffer) Code Katas[](https://yoan-thirion.gitbook.io/knowledge-base/samman-technical-coaching#code-katas) -------------------------------------------------------------------------------------------------- * Craft code * [Clean Code](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/clean-code) * [Write S.O.L.I.D code](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/write-s.o.l.i.d-code) * [Pure Functions](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions) * [Clean Architecture](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/clean-architecture) * [Functional Programming made easy in Java & C#](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/functional-programming-made-easy-in-java-and-c) (Vavr / Language-ext) * Test Driven Development * [Stack kata](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas/stack) * [Fizzbuzz kata](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas/fizzbuzz) * [Outside-in TDD](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas/outside-in-tdd) * Testing Practices * [Hands-on mocking](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking) * [Property-Based testing](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/improve-your-software-quality-with-property-based-testing) * [Approval Testing with Gilded Rose kata](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/gilded-rose-approval-testing) * Refactoring * [Mikado Method](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mikado-method) * [Theatrical players refactoring Kata](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata) (OO and FP style) * [Refactoring Journey](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-journey-kata) * [Kata Catalog](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas) [Serious games](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/my-serious-games) [](https://yoan-thirion.gitbook.io/knowledge-base/samman-technical-coaching#serious-games) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ * [Craftsminator : découvrez le Software Craftsmanship à l'aide d'un Escape Game à base de cartes](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/craftsminator) * [Agile comfort zone](https://cedricpm.s3.eu-west-3.amazonaws.com/AGILE+COMFORT+ZONE+GAME.pdf) * [Drive and intrinsic motivation](https://www.dropbox.com/s/tk4kzcdl9jtwgfj/drive-and-intrinsic-motivation-game.pdf?dl=0) * [Craft-challenges : discover Technical Agile Practices](https://play14.org/games/craft-challenges) * [Yata - a DevOps game](https://play14.org/games/yata) * [Customer Journey from mars](https://play14.org/games/my-customer-journey-from-mars) * [DES’PO’RATE HOUSEWIVES](https://play14.org/games/desporate-housewives) [PreviousHome](https://yoan-thirion.gitbook.io/knowledge-base) [NextSoftware craftsmanship](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship) Last updated 4 years ago * [Introduction](https://yoan-thirion.gitbook.io/knowledge-base/samman-technical-coaching#introduction) * [Learning hours](https://yoan-thirion.gitbook.io/knowledge-base/samman-technical-coaching#learning-hours) * [Code Katas](https://yoan-thirion.gitbook.io/knowledge-base/samman-technical-coaching#code-katas) * [Serious games](https://yoan-thirion.gitbook.io/knowledge-base/samman-technical-coaching#serious-games) --- # Cultivate Team Learning with Xtrem Reading | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading.md) . #### **I have written this article for infoQ, it has been plublished here :** [**https://www.infoq.com/articles/learning-xtrem-reading/**](https://www.infoq.com/articles/learning-xtrem-reading/) [](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#i-have-written-this-article-for-infoq-it-has-been-plublished-here-https-www.infoq.com-articles-learn) #### Key Takeaways[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#key-takeaways) * Become a Learning Organization to be able to adapt * Xtrem Reading: a first step to the Learning Organization * Learn how to read in an extreme way: 2 books in 1 hour collectively * Xtrem Reading as a cure to the _Tsundoku_ syndrome * Xtrem Reading can help you reduce your human debt and improve cohesion > _With this pandemic, the adaptability of our organizations has been put to the test. To adapt, they have to continually enhance their capabilities to adapt and finally survive._ How could our organizations achieve that?[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#how-could-our-organizations-achieve-that) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- The answer has been known for a few decades now (in 1990): by becoming a **learning organization;** an organization skilled at: * Creating, acquiring, and transferring knowledge * Modifying its behavior to reflect new knowledge and insights ### Disciplines of a Learning Organization[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#disciplines-of-a-learning-organization) In 1990, Peter Senge published a book called _The Fifth Discipline: The Art & Practice of the Learning Organization_. He summed up his ideas about how organizations can more effectively adapt based on his systems thinking. He defined a learning organization as one that has both a culture and the appropriate processes to deliberately shape the future it wants, rather than be a victim to circumstances. He identified 5 disciplines associated: * **Personal Mastery**: continually clarifying and deepening our personal vision * Live in a continual learning mode * Clarify what is really important and envision it * **Mental Models**: learn to let go of our assumptions, be aware of the way we perceive and react * **Shared Vision**: bring into alignment the vision and the efforts of the employees * It provides the focus and energy for learning * Where there is a genuine vision—people excel and learn because they want to * **Team Learning**: encourage collective reflection through dialogue * When teams learn together, people will grow more rapidly * Learning starts with a dialogue: the capacity to enter into a genuine “thinking together” mode * **Systems thinking**: the ability to integrate elements of an organization and to understand how each impacts the others * Instead of focusing on individual issues, systems thinking reflects the observational process of an entire system * People have to understand that every action and consequence is correlated with another Finally, the message I took away is that learning is the only way for an organization to shape its own future. It is through learning that it can move from “**I learn to survive**” (learning to survive/adapt) **to “I learn to generate, create, and bring out new things.”** ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MeOTD9yTbdK-AIpNwRJ%252F-MeOTGQ9TDmrZZnO2Tmr%252F1-learning-organization.jpg%3Falt%3Dmedia%26token%3D3cd9edaf-9c90-4c15-8382-ca7e2dee6883&width=768&dpr=3&quality=100&sign=d0b7503e&sv=2) In this article, I will introduce a homemade facilitation technique that will help you start your journey to this famous learning organization by focusing on the 4th discipline: Team Learning. The story of a Team Learning practice[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#the-story-of-a-team-learning-practice) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- In 2018, a colleague and I asked ourselves this question—_How could we stimulate team learning in our organization?_ We wanted to find a new way to favor collective reflection and learning, so we started by brainstorming our own ways to learn new stuff. We are maybe a little bit old school, but we came up with an observation: _Even in an ultra-digitized world, reading remains one of the most used means to expand an individual’s knowledge, develop new skills, or discover new subjects._ For the record, at the time, I was affected by a syndrome called Tsundoku. (Maybe you are too at this moment.) To make a self-diagnostic, you just have to answer two questions: * Do you have piles of books just waiting for you to read? * Do you still buy new books, attracted by the tempting windows of your booksellers? If you answer YES to those 2 simple questions, you are affected. Tsundoku is the act of acquiring books and letting them pile up without reading them. Sorry for this deviation, let’s go back to my original story. After having identified reading as the number one practice for individual learnings, the problem was the following: _Reading_, as we have been taught, is a solo activity—how could we make it collective? After a few brainstorming and experimental sessions, we created what we now call Xtrem Reading. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MeOTD9yTbdK-AIpNwRJ%252F-MeOTUEuHo8VuN0T35Xv%252F2-story-of-a-team-learning-practice.jpg%3Falt%3Dmedia%26token%3Dc339a578-3f92-4cf5-9ad1-921a14ca6fad&width=768&dpr=3&quality=100&sign=f3a111c0&sv=2) Story of a team Learning Practice What is Xtrem Reading?[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#what-is-xtrem-reading) -------------------------------------------------------------------------------------------------------------------------------------------------------- Xtrem Reading is an easy-to-run workshop format that comes with a promise: Read 2 books in 1 hour and cultivate your collective intelligence. To run a session, it requires: * A facilitator (or rather a timekeeper) * The facilitation infographic (provided in this article) * A space/room (virtual or physical) * Some books (more books than the number of participants) * Volunteers (2 people minimum without any maximum) When we talk about this format to new people, usually they react like this: “What kind of black magic is this?” or “I’m not Superman, I’m not able to read so fast”… ### How does it work?[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#how-does-it-work) #### **1) Each volunteer brings a book**[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#id-1-each-volunteer-brings-a-book) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MeOTD9yTbdK-AIpNwRJ%252F-MeOUBXieQ6VOsdX9Soz%252Fimage.png%3Falt%3Dmedia%26token%3D4226c651-0070-4e09-aa2b-029e0a0dd3e5&width=768&dpr=3&quality=100&sign=f4c8e72d&sv=2) Before the beginning of the session, the facilitator invites volunteers to bring a book of their choice that they haven’t read (often the one lying on their bedside table). #### **2) Share choices**[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#id-2-share-choices) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MeOTD9yTbdK-AIpNwRJ%252F-MeOUJ4-hDWUqqdZLbue%252Fimage.png%3Falt%3Dmedia%26token%3Df5bd6eb4-622c-440e-aeee-9bd0b60ee625&width=768&dpr=3&quality=100&sign=fdf0b00e&sv=2) Invite them to share their choice with the other participants by explaining what they hope to find in the book they brought. #### **3) Create groups of interests**[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#id-3-create-groups-of-interests) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MeOTD9yTbdK-AIpNwRJ%252F-MeOUQ0jQkMwc9J_28_O%252Fimage.png%3Falt%3Dmedia%26token%3D72e196c9-ffdd-4fe4-9c27-d7a8e38139b7&width=768&dpr=3&quality=100&sign=49e4064f&sv=2) Following the sharing, participants organize themselves into interest groups of 2 to 3 people. #### **4) Read 2 books**[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#id-4-read-2-books) During 2 iterations of 15 to 25 minutes, participants read 2 books with a clear objective in mind: **Extract the main points to present to other members of the group.** At the end of the first iteration inside their group, each participant will change the book with someone else and read the new book. Here is the black magic—to be good at it, we need to unlearn how we have learned reading at school (don’t read from page 1 until the end). ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MeOTD9yTbdK-AIpNwRJ%252F-MeOUYfZ69LwkUbQDPdK%252Fimage.png%3Falt%3Dmedia%26token%3Dde6ce79e-6f65-40f8-9bb7-d01482d19084&width=768&dpr=3&quality=100&sign=fbc3bd82&sv=2) The first step is to use simple techniques: * Overview table of contents * Read the back cover * Read the Foreword * Analyze the structure of the book * You can see a book as a gold mine in which you need to identify the gold nugget—aka, the key chapter * Often in a book you have 1 central chapter of a few pages and the rest is built upon it * If you find it you will be able to quickly understand the whole concepts behind the book * Read what you want to read * Navigate through it * Take notes by using Mind mapping for example Once you master the first stage techniques you can learn and use Speed Reading techniques like: * Use your finger to track words as you read * Read in chunks: group words together to get through them faster * Avoid subvocalization: avoid pronouncing the words in your head otherwise you limit your reading rate to your speech rate #### **5) Sharing**[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#id-5-sharing) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MeOTD9yTbdK-AIpNwRJ%252F-MeOUu3CXuKNqTqwIydF%252Fimage.png%3Falt%3Dmedia%26token%3D68efad5b-af19-4a01-a0d1-1bbe45a5cda3&width=768&dpr=3&quality=100&sign=1fedc36f&sv=2) Within each group, 5 to 10 minutes are spent per book to explain what has been discovered. This stage is often very surprising and interesting—in a reading of only 15 to 25 minutes, participants can bring out an incredible amount of information. I strongly encourage the facilitator to add questions at the end of the sharing, like how could we use this learning in our day-to-day life? **It will encourage strong collective reflection through dialogue.** Often (depending on the books) it leads to awareness or team experimentations. #### **6) Appreciate the book (optional)**[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#id-6-appreciate-the-book-optional) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MeOTD9yTbdK-AIpNwRJ%252F-MeOV1qd2qCnHxuUPc49%252Fimage.png%3Falt%3Dmedia%26token%3D397ba1ff-4053-4681-9f2d-e7a8f885d6ac&width=768&dpr=3&quality=100&sign=7598fb9f&sv=2) At the end, each reader can write down his/her feelings about 2 dimensions: * Book’s readability: (on a scale from 1 to 5) * 1 - It is almost impossible to find clear information in a quick way * 5 - It is easy to find clear information (abstract at the end of chapters for example) * Recommendation: (on a scale from 1 to 5) * 1 - I don’t recommend it at all * 5 - It seems to be a MUST Read on the topic Those appreciations help to create a community feeling in which participants can help others choose their next readings. Lessons learned[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#lessons-learned) ------------------------------------------------------------------------------------------------------------------------------------------- So far, I have facilitated dozens of sessions with more than 400 different people in different contexts, (at client’s location, in specific communities, or at conferences), and in different countries. Based on these various experiences, here are my discoveries: * We are **all Clark Kent**: * Reading 2 books in 1 hour, like Clark Kent, is possible. * We are all able to do it...but different from what we first think. * It **improves** book **memorization**: * Reading with sharing in mind is incredibly effective in improving retention. * The best way to learn is to teach and that’s the spirit behind the exercise. * We have learned with Neuroscience that our memory is bound to our emotions. A high emotional charge will promote memorization. * By sharing each book we create emotions around it that will help us retain it. * Creates a **lot of learning**: * Each participant in each session learns something new. * Without noticing it, we take the participants on the road to Team Learning (our famous 4th discipline) * A very **rich experience**: * We all have different systems of thinking and that’s where the real richness lies. * When sharing, each reader may have seen and retained different things. Crossing them is incredibly rich!!! * Discover **unsuspected topics**: * It allows participants to discover subjects they wouldn’t have thought they would like. Or on the contrary to realize that a subject doesn’t interest them and this without having invested more than an hour of their time. * It will help participants to prioritize their next readings and reduce their Tsundoku syndrome. * **Break silos** and connect people: “anytime, anywhere, anyone, any topics” * Everyone is concerned by this learning experience and wants to participate. The willingness to learn isn’t limited to operational staff. * It breaks down horizontal silos (inside teams and between teams or departments) but also vertical silos (hierarchy). * It creates empathy between people who aren’t used to working together. _You not only learn from the book but also from each other because you will most likely have read different bits, and you will probably have formed very different opinions about the same book._ – [Nancy Beers (Happy Scrum Master)](https://www.linkedin.com/in/nancybeers/) * **No more waiting frustration**: * What’s cool about going to the cinema as a group is the debriefing of the film that takes place right afterward. * I like to think that with Xtrem Reading we create this same feeling about books. * No more 6 months waiting frustration before being able to talk about a book with someone else _Xtrem Reading allows me to meet other colleagues whom I don’t usually meet. Finally, even though the length of the session limits the reading to a broad and not a deep exploration, I find that the concepts I get from the books are easier to re-explain afterward._ – [Fabien Hiegel (Juste un Dev)](https://www.linkedin.com/in/fabien-hiegel-874416b5/) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MeOTD9yTbdK-AIpNwRJ%252F-MeOVQH1ljaq-a1qwsde%252Fimage.png%3Falt%3Dmedia%26token%3D34360559-03be-4fa8-947c-e85cdf0d5454&width=768&dpr=3&quality=100&sign=795cf117&sv=2) ### The limits[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#the-limits) There are some limitations that you need to be aware of before facilitating a session: * A comment often made at the end of the session: “You lied to me, I haven’t really read 2 books.” * Some participants think that without any efforts they would be able to fully read 2 books of 200 pages. * To answer this question, you can use the best weapon of the coach: ask open questions. * “Which value did you see in today’s exercise?” * “What have you learned from this session?” * Participants should be able to find a lot of value from it. * You can as well explain that the promise was to “read 2 books” but the fact that some participants thought it was a full reading was a cognitive bias. * Xtrem reading is another approach to reading. * It doesn’t work for fiction books. * If you Xtrem Read fiction books, of course, it will ruin the pleasure of discovering the characters and their evolution. * Be aware of confirmation bias: * This bias is the tendency of people to favor information that confirms their beliefs or values. * If you organize sessions with only people with the same point of view, same fields of expertise, this bias will be strengthened. * I highly recommend you mix people during those kinds of sessions to manage this bias. * Beware the Dunning-Kruger effect: * This effect is a type of cognitive bias in which people believe that they are smarter and more capable than they really are. Essentially, low-ability people don’t possess the skills needed to recognize their incompetence. * I like to remind participants that just because people have spent some time on a book explaining a given concept, doesn’t make them experts on this given concept. * It can help to fight this effect. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MeOTD9yTbdK-AIpNwRJ%252F-MeOVZvw_UTbrvGxd8hS%252Fimage.png%3Falt%3Dmedia%26token%3D9a778d29-4d54-4ff4-b2b1-555d1203b19f&width=768&dpr=3&quality=100&sign=d2aff8e3&sv=2) ### And with the Pandemic?[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#and-with-the-pandemic) Xtrem reading can be used remotely as well by using different tools. Here are the ones I have tested for the different parts: * Discord: to communicate and create groups of interests * Trello: to list books, select them and appreciate them * OneDrive: to share books Honestly, the first sessions are really chaotic: book file format nightmares, tool usage, access rights on the different tools… Once participants are used to it, it is a different experience but as rich as physical. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MeOTD9yTbdK-AIpNwRJ%252F-MeOVgCO6O7qEbfjB6Wm%252Fimage.png%3Falt%3Dmedia%26token%3Dbc7a05b4-8c82-4b20-8695-a938c7e47904&width=768&dpr=3&quality=100&sign=d0589f28&sv=2) Conclusion[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#conclusion) --------------------------------------------------------------------------------------------------------------------------------- The journey to Team Learning is not so complicated once the organization understands that its employees are its privileged partners. To get them to understand this, you can start by setup and spreading practices that allow Team Learning, such as Xtrem Reading, Lean coffees, brown bag lunches, hackathons, feedback sessions, etc. As a conclusion, I propose to you some reflections: * Imagine you have just facilitated your first Xtrem Reading session. People are excited and talking to each other. What are you seeing and hearing? * What did you find in this article that could help you? Why? How? * Once you consider your organization a learning organization, what will be different? Infographic[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#infographic) ----------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MeOTD9yTbdK-AIpNwRJ%252F-MeOVxBKNL6o4i_4r_WS%252FXtrem%2520Reading%2520for%2520infoQ.png%3Falt%3Dmedia%26token%3Daf1fcdf0-8781-419e-9d0f-60869a3d5c4a&width=768&dpr=3&quality=100&sign=39260e92&sv=2) Xtrem Reading infographic by Yoan Thirion [Xtrem Reading for infoQ.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MeOTD9yTbdK-AIpNwRJ%2F-MeOW7Z8RE083LN0hDMC%2FXtrem%20Reading%20for%20infoQ.pdf?alt=media&token=c01d1dbe-5318-4b21-af6f-7bffa618930d) PDF · 734KB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MeOTD9yTbdK-AIpNwRJ%2F-MeOW7Z8RE083LN0hDMC%2FXtrem%20Reading%20for%20infoQ.pdf?alt=media&token=c01d1dbe-5318-4b21-af6f-7bffa618930d) Xtream Reading infographic High Definition _This article is based on the Xtrem Reading concept I have created with_ [_Cédric Tamavond_](https://www.linkedin.com/in/cedric-tamavond-b30ab917/) _when I was an employee at AP. This work has been licensed under a_ [_Creative Commons Attribution-ShareAlike 4.0 International License_](https://creativecommons.org/licenses/by-sa/4.0) _._ [PreviousXtrem Reading](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading) [NextMy Book Infographics](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/my-book-infographics) Last updated 5 years ago * [How could our organizations achieve that?](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#how-could-our-organizations-achieve-that) * [Disciplines of a Learning Organization](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#disciplines-of-a-learning-organization) * [The story of a Team Learning practice](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#the-story-of-a-team-learning-practice) * [What is Xtrem Reading?](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#what-is-xtrem-reading) * [How does it work?](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#how-does-it-work) * [Lessons learned](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#lessons-learned) * [The limits](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#the-limits) * [And with the Pandemic?](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#and-with-the-pandemic) * [Conclusion](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#conclusion) * [Infographic](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading#infographic) --- # Clean Tests | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests.md) . ### Connection - Mythbusters[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests#connection-mythbusters) Connect participants to the topic by making them relate on Facts and Myths regarding Unit Tests ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FBocQMSK3skw52nEodjdm%252Fimage.png%3Falt%3Dmedia%26token%3D99744eb9-f681-48b3-8f40-a31b26b7275f&width=300&dpr=3&quality=100&sign=33cd56e5&sv=2) Debriefing is available in the slide deck ### Concepts[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests#concepts) Before going further regarding the concepts, invite them to reflect on they define : * What is a Unit ? * Which tests they would write on the giving piece of code ? * How they would write it ? ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252Fi2RXGHzqcvGPWr4gWaS0%252Fimage.png%3Falt%3Dmedia%26token%3Da15e4e39-0a4b-421b-a4af-1cf65cf05446&width=300&dpr=3&quality=100&sign=f7fc39f6&sv=2) Then explain all those concepts : * Schools of testing * Pillars of Good Unit Tests * FIRST Principles * Anatomy of Unit Tests * How to name your Unit Tests * Styles of Code ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252F7OWDUirq0WwQgKplTfiI%252Fimage.png%3Falt%3Dmedia%26token%3Df1ee677f-39f3-4edc-a7f8-6a16d56ad086&width=300&dpr=3&quality=100&sign=31792fd9&sv=2) ### Concrete Practice - Anti-Patterns[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests#concrete-practice-anti-patterns) In groups, make them identify Unit Tests anti-patterns by using Code snippets or the repository provided in this page. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FN8JOiaQuCeOoTfWgwWaW%252Fimage.png%3Falt%3Dmedia%26token%3D13acdd4b-271f-4d19-b162-d07265f961b5&width=300&dpr=3&quality=100&sign=5b68c5b1&sv=2) You can debrief it directly on the Miro board or from the slides : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FAMq252xbEANwMzKNGs9c%252Fimage.png%3Falt%3Dmedia%26token%3D736e7def-f238-493e-94e6-33871c0fbbf8&width=300&dpr=3&quality=100&sign=6f844f0f&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FButhBO3KmmVUV8wNSIxp%252Fimage.png%3Falt%3Dmedia%26token%3Db458b9b4-b7e8-4b1e-b8ac-05a0340799bc&width=300&dpr=3&quality=100&sign=e36b2fe1&sv=2) My identification logic and refactoring are explained in this step-by-step guide : [![Logo](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fgithub.com%2Ffluidicon.png&width=20&dpr=3&quality=100&sign=553c72a7&sv=2)clean-tests/java/src/test/java/antipatterns/solution/step-by-step.md at master · ythirion/clean-testsGitHub](https://github.com/ythirion/clean-tests/blob/master/java/src/test/java/antipatterns/solution/step-by-step.md) ### Conclusion[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests#conclusion) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252F6s8R6iR7d26mWdqn2Ovz%252Fimage.png%3Falt%3Dmedia%26token%3Da38f7e5e-82a2-43a3-9a48-35605a46cac3&width=300&dpr=3&quality=100&sign=9ac4c36d&sv=2) ### Resources[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests#resources) * Repository is available here : [https://github.com/ythirion/clean-tests](https://github.com/ythirion/clean-tests) * You can use the miro board here to facilitate this session : [https://miro.com/app/board/o9J\_lpq9YGo=/?invite\_link\_id=764775433309](https://miro.com/app/board/o9J_lpq9YGo=/?invite_link_id=764775433309) * Slides are available here on speakerdeck : Clean Tests slides * A lot of stuff from this workshop comes from the book "Unit Testing : Principles, Practices, and Patterns"by [Vladimir Khorikov](https://enterprisecraftsmanship.com/) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252F4ZRTayYWrm1sVjmx7fTd%252Fimage.png%3Falt%3Dmedia%26token%3D2b8a0316-71e4-479e-9cd8-3fe94bc96f38&width=300&dpr=3&quality=100&sign=c39a080c&sv=2) [PreviousTesting](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing) [NextImprove the design and testing of your micro-services through CDC Tests](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests) Last updated 4 years ago * [Connection - Mythbusters](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests#connection-mythbusters) * [Concepts](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests#concepts) * [Concrete Practice - Anti-Patterns](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests#concrete-practice-anti-patterns) * [Conclusion](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests#conclusion) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests#resources) --- # Aligning Product & Software Design | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design.md) . Context[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#context) ----------------------------------------------------------------------------------------------------------------------------- ### Average company[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#average-company) * Strong boundaries between Technical and Business * Technical debt ? * Developers * "We don't have time to improve our system" * "We are struggling with technical debt" * Vicious circle * Business * "We need more features" ### How to avoid that ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#how-to-avoid-that) * Problem ? * **Project mindset** * Get to that end * Great for something with a start and an end * Optimize the means to that end * Software product * Continuous evolution * Not a great fit for project * Sequence of valuable increment * **Should look at** * **Not only cost** * **Continuous investment** _**"There is a tension between the way we manage project and the way we manage product"**_ * Product strategy * Defined isolated from technology * Product backlog created * By the business * Only there the Dev team is coming in * Not part of the product definition * So the **result = Reactive design** * Do not have time to architect * End by begging for time * To refactor for example * As **developers** * We must explain the value of designing software * Part of the meeting **to contribute** * BUT we don't know exactly HOW * We need to have something to add * Be able to explain Biz value of design * Not only to be able to organize our code * Can have a huge role * Examples * Enable different teams to work in parallel * Need to design our code to do so * Be able to automate -> for CD purpose * Enable the way that we need to work ### Different levels of design[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#different-levels-of-design) * Enterprise Architecture * How your product fits in a larger ecosystem * Solutions Architecture * Solution of your product * How we re gonna do / split * Technical Architecture * What technology * SLA * ... * Macro Design * Components * Overall structure * Micro Design * Classes * Functions * Methods #### When we design ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#when-we-design) _"We often struggle to find the time"_ ### Understand Product design[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#understand-product-design) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBcVOZPsqpv6zCULGa3%252F-MBcmnKdj3n4wwsq5wiC%252Fimage.png%3Falt%3Dmedia%26token%3D1b21193e-2dad-4aa4-aec3-bd00908df842&width=768&dpr=3&quality=100&sign=970cb1c6&sv=2) * Looks a lot like Waterfall * _**Make it iterative**_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBcVOZPsqpv6zCULGa3%252F-MBcmvftoSVhAX9y5cSX%252Fimage.png%3Falt%3Dmedia%26token%3Deb047a6b-6f85-4b39-a58f-fd0efea7e19e&width=768&dpr=3&quality=100&sign=aff07154&sv=2) * Devs involved only in the development * Through the product backlog * Not able to create the technical strategy * Not have time here ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBcVOZPsqpv6zCULGa3%252F-MBcne4v9W-4rFk4UPm5%252Fimage.png%3Falt%3Dmedia%26token%3D30509c85-3c9e-435d-be44-286629b5ebce&width=768&dpr=3&quality=100&sign=1390dc76&sv=2) 1) Ideation[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#id-1-ideation) --------------------------------------------------------------------------------------------------------------------------------------- In startup product is part of the company ### Build a vision for the product: NOT A PLAN[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#build-a-vision-for-the-product-not-a-plan) * A direction * Guiding our work * Create a context to offer services ### Product Definition[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#product-definition) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBcVOZPsqpv6zCULGa3%252F-MBcq2QJ0CaII-knmBBB%252Fimage.png%3Falt%3Dmedia%26token%3Df491c1ca-2326-4bc5-a42d-a8d7ef2a8918&width=768&dpr=3&quality=100&sign=2f46595c&sv=2) ### Value Proposition Canvas[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#value-proposition-canvas) * Shape the scope of our product * 1 canvas per customer segmentation ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBcVOZPsqpv6zCULGa3%252F-MBcq8vgV55-EEt0vQ6j%252Fimage.png%3Falt%3Dmedia%26token%3Dcbd87e6e-fd35-4e7c-a4ba-3c0d74797a45&width=768&dpr=3&quality=100&sign=ecb85610&sv=2) ### Technical Feasibility[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#technical-feasibility) * Build a technical vision * Create a unified view with business & technology ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBcVOZPsqpv6zCULGa3%252F-MBcqPKOu_t5-X_Poc-J%252Fimage.png%3Falt%3Dmedia%26token%3Ded7fe539-aee4-4ec7-80e9-a819ac04f8f0&width=768&dpr=3&quality=100&sign=5d7bab5b&sv=2) ### Results[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#results) * Business & technology alignment * Shared & more realistic product vision * Context for pro-active & supportive tech strategy 2) Strategy[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#id-2-strategy) --------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBcVOZPsqpv6zCULGa3%252F-MBcqjKQAoJmyjMhmFaR%252Fimage.png%3Falt%3Dmedia%26token%3D02dc8258-255d-4a86-9415-d8185a19f290&width=768&dpr=3&quality=100&sign=a79fa279&sv=2) ### Create a roadmap[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#create-a-roadmap) * Use Lean Startup approach ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBcVOZPsqpv6zCULGa3%252F-MBcqsSoB_CGOCyd2Qht%252Fimage.png%3Falt%3Dmedia%26token%3D5710cc3f-0ae1-4715-9b3d-f748e791de5a&width=768&dpr=3&quality=100&sign=43048d7e&sv=2) ### Create an architecture[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#create-an-architecture) * Define the technology stack * Refine what has been done in Tech feasibility * Design to support the way of the business ### Results[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#results-1) * Common understanding of business & technical strategy * Technical architecture created to support the business * More realistic & sustainable product roadmap with Biz and tech * High level modularisation makes it easier to plan 3) Planning[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#id-3-planning) --------------------------------------------------------------------------------------------------------------------------------------- * Use the term Minimum Valuable Increment * Need to invest in technical things ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBcVOZPsqpv6zCULGa3%252F-MBcrXNc2quGAVWUzEWF%252Fimage.png%3Falt%3Dmedia%26token%3D8d7ffeca-14e0-4b9b-b342-3ba21c7b79d3&width=768&dpr=3&quality=100&sign=e76dfdea&sv=2) ### [Impact Mapping](https://www.impactmapping.org/) [](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#impact-mapping) * Validate the value towards the goal * Validate the things we want to build by value > Generate your backlog from the Impact Mapping ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBcraM27D0yMlapg3q6%252F-MBcs30F6kzCEAPk-l7I%252Fimage.png%3Falt%3Dmedia%26token%3D21db5731-ff74-4fdd-b547-90b92f0a1635&width=768&dpr=3&quality=100&sign=bf0c3ebc&sv=2) ### Create a plan[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#create-a-plan) * Achieve Continuous Delivery * Several teams working in parallel ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBcraM27D0yMlapg3q6%252F-MBcsCXKxwWo8u2P6FCI%252Fimage.png%3Falt%3Dmedia%26token%3D2c0b13f4-5052-4c57-b4ba-df51c6cde013&width=768&dpr=3&quality=100&sign=75bb7c11&sv=2) * Discover a lot of unknown * Help to reshape our backlog Results[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#results-2) ------------------------------------------------------------------------------------------------------------------------------- * Technical effort, risks & dependencies impact prioritization of MVI's * Easier to size MVI's when high level technical details are known * Helps to distribute work across teams efficiently * Technical solution designed to support Continuous Delivery (goal of Agile) 4) Development[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#id-4-development) --------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBcraM27D0yMlapg3q6%252F-MBcsiN4zQmgEFKoB3S6%252Fimage.png%3Falt%3Dmedia%26token%3Dc0d3e098-f54f-4ee2-b01a-5c38a21665bd&width=768&dpr=3&quality=100&sign=cc0d1367&sv=2) * Design Apis from your mockup * Outside IN * What is the outside world expecting from us ### Results[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#results-3) * Test & deployment strategies for each increment * Enables CD * Detailed design helps to identify risks, dependencies & unknown * Enable safe evolution of the code * Keeping it maintainable * Pro-active & continuous technical improvement aligned with biz value * Always improve * Prevents accumulation of technical debt Conclusion[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#conclusion) ----------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBct7Ht377LiSt4uLfV%252F-MBctmvbsITmPsQKJh0_%252Fimage.png%3Falt%3Dmedia%26token%3D55795b1f-b50d-4f6e-a29b-8c57d0305b85&width=768&dpr=3&quality=100&sign=5db120e6&sv=2) * Often POs * They have * No good vision * Don't own it * Product definition is vague * Product roadmap * No milestones * Create a big plan * Rigid product backlog * From High level strategy to Product backlog * Architects * Architecture are created without biz inputs * No connection with dev teams * Introduce technical milestones to balance the graph * Make sure than each phases are done * with Biz & technology * As a single team _**"In a software product, software design should be an explicit part of the business strategy"**_ The talk[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#the-talk) ------------------------------------------------------------------------------------------------------------------------------- [PreviousFundamentals of Software Architecture](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/fundamentals-of-software-architecture) [NextDDD re-distilled](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled) Last updated 6 years ago * [Context](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#context) * [Average company](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#average-company) * [How to avoid that ?](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#how-to-avoid-that) * [Different levels of design](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#different-levels-of-design) * [Understand Product design](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#understand-product-design) * [1) Ideation](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#id-1-ideation) * [Build a vision for the product: NOT A PLAN](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#build-a-vision-for-the-product-not-a-plan) * [Product Definition](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#product-definition) * [Value Proposition Canvas](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#value-proposition-canvas) * [Technical Feasibility](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#technical-feasibility) * [Results](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#results) * [2) Strategy](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#id-2-strategy) * [Create a roadmap](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#create-a-roadmap) * [Create an architecture](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#create-an-architecture) * [Results](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#results-1) * [3) Planning](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#id-3-planning) * [Impact Mapping](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#impact-mapping) * [Create a plan](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#create-a-plan) * [Results](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#results-2) * [4) Development](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#id-4-development) * [Results](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#results-3) * [Conclusion](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#conclusion) * [The talk](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design#the-talk) --- # How to name our Unit Tests | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests.md) . Connection - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#connection-10) ------------------------------------------------------------------------------------------------------------------------------------------- Imagine we want to test this method : Copy public static boolean isLeapYear(int year) * Here are the [associated requirements](https://en.wikipedia.org/wiki/Leap_year) **How would you name your first test ?** * Ask attendees to note on a Sticky Note what is the name of their first test * Compare the different styles * What do they prefer (Dot voting) Concepts - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#concepts-10) --------------------------------------------------------------------------------------------------------------------------------------- #### Tests names v1[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#tests-names-v1) Copy yearsNotDivisibleBy4... yearsDivisibleBy4ButNotBy100... yearsDivisibleBy100ButNotBy400... yearsNotDivisibleBy400... * Is it readable ? * What is the intent ? #### Tests names v2[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#tests-names-v2) * Is it more readable ? * What is the intent ? #### Tests names v3[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#tests-names-v3) * Intent is more clear, isn’t it ? #### Tests names v4[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#tests-names-v4) * Express what the class should be able to do * Read it as a full sentence : express a true business specification * You should avoid technical terms Concrete Practice - 30'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#concrete-practice-30) --------------------------------------------------------------------------------------------------------------------------------------------------------- * Choose a Kata on [Coding Dojo](https://codingdojo.org/kata/) * Extract the Test Cases you want to write * Define the structure and naming of your tests Conclusion - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#conclusion-10) ------------------------------------------------------------------------------------------------------------------------------------------- Imagine you use this naming technique during the next 6 months : * What has changed ? * Who else have noticed those changes ? * What are the impacts on your day to day ? ### Resources[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#resources) * [https://www.youtube.com/watch?v=azoucC\_fwzw&ab\_channel=BuildStuff](https://www.youtube.com/watch?v=azoucC_fwzw&ab_channel=BuildStuff) [PreviousImprove your test quality with Mutation testing](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing) [NextHow to write better assertions](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-write-better-assertions) Last updated 5 years ago * [Connection - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#connection-10) * [Concepts - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#concepts-10) * [Concrete Practice - 30'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#concrete-practice-30) * [Conclusion - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#conclusion-10) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests#resources) Copy years_not_divisible_by_4... years_divisible_by_4_but_not_by_100... years_divisible_by_100_but_not_by_400... years_not_divisible_by_400... Copy years_not_divisible_by_4_are_not_leap_years years_divisible_by_4_but_not_by_100_are_leap_years years_divisible_by_100_but_not_by_400_are_not_leap_years years_not_divisible_by_400_are_not_leap_years Copy public class Leap_year_spec { public static class A_year_is_a_leap_year { @Test public void if_it_is_divisible_by_4_but_not_by_100()... @Test public void if_it_is_divisible_by_400()... } public static class A_year_is_not_a_leap_year { @Test public void if_it_is_not_divisible_by_4()... @Test public void if_it_is_divisible_by_100_but_not_by_400()... } } --- # My Book Infographics | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/my-book-infographics.md) . [book-infographics-202311.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAffO8xa1ZWmgZvfeK2%2Fuploads%2FDjiBUSmnsQemicK52xF0%2Fbook-infographics-202311.pdf?alt=media&token=d7da060f-cd88-4d7e-884f-1cdf4145022b) PDF · 25MB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAffO8xa1ZWmgZvfeK2%2Fuploads%2FDjiBUSmnsQemicK52xF0%2Fbook-infographics-202311.pdf?alt=media&token=d7da060f-cd88-4d7e-884f-1cdf4145022b) Download Yoan Thirion's book infographics * [_**Who Does What By How Much?**_](https://okr-book.com/) [](https://okr-book.com/)by [_Jeff Gothelf_](https://www.linkedin.com/in/gothelf/) & [_Josh Seiden_](https://www.linkedin.com/in/jseiden/) _- September 2024_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252F2ur4HUPH8L7vNIsHDRAL%252Fwho-does-what-by-how-much.webp%3Falt%3Dmedia%26token%3De7e98848-b8e2-4490-a902-2807efabbcd7&width=768&dpr=3&quality=100&sign=509a5e1&sv=2) Who does what by how much? book infographic by Yoan Thirion * [_**Réaliser ses rêves, ça s'apprend**_](https://thomasgibot.fr/livre/) _par_ [_Thomas Gibot_](https://thomasgibot.fr/) _- November 2023_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FHY5nXXnac7wsVFkJf2Oj%252Fre%25CC%2581aliser-ses-re%25CC%2582ves_-c%25CC%25A7a-s_apprend.webp%3Falt%3Dmedia%26token%3D0069d456-e51b-4d7a-ab0f-c47f4b762163&width=768&dpr=3&quality=100&sign=15e884a3&sv=2) Infographie du livre "Réaliser ses rêves, ,ca s'apprend" par Yoan Thirion * [_**Dynamic Reteaming - The Art and Wisdom of Changing Teams**_](https://www.oreilly.com/library/view/dynamic-reteaming-2nd/9781492061281/) _by_ [_Heidi Helfand_](https://www.heidihelfand.com/) _- August 2023_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FZYlUWXygE4MI6MXm1wBx%252FDynamic-Reteaming.webp%3Falt%3Dmedia%26token%3D5b0c9f61-0cec-4ee5-b75a-e5ee794c392b&width=768&dpr=3&quality=100&sign=a617d542&sv=2) Dynamic Reteaming book infographic by Yoan Thirion * [_**The Good Life**_ _**\- Ce que nous apprend la plus longue étude scientifique sur le bonheur et la santé**_](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/the-good-life) _par_ [_Robert Waldinger_](https://www.linkedin.com/in/robert-waldinger-90012169/) _,_ [_Marc M.D. Schulz_](https://www.linkedin.com/in/marc-schulz-20663222a/) _- March 2023_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FGV4LxVgkkpRiuPxtG6B3%252FThe-Good-Life.webp%3Falt%3Dmedia%26token%3D53939946-cef4-40dc-b4fe-3f0cd3582ad4&width=768&dpr=3&quality=100&sign=343e5789&sv=2) Infographie du live "The Good Life" par Yoan Thirion * [_**Software craft, TDD, Clean Code et autres pratiques essentielles**_](https://www.dunod.com/sciences-techniques/software-craft-tdd-clean-code-et-autres-pratiques-essentielles) _par_ [_Cyrille Martraire_](https://www.dunod.com/livres-cyrille-martraire) _,_ [_Arnaud Thiéfaine_](https://www.dunod.com/livres-arnaud-thiefaine) _,_ [_Dorra Bartaguiz_](https://www.dunod.com/livres-dorra-bartaguiz) _,_ [_Fabien Hiegel_](https://www.dunod.com/livres-fabien-hiegel) _,_ [_Houssam Fakih_](https://www.dunod.com/livres-houssam-fakih) _- May 2022_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FuDg3yVcg99cjTNf16dTK%252FSoftware-Craft-TDD_-Clean-Code-et-autres-pratiques-essentielles.webp%3Falt%3Dmedia%26token%3D28c49c12-edd1-4b91-a296-4adaa9326c6f&width=768&dpr=3&quality=100&sign=f87d4510&sv=2) Software Craft book infographic by Yoan Thirion [Software Craft - TDD, Clean Code et autres pratiques essentielles.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAffO8xa1ZWmgZvfeK2%2Fuploads%2FzjNIZ2Rygqe2OjtOZKxJ%2FSoftware%20Craft%20-%20TDD%2C%20Clean%20Code%20et%20autres%20pratiques%20essentielles.pdf?alt=media&token=ea507c03-9b8b-4c2e-925c-b8eb4543e423) PDF · 3MB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAffO8xa1ZWmgZvfeK2%2Fuploads%2FzjNIZ2Rygqe2OjtOZKxJ%2FSoftware%20Craft%20-%20TDD%2C%20Clean%20Code%20et%20autres%20pratiques%20essentielles.pdf?alt=media&token=ea507c03-9b8b-4c2e-925c-b8eb4543e423) High resolution Software Craft book infographic by Yoan Thirion * [_**Code that Fits in Your Head**_](https://www.oreilly.com/library/view/code-that-fits/9780137464302/) _by Mark Seemann - April 2022_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FkCdvNcSf5tekSXZr9ZFh%252FCode-that-fits-in-your-head.webp%3Falt%3Dmedia%26token%3Dc251c5cf-940f-4954-8c4e-641a32e4248a&width=768&dpr=3&quality=100&sign=8a578daa&sv=2) Code that fits in your head book infographic by Yoan Thirion * [**Une vie sur notre planète**](https://editions.flammarion.com/une-vie-sur-notre-planete/9782080249616) by _David Attenborough - February 2022_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252Fg2NWypfgV4iEYvRMZh91%252Fune-vie-sur-notre-planete.png%3Falt%3Dmedia%26token%3Dd84110ad-26f2-4acd-bde4-32c1b4e747a1&width=768&dpr=3&quality=100&sign=e52c6cce&sv=2) Une vie sur notre planète - Book infographic [Une vie sur notre planète.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAffO8xa1ZWmgZvfeK2%2Fuploads%2FkgKZM7T9lRdxycqb2rUG%2FUne%20vie%20sur%20notre%20plane%CC%80te.pdf?alt=media&token=3139a0d5-ae3a-48d3-ba61-618a93173646) PDF · 4MB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAffO8xa1ZWmgZvfeK2%2Fuploads%2FkgKZM7T9lRdxycqb2rUG%2FUne%20vie%20sur%20notre%20plane%CC%80te.pdf?alt=media&token=3139a0d5-ae3a-48d3-ba61-618a93173646) Une vie sur notre planète - High Resolution Book infographic * [_**The Software Craftsman**_](https://www.goodreads.com/book/show/23215733-the-software-craftsman) _by Sandro Mancuso_ _\-_ _January 2022 (update)_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FWhJJjccoxe3gwVvULqLq%252FThe-Software-Craftsman.webp%3Falt%3Dmedia%26token%3D9b87accb-55f6-4d86-8501-25a194e4d058&width=768&dpr=3&quality=100&sign=9441d67f&sv=2) The Software Craftsman Infographic * [_Tu fais quoi dans la vie_](https://livre.fnac.com/a16126259/Matthieu-Dardaillon-Tu-fais-quoi-dans-la-vie) _by Joséphine Bouchez et Mathieu Dardaillon - November 2021_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252Fc85cyjRZdPMyAsG0NPce%252FTu-fais-quoi-dans-la-vie.webp%3Falt%3Dmedia%26token%3D09d08eb8-5187-4720-994d-013978f96cc9&width=768&dpr=3&quality=100&sign=54d414b1&sv=2) * [_How to avoid a climate disaster_](https://www.goodreads.com/book/show/52275335-how-to-avoid-a-climate-disaster) _by Bill Gates - October 2021_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FJdnoqPL23hLA6OkTS7Y1%252FHow%2520to%2520avoid%2520a%2520climate%2520disaster.png%3Falt%3Dmedia%26token%3Dd5027464-dcbe-4de8-bcf0-f5ca68491b70&width=768&dpr=3&quality=100&sign=c0e5da69&sv=2) * [_Unit Testing Principles, Practices, and Patterns_](https://www.manning.com/books/unit-testing) _by Vladimir Khorikov - October 2021_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252Fz5y8tZqNst7mfIGpNQUk%252FUnit-Testing-Principles_-Practices_-and-Patterns.webp%3Falt%3Dmedia%26token%3D1fab2ce8-672d-4e05-846f-892a18fcd154&width=768&dpr=3&quality=100&sign=61523c42&sv=2) [Unit Testing Principles, Practices, and Patterns.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAffO8xa1ZWmgZvfeK2%2Fuploads%2FmjlkQDV5OJA9IkHRmCgM%2FUnit%20Testing%20Principles%2C%20Practices%2C%20and%20Patterns.pdf?alt=media&token=4c251b20-1ae5-4a34-a30f-0e4e939d0a89) PDF · 3MB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAffO8xa1ZWmgZvfeK2%2Fuploads%2FmjlkQDV5OJA9IkHRmCgM%2FUnit%20Testing%20Principles%2C%20Practices%2C%20and%20Patterns.pdf?alt=media&token=4c251b20-1ae5-4a34-a30f-0e4e939d0a89) * [_**The programmer's brain**_](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/the-programmers-brain) _by Felienne Hermans - August 2021_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-Mi_5OQiKp9Dtao-QrP-%252F-Mi_60_iRkD6sFgkb-dD%252FProgrammers%2520brain.png%3Falt%3Dmedia%26token%3D7b27087e-362e-43bc-ba7f-acfd363badf6&width=768&dpr=3&quality=100&sign=f445303&sv=2) * [_**La Liberté du Commandement**_](https://livre.fnac.com/a14046398/Loic-Finaz-La-liberte-du-commandement) _par Loïc Finaz - June 2021_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdR4M-nEsf5P5PF7WkA%252F-MdR7OPSyf8gYFjrUcxv%252FLa%2520liberte%25CC%2581%2520du%2520commandement.png%3Falt%3Dmedia%26token%3D330c6c19-c08c-4992-8985-c9de12612684&width=768&dpr=3&quality=100&sign=bbc746aa&sv=2) * [_**Refactoring at Scale: Regaining Control of Your Codebase**_](https://www.goodreads.com/book/show/53483751-refactoring-at-scale) _by Maude Lemaire - May 2021_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdR4M-nEsf5P5PF7WkA%252F-MdR6sASMkBfxmLjwPlq%252FRefactoring%2520at%2520scale.jpg%3Falt%3Dmedia%26token%3Dc2089fac-a2cc-4bc4-b50f-ea86f3f5cfd4&width=768&dpr=3&quality=100&sign=e9d3a5f1&sv=2) * [_**Team Topologies**_](https://www.goodreads.com/book/show/44135420-team-topologies) _by Matthew Skelton, Manuel Pais - April 2021_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdR4M-nEsf5P5PF7WkA%252F-MdR6Xlx8YFCYs-OyNEN%252FTeam%2520Topologies.png%3Falt%3Dmedia%26token%3Db28dacea-3436-40b2-8a67-6abe429c755a&width=768&dpr=3&quality=100&sign=a234bfd3&sv=2) * [_**Succeeding with OKRs in Agile**_](https://www.goodreads.com/book/show/57019672-succeeding-with-okrs-in-agile?ac=1&from_search=true&qid=HgSf8HvSoN&rank=1) _by Allan Kelly - March 2021_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdR4M-nEsf5P5PF7WkA%252F-MdR5gZNVwsIzrelW8NJ%252Fsucceeding%2520with%2520okrs%2520in%2520agile.png%3Falt%3Dmedia%26token%3Db61da2f9-6ae3-483c-94e6-5e5e5a4608c4&width=768&dpr=3&quality=100&sign=52226096&sv=2) * [_**Software-Design X-Rays**_](https://www.goodreads.com/book/show/36517037-software-design-x-rays?ac=1&from_search=true&qid=X1QZx8XCCs&rank=1) _by Adam Tornhill - February 2021_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdR4M-nEsf5P5PF7WkA%252F-MdR5PRYaH6oUXZEb95E%252FSoftware-Design%2520X-Rays.png%3Falt%3Dmedia%26token%3D4e4a1420-830c-4e57-a879-b6f559606790&width=768&dpr=3&quality=100&sign=26b3aad0&sv=2) * [_**Leadership Strategy and Tactics: Field Manual**_](https://www.goodreads.com/book/show/51136198-leadership-strategy-and-tactics?ac=1&from_search=true&qid=ExRdMvfk8X&rank=1) _by Jocko Willink - February 2021_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdR4M-nEsf5P5PF7WkA%252F-MdR5F4qeJ4emls01mqm%252Fleadership%2520strategy.jpg%3Falt%3Dmedia%26token%3D9ede7c44-af06-4690-8c08-e2edd21cd464&width=768&dpr=3&quality=100&sign=8864863&sv=2) * [_**Samman Technical Coaching**_](https://www.goodreads.com/book/show/56659570-technical-agile-coaching-with-the-samman-method?ac=1&from_search=true&qid=Vsc4qfo3k7&rank=1) _by Emily Bache - January 2021_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdR-Yzhz8NuFDuCMNr8%252F-MdR47E6nwLcH_j3S99U%252FSamman%2520Technical%2520Coaching.png%3Falt%3Dmedia%26token%3D054e6af2-b78e-4707-a2e3-57d0244e332f&width=768&dpr=3&quality=100&sign=42fc1ad9&sv=2) * [_**Culture is Everything**_](https://www.goodreads.com/book/show/35080568-culture-is-everything?ac=1&from_search=true&qid=G7bsQEDUsD&rank=1) _by Tristan White - December 2020_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdR-Yzhz8NuFDuCMNr8%252F-MdR3Wy47aGnx6RGncpj%252FCulture%2520is%2520everything.jpg%3Falt%3Dmedia%26token%3D15a9d6fa-af80-4046-8cb7-9fd1080cbde3&width=768&dpr=3&quality=100&sign=25d99238&sv=2) * [_**Leadership is language**_](https://www.goodreads.com/book/show/42774083-leadership-is-language) _by David Marquet - November 2020_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdR-Yzhz8NuFDuCMNr8%252F-MdR2QbnwGpuTQOZRLI6%252FLeadership%2520is%2520language.jpg%3Falt%3Dmedia%26token%3D9cddb5ef-e5ff-4e78-8ef8-81d159ffd854&width=768&dpr=3&quality=100&sign=4bf4b4be&sv=2) * [_**The Software Craftsman**_](https://www.goodreads.com/book/show/23215733-the-software-craftsman) _by Sandro Mancuso_ _\-_ _April 2017_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdR-Yzhz8NuFDuCMNr8%252F-MdR1y8u0II8_JJIkg5q%252FThe%2520Software%2520craftsman.png%3Falt%3Dmedia%26token%3D9bb148fe-1f4a-4119-93a8-9794d1f2c3be&width=768&dpr=3&quality=100&sign=c6ba9ebe&sv=2) [PreviousCultivate Team Learning with Xtrem Reading](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/cultivate-team-learning-with-xtrem-reading) [NextHow to make book infographics](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/how-to-make-book-infographics) Last updated 1 year ago --- # Functional Programming made easy in C# with Language-ext | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext.md) . In the title I have written FP and C# but the question you probably wonder is : > What the hell should we want to use FP paradigms in an OO language like C# ? Here are some arguments to answer this question (from my POV) : * Write less code and more meaningful one : improved code clarity * Avoid side effects by using immutability and pure functions : Easier concurrent programming * Easier testing : it’s really easy to test functions * Easier debugging * Funnier to write ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F1440%2F0*P33ZZhUjLG5IPM6t.png&width=768&dpr=3&quality=100&sign=635b1d49&sv=2) OK but why don’t we use a FP language instead of C# ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#ok-but-why-dont-we-use-a-fp-language-instead-of-c) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- In companies it’s really hard to change the habits. We don’t all work in the Sillicon Valley and in my reality the latest versions in the production environments are : Java 8, .NET Framework 4, NodeWhat ?, … In my world organizations are not yet ready to invest in pure FP languages like F#, Kotlin, Clojure or whatever. They are stuck in legacy code… To go further on this topic I invite you to watch this video on _**Functional Core, Imperative Shell**_ : [https://discventionstech.wordpress.com/2017/06/30/functional-core-and-imperative-shell/](https://discventionstech.wordpress.com/2017/06/30/functional-core-and-imperative-shell/) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9Mdl9z2acWFN-AFqm%252F-MF9NA69FCxoBgSxWFe6%252Fimage.png%3Falt%3Dmedia%26token%3D5570d534-d49c-4a5a-82ec-70e943f7a59a&width=768&dpr=3&quality=100&sign=bf35ad39&sv=2) It’s a pattern that could be really useful to every developers on earth I think. * **Functional core (declarative)** composed of pure functions (in / out) and easy to test without any mocks. * **Imperative shell or reactive** container the service logic that you can test with integration tests Now I have proved the interest of FP in OO language let’s go for a quick lesson. Let’s demystify Functional Programming (FP)[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-9146) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- > “In computer science, **functional programming** is a **programming** paradigm — a style of building the structure and elements of computer programs — that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data.” — [wikipedia](https://en.wikipedia.org/wiki/Functional_programming) Basically FP is all about **functions and immutability :** * Pure functions * Lambda functions (anonymous) * High order functions * Composition * Closures * Currying & partial application * Recursion _If you have already looked at it, you have probably read other words like functors, monads and monoïds that can be very scary but in reality concepts are not._ Let’s start by explaining 3 concepts : ### Immutability[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-662a) We **never** want to **mutate an object in FP we want to avoid side effects so we prefer** creating a new one. If we have mutable objects it could be possible for another function to mutate the object we were working on concurrently. Immutability ensures a function remains pure, it makes concurrency much more easy to handle and makes our dev life easier. ### Pure Functions[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-92b0) A pure function don’t refer to any global state. The same inputs will always get the same output.![Image for post](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F1148%2F1*wr5pNa2qjdVvxrD_wUfBjA.png&width=300&dpr=3&quality=100&sign=ebe25e0c&sv=2) Combined with **immutable data** types mean you can be sure the same inputs will give the same outputs. ### Higher order function[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-69d2) A function that does at least one of the following: * Takes one or more functions as arguments * Returns a function as its result A higher order function that takes 2 functions as arguments ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F1674%2F1*cruiC2X46yWBxq6QyFO_rw.png&width=768&dpr=3&quality=100&sign=41328c70&sv=2) Before demonstrating code I highly recommend you to read this great article about FP concepts (I won’t do better for sure) : [http://adit.io/posts/2013-04-17-functors,\_applicatives,\_and\_monads\_in\_pictures.html#just-what-is-a-functor,-really?](http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html) Now you know the basics behind FP we can start deep diving into Language-ext. What is Language-ext ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-2a7c) ---------------------------------------------------------------------------------------------------------------------------------------------------------------- According to the creator of the lib [**Paul Louth**](https://twitter.com/paullouth) : It’s a library that uses and abuses the features of C# to provide a functional-programming ‘base class library’ that, if you squint, can look like extensions to the language itself. His desire here is to make programming in C# much more reliable and to make the engineer’s inertia flow in the direction of declarative and functional code rather than imperative. It’s basically “**one lib to rule them all**” : [https://github.com/louthy/language-ext](https://github.com/louthy/language-ext) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9Mdl9z2acWFN-AFqm%252F-MF9NpmtFatrwuJuaAZr%252Fimage.png%3Falt%3Dmedia%26token%3D75c7cc7a-c579-4731-a3ac-c8b4686a3657&width=768&dpr=3&quality=100&sign=700442b7&sv=2) ### Language-ext vs LinQ[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-7536) Yes FP paradigms in C# exist since the introduction of LinQ. Here is a mapping between some language-ext functionalities and their equivalence in LinQ : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9Mdl9z2acWFN-AFqm%252F-MF9Nw93tyMFVlLEC2VD%252Fimage.png%3Falt%3Dmedia%26token%3D5546a4e7-34c0-4e5a-85c2-3048747d40e2&width=768&dpr=3&quality=100&sign=905332d&sv=2) ### **Easy immutable record types**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#easy-immutable-record-types) Implementing immutable data structures is a nightmare in OO languages (Equals, GetHashCode, IEquatable, IComparer, implementing operators: ==, !=, <, <=, >, >=). That’s why there is a **Record** class in language-ext : ### **No more out parameters**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#no-more-out-parameters) Yes in C# we have out parameters on TryParse for example now it’s finished : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9Mdl9z2acWFN-AFqm%252F-MF9OByb5T1qMeEGf1rd%252Fimage.png%3Falt%3Dmedia%26token%3D4693002b-578a-4028-829e-f15f0d76f537&width=768&dpr=3&quality=100&sign=fcf8741&sv=2) ### Option[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-6be8) Many functional languages disallow null values, as null-references can introduce hard to find bugs. Option is a type safe alternative to null values. (it also exists in F#). > **Avoid nulls by using an Option** An Option can be in one of two states : **some** \=> the presence of a value **none** \=> lack of a value _**Match**_ : match down to primitive type _**Map**_ : We can match down to a primitive type, or can stay in the elevated types and do logic using map. * Lambda inside map won’t be invoked if Option is in None state * Option is a replacement for if statements ie if obj == null * Working in elevated context to do logic ### Lists are functors[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#a157) We can map them : ### Function composition[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#cf4c) What happens when you apply a function to another function? When you use **map on a function**, you’re just doing **function composition :** ### Bind[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-258f) Monads apply a function that **returns a wrapped value to a wrapped value**. Monads have a function “bind” to do this. Suppose **half** is a function that only **works on even numbers.** ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9Mdl9z2acWFN-AFqm%252F-MF9Oo8W6WZFvHqiz-vl%252Fimage.png%3Falt%3Dmedia%26token%3De6d53e8e-b566-41e0-a6ed-3938be211dd7&width=768&dpr=3&quality=100&sign=aad766bc&sv=2) What if we feed it a wrapped value? This is where **bind** comes in! ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9Mdl9z2acWFN-AFqm%252F-MF9OsFC2kD4DHPhyNlX%252Fimage.png%3Falt%3Dmedia%26token%3D1f3d5599-81a3-43a8-b83a-574e65bc455e&width=768&dpr=3&quality=100&sign=85201b2&sv=2) ### Try[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#fab7) Exception handling made easier the use of try. No more needs of ugly try/catch that pollutes the flow of your code you can describe your pipeline in a really readable way. Here if something fails, you have the exception in the failure match part. The better part is that **Try** has a brother called **TryAsync** that is demonstrated in the real life example. ### **Memoization**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-5cd6) Memoization is some kind of caching, if you memoize a function, it will be only executed once for a specific input. ### **Partial application**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-8c7d) Partial application allows you to **create new function from an existing one by setting some arguments.** ### **Either**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-9015) **Either** represents a value of two types, it is either **a left or a right** by convention **left** is the **failure case**, and **right** the **success case.** ### **Fold vs Reduce (Aggregate in LinQ)**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#a499) * **Fold** takes an explicit initial value for the accumulator. The accumulator and result type can differ as the accumulator is provided separately. * **Reduce** uses the first element of the input list as the initial accumulator value (just like the Aggregate function). The accumulator and therefore result type must match the list element type. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9Mdl9z2acWFN-AFqm%252F-MF9PjkfxsVG690DVYu8%252Fimage.png%3Falt%3Dmedia%26token%3D4b33152d-140b-4f81-9ce0-eacc444bb859&width=768&dpr=3&quality=100&sign=29c0a631&sv=2) ### Real life example[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-2693) This example demonstrates the kind of usage you could have of language-ext in application services : **chaining operations / pipelining, improve error handling, no more redundant checks, …** Conclusion[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#d278) ------------------------------------------------------------------------------------------------------------------------------------------------- > Start using language-ext in your projects is a really good idea. This lib can make your life much more easier. > > You can see it at your first step to go into the FP world, before one day be able to use a language like Clojure or F#. Resources[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-4870) --------------------------------------------------------------------------------------------------------------------------------------------------- All the source code is available in my github repository : [https://github.com/ythirion/fp-in-csharp-sandbox](https://github.com/ythirion/fp-in-csharp-sandbox) . If you want to go further : * _FP in pictures_ : [http://adit.io/posts/2013-04-17-functors,\_applicatives,\_and\_monads\_in\_pictures.html#just-what-is-a-functor,-really?](http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html) * _Gitter on language-ext_ : [https://gitter.im/louthy/language-ext](https://gitter.im/louthy/language-ext) * _Doc and examples_ : [https://github.com/louthy/language-ext/issues](https://github.com/louthy/language-ext/issues) * _What’s new in C# 8_ : [https://medium.com/swlh/how-c-8-helps-software-quality-cfa81a18907f](https://medium.com/swlh/how-c-8-helps-software-quality-cfa81a18907f) * _“functional core, imperative shell” video_ : [https://discventionstech.wordpress.com/2017/06/30/functional-core-and-imperative-shell/](https://discventionstech.wordpress.com/2017/06/30/functional-core-and-imperative-shell/) * _**Domain modeling made functional book from Scott Wlaschin**_ : [https://www.amazon.com/Domain-Modeling-Made-Functional-Domain-Driven/dp/1680502549/ref=sr\_1\_1?crid=FXE4W7BCGETO&keywords=domain+modeling+f%23&qid=1576686914&sprefix=design+thin%2Caps%2C330&sr=8-1](https://www.amazon.com/Domain-Modeling-Made-Functional-Domain-Driven/dp/1680502549/ref=sr_1_1?crid=FXE4W7BCGETO&keywords=domain+modeling+f%23&qid=1576686914&sprefix=design+thin%2Caps%2C330&sr=8-1) [PreviousTechnical debt workshop](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop) [NextF# for OO programmers](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/f-for-oo-programmers) Last updated 5 years ago * [OK but why don’t we use a FP language instead of C# ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#ok-but-why-dont-we-use-a-fp-language-instead-of-c) * [Let’s demystify Functional Programming (FP)](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-9146) * [Immutability](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-662a) * [Pure Functions](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-92b0) * [Higher order function](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-69d2) * [What is Language-ext ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-2a7c) * [Language-ext vs LinQ](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-7536) * [Easy immutable record types](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#easy-immutable-record-types) * [No more out parameters](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#no-more-out-parameters) * [Option](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-6be8) * [Lists are functors](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#a157) * [Function composition](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#cf4c) * [Bind](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-258f) * [Try](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#fab7) * [Memoization](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-5cd6) * [Partial application](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-8c7d) * [Either](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-9015) * [Fold vs Reduce (Aggregate in LinQ)](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#a499) * [Real life example](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-2693) * [Conclusion](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#d278) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext#id-4870) Copy public class User { public readonly Guid Id; public readonly string Name; public readonly int Age; public User(Guid id, string name, int age) { Id = id; Name = name; Age = age; } } public class UserRecord : Record { public readonly Guid Id; public readonly string Name; public readonly int Age; public UserRecord(Guid id, string name, int age) { Id = id; Name = name; Age = age; } } [Fact] public void record_types() { var spongeGuid = Guid.NewGuid(); var spongeBob = new User(spongeGuid, "Spongebob", 40); var spongeBob2 = new User(spongeGuid, "Spongebob", 40); Assert.False(spongeBob.Equals(spongeBob2)); // Use immutable records available in Language-ext var spongeBobRecord = new UserRecord(spongeGuid, "Spongebob", 40); var spongeBobRecord2 = new UserRecord(spongeGuid, "Spongebob", 40); Assert.True(spongeBobRecord.Equals(spongeBobRecord2)); } Copy Option aValue = 2; aValue.Map(x => x + 3); // Some(5) Option none = None; none.Map(x => x + 3); // None //Left -> Some, Right -> None aValue.Match(x => x + 3, () => 0); // 5 none.Match(x => x + 3, () => 0); // 0 // Returns the Some case 'as is' -> 2 and 1 in the None case int value = aValue.IfNone(1); int noneValue = none.IfNone(42); // 42 Copy new int[] { 2, 4, 6 }.Map(x => x + 3); // 5,7,9 new List { 2, 4, 6 }.Map(x => x + 3); // 5,7,9 //Prefer use List (Immutable list) List(2, 4, 6).Map(x => x + 3); // 5,7,9 Copy static Func Add2 = x => x + 2; static Func Add3 = x => x + 3; static int Add5(int x) => Add2.Compose(Add3)(x); Copy static Option Half(double x) => x % 2 == 0 ? x / 2 : Option.None; [Fact] public void bind_monad() { Option.Some(3).Bind(x => Half(x));// None Option.Some(4).Bind(x => Half(x));// Some(2) } [Fact] public void chain_bind_monad() { Option.Some(20) .Bind(x => Half(x))// Some(10) .Bind(x => Half(x))// Some(5) .Bind(x => Half(x));// None } Copy public void file_monad_example() { GetLine() .Bind(ReadFile) .Bind(PrintStrln) .Match(success => Console.WriteLine("SUCCESS"), failure => Console.WriteLine("FAILURE")); } static Try GetLine() { Console.Write("File:"); return Try(() => Console.ReadLine()); } static Try ReadFile(string filePath) => Try(() => File.ReadAllText(filePath)); static Try PrintStrln(string line) { Console.WriteLine(line); return Try(true); } Copy static Func GenerateGuidForUser = user => user + ":" + Guid.NewGuid(); static Func GenerateGuidForUserMemoized = memo(GenerateGuidForUser); [Fact] public void memoization_example() { GenerateGuidForUserMemoized("spongebob");// spongebob:e431b439-3397-4016-8d2e-e4629e51bf62 GenerateGuidForUserMemoized("buzz");// buzz:50c4ee49-7d74-472c-acc8-fd0f593fccfe GenerateGuidForUserMemoized("spongebob");// spongebob:e431b439-3397-4016-8d2e-e4629e51bf62 } Copy static Func Multiply = (a, b) => a * b; static Func TwoTimes = par(Multiply, 2); [Fact] public void partial_app_example() { Multiply(3, 4); // 12 TwoTimes(9); // 18 } Copy public static Either GetHtml(string url) { var httpClient = new HttpClient(new HttpClientHandler()); try { var httpResponseMessage = httpClient.GetAsync(url).Result; return httpResponseMessage.Content.ReadAsStringAsync().Result; } catch (Exception ex) { return ex; } } [Fact] public void either_example() { GetHtml("unknown url"); // Left InvalidOperationException GetHtml("https://www.google.com"); // Right Console.WriteLine("an exception occured" + ex), Right: r => Console.WriteLine(r) ); } Copy [Fact] public void fold_vs_reduce() { //fold takes an explicit initial value for the accumulator //Can choose the result type var foldResult = List(1, 2, 3, 4, 5) .Map(x => x * 10) .Fold(0m, (x, s) => s + x); // 150m //reduce uses the first element of the input list as the initial accumulator value //Result type will be the one of the list var reduceResult = List(1, 2, 3, 4, 5) .Map(x => x * 10) .Reduce((x, s) => s + x); // 150 } Copy using System; using System.Threading.Tasks; using LanguageExt; using static LanguageExt.Prelude; namespace language_ext.kata.Account { public class AccountService { private readonly UserService userService; private readonly TwitterService twitterService; private readonly IBusinessLogger businessLogger; public AccountService(UserService userService, TwitterService twitterService, IBusinessLogger businessLogger) { this.userService = userService; this.twitterService = twitterService; this.businessLogger = businessLogger; } private TryAsync CreateContext(Guid userId) => TryAsync(() => userService.FindById(userId)).Map(user => new RegistrationContext(user)); private TryAsync RegisterOnTwitter(RegistrationContext context) => TryAsync(() => twitterService.Register(context.Email, context.Name)).Map(context.SetAccount); private TryAsync AuthenticateOnTwitter(RegistrationContext context) => TryAsync(() => twitterService.Authenticate(context.Email, context.Password)).Map(context.SetToken); private TryAsync Tweet(RegistrationContext context) => TryAsync(() => twitterService.Tweet(context.Token, "Hello I am " + context.Name)).Map(context.SetTweetUrl); private TryAsync UpdateUser(RegistrationContext context) => TryAsync(async () => { await userService.UpdateTwitterAccountId(context.Id, context.AccountId); return context; }); public async Task> Register(Guid id) { return await CreateContext(id) .Bind(RegisterOnTwitter) .Bind(AuthenticateOnTwitter) .Bind(Tweet) .Bind(UpdateUser) .Do(context => businessLogger.LogSuccessRegister(context.Id)) .Map(context => context.Url) .IfFail(failure => { businessLogger.LogFailureRegister(id, failure); return (string)null; }); } } } --- # Speed boat | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat.md) . Set the stage 5'[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat#set-the-stage-5) ---------------------------------------------------------------------------------------------------------------------------- Remind this sentence : "Regardless of what we discover, we understand and truly believe that everyone did the best job they could, given what they knew at the time, their skills and abilities, the resources available, and the situation at hand​" ### Explorer, Shopper, Vacationer, or Prisoner[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat#explorer-shopper-vacationer-or-prisoner) How do participants feel at the retro: * **Explorer**: Eager to dive in and research what did and didn't work and how to improve. * **Shopper**: Positive attitude. Happy if one good things comes out. * **Vacationer**: Reluctant to actively take part but the retro beats the regular work. * **Prisoner**: Only attend because they (feel they) must. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FkydUchIQgFt3PZJVQqw7%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=37380731&sv=2) Gather data 10'[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat#gather-data-10) -------------------------------------------------------------------------------------------------------------------------- ### Speed boat[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat#speed-boat) Analyze what forces push you forward and what pulls you back. Draw a speedboat onto a flip chart paper with :a strong motor and a heavy anchor * Team members silently write on sticky notes what propelled the team forward and what kept it in place. * One idea per note. * Post the stickies motor and anchor respectively. Read out each one and discuss how you can increase 'motors' and cut 'anchors'. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FsWEmhnkqQDc338hp4c9y%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=65d68154&sv=2) Generate insights 5-10'[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat#generate-insights-5-10) ------------------------------------------------------------------------------------------------------------------------------------------ Generate lots of ideas on the "what kept it in place" topics. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FIeWLIHIIN1EUB1Jw4cKf%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=505920b6&sv=2) ​Decide what to do[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat#decide-what-to-do) -------------------------------------------------------------------------------------------------------------------------------- Dot-voting on the generated insights [PreviousSad/Mad/Glad](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/sad-mad-glad) [NextStar wars theme](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme) Last updated 6 years ago * [Set the stage 5'](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat#set-the-stage-5) * [Explorer, Shopper, Vacationer, or Prisoner](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat#explorer-shopper-vacationer-or-prisoner) * [Gather data 10'](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat#gather-data-10) * [Speed boat](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat#speed-boat) * [Generate insights 5-10'](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat#generate-insights-5-10) * [​Decide what to do](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat#decide-what-to-do) --- # CDC testing made simple with Pact | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact.md) . What is Pact ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#what-is-pact) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Pact is _**a contract testing tool**_. Contract testing is a way to ensure that services (such as an API provider and a client) can communicate with each other. Without contract testing, the only way to know that services can communicate is by using expensive and brittle integration tests. Pact provides a testing button for your code, allowing you to safely confirm that your applications will work together without having to deploy the world first. It is available on a lot of platforms and languages : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZGFJF_Cekb-HrdooB%252F-MBZGeBVGeLQ-rPBD7Wm%252Fimage.png%3Falt%3Dmedia%26token%3Db85d6ff5-433e-4d31-8f2e-417826ad4569&width=768&dpr=3&quality=100&sign=34bc878f&sv=2) Pact comes with its own specification regarding the format of the contracts between consumers and providers : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZGFJF_Cekb-HrdooB%252F-MBZGipyI_wBQFQK2FNs%252Fimage.png%3Falt%3Dmedia%26token%3Db5177d76-b87a-436a-9bde-31418845087f&width=768&dpr=3&quality=100&sign=661b4f8f&sv=2) How can we implement a new service with Pact ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#f329) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Because we use a CDC approach we start with the consumer and here is what we want as a consumer : _As a consumer, I want a Rest API that returns “Hello world v1” when I GET “api/v1.0/helloworld”_ ### 1) Start with the consumer[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#id-15af) Let’s implement a simple consumer by : * Writing Test(s) * Define interactions / Expectations ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZGFJF_Cekb-HrdooB%252F-MBZGsz4C6BIEP5RthEX%252Fimage.png%3Falt%3Dmedia%26token%3Dd620582c-605c-4501-a271-85414b4a4ed9&width=768&dpr=3&quality=100&sign=6bc83832&sv=2) **Concretely** : * Build your client : here we call it **consumer-js** ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZGFJF_Cekb-HrdooB%252F-MBZH6eIBf52NvemM668%252Fimage.png%3Falt%3Dmedia%26token%3D9c7cba51-de63-4421-808d-a289ed460c71&width=768&dpr=3&quality=100&sign=f8d6accb&sv=2) * Describe and configure the interactions (behaviors and expectations) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZGFJF_Cekb-HrdooB%252F-MBZHFEpR5h2jwqJU2t1%252Fimage.png%3Falt%3Dmedia%26token%3Dde91b3f6-9984-4c1b-9074-1c7e6cd73cb8&width=768&dpr=3&quality=100&sign=47918f03&sv=2) Once you have defined it you can run the tests. From those expectations Pact will create a contract file : a JSON file that will look like this : ### 2) Contract Driven Development[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#id-0d10) * Design Your **API** From The Contract * Write a RED test ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZGFJF_Cekb-HrdooB%252F-MBZI7X93PTObmkZSvzc%252Fimage.png%3Falt%3Dmedia%26token%3Df617fd02-8304-4e42-a07a-8963f6efee92&width=768&dpr=3&quality=100&sign=6ac5492f&sv=2) #### **The RED test (in .NET Core)**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#the-red-test-in-.net-core) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZGFJF_Cekb-HrdooB%252F-MBZIG6j4aqfr3gVTHZS%252Fimage.png%3Falt%3Dmedia%26token%3D3a7061d0-af11-44cc-8e47-7895d163ca36&width=768&dpr=3&quality=100&sign=b1163ccb&sv=2) The test will be launched and interactions will be verified based on the contract that has been defined on the consumer side. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZGFJF_Cekb-HrdooB%252F-MBZIWHjKMqSgquoVnVo%252Fimage.png%3Falt%3Dmedia%26token%3Ddca64687-5b32-469a-b652-cf2e06fb59f1&width=768&dpr=3&quality=100&sign=ea674f25&sv=2) #### **Make the test GREEN**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#make-the-test-green) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZGFJF_Cekb-HrdooB%252F-MBZIc3q9ZXD_RW4p4Wy%252Fimage.png%3Falt%3Dmedia%26token%3D5dd3540f-33d3-4efd-a93c-334ed8295a50&width=768&dpr=3&quality=100&sign=7f8abfdc&sv=2) Features offered by Pact[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#f090) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- In this simple example we have just checked a GET interaction with simple string matcher but you can achieve much more complex and more realistic verifications with the tool : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZGFJF_Cekb-HrdooB%252F-MBZIihTAsvt11EwQaYY%252Fimage.png%3Falt%3Dmedia%26token%3D08a199a7-dc4c-477a-9ad1-b2bd96881738&width=768&dpr=3&quality=100&sign=f7d75f17&sv=2) S.W.O.T[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#eaa4) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Based on our experience with Pact here is our S.W.O.T : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZGFJF_Cekb-HrdooB%252F-MBZIsDx96nSrwFBGqFs%252Fimage.png%3Falt%3Dmedia%26token%3Ddd846be5-c447-4aba-90b0-c10a137666e5&width=768&dpr=3&quality=100&sign=427852fc&sv=2) Resources[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#abaa) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Please find the code samples in this repository : [**https://github.com/agilepartner/pact-sandbox**](https://github.com/agilepartner/pact-sandbox) To go further check the implementation guide in your favorite language : [https://docs.pact.io/implementation\_guides](https://docs.pact.io/implementation_guides) Conclusion[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#id-2692) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Pact is a really good tool to start a CDC approach. It is easy to use but there is one problem that needs to be solved before starting using it in enterprise : **Where the hell do we store the contracts ?** [PreviousImprove the design and testing of your micro-services through CDC Tests](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests) [NextPact broker : the missing piece of your Consumer-Driven Contract approach](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach) Last updated 6 years ago * [What is Pact ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#what-is-pact) * [How can we implement a new service with Pact ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#f329) * [1) Start with the consumer](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#id-15af) * [2) Contract Driven Development](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#id-0d10) * [Features offered by Pact](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#f090) * [S.W.O.T](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#eaa4) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#abaa) * [Conclusion](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact#id-2692) --- # Sad/Mad/Glad | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/sad-mad-glad.md) . [https://plans-for-retrospectives.com/en/?id=82-7-10-125-120](https://plans-for-retrospectives.com/en/?id=82-7-10-125-120) * 3 words on the sprint - **5'** * Each attendee has 3 post-its ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzljw0bqg1BfP8Fc6g%252F-MAznU4PelxJghCf6KA5%252Fimage.png%3Falt%3Dmedia%26token%3D1ad61be4-3071-4598-83d1-72e04dc3bfa9&width=768&dpr=3&quality=100&sign=3ee3ab5b&sv=2) * Sad, Mad, Glad - **10'** * When did you feel that way ? * Ask the group for cluster names ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FYrKEq1IWHw1iXwDcP7y4%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=c981d9a7&sv=2) STR Photo by Andy Rosslau Image 1 of 2 plans-for-retrospect * Actions brainstorming on the Mad/Sad * Dotvoting on the actions * Associate "1 owner" / action (max 2 actions like described in the team rules) * Close with a "My Team is Awesome" (everyone must fill the blanks : 'My team is awesome because \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ and that makes me feel \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_') ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzqzsmKPqBTANFT3xP%252F-MAzr4Pi7Kg9xldM33aw%252Fimage.png%3Falt%3Dmedia%26token%3D8fe47ba7-4ba3-41b8-af64-792afe2d51f8&width=768&dpr=3&quality=100&sign=b8ff11ba&sv=2) [PreviousRétro dont vous êtes le héros](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros) [NextSpeed boat](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat) Last updated 6 years ago --- # The developers — the forgotten of agility | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility.md) . Why you should read this article[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#why-you-should-read-this-article) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Little by little, **Agility has been diverted and no longer belongs to developers.** In this article you will understand how much the developers have become forgotten from agility. The genesis — the agile manifesto[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-1a5d) --------------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9SNKHoihtxgGD066M%252F-MF9SdlY3Uy9NYPmZiy3%252Fimage.png%3Falt%3Dmedia%26token%3D932e7929-8740-4853-90da-181bb81b26b9&width=768&dpr=3&quality=100&sign=c80f1d36&sv=2) In 2001, 17 brilliant developers tried to find an answer to this interrogation: the way we deliver software is not efficient at all. How could we do it differently, so they asked themselves a lot of questions: * We have a lot of tools and a lot of processes, **BUT** what about the people ? * We create a lot of documentation up front **BUT** our goal is to deliver software isn’t it? * A contract is important **BUT** we need to collaborate with our customers to discover what they need. * Our plans are too rigid we must embrace changes. Change is everywhere in our time (concurrency, technology, politics, climate, …) That came out from their discussions is what we know as the [agile manifesto](https://agilemanifesto.org/) : 4 values and 12 principles. It is the heart of agile and it has been designed **by developers for developers**. Scrum[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-1bb8) ----------------------------------------------------------------------------------------------------------------------- Nowadays when you talk about agile, people will make a shortcut and will talk to you about scrum that’s because Scrum is the most used agile framework in companies. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9SNKHoihtxgGD066M%252F-MF9Sm5ow7tlhiGJ6OAu%252Fimage.png%3Falt%3Dmedia%26token%3D93967025-e4f2-4132-9579-df0fb563531a&width=768&dpr=3&quality=100&sign=8ba190a5&sv=2) In 2018, it represented almost **70% of the agile methodologies** used in agile companies (number from the [state of agile](https://www.stateofagile.com/) ). The rules of the game are simple, and all explained in the scrum holy bible: the [**scrum guide**](https://www.scrumguides.org/) . It’s only an **18 pages guide** explaining the values, concepts behind the notion of sprint, the artefacts (product backlog for example), the different events (From daily scrum to retrospective), the roles (Product Owner, Scrum Master, Dev team) _**Scrum is really easy to understand but what about its implementation?**_ Observed anti-patterns[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-9923) ---------------------------------------------------------------------------------------------------------------------------------------- The anti-patterns described below are the ones we have observed in our coaching experiences. ### The Scrum Master[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-9a46) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9SNKHoihtxgGD066M%252F-MF9T-8JXcroK68nxAze%252Fimage.png%3Falt%3Dmedia%26token%3D53d4e7ca-4bcb-4c5f-af67-7410f6ae4e46&width=768&dpr=3&quality=100&sign=4e2387a2&sv=2) #### Anti-patterns[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#anti-patterns) * “Everybody can be a scrum master” because no skills are required. * “We have a developer that is really bad, and no one wants to work with him let’s choose him as scrum master he won’t hurt the code base anymore”. * Scrum masters acting as a shield that block all interactions. No one has access to the team anymore * Let’s put our project manager as scrum master it’s the same job at the end The scrum master role is the most misunderstood role. It requires a lot of soft skills (facilitation, communication, empathy) and it’s definitely not the same job as project management. ### The Product Owner[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-5cb5) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9SNKHoihtxgGD066M%252F-MF9TF30tOCqANcJyvx1%252Fimage.png%3Falt%3Dmedia%26token%3D279a9ef6-57fd-4246-a972-381ba05be0c1&width=768&dpr=3&quality=100&sign=80c1cc8d&sv=2) #### Anti-patterns[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#anti-patterns-1) * Is not empowered to say NO and accepts everything from the stakeholders. * Does not act as a vision holder because he has none. By not holding a vision it creates a loss of meaning and motivation for the Dev team. ### The Spring planning[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#eab6) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9SNKHoihtxgGD066M%252F-MF9TYRuD7HE0X4OswA6%252Fimage.png%3Falt%3Dmedia%26token%3D458c3da0-51e0-49d5-8235-83eb6119d431&width=768&dpr=3&quality=100&sign=45b687b8&sv=2) #### Anti-patterns[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#anti-patterns-2) * The Product Owner or the Scrum Master act as dictator and push the items from the Product backlog directly to the Sprint backlog without negotiation nor collaboration with the Dev team… ### The Daily scrum[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-0ce5) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9SNKHoihtxgGD066M%252F-MF9Tpavt7031WeNQ5bG%252Fimage.png%3Falt%3Dmedia%26token%3Dfe0071de-140b-49ba-af82-41fd01ef8563&width=768&dpr=3&quality=100&sign=9fa2c7ce&sv=2) #### Anti-patterns[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#anti-patterns-3) * People justify themselves in front of their PO and SM. * Only one guy monopolizes the attention a.k.a it becomes a One man show. * An event not time boxed and running for 1 hour without creating any value. This moment is often lived as a micro-management moment because in most organizations PO and SM are perceived as team managers. ### The Sprint review[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#e00d) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9SNKHoihtxgGD066M%252F-MF9U1vwIumX2L5OtzZq%252Fimage.png%3Falt%3Dmedia%26token%3D73be9afa-6e17-4d2b-906f-0150663c8d94&width=768&dpr=3&quality=100&sign=a8b9c8a6&sv=2) #### Anti-patterns[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#anti-patterns-4) * The demo of the product increment is made by the Product Owner not the team. When you work during an entire sprint on a product increment you are proud of and you don’t have the opportunity to demonstrate it and gather feedback by your own, it creates a lot of frustration inside the team. ### The Sprint retrospective[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-9935) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9SNKHoihtxgGD066M%252F-MF9UDLebRYg4Jn1JukE%252Fimage.png%3Falt%3Dmedia%26token%3D427edd5d-4446-4dbe-ab44-8f842a2bc9e1&width=768&dpr=3&quality=100&sign=41b5b6ee&sv=2) #### Anti-patterns[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#anti-patterns-5) * Developers are not “allowed” to talk about technical concerns, only about how to improve the process. Often in Dev teams they have impediments related to the technical side (environment issues or technical debt for example). Scrum Masters do not tolerate this kind of discussions during the retrospective, so when can the dev team take time to introspect and adapt on the code base and technical stuff ? ### Self-organization[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-37e6) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9SNKHoihtxgGD066M%252F-MF9UVkL77Dk1kGe15zR%252Fimage.png%3Falt%3Dmedia%26token%3D10b51531-5c94-49d5-a712-b49b853b109d&width=768&dpr=3&quality=100&sign=850b5c3e&sv=2) #### Anti-patterns[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#anti-patterns-6) * People do not have the space for experiment: NO! It’s not in scrum. * The team is self-organized but once it made a decision an agile evangelist comes and say you will fail, take this decision instead. Often self-organization is a sweet dream. A lot of organizations are not ready to trust people. ### Cross-functional teams[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#cross-functional-teams) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9SNKHoihtxgGD066M%252F-MF9UoUtuOVB_RyuESUR%252Fimage.png%3Falt%3Dmedia%26token%3Dfdd5fc3e-3703-496a-a89b-4c26f0c26256&width=768&dpr=3&quality=100&sign=3116faa5&sv=2) #### Anti-patterns[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#anti-patterns-7) * “No roles in the dev team, everyone is a developer.” By saying this it does not tolerate that there are specialists (Data scientists, UX, Testing). * “Everyone must know everything about everything.” Team members must be circle-shaped people (experts in all the skills required to build the product). Lost in agile[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#cb5b) ---------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MF9SNKHoihtxgGD066M%252F-MF9UxRRtWqAhqqmqv7X%252Fimage.png%3Falt%3Dmedia%26token%3D097ab216-799b-4860-b914-90b8f087ab10&width=768&dpr=3&quality=100&sign=5167b78a&sv=2) Developers do not find themselves in this version of agility. They feel that is no longer in their hands. **It’s not the idea’s fault, it’s the implementation.** They all believe in the manifesto for them “i_t’s common sense_” **BUT** they no longer feel concerned (“_It’s for project managers, PMI_”). * In this digital era companies need them to build their products. * In this [VUCA](https://www.vuca-world.org/) world companies must be able to adapt and change quickly. For those reasons companies need to be more agile. They strongly need to think on **ways to re-on-board the developers in agility.** As agile enthusiasts we strongly believe that agile is a good answer to developers past and current problems. **How can we help them to embrace it again ?** **How to re-onboard them ?**[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#how-to-re-onboard-them) ------------------------------------------------------------------------------------------------------------------------------------------------------------- [The secrets to re-on-board the devs in agility](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility) Resources[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#resources) ----------------------------------------------------------------------------------------------------------------------------- Here are the slides of a talk given in the Luxembourg Agile Community : [PreviousHow to run a Community of Practices (COP)](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop) [NextThe secrets to re-on-board the devs in agility](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility/the-secrets-to-re-on-board-the-devs-in-agility) Last updated 5 years ago * [Why you should read this article](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#why-you-should-read-this-article) * [The genesis — the agile manifesto](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-1a5d) * [Scrum](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-1bb8) * [Observed anti-patterns](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-9923) * [The Scrum Master](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-9a46) * [The Product Owner](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-5cb5) * [The Spring planning](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#eab6) * [The Daily scrum](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-0ce5) * [The Sprint review](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#e00d) * [The Sprint retrospective](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-9935) * [Self-organization](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#id-37e6) * [Cross-functional teams](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#cross-functional-teams) * [Lost in agile](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#cb5b) * [How to re-onboard them ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#how-to-re-onboard-them) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility#resources) --- # Xanpan - a team centric agile method story | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story.md) . Allan has really done a great job by explaining it in his book “[_Xanpan — Team Centric Agile software development_](https://leanpub.com/xanpan) ”. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F180%2F1*DJ_AHZVr14v2BqVptG0rzg.png&width=768&dpr=3&quality=100&sign=13f3877d&sv=2) It differs from other agile methods or frameworks because it’s the **team itself at the center of the method** (not a product nor a process). In this article I won’t explain the entire method (to do so I invite you to read the book), I will focus on the elements that differ from what we can experiment with other agile methods. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2698%2F1*cq30jF72WCQWaG8j0XU0MQ.png&width=768&dpr=3&quality=100&sign=9b9e08c&sv=2) What is it?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-182f) ------------------------------------------------------------------------------------------------------------------------------ As you have probably already guessed by its name, Xanpan is a mix of Kanban, XP (eXtreme Programming), Lean, Scrum and Product Management. Everything in Xanpan is based on a simple but hard to use principle: **pragmatism**. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2698%2F1*iTdW5YNjMFQr121Tjez78g.png&width=768&dpr=3&quality=100&sign=ef922742&sv=2) The building blocks of Xanpan are: * Work in iterations * Team-centric * Work to improve Flow * Quality is free (invest in quality) * Visualize Work in iterations[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-57a8) ------------------------------------------------------------------------------------------------------------------------------------- Just like in Scrum, you will use iterations in Xanpan. An iteration is a 2 weeks period _**from mid-week to mid-week**_. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F1116%2F1*FXpSLy81R27_R0h0M-82GQ.png&width=768&dpr=3&quality=100&sign=ad53bcb2&sv=2) Allan explains in his book that many studies have proven **people are more effective at the start of a new week**. So, the idea is not to start the week with meetings but to work on the iteration backlog. At the end of each iteration, the team should have produced a releasable product. ### Why use iterations?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-9231) Well, with the iterations the team defines **small deadlines that help to focus**, it avoids multi-tasking and so limits the work in progress naturally and improve efficiency. Planning[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-9a5d) --------------------------------------------------------------------------------------------------------------------------- ### 3 roles[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-9708) There are 3 roles in the planning: * _**Product Owner**_: this role is usually played by a product manager, or a business analyst acting as a proxy for the real customer * _**Creators**_: software engineers and testers mainly, although sometimes others, such as user interface designers are involved * _**Facilitator**_: sometimes there is a dedicated facilitator who is not the Product Owner or a member of the building team. They may be, for example, a project manager, Scrum master or Agile coach. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2231%2F1*UolRlEpd49GlFZLA2lQC_w.png&width=768&dpr=3&quality=100&sign=2214f96c&sv=2) 3 roles in the planning > _**Product ownership is considered a practice rather than a role.**_ ### Planning artefacts[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#ddf1) The outcome of the planning is cards that will be fixed onto the team board (it’s the iteration backlog), **like in Lean cards are Blue, White and Red**: * Blue cards: vertical slices of business functionality from multiple projects or products * White cards: Tasks related to blue cards. Those are written during the planning meeting, and there are usually multiple white task cards for each blue card. * Red cards: those are bugs, defects that need to be handled Blue and white cards are estimated in points in Xanpan, to do that teams use planning pokers like in XP. Because of their unpredictable nature, Red cards are those “estimated” after having been completed. Those cards are then used to setup the Team board (physical or virtual). ### Planning meeting[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-7677) This is how it is suggested to run the end of each iteration: ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F1557%2F1*mweO-Bu4F_GBXQLpUdT_eA.png&width=768&dpr=3&quality=100&sign=7382d7&sv=2) Retrospective[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-5542) -------------------------------------------------------------------------------------------------------------------------------- Retrospective could be formal or not (simple dialogue). It could be held at the end of the iteration routine or not. It could happen or not… At the end it’s a team decision. > _“Teams may also hold a retrospective as part of the iteration end routine, although not all teams hold retrospectives, and even those who do may not hold them at every iteration.” — Allan Kelly_ Work in routine[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-23ce) ---------------------------------------------------------------------------------------------------------------------------------- Here is the recommended routine: ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2698%2F1*NRiBrTGabeAZeAJdRXZGFQ.png&width=768&dpr=3&quality=100&sign=130d456e&sv=2) Plan beyond the iteration[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-5b30) -------------------------------------------------------------------------------------------------------------------------------------------- Quaterly plan is a plan for the 12 next weeks, filled to approximately the capacity of each iteration (consider it as the WIP limit of the iterations). Quaterly plan is a rolling plan; it is in a constant — perhaps daily — state of flux. Allan explains something fundamental and often forgot : **planning is not scheduling**. Plan: looking into the future to learn about what might happen. It helps to prepare a possible future (For it we can use technics like Design thinking for example). Where is the Kanban part in it?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-8603) -------------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2698%2F1*DvN4oneQ8NeOecbYc07P7Q.png&width=768&dpr=3&quality=100&sign=ab8b9ca7&sv=2) From here, I have explained mostly mechanisms you may already know from Scrum (iterations, planning, …) but Xanpan is also a **Kanban-style flow**: * It allows both planned and unplanned work * Work can flow from iteration to iteration The Work can flow because we really want Blue cards to bring value. Often **by splitting too much them to make them pass in a single iteration we do not produce any value.** The idea is to keep them big enough to truly bring value. ### What about commitment?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#ba4a) > Teams are encouraged to try and do more work than they expect to do. Everyone needs to accept that not all work taken into the iteration will get done. Statements about what will be delivered at the end of the iteration are statements of probability. ### Team centric[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-4683) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MB-1loi1YULvu0X1y-7%252F-MB-4kdiDq8FE-I6SN54%252Fimage.png%3Falt%3Dmedia%26token%3Db7e57a84-a0ec-4f9c-9db3-9482985fcc77&width=768&dpr=3&quality=100&sign=3bd51ae7&sv=2) In Xanpan, we admit than a team can work on multiple work streams at a time it is more realistic don’t you think? ### Visualise[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#cfca) To organize our work in Xanpan we use a big board that represent the state of the team, not the state of a particular project or product. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MB-1loi1YULvu0X1y-7%252F-MB-4qvShDqgw8hXJmas%252Fimage.png%3Falt%3Dmedia%26token%3D58fa1cd0-fcfd-492b-b4e7-c079585d9bc2&width=768&dpr=3&quality=100&sign=3df90513&sv=2) * Planned: stock of cards for the current iteration * Unplanned: stock of unplanned work * Priority: work for today. Defined the morning of the day during the stand-up. * Work in progress * Test: cards under test * Done: work has been done & respect the Definition of Done ### Unplanned work[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-6104) Unplanned work does not mean there is no value to do it. That’s why the unplanned work is stocked on the board and will be prioritized by BA or Product manager a few minutes before the stand-ups. What about technical practices?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#cc4f) ----------------------------------------------------------------------------------------------------------------------------------------------- For Allan Kelly teams that deliver software should really embrace XP practices. It enables to inject quality for free. If we try to define what is a successful software it’s the one that needs rework because we will want to: add new features, change existing features, extend it, … **Successful software lives and needs to change over time**. If software is not changeable, then it cannot change as it needs to during its lifetime, and it will be hard to remove any defects that are found. Rework is really part of the lifecycle of a successful software. _**The question is how easy is the rework?**_ _Low quality makes rework harder, and therefore slower. High quality makes rework easier, and therefore faster._ ### How to define quality of a software product?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#f52a) * Measure defects: quality is inversely proportional to the number of defects seen in a system * Measure the maintainability: software needs to be easy to change so measure cost of changes and its evolution in time. ### Practices[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-4fdb) To inject quality in, Allan recommends those technical practices: ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2698%2F1*yz5MyV_gd5g4IRHCI8iFYQ.png&width=768&dpr=3&quality=100&sign=a57699c5&sv=2) It is not an exhaustive list and every developers should complete it with all the practices that make sense in their own context. Me I would add others like Domain Driven Design, Mob Programming, Property-based Testing, Event Storming. Experiment[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#f733) -------------------------------------------------------------------------------------------------------------------------- Xanpan is a hybrid method built from pieces of other Agile processes and elsewhere. Do the same and create your own “xanpan”. > **“Create your own process, don’t follow someone else’s prescription.” — Allan Kelly** Just do it: action over words[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#e2eb) --------------------------------------------------------------------------------------------------------------------------------------------- * Identify a practice, tool, technique, whatever from somewhere else * Decide what it would mean to your team: what would you do differently * Set a time frame * Make the change * At the end of the frame: check * Decide to keep or drop You can use the [Agile Pick’mix](https://blog.nimbleapproach.com/agile-pick-n-mix/) to find inspiration for experiments. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2698%2F1*0ct99tsif1KxwwGY_p3Tew.png&width=768&dpr=3&quality=100&sign=3a51533e&sv=2) Wrap up[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-208a) -------------------------------------------------------------------------------------------------------------------------- Xanpan is not a prescription. _"Xanpan is the kind of stuff that should emerge from every agile teams when not constrained by some “agile” dogms." -_ Yoan Thirion To go further[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#to-go-further) -------------------------------------------------------------------------------------------------------------------------------------- * Buy the book from Allan Kelly here : [https://www.amazon.fr/Xanpan-Centric-Agile-Software-Development/dp/1291852735](https://www.amazon.fr/Xanpan-Centric-Agile-Software-Development/dp/1291852735) * Agnostic agile : [https://agnosticagile.org/](https://agnosticagile.org/) * Heart of agile : [https://heartofagile.com/](https://heartofagile.com/) * Discover slides of my talk about it here : * Here is the video of my talk about Xanpan @AgileEnLigne : [PreviousTechnical Agile Coaching with the Samman Method](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/technical-agile-coaching-with-the-samman-method) [NextXTREM WATCH — Découvrez la puissance de la veille collective](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective) Last updated 6 years ago * [What is it?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-182f) * [Work in iterations](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-57a8) * [Why use iterations?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-9231) * [Planning](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-9a5d) * [3 roles](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-9708) * [Planning artefacts](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#ddf1) * [Planning meeting](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-7677) * [Retrospective](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-5542) * [Work in routine](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-23ce) * [Plan beyond the iteration](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-5b30) * [Where is the Kanban part in it?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-8603) * [What about commitment?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#ba4a) * [Team centric](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-4683) * [Visualise](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#cfca) * [Unplanned work](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-6104) * [What about technical practices?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#cc4f) * [How to define quality of a software product?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#f52a) * [Practices](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-4fdb) * [Experiment](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#f733) * [Just do it: action over words](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#e2eb) * [Wrap up](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#id-208a) * [To go further](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xanpan-a-team-centric-agile-method-story#to-go-further) --- # Improve the design and testing of your micro-services through CDC Tests | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests.md) . Why should you read this article ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#why-should-you-read-this-article) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- If you develop or maintain micro-services you already asked yourself those questions : * How do we deal with testing? * How do we confirm all services are working well together ? ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F54%2F0*KOZHZDlUYxMYHWZv%3Fq%3D20&width=768&dpr=3&quality=100&sign=a1b4e705&sv=2) CDC is an answer to those questions. > Let’s discover what is behind, let’s go to the upside-down !!! How can we test this simple integration ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#id-5ed3) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZEcURTf5d0VYt-mSr%252F-MBZEn4pbk1YSovUmhuI%252Fimage.png%3Falt%3Dmedia%26token%3Dd36f3b8a-52be-44ad-9fb1-dcfcedcd49da&width=768&dpr=3&quality=100&sign=e815485d&sv=2) ### Mocking[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#mocking) We can use a mock of the API to design our client integrations. With mocks, we do not need to set up a whole runtime environment. We can run isolated tests between the client and a mock of the API. #### Limits of mocking[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#limits-of-mocking) * What happens if there is **a change in the real producer** ? * _The system could perfectly run on a “test” environment could not be integrated in the real world._ * The owner of the mock is the consumer * _As a consumer I can not be sure that the API has not been changed by the API’s provider, so I am not able to adapt the mock accordingly._ * **Not trustworthy** * _How can we be sure that the mocks are valid ?_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZEcURTf5d0VYt-mSr%252F-MBZF7n322FtjQgk56kB%252Fimage.png%3Falt%3Dmedia%26token%3Dfc600c18-7cc3-451c-921d-3e1787dfa8ac&width=768&dpr=3&quality=100&sign=9b33e288&sv=2) End to end testing[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#b441) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ To test interfaces between a client and an API the most used technique is end-to-end testing. In end-to-end tests (E2E tests), real servers or containers are set up so that client and provider are available in a production-like runtime environment. To execute integration tests, the client is usually triggered by providing certain input in the user interface. The consumer then calls the provider and the test asserts if the results meet the expectations defined in the contract. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F2768%2F1*U_HaKuXIkCSutC5Yevc1mQ.png&width=768&dpr=3&quality=100&sign=7cbdba7f&sv=2) ### Limits of E2E testing[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#id-9a3f) * Slow * _The feedback loop of E2E testing is really long (setup takes a while and the tests run as well)._ * All services need to be **up before running the tests** * _This kind of tests requires a clean/dedicated integration environment. It’s really hard to get one in a lot of organizations at the moment._ Consumer-Driven Contract approach as an alternative[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#bcb5) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZEcURTf5d0VYt-mSr%252F-MBZFZ3FDk29zTy9F6Fp%252Fimage.png%3Falt%3Dmedia%26token%3De8df5d73-bde1-4377-8b22-6e63ee27984f&width=768&dpr=3&quality=100&sign=26a961a9&sv=2) If we take a look at the definition of an integration test : _“An integration test is a test between an_ _**API provider**_ _and an_ _**API consumer**_ _that asserts that the_ _**provider returns expected responses**_ _for a set of pre-defined requests by the consumer._ _**The set of pre-defined requests and expected responses is called a contract**__.”_ This is the main focus of the approach : _**CONTRACTS**_. The whole idea behind CDC is to involve consumers of the future API in the creation of the API itself. API changes will be driven by consumers. ### Glossary[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#id-2767) * **Producer :** Service that exposes an API. * **Consumer :** Service that consumes the API of the producer. * **Contract :** Agreement between producer and consumer on how the API will look like. * **Consumer Driven Contracts :** Approach where the consumer drives the changes of the API of the producer. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZFmmbx2AucqzzKbYk%252F-MBZFsjZe1Hvo73ExqLr%252Fimage.png%3Falt%3Dmedia%26token%3D62269b3b-f5d4-4935-aa14-ea15562e9117&width=768&dpr=3&quality=100&sign=8dec71e9&sv=2) \` ### How does it work ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#id-1dc8) * Define API contract on the _**consumer side**_. * _Write Unit tests that define clearly what are the interactions and behaviors expected from the provider._ * Enforce the contract on the _service_ _**provider side**_. * _Unit tests on the provider side ensure that the provider implementation respect the expectations (contract) defined by the consumer._ Benefits of CDC[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#id-8f60) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ CDC makes your life easier : * Make integrating and testing a service in a microservice world easier * Drive the providers implementation through the contract * Start by enforcing the contract without the API, then design the API accordingly : you will write less code and avoid extra features. * Help providers make changes without being scared of accidentally breaking their consumers * Let consumer know that the APIs they consume won’t suddenly break * Allows consumers to develop against API definitions before the provider API has actually been developed : **Design first approach** [PreviousClean Tests](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/clean-tests) [NextCDC testing made simple with Pact](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact) Last updated 6 years ago * [Why should you read this article ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#why-should-you-read-this-article) * [How can we test this simple integration ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#id-5ed3) * [Mocking](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#mocking) * [End to end testing](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#b441) * [Limits of E2E testing](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#id-9a3f) * [Consumer-Driven Contract approach as an alternative](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#bcb5) * [Glossary](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#id-2767) * [How does it work ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#id-1dc8) * [Benefits of CDC](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests#id-8f60) --- # Retrospectives | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives.md) . **5 steps**[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives#id-5-steps) ------------------------------------------------------------------------------------------------------- * **Set the stage** : Regardless of what we discover, we understand that everyone did the best job he or she could * **Gather data** : What went well and what did not. * **Generate insights** : Teams typically identify why things happened and what should be done more, done less and tried out. * **Decide what to do** : Deciding on specific, meaningful, agreed and realistic actions that will be done in the next Sprint * **Close the retrospective** : R.O.T.I Anti patterns[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives#anti-patterns) ------------------------------------------------------------------------------------------------------------ * What happens in retro, does not stay in retro * The retrospective is a safe place : communicates only the taken actions * Change the world * Small changes : do not try to change everything at once * No time to improve * Improvement is part of the life of any team * Time needs to be taken * No responsibility is taken (The scrum master will do it) * Team responsibility (Not a 1 person job) * Wishful thinking actions * Concrete actions, [SMART](https://en.wikipedia.org/wiki/SMART_criteria) actions * Managers want to attend * It is not good : safe place (silence law with managers) * One man show * Everyone has the right/duty to speak * Scrum Master has to make this happen * No review of past action items * Every actions must be followed ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzo-WaIozgsYRGpg6l%252F-MAzolEur22cF_qIRcgm%252Fimage.png%3Falt%3Dmedia%26token%3Db795a69f-bf7c-41da-902d-ed9e9d8ada9f&width=768&dpr=3&quality=100&sign=cd7b9f17&sv=2) Resources[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives#resources) ---------------------------------------------------------------------------------------------------- * [https://retromat.org/](https://retromat.org/) * Retromat megaboard : [https://miro.com/app/board/uXjVP0VHhWo=/?share\_link\_id=115797241698](https://miro.com/app/board/uXjVP0VHhWo=/?share_link_id=115797241698) * [https://blog.myagilepartner.fr/index.php/retrospective/](https://blog.myagilepartner.fr/index.php/retrospective/) * [https://coach-agile.com/](https://coach-agile.com/) * Agile Burger Quiz : [https://coach-agile.com/2019/08/serious-game-agile-bubur-quiz/](https://coach-agile.com/2019/08/serious-game-agile-bubur-quiz/) * Agile Code Smells : [https://coach-agile.com/2019/06/agile-bashing-serious-game-agile-smells/](https://coach-agile.com/2019/06/agile-bashing-serious-game-agile-smells/) * Event Storming Retrospective : [https://medium.com/nick-tune-tech-strategy-blog/remote-team-flow-eventstorming-for-retrospectives-a8ea33cdb277](https://medium.com/nick-tune-tech-strategy-blog/remote-team-flow-eventstorming-for-retrospectives-a8ea33cdb277) * Great videos about agile anti-patterns here : [PreviousLearning 3.0](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0) [NextBack to the Future](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future) Last updated 2 years ago * [5 steps](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives#id-5-steps) * [Anti patterns](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives#anti-patterns) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives#resources) --- # How to run a Community of Practices (COP) | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop.md) . Community of Practices[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#community-of-practices) ------------------------------------------------------------------------------------------------------------------------------------------------------- ### What is it ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#what-is-it) A group of people who share a concern or a passion for something they do and learn how to do it better as they _**interact regularly**_. ### Its purpose[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#its-purpose) * Connect people / break silos * Consolidate the collective knowledge * Improve quality * Spread knowledge * Standardize practices in the organization * Share practices * Build new skills / learn together * Build a learning organization * Solve problems by using the collective intelligence ### Who ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#who) * 1 leader / facilitator * Keep it alive * Organize the events * Motivate people * 1 core of people / Volunteers * To participate and contribute In fact in Community of Practice you can observe 3 types of participants : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLSbG6GtDaCRZQugddn%252F-MLSblNFScXO_l-8K4pQ%252Fimage.png%3Falt%3Dmedia%26token%3D06fadeab-bf8f-493c-93bb-d51da1efbc89&width=768&dpr=3&quality=100&sign=785af178&sv=2) src : https://www.lemonade.com/blog/psychology-givers-takers-matchers-2/ * _**Takers**_ : self-focused and put their own interests ahead of others’ needs. They try to gain as much as possible from their interactions while contributing as little as they can in return. * _**Matchers**_ : like to preserve an equal balance of giving and taking. * Their mindset is: “If you take from me, I’ll take from you. If you give to me, I’ll give to you.” * _**Givers**_ : are others-focused, and tend to provide support to others with no strings attached. * They ask themselves, “How can I add value for this person? What can I contribute?” ### Communication is key[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#communication-is-key) * Create the buzz around you community * Make it viral * Choose the right channels * Be consistent in your communications * Brand it internally ### Examples of Events of a COP[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#examples-of-events-of-a-cop) * Organize [Brown Bag sessions](https://www.dlgdigital.co.uk/news/what-is-a-brown-bag-session) * 1 speaker on a dedicated topic * Spread/Share knowledge * [Lightning taks](https://en.wikipedia.org/wiki/Lightning_talk) * Everyone can share a few minutes on 1 topic * [Lean coffees](https://agilecoffee.com/leancoffee/) * Solve problems by using Collective Intelligence * Xtrems format : learn collaboratively ### How[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#how) There are some key steps when introducing a COP. This kind of initiative can be associate to a change process : * Define the goals of the community * Do it collaboratively with those who see the needs to create one * Sell the idea internally * Find sponsors * Initiate a backlog * Kick-off the community * Run your first events * Introduce Continuous Improvement process * Gather feedback regularly * Organize retrospective * Check regularly if you meet the goals you defined [Xtrem Reading](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading) [XTREM WATCH — Découvrez la puissance de la veille collective](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/xtrem-watch-decouvrez-la-puissance-de-la-veille-collective) How to bootstrap yours ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#how-to-bootstrap-yours) --------------------------------------------------------------------------------------------------------------------------------------------------------- Here is the facilitation format I use to help organizations bootstrap their own COP. During a 2 hours workshop you can invite motivated people on the topic you want to create a COP about (examples : software development, UX, Agile, Analysts, Project Managers, ...). The goal of the workshop : _**Co-construct a first version of a community vision.**_ I use a divergent / convergent format with individual / collective reflection times. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLSvsTC1Axj5J_XTZFU%252F-MLSwAPCW1wNj98Dgwv4%252Fimage.png%3Falt%3Dmedia%26token%3De9d70cdd-4d8f-41a7-87b4-bea82fa94f17&width=768&dpr=3&quality=100&sign=c10e967&sv=2) ### 1) Vision / Importance[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#id-1-vision-importance) You need to be sure that everyone agrees and is aligned on the Vision and why the community is important at this stage. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLSvsTC1Axj5J_XTZFU%252F-MLSwTFd8bqoNXbDmUcW%252Fimage.png%3Falt%3Dmedia%26token%3D9a2cca65-cf44-4c51-8476-3e8b43629f5a&width=768&dpr=3&quality=100&sign=b6589eac&sv=2) ### 2) How / Measures[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#id-2-how-measures) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLSvsTC1Axj5J_XTZFU%252F-MLSxGIL-KbaRFhxoWK8%252Fimage.png%3Falt%3Dmedia%26token%3D9c54a7f2-c760-4fee-a27a-1d9c1aef1ca5&width=768&dpr=3&quality=100&sign=fcd7016e&sv=2) ### 3) Impact (on what / who)[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#id-3-impact-on-what-who) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLSvsTC1Axj5J_XTZFU%252F-MLSxKruP_6wpn6vYbmo%252Fimage.png%3Falt%3Dmedia%26token%3Dce6497ad-d20f-437c-9eb4-187e3c7af041&width=768&dpr=3&quality=100&sign=817137f9&sv=2) ### 4) Resources[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#id-4-resources) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLSvsTC1Axj5J_XTZFU%252F-MLSxU4w3KdTxZEvwOVc%252Fimage.png%3Falt%3Dmedia%26token%3Db16927c4-2744-48c7-9179-333d0af18ef7&width=768&dpr=3&quality=100&sign=f60a809e&sv=2) ### 5) Force Field Analysis (Optional)[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#id-5-force-field-analysis-optional) Anticipate what could support the Community Vision and what could slow it down. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLSxdrhxU9x48yiStsB%252F-MLSydIRRvUWX-RxZcSe%252Fimage.png%3Falt%3Dmedia%26token%3D7ec5e03b-3727-44da-ac44-1635cf71195e&width=768&dpr=3&quality=100&sign=54916b7d&sv=2) ### 6) Choose a name[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#id-6-choose-a-name) Naming is always important so choose it all together as well. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLSz-aSlwHPAefKgUtH%252F-MLSz0fNfraHSnz0bm8f%252Fimage.png%3Falt%3Dmedia%26token%3D2209478a-3495-4d39-835e-6bbe1cf7a393&width=768&dpr=3&quality=100&sign=f39e0d24&sv=2) `At this moment you can also elect a leader for the Community.` ### COP Canva[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#cop-canva) You can then format the outcome of the workshop into a Canva that you can display everywhere like the one below : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLT2PdrmUnrn0WcEvJf%252F-MLT2RgzJ4h1DDcJ8DRO%252Fimage.png%3Falt%3Dmedia%26token%3D11791b77-34f7-466b-b678-b4a34e732862&width=768&dpr=3&quality=100&sign=68ef64e3&sv=2) Craft cop vision Success criteria[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#success-criteria) ------------------------------------------------------------------------------------------------------------------------------------------- From my experience here are some key success criteria for your COPs : * _**Co-construction**_ is key * Involve people from the beginning (Vision) * Collaboratively refine your backlog * Have _**1 and only 1 leader**_ * I have already seen COPs with several leaders * On the paper I like the idea : no Single Point Of Failure, load is split * But I have never seen it worked so I prefer to recommend to have only 1 leader * A leader with _**dedicated time**_ on it * Lead / facilitate a COP takes time * It must not be a Nice To Have activity * Must be part of the person's job * Leader needs to _**be coached**_ at the beginning * Often on the skills * How to federate and involve people * _**Transparency**_ everywhere on everything * Every events should be public * Measures of the progress as well * Keep a log of everything * Publish event minutes and contents on a dedicated platform (Slack, Wiki, ...) * Have a _**strong sponsorship**_ * From the management * Gather resources * Not a nice to have activity for people * Need to be convinced that it's a way to evolve as an organization * _**Use different event(s) format(s)**_ * Vary the pleasures * _**Autonomy**_ * Autonomy means clear responsibility as well * Have a clear boundary on what can be done within the COP / clear vision * Examples : create standards for programming in the organization * _**Involve people**_ * Create a safe place for people (without judgement) * The key to involve them * `_**No need to be an expert to share. It's by sharing that you will become an expert.**_` * _**Reflect**_ regularly on the community * Do it with a survey (self assessment) based on the outcomes expected from the Vision * Organize retrospectives * You can use the self assessment questions below (I recommend to adapt them regarding your own COP vision) ### Community Health check[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#community-health-check) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MSD06gIjUSbwchmAZlj%252F-MSD0HtwP4l9iG8KGSBa%252Fimage.png%3Falt%3Dmedia%26token%3Da367e4b3-5f25-4ee3-9bea-c48569e460b4&width=768&dpr=3&quality=100&sign=a81bed9c&sv=2) [cop-health-check.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MSD06gIjUSbwchmAZlj%2F-MSD0kDhnuOlG6xF5iDx%2Fcop-health-check.pdf?alt=media&token=f82ac3cb-c627-4d67-9ae9-4842bf3bb638) PDF · 1MB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MSD06gIjUSbwchmAZlj%2F-MSD0kDhnuOlG6xF5iDx%2Fcop-health-check.pdf?alt=media&token=f82ac3cb-c627-4d67-9ae9-4842bf3bb638) Download the cards Infographic[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#infographic) --------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLSYYX1xyhbrmpOMf13%252F-MLSYxH8UOwj_wQN0tIp%252Fimage.png%3Falt%3Dmedia%26token%3Daf8293d7-0cd0-4bde-94af-137817049cb5&width=768&dpr=3&quality=100&sign=7c4abd4c&sv=2) Resources[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#resources) ----------------------------------------------------------------------------------------------------------------------------- * [Building Successful Communities of Practice](https://www.amazon.fr/Building-Successful-Communities-Practice-Webber/dp/095749193X) by [Emily Webber](https://www.amazon.fr/Emily-Webber/e/B01BZI7GRU/ref=dp_byline_cont_book_1) * [Fais survivre ta communauté dans un monde hostile](https://youtu.be/0bxw3mgmSXE) * [Self evaluation tools by Jimmy Janlen](https://blog.crisp.se/2019/03/11/jimmyjanlen/health-checks-for-teams-and-leadership) * [Lean Change Management - Jason Little](https://leanchange.org/) * [Community Canvas](https://community-canvas.org/) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MX_Zm4z0kVM-owV2sPD%252F-MX_Zw_2_uHK-_5dRrki%252Fimage.png%3Falt%3Dmedia%26token%3Db632a7ee-e72c-49aa-b43d-ec3448ddff6b&width=768&dpr=3&quality=100&sign=a07d83&sv=2) [PreviousAgile coaching](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching) [NextThe developers — the forgotten of agility](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/the-developers-the-forgotten-of-agility) Last updated 5 years ago * [Community of Practices](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#community-of-practices) * [What is it ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#what-is-it) * [Its purpose](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#its-purpose) * [Who ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#who) * [Communication is key](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#communication-is-key) * [Examples of Events of a COP](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#examples-of-events-of-a-cop) * [How](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#how) * [How to bootstrap yours ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#how-to-bootstrap-yours) * [1) Vision / Importance](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#id-1-vision-importance) * [2) How / Measures](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#id-2-how-measures) * [3) Impact (on what / who)](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#id-3-impact-on-what-who) * [4) Resources](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#id-4-resources) * [5) Force Field Analysis (Optional)](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#id-5-force-field-analysis-optional) * [6) Choose a name](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#id-6-choose-a-name) * [COP Canva](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#cop-canva) * [Success criteria](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#success-criteria) * [Community Health check](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#community-health-check) * [Infographic](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#infographic) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop#resources) --- # Technical debt workshop | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop.md) . This workshop is a 2 hours workshop you can run in your team during a retrospective or ad-hoc to align on this concept. This workshop is designed to be accessible to technical and non technical people as well Here is the facilitation support : Connection : 3 words[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#connection-3-words) ----------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAl9f6L7wEXIp60ks3O%252F-MAlAb-X0Rrw37r34yK2%252Fimage.png%3Falt%3Dmedia%26token%3D9b6a7723-7032-4292-bc1c-d97f74c33db5&width=768&dpr=3&quality=100&sign=e0caba4&sv=2) Ask to the participants : 1. In solo : Write down three words that you associate to the expression "Technical debt" 2. In pair : * Share your thoughts * Agree on a definition 3. All together : * Share your thoughts * Agree on a definition Concepts[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#concepts) ------------------------------------------------------------------------------------------------------------------- ### What is Technical debt ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#what-is-technical-debt) > “Some problems with code are like financial debt. It's OK to borrow against the future, as long as you pay it off.” - Ward Cunningham Technical debt describes what results when development teams take actions to expedite the delivery of a piece of functionality or a project which later needs to be refactored. In other words, it’s the result of prioritizing speedy delivery over perfect code. #### Difference between Bad code & Technical debt[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#difference-between-bad-code-and-technical-debt) _"Just because some code is bad doesn't mean it's technical debt. It's not technical debt unless we have to pay interest on it, and interest rate is a function of time" - Adam Tornhill in_ _**Software Design X-Rays**_ ### Symptoms[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#symptoms) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAlCKgsVA2BYWum5I-i%252F-MAlCOh0uKmAyEZw3aLh%252Fimage.png%3Falt%3Dmedia%26token%3D54fc62d1-3954-40a6-9a08-31eb98a9d6cb&width=768&dpr=3&quality=100&sign=94606c13&sv=2) * Accumulate bugs * Add a new functionality will cost a lot of money : reduced velocity ### How do we create this debt ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#how-do-we-create-this-debt) #### "We don’t have time!"[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#we-dont-have-time) One thing we hear the most in teams is the lack of time as an explanation of technical debt creation : * “No time to rethink the design of this class, just keep adding new stuff to it!” * “I didn’t have time to write the unit tests” * No time to think about how someone else will fix or extend the code * … #### Other causes[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#other-causes) * **Poor Conception** : No time for architecture and design. * **Poor Business understanding** : It is impossible to design something you do not understand... * **Poor Scheduling / Underestimating** : No testing effort in estimations. * **Bad Development Practices** : Development team needs to have a set of practices and conventions so that there is a little or no significant difference in design and implementation from feature to feature. * **Outdated Technology** : As technology evolves, software standards become higher every day : No technology watch, innovation time * **No team rules / conventions** * Only Michel knows this piece of code, no one else can update it (SPOF * … The technical debt creation can be deliberate or inadvertent. That's what Martin Fowler explains with the Technical Debt Quadrant : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAlCKgsVA2BYWum5I-i%252F-MAlE5YzpgRJW1N4KDSh%252Fimage.png%3Falt%3Dmedia%26token%3D5834cdaa-855b-4bfb-8d00-4f7882ae2d41&width=768&dpr=3&quality=100&sign=da00077&sv=2) Read more about it here : [https://martinfowler.com/bliki/TechnicalDebtQuadrant.html](https://martinfowler.com/bliki/TechnicalDebtQuadrant.html) ### Some examples of technical debt[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#some-examples-of-technical-debt) * **Source Code Formatting** * **Bad naming** : Source code is not understandable by anyone. * **Low/No Test Coverage** : Tests ensure that each part of the code is behaving the intended way. * **Code duplication** * **Lack of Modularity** : Some code sometimes serves different business logic. The more codes developers write, the more lack of modularity can bottleneck. * **Code Complexity** : Complexity can be measured in several different ways, but it measures the dependence and path length to perform an operation. A long path leads to complex code. * **No automation** : Deployments and tests are done manually. Concrete practice : Dice of debt[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#concrete-practice-dice-of-debt) ----------------------------------------------------------------------------------------------------------------------------------------------------------------- Dice of debt is a serious game that demonstrates the importance of managing technical debt. It has been documented on the agile alliance website here : [https://www.agilealliance.org/dice-of-debt-game/](https://www.agilealliance.org/dice-of-debt-game/) ### How to play ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#how-to-play) #### Material[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#material) Everything is available here : [https://www.agilealliance.org/wp-content/uploads/2016/04/Dice-of-Debt-materials-AA-v2.pdf](https://www.agilealliance.org/wp-content/uploads/2016/04/Dice-of-Debt-materials-AA-v2.pdf) #### Context[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#context) * You are a scrum team that rocks. * Your mission : create the highest amount of new software value by the end of the project. * You have a strong dead line : 10 sprints of 2 weeks. Technical debt can reduce that value dramatically. #### Rules[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#rules) * Sprint = 1 turn * You have a finite capacity in each sprint represented by **12 dice** * 8 dice to create new value (NV) * 4 dice for technical debt creation (TD) You must run the technical debt dice at each turn. #### Technical debt reduction measures[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#technical-debt-reduction-measures) You can lower the burden of technical debt during the game by investing in some reducing tech debt measure : * Continuous integration (CI) * Test-driven development (TDD) * Code review * Increase test coverage Cost Benefits Each investment in a TD-reducing measure reduces your NV dice for a few turns. Get the associated effect #### Scoring sheet[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#scoring-sheet) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAlGpFgUKV2eaDJRasi%252F-MAlHCGKEmX0VMxT_7La%252Fimage.png%3Falt%3Dmedia%26token%3Dfc4af83d-053b-452f-89fd-28f8368a38c1&width=768&dpr=3&quality=100&sign=7f055577&sv=2) #### Tracking sheet[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#tracking-sheet) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAlGpFgUKV2eaDJRasi%252F-MAlI7Qu7E1GjCItRl0c%252Fimage.png%3Falt%3Dmedia%26token%3Da90d8ef8-daf0-44d8-8279-2855c5ac2903&width=768&dpr=3&quality=100&sign=e2f4d049&sv=2) #### How to play ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#how-to-play-1) At each turn (x 10) , each team must : * Choose a strategy (use the investment effort or no) * Roll the NV dice * Roll the TD dice * Update the score sheet * Update the tracking sheet * Small retrospective * What do we need to adapt ? Conclusion[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#conclusion) ----------------------------------------------------------------------------------------------------------------------- ### Debrief the game with the participants[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#debrief-the-game-with-the-participants) [How to debrief a game ?](https://yoan-thirion.gitbook.io/knowledge-base/serious-games/how-to-debrief-a-game) ### Explain what the trends are indicating[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#explain-what-the-trends-are-indicating) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAlIDhb0n1bXoGQRTV-%252F-MAlIwdbkC56y8Xt-dTK%252Fimage.png%3Falt%3Dmedia%26token%3D63532b87-0c95-4407-9c94-f8ba6a6ade45&width=768&dpr=3&quality=100&sign=86d18dd7&sv=2) ### You will always face some Technical Debt[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#you-will-always-face-some-technical-debt) * Some amount is to be expected (Unintentional) * The amount of technical debt will never be zero BUT it has to be **manageable**. We must build quality in by using great development practices ### How to manage it ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#how-to-manage-it) Ask questions to the participants / small technical retrospective : * Which examples of technical debt do you identify i our code base ? * How do you materialize it in the backlog ? * How can we improve the management of the technical debt ? * How could we reduce it ? * A concrete action that we could implement tomorrow #### Measure things[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#measure-things) We can easily measure things that can help us quantify our technical debt : * **Functionalities** : Measure the performance of the system for each period of time (iterations) by measuring the number of functionalities (User stories) done / delivered. * **Bugs** : Number of "stuff" to fix in the code : bugs, fixes. * **Technical debt** : Number of refactoring or technical improvements identified by the team. * The definition of this measure can differ from one team to another and it’s fine. The only things is that this definition must be constant for the team. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAlJqoaBOoEW4SEXRFe%252F-MAlLRWMmdDLBZmjxhfn%252Fimage.png%3Falt%3Dmedia%26token%3D6171a16b-d1a8-4401-a030-6adc385537dd&width=768&dpr=3&quality=100&sign=6d6331f0&sv=2) #### Use static code analysis tool[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#use-static-code-analysis-tool) Tools like Sonar can give an idea on the health of your code base (some trends to follow). It calculates technical debt indicator : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAlM3hEx0J49uT_zDgR%252F-MAlMQfP0_BACJzL1BUu%252Fimage.png%3Falt%3Dmedia%26token%3D83053e14-7d5e-4771-a051-ce44fa177020&width=768&dpr=3&quality=100&sign=9acaef6e&sv=2) #### Make the debt visible[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#make-the-debt-visible) Create items in a backlog for everything that is identified and monitored by the team as a subject for refactoring or technical improvement. #### Invest[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#invest) Dedicate time to technical debt reduction and prevention. #### Technical retrospective : Focus on the technical/architectural improvement[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#technical-retrospective-focus-on-the-technical-architectural-improvement) **Objectives** : Find technical improvement actions / prioritize technical items. **Questions during those sessions** : * Where are the defects? * Where are the 'hard bits' ? What makes them hard ? * Where are the 'easy bits' ? What makes them easy ? * What keeps changing ? Why ? * Could we better quantify our technical debt ? * ... #### Apply the boy scout rule[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#apply-the-boy-scout-rule) _“Always leave the code you’re editing a little better than you found it.”_ - Uncle Bob ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAlM3hEx0J49uT_zDgR%252F-MAlN_eh_MJUyqj8zb3j%252Fimage.png%3Falt%3Dmedia%26token%3De3f544c5-c7eb-44dc-bec4-419eb68ad777&width=768&dpr=3&quality=100&sign=ae55bb52&sv=2) #### Use great development practices[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#use-great-development-practices) There are a lot of them in [XP](http://www.extremeprogramming.org/) _“I'm not a great programmer; I'm just a good programmer with great habits.”_ - Kent Beck Some of those practices : * Follow Clean Code rules * Test Driven Development * Static code analysis * Pair/Mob programming * Knowledge sharing * Code review * Mentoring * Coding style guides * ... To go further :[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#to-go-further) ------------------------------------------------------------------------------------------------------------------------------- * Communicate the Effects of Technical Improvements to Non-Technical Stakeholders : [https://codescene.com/blog/communicate-technical-improvements-to-non-technical-stakeholders/](https://codescene.com/blog/communicate-technical-improvements-to-non-technical-stakeholders/) * Culture code by Octo : [https://www.octo.com/publications/culture-code/](https://www.octo.com/publications/culture-code/) [PreviousEgoless Crafting](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/egoless-crafting) [NextFunctional Programming made easy in C# with Language-ext](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/functional-programming-made-easy-in-c-with-language-ext) Last updated 5 years ago * [Connection : 3 words](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#connection-3-words) * [Concepts](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#concepts) * [What is Technical debt ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#what-is-technical-debt) * [Symptoms](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#symptoms) * [How do we create this debt ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#how-do-we-create-this-debt) * [Some examples of technical debt](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#some-examples-of-technical-debt) * [Concrete practice : Dice of debt](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#concrete-practice-dice-of-debt) * [How to play ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#how-to-play) * [Conclusion](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#conclusion) * [Debrief the game with the participants](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#debrief-the-game-with-the-participants) * [Explain what the trends are indicating](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#explain-what-the-trends-are-indicating) * [You will always face some Technical Debt](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#you-will-always-face-some-technical-debt) * [How to manage it ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#how-to-manage-it) * [To go further :](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/technical-debt-workshop#to-go-further) --- # Story cubes | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes.md) . Material[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#material) -------------------------------------------------------------------------------------------------------------- ### Normal sets[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#normal-sets) * 9 cubes * 6 faces / 6 drawings * 10 077 969 possibilities ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FmdfTKpHYEcnKLdMFRKNu%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=89a7151c&sv=2) * Classics * Voyage * Action * Fantasia ### Extension sets[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#extension-sets) * 3 cubes * 6 faces / 6 drawings * 216 possibilities Retrospective techniques[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#retrospective-techniques) ---------------------------------------------------------------------------------------------------------------------------------------------- * Roll the dice, tell your story one after the other * Each one roll one die, build a shared story together * 1 person roll the dice, each one pick a drawing * A very [specific format](http://tastycupcakes.org/2016/08/story-cubes-retrospective/) on TastyCupCakes Questions you can ask[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#questions-you-can-ask) ---------------------------------------------------------------------------------------------------------------------------------------- * The last sprint was great/messy because… * A story about how our sprint was * A typical day for our team * What was our sprint planning like * The future of our team * Our last team building * Retro on the retro Mixing things up[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#mixing-things-up) ------------------------------------------------------------------------------------------------------------------------------ * Mixing different sets for more creative stories * Use different sets for different purpose * Gather data --> Classics * Decide what to do --> Action / Voyage * Combine Story Cubes with other techniques * LSP * Drawing * Retrospective cards * Method kits * … Your imagination is your limit… Advice[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#advice) ---------------------------------------------------------------------------------------------------------- * Don't abuse of them. Only use them for one part of your retro [PreviousStar wars theme](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme) [NextTechnical Agile Coaching with the Samman Method](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/technical-agile-coaching-with-the-samman-method) Last updated 6 years ago * [Material](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#material) * [Normal sets](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#normal-sets) * [Extension sets](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#extension-sets) * [Retrospective techniques](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#retrospective-techniques) * [Questions you can ask](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#questions-you-can-ask) * [Mixing things up](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#mixing-things-up) * [Advice](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes#advice) --- # Rétro dont vous êtes le héros | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros.md) . Set the stage[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#set-the-stage) ------------------------------------------------------------------------------------------------------------------------------------------ Votre équipe se retrouve projetée dans un univers post-apocalyptique peuplé de zombies. Votre but est de survivre… ensemble. Vous vous retrouvez au calme dans un bureau après avoir vaillamment survécu durant l’itération… ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FHjMDyvAom0LrR5t0dPoM%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=e0833caf&sv=2) * Quel est votre niveau d’énergie ? * Dessinez votre avatar et indiquez votre niveau de vie ! Le but de l’équipe est de revenir à un niveau de vie supérieur à 5… Nous allons partir en exploration pour ça ! Gather data[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#gather-data) -------------------------------------------------------------------------------------------------------------------------------------- Vous pénétrez alors dans… ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FzO6XwI2WHhhn2IqxuSBb%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=65edc719&sv=2) * Dans l’infirmerie, vous trouvez une trousse de soin. Quel était le « kit medical » qui vous a aidé dans l’itération ? * Vous voyez également une bouteille de poison. Quel était le poison qui vous a fait souffrir pendant l’itération ? * Un téléphone est posé là. S’il fonctionne, qui appelez-vous ? Pour demander quoi ? * Enfin, au fond de la salle, un corps… Est-ce un zombie ? Peut-être va-il se lever ! Quel risque identifiez-vous pour les prochaines itérations ? L’équipe réfléchit… et raconte l’histoire ! * Chacun colle ses post-its sur les différents "items" Generate insights[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#generate-insights) -------------------------------------------------------------------------------------------------------------------------------------------------- Vous vous déplacez dans la salle suivante… La bibliothèque ! ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FeeNVtt2hiRfEsmxs5Oy5%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=fdc24874&sv=2) * Sélectionnez les sujets que vous souhaitez creuser et sur lesquels vous voulez agir. * Dans quels rayons de la bibliothèque iriez-vous chercher de l’information ? * Technique ? * Processus ? * Communication ? * Autres ? L’équipe positionne les tickets importants, pose des questions, précise les problèmes…Un grand bruit se fait entendre dans le couloir ! Vous sortez en courant de la bibliothèque ! Decide what to do[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#decide-what-to-do) -------------------------------------------------------------------------------------------------------------------------------------------------- Des zombies cherchent à passer à travers une barricade de fortune ! Vous devez la consolider ! ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252F0Zm3iDdEmrIDOk8PNTRV%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=564647bf&sv=2) * Choisissez les actions d’amélioration (quoi, qui, quand) que vous souhaitez réaliser et posez-les sur la barricade ! * Les actions de l’itération précédente ont-elles fonctionné ? * La barricade est-elle suffisamment solide pour tenir une itération ? Que manque-t-il selon vous ? Le board d’amélioration continue de l’équipe peut alors être mis à jour. Close the retrospective[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#close-the-retrospective) -------------------------------------------------------------------------------------------------------------------------------------------------------------- * La rétrospective se termine, comment vous sentez-vous ? * Est-ce que votre niveau de vie a évolué ? * Vous pouvez positionner votre avatar en fonction du changement vécu. ### Feedback cubes :[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#feedback-cubes) Pour poursuivre l’aventure, votre équipe a besoin d’encouragements. Dites chacun une chose positive à propos de l’équipier de votre choix à l'aide des story cubes. [![OCTO \ BIBLIOTHtQUE \ TECHNIQUE \ OCTO \ BARRICADE \ OCTO ](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252F45zI8p70dBvK4KwLwcIR%252Ffile.png%3Falt%3Dmedia&width=300&dpr=3&quality=100&sign=88a39206&sv=2)](https://blog.octo.com/wp-content/uploads/2017/05/posters-retro-dont-vous-etes-le-heros.zip) Lien utile[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#lien-utile) ------------------------------------------------------------------------------------------------------------------------------------ Cette rétro vient de OCTO et est documentée ici : [https://blog.octo.com/la-retrospective-dont-vous-etes-le-heros](https://blog.octo.com/la-retrospective-dont-vous-etes-le-heros/) [](https://blog.octo.com/la-retrospective-dont-vous-etes-le-heros/) [PreviousMovie themes](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/movie-themes) [NextSad/Mad/Glad](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/sad-mad-glad) Last updated 6 years ago * [Set the stage](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#set-the-stage) * [Gather data](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#gather-data) * [Generate insights](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#generate-insights) * [Decide what to do](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#decide-what-to-do) * [Close the retrospective](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#close-the-retrospective) * [Feedback cubes :](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#feedback-cubes) * [Lien utile](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros#lien-utile) --- # Movie themes | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/movie-themes.md) . Alien[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/movie-themes#alien) --------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBc-pxHd0VB9iJq7LTw%252F-MBc0Fr0fk2Txyc-o9c2%252Fimage.png%3Falt%3Dmedia%26token%3Df2e29275-cdca-4821-b25a-a4a22e08722b&width=768&dpr=3&quality=100&sign=f82c60b4&sv=2) [https://blog.engineering.publicissapient.fr/2019/11/12/alien-la-8eme-retrospective/blog.engineering.publicissapient.fr](https://blog.engineering.publicissapient.fr/2019/11/12/alien-la-8eme-retrospective/) Jurrassic Park[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/movie-themes#jurrassic-park) --------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBc-pxHd0VB9iJq7LTw%252F-MBc0SCcBj_hphrbu63f%252Fimage.png%3Falt%3Dmedia%26token%3D116a1299-7863-478e-b247-96fee0ee03f6&width=768&dpr=3&quality=100&sign=3e304bd4&sv=2) [https://blog.engineering.publicissapient.fr/2019/10/28/38316/blog.engineering.publicissapient.fr](https://blog.engineering.publicissapient.fr/2019/10/28/38316/) Gladiator[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/movie-themes#gladiator) ----------------------------------------------------------------------------------------------------------------- [https://blog.myagilepartner.fr/index.php/2018/06/17/retrospective-3-gladiator/blog.myagilepartner.fr](https://blog.myagilepartner.fr/index.php/2018/06/17/retrospective-3-gladiator/) [PreviousMission Impossible](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible) [NextRétro dont vous êtes le héros](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/retro-dont-vous-etes-le-heros) Last updated 6 years ago * [Alien](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/movie-themes#alien) * [Jurrassic Park](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/movie-themes#jurrassic-park) * [Gladiator](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/movie-themes#gladiator) --- # Code Review | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review.md) . Connection - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#connection-10) ------------------------------------------------------------------------------------------------------------------------------ * Describe what are your objectives when you review peer’s code ? * How do you do it ? * Share in pair Concepts - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#concepts-10) -------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRkKgkxM_PaW5kc4BQ-%252F-MRkKkzzgwUpde5fylBh%252Fimage.png%3Falt%3Dmedia%26token%3Dd11b0080-a2ca-40d7-9cd0-174ad7e6c680&width=768&dpr=3&quality=100&sign=107d9e11&sv=2) ### How to do it ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#how-to-do-it) * Don't review anything that we can automate * Spell check * Code beautifier * Small batches * No more than 200 to 400 lines of code (LOC) at a time * Brain cannot process and detect errors if too much data * At least two developers sitting together * Junior Dev should pair with a more experienced one * Whole team when the feature is risky or complex ### Who ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#who) * Everyone code can be reviewed * Any Dev can review * The code of the most senior is also reviewed * The reviewer * should be : * Humble * Give feedback * Don’t blame * Need to get knowledge of the functional analysis * Checkout the code on his/her workstation and run it ### When ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#when) * Could be on-demand * Or, if the CI quality gate not passed * And anyway, before a story can be considered “Done” ### Why ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#why) * Better code * Ensure code meets standards * Find bugs * Ensure code does what it’s supposed to * Check code is understandable * Share Knowledge * Spread code Ownership * No better way to learn the right practices and promote the company’s code guidelines and requirements * Collaborate on Design * Improve communication inside the team * Every team members talk to each others * Foster companionship and improve team cohesion * Motivate to progress * If you keep in mind that your code will be reviewed by some colleagues, you will put more care into it * You will take the time to properly : * Name identifiers * Write tests * Introduce well-fitted abstractions * Use carefully the enterprise wide patterns ### Different Workflows[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#different-workflows) #### [Gateway review](https://blog.jetbrains.com/upsource/2017/01/18/code-review-as-a-gateway/) [](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#gateway-review) A developer : * Picks up or is assigned a task * Implements the code to the best of his/her ability * Submits it for review The reviewer checks the code and, if everything is OK : the code is merged into the main development branch. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRkNUyurXnOV6iL0jc3%252F-MRkNV1kZ_ri5_VIG--a%252Fimage.png%3Falt%3Dmedia%26token%3D08b19762-2e9b-436e-8d15-bf2f0f5bd070&width=768&dpr=3&quality=100&sign=4a236012&sv=2) #### [Knowledge Sharing](https://blog.jetbrains.com/upsource/2017/03/14/code-review-for-knowledge-sharing/) [](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#knowledge-sharing) * Learning at the center of the process * The purpose is not to check if the code is correct * But to share with other developers what changes have been made ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRkNUyurXnOV6iL0jc3%252F-MRkNhQecfPERGvn8wjQ%252Fimage.png%3Falt%3Dmedia%26token%3D3f2520e1-56a5-4773-8955-f2e8d0c8d767&width=768&dpr=3&quality=100&sign=bd5febb2&sv=2) #### Early Design Feedback[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#early-design-feedback) * A collaborative and iterative approach to * Check the code frequently while it’s being built * So design feedback comes at the right time ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRkNUyurXnOV6iL0jc3%252F-MRkNwoTTCzQGC9hgGvI%252Fimage.png%3Falt%3Dmedia%26token%3D7066a449-7c14-4264-b8d1-42f6af07c50c&width=768&dpr=3&quality=100&sign=1b7f1a9c&sv=2) ### Anti-patterns (List from Trisha Gee)[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#anti-patterns-list-from-trisha-gee) * My job as a Reviewer is to find problem * When you try to find problems, you will always find more problems * Always remember that you bring you own preferences / biases * Nit picking * Spacing is wrong / Formatting * Automate this kind of check * Waste of time for a human * Design changes when the code works * You find it too late * Design must be discussed early on * Inconsistent feedback * Feedback biased because I have followed a security training * Next week it will be on compliance for example… * To avoid this : * Have clear guidelines * Use checklists * The Ghost Reviewer * No time for it * _**The bigger the code review, the more likely it will receive a green check**_ * Ping Pong Reviews (Between reviewer and author) * Happens when you goal is to find problems * Have a Definition of Done * Clear guidelines ### Use a checklist[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#use-a-checklist) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRkLLpJAHsZ9t8vDVYa%252F-MRkLOpqlYxfaHbEGBaX%252Fimage.png%3Falt%3Dmedia%26token%3D9e122e5e-5a79-4638-91cd-e9c5b3f308ff&width=768&dpr=3&quality=100&sign=812a6b1b&sv=2) #### Example[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#example) * **Compliance** * With internal tech radar (Lombok, MapStruct, ..) * Right version of the libraries (Java 8) * Pass internal automatic quality gates * **Operability** * Exceptions are easily understood * Logging give context for debugging * Configuration is separated from the code * Is the code **readable** * The names covey **intent** * APIs are documented * Is the code **SOLID** ? * Team **conventions** are followed * There is **no obsolete code**/function * There is **no commented out code** or TODOs * Use of design patterns when appropriate (modularity, simplicity, ..) * Is the code testable ? * Do the tests * Cover requirements * Cover confusing / complicated and limits of the code * Checks the performance Concrete Practice - Code vengers 30'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#concrete-practice-code-vengers-30) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- * Form groups of 3 * Each team member take : * A role card : _**keep it secret**_ * A checklist * A code sample * 5’ in solo : * Prepare a code review as a code-venger : role-play based on your role card. * Review time : * Each member explains his/her discovery in the code to the two others. * They have to guess who is the code-venger * And keep note how they feel during the review #### Here are the cards[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#here-are-the-cards) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRkPYBGrpc7T5tVdqDp%252F-MRkRDUR-dSzyWWGZ0qP%252Fimage.png%3Falt%3Dmedia%26token%3D3272e6fe-1833-4422-8c09-532a82dc0c46&width=768&dpr=3&quality=100&sign=713e8f69&sv=2) [code-review-cards.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MRkPYBGrpc7T5tVdqDp%2F-MRkRXJxwCgqlt50V-pt%2Fcode-review-cards.pdf?alt=media&token=717d0503-5b07-436e-9319-1bf0f6721212) PDF · 86KB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MRkPYBGrpc7T5tVdqDp%2F-MRkRXJxwCgqlt50V-pt%2Fcode-review-cards.pdf?alt=media&token=717d0503-5b07-436e-9319-1bf0f6721212) Download pdf cards here [code samples for code review.zip](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MRkRbQPZLcBQ4UhVm1n%2F-MRkSrGmloFbGtIzwPRJ%2Fcode%20samples%20for%20code%20review.zip?alt=media&token=7279e399-b785-463b-b046-9074e3866d43) archive · 959KB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MRkRbQPZLcBQ4UhVm1n%2F-MRkSrGmloFbGtIzwPRJ%2Fcode%20samples%20for%20code%20review.zip?alt=media&token=7279e399-b785-463b-b046-9074e3866d43) Code samples for code reviews ### Debriefing round 1 :[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#debriefing-round-1) * Who was who in your group ? * How did you feel during feedback session ? #### Explain things to avoid during code review[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#explain-things-to-avoid-during-code-review) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRkRbQPZLcBQ4UhVm1n%252F-MRkT3E1EXgXTJ8KWXZV%252Fimage.png%3Falt%3Dmedia%26token%3D3d7df03c-47e1-492e-979b-a322ac0b6cd5&width=768&dpr=3&quality=100&sign=c808591a&sv=2) * Judgmental questions : * Avoid to say : Why didn’t you just do \_\_\_ here? * Try it : What do you think about \_\_\_, which has the benefit of\_\_\_\_? * Being sarcastic * Avoid to say : Did you even test this code before you checked it in * Try it : This breaks when \_\_\_. Can you please address this case? * Passing off opinion as fact * Avoid to say : This component should be \_\_\_. * Try it : Since this component \_\_\_, it could be made \_\_\_. This will improve\_\_\_ ### Lets do a second round[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#lets-do-a-second-round) * Prepare once again the review of the code by being yourself * Try to avoid behavior sentences explained before Conclusion - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#conclusion-10) ------------------------------------------------------------------------------------------------------------------------------ * Bootstrap your team check-list * What / When to review ? #### Don’t let code reviews be an ego match[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#dont-let-code-reviews-be-an-ego-match) _**“Being the most senior person on the team does not imply that your code does not need review...”**_ ### Resources[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#resources) * [Code Review Best Practices by Trisha Gee](https://blog.jetbrains.com/upsource/2018/08/30/code-review-best-practices/) * [The Code Review Pyramid](https://www.morling.dev/blog/the-code-review-pyramid/) * [Async Code Reviews Are Killing Your Company’s Throughput](https://www.slideshare.net/kobac/async-code-reviews-are-killing-your-companys-throughput-248758692) * [Code Review Worflows](https://blog.jetbrains.com/upsource/tag/code-review-workflows/) * [Code Review Guidelines by Patrick Smacchia](https://blog.ndepend.com/what-is-code-review-guidelines-best-practices/) * [Ebook "What to look for in a code review"](http://jb.gg/book/codereview) * [Video](https://youtu.be/3pth05Rgr8U) [PreviousPair Programming](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/pair-programming) [NextCo-designs](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/co-designs) Last updated 4 years ago * [Connection - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#connection-10) * [Concepts - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#concepts-10) * [How to do it ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#how-to-do-it) * [Who ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#who) * [When ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#when) * [Why ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#why) * [Different Workflows](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#different-workflows) * [Anti-patterns (List from Trisha Gee)](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#anti-patterns-list-from-trisha-gee) * [Use a checklist](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#use-a-checklist) * [Concrete Practice - Code vengers 30'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#concrete-practice-code-vengers-30) * [Debriefing round 1 :](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#debriefing-round-1) * [Lets do a second round](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#lets-do-a-second-round) * [Conclusion - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#conclusion-10) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/code-review#resources) --- # Improve your test quality with Mutation testing | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing.md) . How can we measure test quality ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#how-can-we-measure-test-quality) -------------------------------------------------------------------------------------------------------------------------------------------------------------------- ### Use our intuition ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#use-our-intuition) Not really a good indicator : too much subjective. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAke_s7L2gb37blrnf2%252F-MAkjfMZzxftYOR99rj6%252Fimage.png%3Falt%3Dmedia%26token%3D838f34ac-b74c-4017-96e2-aea0fed7b136&width=768&dpr=3&quality=100&sign=f3d38d88&sv=2) ### Use code coverage ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#use-code-coverage) Code coverage is a quantitative metric not a qualitative one. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAke_s7L2gb37blrnf2%252F-MAkyDg4V7c9Ah0Bhn5o%252Fimage.png%3Falt%3Dmedia%26token%3D35983d74-04ec-46ae-95da-4c011754a9b7&width=768&dpr=3&quality=100&sign=4274173a&sv=2) Let's take a simple example : Imagine I have written a Calculator.add method that simply add an integer x and an integer y. I have written some tests on it : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAke_s7L2gb37blrnf2%252F-MAkyYqAHwN6vXUKn3qH%252Fimage.png%3Falt%3Dmedia%26token%3D5dbfa3aa-90f4-4595-95a8-482a15f72bfd&width=768&dpr=3&quality=100&sign=d49db8f3&sv=2) It could seem fine at the first look with a 100% lines covered according to my code coverage tool : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAke_s7L2gb37blrnf2%252F-MAkz7wPLbMlIvGadpgK%252Fimage.png%3Falt%3Dmedia%26token%3Dd904fa63-43eb-4cba-8ec5-ef7e172bf9a1&width=768&dpr=3&quality=100&sign=fa889dca&sv=2) But when you take a closer look the tests the assertions are really shitty : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAke_s7L2gb37blrnf2%252F-MAkzHe3ksBUrxHmVwSA%252Fimage.png%3Falt%3Dmedia%26token%3D9db722a2-6f23-433a-b890-d7e93b08763d&width=768&dpr=3&quality=100&sign=161a3e19&sv=2) Mutation testing to our rescue[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#mutation-testing-to-our-rescue) ---------------------------------------------------------------------------------------------------------------------------------------------------------------- ### What is it ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#what-is-it) > Mutation testing is based on two hypotheses : > > The first is the **competent programmer hypothesis**. This hypothesis states that most software faults introduced by experienced programmers are due to **small syntactic errors**. > > The second hypothesis is called the coupling effect. The coupling effect asserts that **simple faults can cascade or couple to form other emergent faults.**” - wikipedia #### The concept behind :[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#the-concept-behind) Test our tests by introducing MUTANTS (fault) into our production code during the test execution : * To check that the test is failing * If the test pass, there is an issue #### 3 steps[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#id-3-steps) 1. Generate mutants 2. Launch tests 3. Check result / Generate report ### What is a mutant ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#what-is-a-mutant) A mutant is created by altering the production in various ways : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAke_s7L2gb37blrnf2%252F-MAl1hF3x69NJ1W38c7z%252Fimage.png%3Falt%3Dmedia%26token%3D5837b8a1-4cd0-4cc9-800f-9ba764156e85&width=768&dpr=3&quality=100&sign=19ef04f1&sv=2) * For conditions : * Change * Reverse conditions * Constant * For math operations : * Change increment with decrement (from x++ to x--) * Change binary operations * Remove function calls * Rename constants * ... How to generate mutants ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#how-to-generate-mutants) ---------------------------------------------------------------------------------------------------------------------------------------------------- To use mutation testing we can use tools like [pitest](https://pitest.org/) (for java) but others are available like [stryker](https://stryker-mutator.io/) . ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAl1qhp9qn01ET8h1ip%252F-MAl33UbYAR9nGJI53Jm%252Fimage.png%3Falt%3Dmedia%26token%3D1a596716-840c-4dfa-a170-1edc088ffab9&width=768&dpr=3&quality=100&sign=f8c63fe8&sv=2) ### Start with pitest[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#start-with-pitest) Simply add a dependency in your pom to the pitest-maven plugin : More info here : [https://pitest.org/quickstart/maven/](https://pitest.org/quickstart/maven/) You will then have access to the pitest functionality from your maven : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAl1qhp9qn01ET8h1ip%252F-MAl3WfP5HYTaHQb0la-%252Fimage.png%3Falt%3Dmedia%26token%3Dfacb1580-395d-407f-9143-f6009cee2732&width=768&dpr=3&quality=100&sign=f4f7f07a&sv=2) ### Mutators[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#mutators) PIT applies a set of mutation operators (mutators) to our byte code generated by compiling our code. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAl1qhp9qn01ET8h1ip%252F-MAl437qtABnA762aTIr%252Fimage.png%3Falt%3Dmedia%26token%3D55090041-2bf0-4d43-883e-530766e6e535&width=768&dpr=3&quality=100&sign=e2e91e56&sv=2) ### Available mutators[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#available-mutators) By default it's offering a lot of mutators : [https://pitest.org/quickstart/mutators/](https://pitest.org/quickstart/mutators/) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAl1qhp9qn01ET8h1ip%252F-MAl4IlXzKh2i88k93cn%252Fimage.png%3Falt%3Dmedia%26token%3D65eb5308-f7f5-417a-b902-b347bb9924f8&width=768&dpr=3&quality=100&sign=271dd334&sv=2) Example of pitest mutator ### Mutation report[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#mutation-report) When you run the pitest report it will generate an html report (by default) : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAl1qhp9qn01ET8h1ip%252F-MAl4stCzAQokptj9zl1%252Fimage.png%3Falt%3Dmedia%26token%3Df879ad7d-082c-4a8e-8342-7e3eaf99fc9b&width=768&dpr=3&quality=100&sign=daef4e4a&sv=2) Report summary ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAl1qhp9qn01ET8h1ip%252F-MAl4ziFD-YGKhUajrOS%252Fimage.png%3Falt%3Dmedia%26token%3Df0d4300d-0bfc-4a4e-86d4-7bf8e5e11dde&width=768&dpr=3&quality=100&sign=e3ee21ab&sv=2) Report details #### How to read it ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#how-to-read-it) For each mutation PIT will report one of the following outcomes : * **KILLED** : exactly what we want our tests have failed so detected the mutant * **SURVIVED** : our tests have not detected the mutants so we have to improve our assertions * **NO COVERAGE** : same as SURVIVED except there were no tests that exercised the line of code where the mutation was created * **TIMED OUT** : a mutation may time out if it causes an infinite loop, such as removing the increment from a counter in a for loop * **NON-VIABLE** : mutation that could not be loaded by the JVM as the bytecode was in some way invalid * **MEMORY ERROR** : might occur as a result of a mutation that increases the amount of memory used by the system * **RUN ERROR** : means something went wrong when trying to test the mutation Real life feedback[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#real-life-feedback) ---------------------------------------------------------------------------------------------------------------------------------------- * Configure pitest to skip pojos : exclude every auto generated code (lombok in my case), otherwise ti creates a lot of noise. You can do it from you pom.xml : * Avoid the run of integration tests otherwise it could be really slow on spring boot micro-services (more than 10 minutes) ### Integrate Pitest in your Integration pipelines[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#integrate-pitest-in-your-integration-pipelines) You can integrate it easily in your integration pipelines with SonarQube or [SonarCloud](https://sonarcloud.io/) * Add an XML Output (still in your pom) * Install the "mutation analysis" plugin on Sonar : [https://www.sonarplugins.com/mutationanalysis](https://www.sonarplugins.com/mutationanalysis) * Add a stage in your pipeline * For jenkins for example : `stage('Mutation Test') { mvn "org.pitest:pitest-maven:mutationCoverage" }` You will now have your pitest report integrated in your Sonar analysis report : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAl1qhp9qn01ET8h1ip%252F-MAl8ya4ymq5QbsA82xy%252Fimage.png%3Falt%3Dmedia%26token%3D32135a71-5a6c-479e-b18c-763a5ea2dbe1&width=768&dpr=3&quality=100&sign=5d85823c&sv=2) Pros & cons[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#pros-and-cons) ---------------------------------------------------------------------------------------------------------------------------- Pros Cons Help identify missing important tests Very expensive : Take a lot of time to run It catches many small programming errors, as well as holes in unit tests that would otherwise go unnoticed Do not run it on controllers Quantify quality of our tests and so of our system Requires brainpower to sort ‘junk’ mutations from useful ones. Really useful for core domain model tests From my Point of View Mutation Testing is really a great tool that can help you identify problems and drive your code reviews. [PreviousPact broker : the missing piece of your Consumer-Driven Contract approach](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach) [NextHow to name our Unit Tests](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests) Last updated 6 years ago * [How can we measure test quality ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#how-can-we-measure-test-quality) * [Use our intuition ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#use-our-intuition) * [Use code coverage ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#use-code-coverage) * [Mutation testing to our rescue](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#mutation-testing-to-our-rescue) * [What is it ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#what-is-it) * [What is a mutant ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#what-is-a-mutant) * [How to generate mutants ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#how-to-generate-mutants) * [Start with pitest](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#start-with-pitest) * [Mutators](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#mutators) * [Available mutators](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#available-mutators) * [Mutation report](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#mutation-report) * [Real life feedback](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#real-life-feedback) * [Integrate Pitest in your Integration pipelines](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#integrate-pitest-in-your-integration-pipelines) * [Pros & cons](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing#pros-and-cons) Copy org.pitest pitest-maven 1.5.0 Copy org.pitest pitest-maven 1.5.0 sample.controller* com.bil.commons.sample.service* com.bil.commons.sample* Copy XML ... --- # Star wars theme | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme.md) . Ice breaker 5’[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#ice-breaker-5) ----------------------------------------------------------------------------------------------------------------------------- Introduce the theme of the retrospective. Each attendee picks a piece of paper on which is written a quote from the Star Wars movies. ### **Goal**[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#goal) Each attendee must use this quote during the meeting when it feels it is the right time. ### Quotes[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#quotes) * “Your focus determines your reality.” – Qui-Gon Jinn * “Do. Or do not. There is no try.” – Yoda * “Somebody has to save our skins.” – Leia Organa * “In my experience there is no such thing as luck.” – Obi-Wan Kenobi * “I find your lack of faith disturbing.” – Darth Vader * “I’ve got a bad feeling about this.” * “It’s a trap!” – Admiral Ackbar * “Your eyes can deceive you. Don’t trust them.” – Obi-Wan Kenobi * “Never tell me the odds.” – Han Solo * “Mind tricks don’t work on me.” – Watto * “Great, kid. Don’t get cocky.” – Han Solo * “Stay on target.” – Gold Five Set the stage 10’[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#set-the-stage-10) ----------------------------------------------------------------------------------------------------------------------------------- * Play the theme of the movies during this part. * _**Choose your character**_ * Each attendee must think about which character Star Wars character would best represent him during this retrospective, and explain why. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FfopvND9EcFpS8pDYKjlj%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=61f5f52c&sv=2) Poster retrospective Star Wars Gather data 15'[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#gather-data-15) ------------------------------------------------------------------------------------------------------------------------------- ### Light or dark side[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#light-or-dark-side) * Regarding the previous sprint, categorize things that happened. * Are they in the light side or in the dark side? One idea / sticky notes then everyone sticks those on the wall. Generate insights 10’ – 15’[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#generate-insights-10-15) ---------------------------------------------------------------------------------------------------------------------------------------------------- ### Exploratory mission[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#exploratory-mission) Send a pathfinder to cluster the sticky notes by theme. Once everything is clustered, each attendee must dot vote which themes he/she wants to deep dive on (3 dots / attendee). Split the group and make them work on the different themes in order to find improvement actions. ​Decide what to do 10’[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#decide-what-to-do-10) -------------------------------------------------------------------------------------------------------------------------------------------- ### Define actions by character[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#define-actions-by-character) Based on the exploratory mission results, define actions you want to tackle during the next sprint. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FICCzcqmyp4pn6EyEhs6F%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=3c0ac446&sv=2) Poster retrospective Star Wars Categorize them: * R2D2 : courage * Padmé : diplomacy * Luke Skywalker : apprenticeship * Action Yoda : advice/help Closing 15’[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#closing-15) ----------------------------------------------------------------------------------------------------------------------- ### Jedi ceremony[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#jedi-ceremony) For each team member, ask to the audience why he/she is a jedi for the team. Many attendees can answer. [PreviousSpeed boat](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/speed-boat) [NextStory cubes](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/story-cubes) Last updated 6 years ago * [Ice breaker 5’](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#ice-breaker-5) * [Goal](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#goal) * [Quotes](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#quotes) * [Set the stage 10’](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#set-the-stage-10) * [Gather data 15'](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#gather-data-15) * [Light or dark side](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#light-or-dark-side) * [Generate insights 10’ – 15’](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#generate-insights-10-15) * [Exploratory mission](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#exploratory-mission) * [​Decide what to do 10’](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#decide-what-to-do-10) * [Define actions by character](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#define-actions-by-character) * [Closing 15’](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#closing-15) * [Jedi ceremony](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/star-wars-theme#jedi-ceremony) --- # Dev ethics | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics.md) . Connection - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#connection-10) ----------------------------------------------------------------------------------------------------------------------------- Imagine you are working for the _**most ethic company on earth**_ : * You just delivered a new revolutionary product * You and your teammates are on the front page of every TV channel * You are recognized and praised on all sides ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA-LEDiQpv6SoLMVUn%252F-MTA-bGvQVNjYwuYTIre%252Fimage.png%3Falt%3Dmedia%26token%3Dcd514568-3e90-493f-b9a1-bf380e401e71&width=768&dpr=3&quality=100&sign=470eb6f8&sv=2) #### Draw this breaking news (in groups)[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#draw-this-breaking-news-in-groups) * Cover – states the spectacular success accomplished by the company * Headers – reveal what the story is about * Sidebars – include parts of the report * Quotes – testimonials about the accomplishment from anyone imaginable * Images – pictures that support the cover story * Brainstorm – used for writing down ideas before starting the activity Concepts - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#concepts-10) ------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA0YjkFlJJYUl6Vb00%252F-MTA0bLa_kyUroiT21A-%252Fimage.png%3Falt%3Dmedia%26token%3D0a553582-2288-4786-a93b-4ee9d83a1f5c&width=768&dpr=3&quality=100&sign=125882d8&sv=2) Ethics definition ### What do they have in common ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#what-do-they-have-in-common) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA0kIAeo0pkREmUuKM%252F-MTA0wdCgDHSsxW02HTY%252Fimage.png%3Falt%3Dmedia%26token%3D570c4f96-1d20-4a21-8540-4fe17d1526a6&width=768&dpr=3&quality=100&sign=b69c8742&sv=2) Almost any professional whose work impacts the public must abide by some sort of e_**thical code of conduct**_. ### Hippocratic Oath[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#hippocratic-oath) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA0kIAeo0pkREmUuKM%252F-MTA1Kya8zQTE19mQrhx%252Fimage.png%3Falt%3Dmedia%26token%3D028f6a66-76d6-4461-a444-996213a8ccf0&width=768&dpr=3&quality=100&sign=6e3f7588&sv=2) Hippocrates, the “Father of Medicine,” around 500 B.C. has written the famous oath which has guided the practice of medicine. **No Dev's Oath ?** ### W**hy** should we take ethics into consideration ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#why-should-we-take-ethics-into-consideration) Software is eating the world ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA0kIAeo0pkREmUuKM%252F-MTA1pzm2OIewgI87B4F%252Fimage.png%3Falt%3Dmedia%26token%3D1ffe840e-24a3-4933-a8fc-b8033f8d3d45&width=768&dpr=3&quality=100&sign=840ef042&sv=2) Imagine a life without software : zombies ? * Phones don’t ring * Cars don’t start * Planes don’t fly * Bombs don’t explode * Money doesn’t change hands * Electricity doesn’t get generated #### Software is everywhere[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#software-is-everywhere) In our society, virtually nothing happens without the involvement of some kind of computer program. ### What is software at the end ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#what-is-software-at-the-end) Software is a set of rules if we think about it * Our civilization doesn’t quite realize how dependent it has become on software * _**How many hours do you spend on your computers, smartphones, cars each day ?**_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA0kIAeo0pkREmUuKM%252F-MTA29upnLqz-mUGaZ5a%252Fimage.png%3Falt%3Dmedia%26token%3D45cd6133-7d21-4dd5-ad0c-6352f54df3e4&width=768&dpr=3&quality=100&sign=ce7a61b8&sv=2) ### Software can hurt[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#software-can-hurt) * **2015** : independent tests revealed that Volkswagen engineers programmed cars to cheat emissions standards * **2016** : U.S. presidential election - Facebook/Twitter Epidemic of fake news, and now is inextricably linked to * **2018** : Boeing 737 Max crashes because of software problems * **2018** : Cambridge Analytica’s : weaponization of personal user information _**Social exclusion, various environmental impacts, ....**_ ### Where are we as an industry ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#where-are-we-as-an-industry) * Will things get better or worse? * Most of developers don’t ultimately feel it’s their responsibility if unethical products go live. * Are they right? * [Milgram experiment](https://en.wikipedia.org/wiki/Milgram_experiment) #### Who is responsible ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#who-is-responsible) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA0kIAeo0pkREmUuKM%252F-MTA2o19J3g0OuxOgQbK%252Fimage.png%3Falt%3Dmedia%26token%3D312a5824-f47f-4da6-a6ac-7dbd6b663bf3&width=768&dpr=3&quality=100&sign=b559734c&sv=2) Code doesn't kill people, who does it ? * Product managers do ? * Shareholders ? * CEOs ? * Developers ? Do we all need to be informed and responsible? ### Devs as the last Bastion ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#devs-as-the-last-bastion) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA0kIAeo0pkREmUuKM%252F-MTA33RMhcVgjX9IgwpT%252Fimage.png%3Falt%3Dmedia%26token%3D4ae442b0-7686-4d53-9d62-1857e6025690&width=768&dpr=3&quality=100&sign=7c3d33fc&sv=2) 1st time in human being history that ethics, philosophy and technics are intimately bounds ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA0kIAeo0pkREmUuKM%252F-MTA3WDNqV90QdUrletz%252Fimage.png%3Falt%3Dmedia%26token%3D4410fc53-f42c-42cf-84eb-f724b6618e2b&width=768&dpr=3&quality=100&sign=8ce10b8c&sv=2) ### What is our future ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#what-is-our-future) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA0kIAeo0pkREmUuKM%252F-MTA3oR6r9H2svIhxSKq%252Fimage.png%3Falt%3Dmedia%26token%3D9b011c32-e4c6-4709-9a54-bcb40e144aa2&width=768&dpr=3&quality=100&sign=100cdd2a&sv=2) **AI** * At a faster rate than employment policy can adjust to how this impacts on our economies and on individual livelihoods * AI are displacing jobs * Black box algorithms that replicate systemic discrimination have also been raised Business and startups can play a huge role in designing technology that supports human society by designing software ethically. #### Some brilliant in are raising warnings[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#some-brilliant-in-are-raising-warnings) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA0kIAeo0pkREmUuKM%252F-MTA4ELVcOZ22fKANktj%252Fimage.png%3Falt%3Dmedia%26token%3D55aadd93-4ae1-47a9-a776-715a3889b57b&width=768&dpr=3&quality=100&sign=1e35990c&sv=2) "_Nous devons être conscients des dangers, les identifier, et employer les meilleures pratiques et cadres pour nous préparer à ses conséquences bien en avance, avait-il déclaré lors d’une conférence. La montée de l’IA pourrait être la pire ou la meilleure chose qui soit jamais arrivée à l’humanité._" - **Stephen Hawking** Concrete Practice - Create your own oath - 30'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#concrete-practice-create-your-own-oath-30) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Based on the breaking news : _**create an oath**_ to design ethical software 1. Think about your current and last projects * Did they respect environment, human beings ? * Did your clients respect your own ethic ? 2. On which kind of projects you like to work on ? * For who you want to work ? * Which kind of environments ? * With whom ? 3. What do you enjoy in your work ? Maybe different levels : Developer / Product / Client / Society * 10’ en pair * 5’ en groupe * 5’ all together * 10’ Finalization Conclusion - Existing Oaths - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#conclusion-existing-oaths-10) ------------------------------------------------------------------------------------------------------------------------------------------------------------- ### [ACM code of ethics](https://www.acm.org/code-of-ethics) [](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#acm-code-of-ethics) * **Contribute to society and human well-being**. * Programmers should work to develop computer systems that can reduce negative consequences to society, such as threats to safety and health, and that can make everyday activities and work easier. * It is “an obligation to develop to high standards” * **Avoid harm to others**. * Computer systems have an indirect impact on third parties. * They can cause loss of information and resources that might result severely harmful for users, the general public, or employers. * Therefore, software developers should minimize the risk of harming others due to [coding errors](https://en.wikipedia.org/wiki/Error_code) , or security issues, by following standards to design and test systems * **Be honest and trustworthy**. * This principle encourages programmers to be honest and aware of their limitations in knowledge and education when writing computer systems. * Also, if a programmer knows there is something wrong with a computer system, he or she should report it immediately to avoid undesirable consequences ### [The Programmer's Oath](https://blog.cleancoder.com/uncle-bob/2015/11/18/TheProgrammersOath.html) [](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#the-programmers-oath) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA5y5Oy8IU9SmVZxPF%252F-MTA8xQzSs3lNQtKZ34G%252Fimage.png%3Falt%3Dmedia%26token%3D4e69a894-4844-47ff-89ce-e1b91277b2b0&width=768&dpr=3&quality=100&sign=86181a5f&sv=2) Watch [his video](https://youtu.be/36NgPu9OyRM?list=PLWKjhJtqVAbno-B4RmJHCDO0ZUKC2tpUQ) : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA5y5Oy8IU9SmVZxPF%252F-MTA9uFtdWPumR1SRCdW%252Fimage.png%3Falt%3Dmedia%26token%3Dd558539d-6a86-4c36-851c-5e0d709f3b32&width=768&dpr=3&quality=100&sign=8b62e0e1&sv=2) ### Existing principles[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#existing-principles) * [5 principles of software ethics](https://thenewstack.io/five-principles-software-ethics/) – Steven Wilmott * [Association for Computing Machinery (ACM) code of ethics](https://en.wikipedia.org/wiki/Programming_ethics) * [The programmer’s Oath](https://blog.cleancoder.com/uncle-bob/2015/11/18/TheProgrammersOath.html) – Uncle Bob * [A Code of Ethics for (Agile) Software Developers](https://medium.com/the-liberators/a-code-of-ethics-for-agile-software-developers-430b9a879be6) ? - Christiaan Verwijs ### Limitations[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#limitations) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA5y5Oy8IU9SmVZxPF%252F-MTAAbPYRBAeOEREfwHf%252Fimage.png%3Falt%3Dmedia%26token%3D78e75221-844b-4f2c-af39-45416e53757d&width=768&dpr=3&quality=100&sign=81093160&sv=2) Ethical codes only work when they are embraced by the majority of developers and become a part of educational training. #### Everything is not dark[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#everything-is-not-dark) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA5y5Oy8IU9SmVZxPF%252F-MTAArb0mUyZm3uagwso%252Fimage.png%3Falt%3Dmedia%26token%3Df71657a5-1308-4261-aca9-c34d0835b0fa&width=768&dpr=3&quality=100&sign=9b696149&sv=2) [7 principles of AI by Google](https://www.blog.google/technology/ai/ai-principles/) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA5y5Oy8IU9SmVZxPF%252F-MTAB4LA4yYGpJuPm6SK%252Fimage.png%3Falt%3Dmedia%26token%3D181e7a79-58ae-4b9c-903d-85fdfc058be4&width=768&dpr=3&quality=100&sign=8ad6ff45&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MTA5y5Oy8IU9SmVZxPF%252F-MTAB8Yl0bD--MnSjKS1%252Fimage.png%3Falt%3Dmedia%26token%3D154bbcf1-65f7-4016-a690-f89ea4a91565&width=768&dpr=3&quality=100&sign=93b8bd82&sv=2) [PreviousInterview Domain Experts](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/interview-domain-experts) [NextThe Software Craftsman](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman) Last updated 5 years ago * [Connection - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#connection-10) * [Concepts - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#concepts-10) * [What do they have in common ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#what-do-they-have-in-common) * [Hippocratic Oath](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#hippocratic-oath) * [Why should we take ethics into consideration ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#why-should-we-take-ethics-into-consideration) * [What is software at the end ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#what-is-software-at-the-end) * [Software can hurt](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#software-can-hurt) * [Where are we as an industry ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#where-are-we-as-an-industry) * [Devs as the last Bastion ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#devs-as-the-last-bastion) * [What is our future ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#what-is-our-future) * [Concrete Practice - Create your own oath - 30'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#concrete-practice-create-your-own-oath-30) * [Conclusion - Existing Oaths - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#conclusion-existing-oaths-10) * [ACM code of ethics](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#acm-code-of-ethics) * [The Programmer's Oath](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#the-programmers-oath) * [Existing principles](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#existing-principles) * [Limitations](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics#limitations) --- # Pact broker : the missing piece of your Consumer-Driven Contract approach | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach.md) . _The Pact Broker is an application for_ _**sharing for consumer driven contracts and verification results**__._ _It is optimized for use with “pacts” (contracts created by the_ [_Pact_](http://docs.pact.io/) _framework), but can be used for any type of contract that can be serialized to JSON._ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZJ5YCyOEjqGogAKfW%252F-MBZJGOYkQuwril9Zd_v%252Fimage.png%3Falt%3Dmedia%26token%3D6f2ed5c8-ec1e-43ea-99fa-6bbfa53ac65e&width=768&dpr=3&quality=100&sign=8e9fbcda&sv=2) Let’s deep dive into the functionalities offered by the broker : A RESTful API for **publishing and retrieving pacts**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-3f81) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- The question that you can ask yourself when you start a CDC approach is where do I store the contracts ? In the consumer repository ? in a dedicated repository for the contracts ? in external libraries ? Where ? The broker has been implemented to solve this question. The only source of truth is the broker where I can : * Publish a contract ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZJ5YCyOEjqGogAKfW%252F-MBZJOEH6YLbdJAtwJuc%252Fimage.png%3Falt%3Dmedia%26token%3D73fca36a-b86d-4ccb-a511-232d42255d7c&width=768&dpr=3&quality=100&sign=b2898dac&sv=2) * Retrieve a contract ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZJ5YCyOEjqGogAKfW%252F-MBZJT1gZiW3hvJ6HMh6%252Fimage.png%3Falt%3Dmedia%26token%3D743ba981-56d3-4778-a363-01011c6023aa&width=768&dpr=3&quality=100&sign=2ffc1469&sv=2) An embedded API **browser for navigating the API**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-69d8) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- The Pact Broker API uses [HAL](http://stateless.co/hal_specification.html) (Hypertext Application Language) as its hypermedia implementation (that is, the method of providing links within a resource to navigate from that resource to related resources). The Broker comes with an embedded HAL browser that lets you navigate the API in your browser window by using the HAL relations in each resource. **The HAL specification also provides a built in method for providing documentation about a relation**. You can navigate to this documentation in the HAL browser by clicking on the book icon next to that relation in the HAL browser. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZJ5YCyOEjqGogAKfW%252F-MBZJZbcc5HHOqlpgsHe%252Fimage.png%3Falt%3Dmedia%26token%3D9d2cd182-22f0-46f6-b8b5-88b3d6e533f3&width=768&dpr=3&quality=100&sign=ab1fff4e&sv=2) Displays provider **verification results**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-45b6) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- When a pact is verified against a provider, the outcome of that verification (pass or fail) needs to be made available to the consumer and provider teams, so they know whether or not the code in either project **can be safely deployed**. The pact verification tool can automatically publish the verification results back to the broker, and they will be displayed on the index page next to the pact details. By displaying verification results you know if you can deploy safely ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZJ5YCyOEjqGogAKfW%252F-MBZOm6NleUH1nsnpHYE%252Fimage.png%3Falt%3Dmedia%26token%3D400f692c-690a-4ec9-b5c9-5d4fdf46f875&width=768&dpr=3&quality=100&sign=b687074b&sv=2) **Auto-generated documentation** for each contract[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-568d) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- A human readable version of the pact can be browsed from the broker : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZJ5YCyOEjqGogAKfW%252F-MBZOpkCVIqSk7zMJVss%252Fimage.png%3Falt%3Dmedia%26token%3D128ee2da-9dbc-4904-98dd-918203112343&width=768&dpr=3&quality=100&sign=7870475c&sv=2) Provides a **“matrix” of compatible consumer and provider versions**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-5c45) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- When publishing a pact or a verification, the resource is associated with a particular version of the pacticipant (application), which is identified by a version number. A pacticipant version number: * is expected to change (almost) every time a pact is published * should uniquely identify or be able to be mapped back to the commit of the code base that published a pact or verification (so that you can use tags to identify and checkout the the `prod` version of your provider if you wish to [test the "matrix"](http://rea.tech/enter-the-pact-matrix-or-how-to-decouple-the-release-cycles-of-your-microservices/) .) * should exist only on one branch of your code * should be known at release time (so you can pass it in to `can-i-deploy` to ensure that you are safe to release) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZJ5YCyOEjqGogAKfW%252F-MBZOtgFDBCZQSbLq54B%252Fimage.png%3Falt%3Dmedia%26token%3D091ae310-de96-48a9-bfcb-a063f4a27ce8&width=768&dpr=3&quality=100&sign=83c63fc4&sv=2) Visualize your microservices[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-1504) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Dynamically generated network diagrams so you can **visualise your microservice network.** ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZJ5YCyOEjqGogAKfW%252F-MBZOxfw10cyer2zNkrZ%252Fimage.png%3Falt%3Dmedia%26token%3D311a366f-5ddb-4772-b58b-4307203124ff&width=768&dpr=3&quality=100&sign=866388a8&sv=2) A CLI for your CI/CD[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-8e86) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- A [**CLI**](https://github.com/pact-foundation/pact-ruby-standalone/releases) for incorporating the Pact workflow into your continuous integration process. By using the _can-i-deploy_ feature of the Pact Broker CLI, it will give you a definitive answer if the version of your consumer that is being deployed, is compatible with all of its providers. > This functionality can definitely save your life by avoiding an integration problem to arrive in production. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZJ5YCyOEjqGogAKfW%252F-MBZPBuQwz1_4mhjGmgT%252Fimage.png%3Falt%3Dmedia%26token%3D6d87cc9b-765d-4518-a3ab-d28071ae5495&width=768&dpr=3&quality=100&sign=a5e26e99&sv=2) **Docker Pact Broker**[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-23fb) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- There is an official image for the broker available here : [https://hub.docker.com/r/pactfoundation/pact-broker/](https://hub.docker.com/r/pactfoundation/pact-broker/) So it is really easy to setup and play with it with just a few lines of YAML : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZJ5YCyOEjqGogAKfW%252F-MBZPFcQg_hhLFk6_G8z%252Fimage.png%3Falt%3Dmedia%26token%3D6068edca-4d71-46cb-a2b4-4cbab0732f6e&width=768&dpr=3&quality=100&sign=7dc02257&sv=2) Webhooks[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-1d25) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Provides **webhooks to trigger actions when pacts change** eg. run provider build, notify a Slack channel. You can trigger a webhook for those events : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZJ5YCyOEjqGogAKfW%252F-MBZPJ1dIJTPmpG9rGgV%252Fimage.png%3Falt%3Dmedia%26token%3Dc1798d57-c42c-4d1e-8faf-bbd3abf2bbec&width=768&dpr=3&quality=100&sign=20c85122&sv=2) To create a new webhook you just need to POST it to your broker : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZJ5YCyOEjqGogAKfW%252F-MBZPNu2PvbLQHeLlatT%252Fimage.png%3Falt%3Dmedia%26token%3D12346c74-2762-42be-951a-319489e92986&width=768&dpr=3&quality=100&sign=9b5fc22d&sv=2) In the broker you will have feedback on it : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBZJ5YCyOEjqGogAKfW%252F-MBZPSFHD1yMf2_D7v1X%252Fimage.png%3Falt%3Dmedia%26token%3Dd532b2f5-c4ce-4270-8d76-c94ff511f70e&width=768&dpr=3&quality=100&sign=6993205a&sv=2) Conclusion[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#conclusion) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- To conclude those articles I would like to say that Pact and Pact broker together are really great tools BUT **I would like to remind that consumer-driven contract testing is a technique that requires no special tool to implement**. If you want to start without tooling go ahead, tools are just there to support the approach. _**Once again it is all about communication.**_ _Communication between teams :_ * _Team that will need to consume a service_ * _Team that will provide the service_ [PreviousCDC testing made simple with Pact](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/cdc-testing-made-simple-with-pact) [NextImprove your test quality with Mutation testing](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/mutation-testing) Last updated 6 years ago * [A RESTful API for publishing and retrieving pacts](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-3f81) * [An embedded API browser for navigating the API](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-69d8) * [Displays provider verification results](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-45b6) * [Auto-generated documentation for each contract](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-568d) * [Provides a “matrix” of compatible consumer and provider versions](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-5c45) * [Visualize your microservices](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-1504) * [A CLI for your CI/CD](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-8e86) * [Docker Pact Broker](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-23fb) * [Webhooks](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#id-1d25) * [Conclusion](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-the-design-and-testing-of-your-micro-services-through-consumer-driven-contract-tests/pact-broker-the-missing-piece-of-your-consumer-driven-contract-approach#conclusion) --- # DDD re-distilled | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled.md) . Conway's law[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#conways-law) ------------------------------------------------------------------------------------------------------------------ > Any organization that designs a system will produce a design whose structure is a copy of the organization's communication structure. - Melvin Conway ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAffbmqNVO9kHaLizrN%252F-MAfgO-fW-MfAV6HRelm%252Fimage.png%3Falt%3Dmedia%26token%3D6b410740-475d-447a-87f9-eefaa3231217&width=768&dpr=3&quality=100&sign=984550f8&sv=2) Style of code reflects the way the people and teams in your company communicate or produce software architectures matching their current structure. It can lead to OUTDATED AND LOWER QUALITY PRODUCTS. ### How to reverse the conway's law ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#how-to-reverse-the-conways-law) Build teams that look like the architecture you want : Cross functional teams organized around business capabilities * Structure your system into independent, self-contained services so that teams can work independently. * Microservices architectures aim to increase velocity, so they apply Conway’s law in reverse to structure the system to achieve this noble goal. * Reverse Logic follows to create fewer dependencies and can grow faster as compared to Conway Law. * Teams only focus on what they are building and how they communicate with other pieces of code or micro-services. DDD What ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#ddd-what) ------------------------------------------------------------------------------------------------------------- Domain Driven Design a.k.a DDD is an approach to software development. * DDD is definitely NOT about technology. * DDD is all about the domain. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAffbmqNVO9kHaLizrN%252F-MAfjomTOewM2zSzd2tE%252Fimage.png%3Falt%3Dmedia%26token%3D2548ced9-2cb5-439b-9c5a-d278e8eb4a56&width=768&dpr=3&quality=100&sign=23330071&sv=2) Eric Evans - 2003 "The Blue book" There are 2 kinds of patterns in DDD : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAffbmqNVO9kHaLizrN%252F-MAfkM0x04YHM5iLJ23f%252Fimage.png%3Falt%3Dmedia%26token%3D11d8d87d-937b-45ee-a21b-28a4348afa8f&width=768&dpr=3&quality=100&sign=1dd10cac&sv=2) Often people focuses only on the tactical ones (closer to the code) but it is really mandatory before starting anything to start with a strategy. Strategic patterns[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#strategic-patterns) ------------------------------------------------------------------------------------------------------------------------------- ### Domain Model[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#domain-model) * A domain is the reality : your real business * A domain model is an abstraction of this reality ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAffbmqNVO9kHaLizrN%252F-MAfkmts2Y0Iz2yu2NCn%252Fimage.png%3Falt%3Dmedia%26token%3D3c23eaca-93cf-4eeb-b99e-2cd84ac19068&width=768&dpr=3&quality=100&sign=e4f1f194&sv=2) ### Bounded Contexts[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#bounded-contexts) A Bounded Context is a semantic contextual boundary. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAffbmqNVO9kHaLizrN%252F-MAfl9oQcS67FEJX_-Jz%252Fimage.png%3Falt%3Dmedia%26token%3Ddcdab089-33a1-4ef4-a192-87263965e3fa&width=768&dpr=3&quality=100&sign=d0b4de0f&sv=2) Within the boundary **each component** of the software model has **a specific meaning and does specific things**. **Software model = language that is developed by the team** * Spoken by every member of the team * Implemented in the software model This language = **Ubiquitous Language** ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAffbmqNVO9kHaLizrN%252F-MAfld8aICuQvKjCxprw%252Fimage.png%3Falt%3Dmedia%26token%3Da66edc0e-80a3-4593-82e0-159390a5e809&width=768&dpr=3&quality=100&sign=a0d78aa7&sv=2) There should be : * One team assigned to work on one Bounded Context * A separate source code repository for each Bounded Context **One team could work on multiple Bounded Contexts BUT multiple teams should not work on a single Bounded Context** ### Subdomains : 3 types[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#subdomains-3-types) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAffbmqNVO9kHaLizrN%252F-MAfnabBKTlJb2ZcRJv2%252Fimage.png%3Falt%3Dmedia%26token%3D25e6afb8-66c1-41e5-9d72-602f90958a0d&width=768&dpr=3&quality=100&sign=7c82991&sv=2) * **Generic Subdomain** : Solution may be available for purchase or be outsourced or even developed in house by a team that doesn’t have the kind of elite developers that you assign to your Core Domain or even a lesser Supporting Subdomain. NO WAY TO DIFFERENTIATE * **Core domain** : Where you are making a strategic investment in a single, well-defined domain model. This is very high on your organization’s list of projects because it will distinguish it from all competitors. _**The heart of an organization’s business.**_ * **Supporting domain** : This is a modeling situation that calls for custom development, because an off-the-shelf solution doesn’t exist. This is still an important software model, because _**your Core Domain cannot be successful without it**_. One of the Bounded Contexts will be the **Core Domain :** Various Subdomains in other Bounded Contexts. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAffbmqNVO9kHaLizrN%252F-MAfmsYYvh1voLhAu-Th%252Fimage.png%3Falt%3Dmedia%26token%3D17aeed54-d7de-4677-8ab8-ea16639f104d&width=768&dpr=3&quality=100&sign=764bb2ea&sv=2) A Bounded Context should align one-to-one (1:1) with a single Subdomain ### Context distillation[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#context-distillation) Once you have identified your Subdomains you can use the matrix behind to understand which Subdomain is what. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAffbmqNVO9kHaLizrN%252F-MAfooB9UqIzL-muTve9%252Fimage.png%3Falt%3Dmedia%26token%3D750ff033-39d4-4409-b31a-9d8b63ae75cf&width=768&dpr=3&quality=100&sign=2fe67a1e&sv=2) Find more explanation on it here : * [https://medium.com/nick-tune-tech-strategy-blog/core-domain-patterns-941f89446af5](https://medium.com/nick-tune-tech-strategy-blog/core-domain-patterns-941f89446af5) * [https://github.com/ddd-crew/core-domain-charts](https://github.com/ddd-crew/core-domain-charts) * [https://youtu.be/8TDiuQ3vdh0](https://youtu.be/8TDiuQ3vdh0) * [https://speakerdeck.com/mploed/visualizing-sociotechnical-architectures-with-context-maps](https://speakerdeck.com/mploed/visualizing-sociotechnical-architectures-with-context-maps) Make sure that your core (sub)domains and / or your most valuable contexts in genesis and custom built phases are perfectly staffed ### Context Mapping[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#context-mapping) `_Integration between Core Domain and other Bounded Contexts is known in DDD as Context Mapping_` ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfrPYF6zByhMpdcV9R%252Fimage.png%3Falt%3Dmedia%26token%3D2c8f6b4c-0fe3-4d8b-875b-edbf0f65ba3a&width=768&dpr=3&quality=100&sign=c3242a0c&sv=2) Considering that in two different Bounded Contexts there are two Ubiquitous Languages , this **line represents the translation that exists between the two languages**. #### What relationships and integrations can be represented by the Context Mapping line?[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#what-relationships-and-integrations-can-be-represented-by-the-context-mapping-line) #### Partnership[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#partnership) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfrl7BL0p17SIVUfiW%252Fimage.png%3Falt%3Dmedia%26token%3D04663520-84e0-4679-945b-8a3a3833acb4&width=768&dpr=3&quality=100&sign=455355bf&sv=2) A _**Partnership relationship exists between two teams**_. Each team is responsible for one Bounded Context. They create a Partnership to align the two teams with a dependent set of goals. It is said that the two teams will succeed or fail together. Teams will meet frequently to : * Synchronize schedules and dependent work * Use continuous integration to keep their integrations in harmony. The synchronization is represented by the thick mapping line between the two teams. The thick line indicates the level of commitment required, which is quite high. #### Customer-supplier[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#customer-supplier) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfsAktl4Og3FX2ddaK%252Fimage.png%3Falt%3Dmedia%26token%3D3c3891b5-5083-4c59-9755-356685cc7d20&width=768&dpr=3&quality=100&sign=12064a99&sv=2) Describes a relationship between two Bounded Contexts and respective teams : the _**Supplier is upstream (the U in the diagram) and the Customer is downstream (the D in the diagram)**_. The Supplier holds sway in this relationship because it must provide what the Customer needs. * Downstream requirements factor into upstream planning. * Downstream team gains some influence over the priorities and tasks of the upstream team. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfsjBduzEAfuJ3asuK%252Fimage.png%3Falt%3Dmedia%26token%3Dbb995397-d2b0-455a-a4ee-80fd567b94a3&width=768&dpr=3&quality=100&sign=ae30d937&sv=2) #### Shared kernel[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#shared-kernel) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAftN_YG1XeuyDL4Wx8%252Fimage.png%3Falt%3Dmedia%26token%3D2225980c-1ce9-424a-992f-98048e4b1d87&width=768&dpr=3&quality=100&sign=3faa0cd8&sv=2) A Shared Kernel , is a subset of a domain model that two teams share : * Physically shared artifact between two teams (Shared JARs, DB, …) * High degree of coupling requires a high amount of coordination between the involved teams _Use it with caution._ #### Conformist[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#conformist) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAftY4HGeZ3Osb0vmzs%252Fimage.png%3Falt%3Dmedia%26token%3Db9f0680f-4c68-4b0e-a885-20c9f083790f&width=768&dpr=3&quality=100&sign=6abbc92a&sv=2) The conformist slavishly _**adheres to the upstream model**_ : * No model-to-model transformation * Motivation : simplicity, contracts * he team implementing a Conformist is always downstream _**Example**_ : Consider the need to conform to the Amazon.com model when integrating as one of Amazon’s affiliate sellers. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAftra8lkqYjmI2d5e9%252Fimage.png%3Falt%3Dmedia%26token%3D1b8369fe-357f-41c0-8d05-4d161d2cba13&width=768&dpr=3&quality=100&sign=1f15dd01&sv=2) #### Anticorruption layer[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#anticorruption-layer) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfu2f43UIh8fy9je28%252Fimage.png%3Falt%3Dmedia%26token%3D909b19e4-9360-4622-81eb-a4b6a32658cb&width=768&dpr=3&quality=100&sign=2d43776d&sv=2) The Anticorruption Layer _**translates one model to another one : (Looser coupling)**_ Transforms an external model from another team / bounded context / system to another internal one Reduces the amount of coupling to a single layer The team implementing the ACL is always downstream. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfuR4zNLrCDVWQa9L4%252Fimage.png%3Falt%3Dmedia%26token%3Dbf8ebfdb-b5a3-4b34-a9d0-113bacc98209&width=768&dpr=3&quality=100&sign=f21850c3&sv=2) #### Open-host service[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#open-host-service) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfuX8g9UHnUJ_TSmLU%252Fimage.png%3Falt%3Dmedia%26token%3D14299ec6-1cc8-452b-b530-c4bc65a4e0aa&width=768&dpr=3&quality=100&sign=bf3475d9&sv=2) Defines a protocol or interface that gives access to your Bounded Context as a set of services. _**The Open-host Service is a public API**_ : * One API for several consumers * Has a common/general purpose model and functionality * The team providing the Service is an upstream team ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfufpQH8eGfkEhfbTU%252Fimage.png%3Falt%3Dmedia%26token%3D8e90d091-9f0b-4dfa-aa51-3d7df3b72b27&width=768&dpr=3&quality=100&sign=74ded72c&sv=2) #### Published language[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#published-language) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfvEZYfZQmXx9PtHQ8%252Fimage.png%3Falt%3Dmedia%26token%3Dd1518880-e210-4886-916f-c4fd34e13466&width=768&dpr=3&quality=100&sign=e74960d0&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfut3AtpuW9msvlo3p%252Fimage.png%3Falt%3Dmedia%26token%3D696cbd05-28e9-47b0-9732-841c472a0e41&width=768&dpr=3&quality=100&sign=bce9c22b&sv=2) A well documented language shared between bounded contexts : * Every bounded context can translate in and out from that language * Often combined with Open-host Service _**Such a Published Language can be defined with XML Schema, JSON Schema, …**_ **Examples**: iCalendar, vCard ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfv8OE7kNOkMhOZAfS%252Fimage.png%3Falt%3Dmedia%26token%3D59c2598a-ab24-4ea7-b04e-3f6669db2b6b&width=768&dpr=3&quality=100&sign=a3c32c6f&sv=2) #### Separate ways[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#separate-ways) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfvJfuQQnOCUZsM-dR%252Fimage.png%3Falt%3Dmedia%26token%3D4488ab6e-583b-4611-912a-9bad95d97128&width=768&dpr=3&quality=100&sign=b060acab&sv=2) A bounded context has no connections to others : * Sometimes integration is too expensive or takes very long * The teams choose separate ways in order to focus on specialized solutions _**Perhaps the functionality that you seek is not fully provided by any one Ubiquitous Language.**_ In this case produce your own specialized solution in your Bounded Context and forget integrating for this special case. #### Big ball of mud[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#big-ball-of-mud) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfvXSoUgH6qik0zQls%252Fimage.png%3Falt%3Dmedia%26token%3D18aa29c3-7cfa-48b0-8ccb-fa32f12d9453&width=768&dpr=3&quality=100&sign=1f97d896&sv=2) Here’s what happens over time when you are responsible for creating a Big Ball of Mud : 1. A growing number of Aggregates cross-contaminate because of unwarranted connections and dependencies. 2. Maintaining one part of the Big Ball of Mud causes ripples across the model, which leads to “whack-a-mole” issues. 3. Only tribal knowledge and heroics—speaking all languages at once—save the system from complete collapse. #### Team relationships[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#team-relationships) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfwE6-i0cWg3Ghj4_Y%252Fimage.png%3Falt%3Dmedia%26token%3D831b8fd0-c5e4-43a6-a706-af8ef8c31eff&width=768&dpr=3&quality=100&sign=d06cb5d4&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfvx2uqK2rpqzSkwdR%252Fimage.png%3Falt%3Dmedia%26token%3D2a9517f3-a2a6-43ac-9060-b0b111aa0f4f&width=768&dpr=3&quality=100&sign=f20b7174&sv=2) Source : [https://speakerdeck.com/mploed/visualizing-sociotechnical-architectures-with-context-maps](https://speakerdeck.com/mploed/visualizing-sociotechnical-architectures-with-context-maps) Bounded contexts and micro-services[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#bounded-contexts-and-micro-services) ----------------------------------------------------------------------------------------------------------------------------------------------------------------- There is one question that divides the DDD community : which mapping can I make between bounded context and micro-services ? Well it depends... ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfzMRiME1qTp89vjXr%252F-MAg3cPe3xk7Hy_ddZ-R%252Fimage.png%3Falt%3Dmedia%26token%3D82d25868-d9d6-4479-a048-b97e9bd99fea&width=768&dpr=3&quality=100&sign=300597db&sv=2) Some consider a micro-service to be much smaller than a DDD Bounded Context. Using that definition, a micro-service models only one concept and manages one narrow type of data. An example of such a micro-service is a Product and another is a BacklogItem If this is the granularity that you consider a worthy micro-service, understand that both the Product ms and the BacklogItem ms will still be in the same larger, logical Bounded Context. The two small ms components have only different deployment units, which may also have an impact on how they interact. How to discover complex domains ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#how-to-discover-complex-domains) ----------------------------------------------------------------------------------------------------------------------------------------------------------- ### Event storming : Explore with Domain Events[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#event-storming-explore-with-domain-events) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfy9XIKApnAT6VdP6h%252Fimage.png%3Falt%3Dmedia%26token%3Dde8756f8-1b6d-44f5-a1ea-7033082d119e&width=768&dpr=3&quality=100&sign=7388387c&sv=2) **EventStorming** is a flexible workshop format for collaborative exploration of complex business domains. It comes in different flavors, that can be used in different scenarios: * to assess health of an existing line of business and to discover the most effective areas for improvements; * to explore the viability of a new startup business model; * to envision new services, that maximise positive outcomes to every party involved; * to design clean and maintainable Event-Driven software, to support rapidly evolving businesses. Rules for organizing good sessions : * Invite the right people * Business * IT * UX * Technical stakeholders, ... * Provide unlimited modeling space (surface, markers, stickies) * Model a whole business line with domain events It is not something from IT for IT but from business to the organization. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfyqsKgVyRSB_yRJ3N%252Fimage.png%3Falt%3Dmedia%26token%3De6743e1f-7f91-4d72-aa6b-7cef88946b10&width=768&dpr=3&quality=100&sign=e9459244&sv=2) The picture that explains everything Find more about it here : [https://www.eventstorming.com/](https://www.eventstorming.com/) ### How to capture the outcomes ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#how-to-capture-the-outcomes) After an Event Storming session participants have a shared understanding of the Domain. One of the major criticism about Event Storming is really the lack of structure of the production that has been done. That's why it's really mandatory to capture the outcomes of each session. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfpkb3WEwhh0Q36ft2%252F-MAfzDMxMHnpm-1vwT6s%252Fimage.png%3Falt%3Dmedia%26token%3Db1d63cc0-860e-4d81-8d1d-76f92265a8ac&width=768&dpr=3&quality=100&sign=15cc8ac8&sv=2) Find more about the outcomes in this great article from Philippe Bourgau : [https://philippe.bourgau.net/5-views-to-capture-the-outputs-of-an-event-storming-workshop/](https://philippe.bourgau.net/5-views-to-capture-the-outputs-of-an-event-storming-workshop/) ### Document your bounded contexts[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#document-your-bounded-contexts) You can use the Bounded Context Canvas to do so : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfzMRiME1qTp89vjXr%252F-MAg-e4hm5sxPR2YA6n1%252Fimage.png%3Falt%3Dmedia%26token%3Db3df9f27-658e-46fa-bc89-fe404b00319c&width=768&dpr=3&quality=100&sign=92ba7d94&sv=2) Find more about it here : [https://medium.com/nick-tune-tech-strategy-blog/modelling-bounded-contexts-with-the-bounded-context-design-canvas-a-workshop-recipe-1f123e592ab](https://medium.com/nick-tune-tech-strategy-blog/modelling-bounded-contexts-with-the-bounded-context-design-canvas-a-workshop-recipe-1f123e592ab) Real life example : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfzMRiME1qTp89vjXr%252F-MAg-hqQ4mc_b65kE31V%252Fimage.png%3Falt%3Dmedia%26token%3D1efcd8c4-f6e2-4acb-be65-782e0ced48ff&width=768&dpr=3&quality=100&sign=87a81a7&sv=2) Tactical patterns / Tactical design with Aggregates[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#tactical-patterns-tactical-design-with-aggregates) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfzMRiME1qTp89vjXr%252F-MAg01fOMc08fQ0O_Hnm%252Fimage.png%3Falt%3Dmedia%26token%3D882c7d85-8a51-4dd4-80c6-bfef559f2fc2&width=768&dpr=3&quality=100&sign=ff549eb1&sv=2) ### Entity[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#entity) An Entity models an **individual thing**. Each Entity has a unique identity in that you can distinguish its individuality from among all other Entities of the same or a different type. Most times, an Entity will be **mutable**; its state will change over time. ### Value Object / Value[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#value-object-value) Models an **immutable** conceptual whole. Unlike an Entity , it does not have a unique identity, and equivalence is determined by comparing the attributes encapsulated by the Value type. ### Aggregate[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#aggregate) Each Aggregate is composed of one or more Entities / Value Objects One Entity is called the Aggregate Root. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfzMRiME1qTp89vjXr%252F-MAg0lxV2SOoOXptA9DU%252Fimage.png%3Falt%3Dmedia%26token%3Dbdf482ca-6688-4019-8847-f98e2b20be6f&width=768&dpr=3&quality=100&sign=e6ce6a7c&sv=2) ### Each Aggregate forms a transactional consistency boundary : all composed parts must be consistent, according to business rules, when the controlling transaction is committed to the database.[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#each-aggregate-forms-a-transactional-consistency-boundary-all-composed-parts-must-be-consistent-acco) #### Aggregate : rule of thumbs[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#aggregate-rule-of-thumbs) #### 1) Protect business invariants inside Aggregate boundaries.[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#id-1-protect-business-invariants-inside-aggregate-boundaries) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfzMRiME1qTp89vjXr%252F-MAg14Rj2wTkquKSzSxS%252Fimage.png%3Falt%3Dmedia%26token%3Dac0d5c1f-db86-44a0-aa5a-484b78a641a8&width=768&dpr=3&quality=100&sign=64975c98&sv=2) > "When all Task instances have hoursRemaining of zero, the BacklogItem status must be set to DONE .” At the end of a transaction this very specific business invariant must be met. The business requires it. #### 2) Design small aggregates[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#id-2-design-small-aggregates) Memory footprint and transactional scope of each Aggregate should be relatively small. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfzMRiME1qTp89vjXr%252F-MAg1dOW9sC95vpduDhH%252Fimage.png%3Falt%3Dmedia%26token%3Dbe410976-aa89-4999-a8ec-657d230d109e&width=768&dpr=3&quality=100&sign=54d3dc57&sv=2) Apply Single Responsibility Principle #### 3) Reference other Aggregates by identity only[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#id-3-reference-other-aggregates-by-identity-only) Keep the Aggregate design : * Small and efficient * Making for lower memory requirements * Quicker loading from a persistence store. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfzMRiME1qTp89vjXr%252F-MAg25TIY0saWqfLJ_X8%252Fimage.png%3Falt%3Dmedia%26token%3Ddb955fca-3ace-4e04-a296-5955f6cf52a0&width=768&dpr=3&quality=100&sign=a45aa764&sv=2) Helps enforce the rule not to modify other Aggregate instances within the same transaction. Store them as you want Relational Database or not. #### 4) Update Other Aggregates Using Eventual Consistency[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#id-4-update-other-aggregates-using-eventual-consistency) A BacklogItem is committed to a Sprint : * BacklogItem + Sprint must react to this As part of the BacklogItem Aggregate ’s transaction, it publishes a Domain Event. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfzMRiME1qTp89vjXr%252F-MAg2KKxkZUWvzNcn-Cf%252Fimage.png%3Falt%3Dmedia%26token%3Db7b4aa26-189f-40cf-b1b3-0cbfabf8b277&width=768&dpr=3&quality=100&sign=c8e22dd&sv=2) At one point our system will be consistent. ### From Event Storming to Aggregates : Aggregate Canvas[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#from-event-storming-to-aggregates-aggregate-canvas) Here is the different steps you can use to go from Event Storming to your Aggregates Design : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfzMRiME1qTp89vjXr%252F-MAg2fkFHYzBCzJ7zQov%252Fimage.png%3Falt%3Dmedia%26token%3De1d2e27c-d370-4862-b4b3-d878e731d5e5&width=768&dpr=3&quality=100&sign=81fe07cd&sv=2) Find more about it here : [https://www.youtube.com/watch?v=AF880t1RUU4](https://www.youtube.com/watch?v=AF880t1RUU4) How to start ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#how-to-start) --------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfzMRiME1qTp89vjXr%252F-MAg46zuotNGPq8rAAqA%252Fimage.png%3Falt%3Dmedia%26token%3D5ec33184-c15b-4e14-9f61-55b065cfed52&width=768&dpr=3&quality=100&sign=487281b8&sv=2) The DDD community is doing a really great job and they provide this modeling process that gives you a step-by-step guide for learning and practically applying each aspect of Domain-Driven Design (DDD) - from orienting around an organisation's business model to coding a domain model. Find more about it here : [https://github.com/ddd-crew/ddd-starter-modelling-process/blob/master/README.md](https://github.com/ddd-crew/ddd-starter-modelling-process/blob/master/README.md) Key take aways[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#key-take-aways) ----------------------------------------------------------------------------------------------------------------------- DDD is a : * Strategic tool that can help you * Invest through Context Distillation * Organize teams through Context Mapping * Align everyone on a business / technical vision * Design tool through Bounded Contexts * Implementation tool through Tactical patterns ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfzMRiME1qTp89vjXr%252F-MAg4eLSHEPtpl-XGy1h%252Fimage.png%3Falt%3Dmedia%26token%3D4de738c4-b8a2-4bc5-a25f-ba7475ea8781&width=768&dpr=3&quality=100&sign=f1acc20f&sv=2) ### To go further[](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#to-go-further) Here are great books on DDD : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAfzMRiME1qTp89vjXr%252F-MAg565xdoBcX1rg8zNb%252Fimage.png%3Falt%3Dmedia%26token%3D47d1a433-d5f3-4052-9ac5-08234ad260ac&width=768&dpr=3&quality=100&sign=ad4a4c35&sv=2) * [Legacy Architecture Modernisation With Strategic Domain-Driven Design](https://medium.com/nick-tune-tech-strategy-blog/legacy-architecture-modernisation-with-strategic-domain-driven-design-3e7c05bb383f) * [DOMA at Uber](https://eng.uber.com/microservice-architecture/) * [Strategic Domain-Driven Design Kata: Delivericious](https://medium.com/nick-tune-tech-strategy-blog/strategic-domain-driven-design-kata-delivericious-b114ca77163) * [DDD & Team Topologies for Product-Led organizations](https://miro.com/app/board/o9J_lkqPni8=/?invite_link_id=441833049335) * [Domain Events vs Change Data Capture](https://medium.com/swlh/domain-events-versus-change-data-capture-e426772f76e5) * [Event Storming Best Practices](https://miro.com/app/board/o9J_ksetago=/) [PreviousAligning Product & Software Design](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/aligning-product-and-software-design) [NextTest your architecture with Archunit](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/test-your-architecture-with-archunit) Last updated 4 years ago * [Conway's law](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#conways-law) * [How to reverse the conway's law ?](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#how-to-reverse-the-conways-law) * [DDD What ?](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#ddd-what) * [Strategic patterns](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#strategic-patterns) * [Domain Model](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#domain-model) * [Bounded Contexts](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#bounded-contexts) * [Subdomains : 3 types](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#subdomains-3-types) * [Context distillation](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#context-distillation) * [Context Mapping](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#context-mapping) * [Bounded contexts and micro-services](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#bounded-contexts-and-micro-services) * [How to discover complex domains ?](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#how-to-discover-complex-domains) * [Event storming : Explore with Domain Events](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#event-storming-explore-with-domain-events) * [How to capture the outcomes ?](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#how-to-capture-the-outcomes) * [Document your bounded contexts](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#document-your-bounded-contexts) * [Tactical patterns / Tactical design with Aggregates](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#tactical-patterns-tactical-design-with-aggregates) * [Entity](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#entity) * [Value Object / Value](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#value-object-value) * [Aggregate](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#aggregate) * [Each Aggregate forms a transactional consistency boundary : all composed parts must be consistent, according to business rules, when the controlling transaction is committed to the database.](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#each-aggregate-forms-a-transactional-consistency-boundary-all-composed-parts-must-be-consistent-acco) * [From Event Storming to Aggregates : Aggregate Canvas](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#from-event-storming-to-aggregates-aggregate-canvas) * [How to start ?](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#how-to-start) * [Key take aways](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#key-take-aways) * [To go further](https://yoan-thirion.gitbook.io/knowledge-base/software-architecture/ddd-re-distilled#to-go-further) --- # Mission Impossible | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible.md) . Plan[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#plan) ------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252Fgnh0jwjysbjA72t3goam%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=2df315ba&sv=2) 0 0 0 · 00 ### Matériel requis[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#materiel-requis) * Tape pour la crevasse * White board * Post-its * Feutres * Carte d'agent ([https://1drv.ms/u/s!AmXq5tBOqc9btK9F1\_pECaAj8IBF8Q](https://1drv.ms/u/s!AmXq5tBOqc9btK9F1_pECaAj8IBF8Q) ) * Debrief cube La crevasse (25')[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#la-crevasse-25) ------------------------------------------------------------------------------------------------------------------------------------ > "Vous êtes à l'académie du MIF (Mission Impossible Force), vous souhaitez devenir espion. Jusqu'à présent vous avez passez haut la main tous les tests. Il reste une dernière épreuve. Une épreuve qui en a découragé plus d'un : la crevasse." ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzuSMlwcd4-STcPmVH%252F-MAzux5yZAKY4rNyt7B4%252Fimage.png%3Falt%3Dmedia%26token%3Df06b6da7-7ff5-4b6b-884d-f4b335d2b17d&width=768&dpr=3&quality=100&sign=8586d9c1&sv=2) Instructions ici : [http://coach-agile.com/coach-agile-serious-game-crevasse/](http://coach-agile.com/coach-agile-serious-game-crevasse/) ### Débrief :[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#debrief) * La confiance : confiance en soi, en l’autre, en la technique… * L’apprentissage : s’entraîner permet de s’améliorer, voir d’autres personnes franchir un palier montre que le chemin est réalisable Votre identité secrète (20')[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#votre-identite-secrete-20) ---------------------------------------------------------------------------------------------------------------------------------------------------------- > "Félicitations à vous !!! Vous êtes l'élite parmi l'élite, vous avez passé la crevasse. Vous pouvez être fiers de vous." Avant d'aller sur le terrain, l'agence vous demande de prendre une identité secrète qui ne sera connue que de vos co-équipiers. ### Chaque participant rempli sa carte d'identité : - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#chaque-participant-rempli-sa-carte-didentite-10) * Photo * Nom de code * Spécialité * Mantra * Votre état d'esprit pour cette rétro ### **Chaque participant : - 10'**[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#chaque-participant-10) * Présente son identité secrète * La colle au mur * Mets son nouveau nom sur son T-shirt * Utiliser la tape et un sharpie A l’impossible nul n’est tenu - 15'[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#a-limpossible-nul-nest-tenu-15) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- > "Ce n'est pas une mission difficile, c'est une mission impossible. Difficile serait un jeu d'enfant pour vous." * Ce que je vous propose c'est que chacun d'entre vous réfléchisse et définisse LA mission qui lui paraît la plus impossible à accomplir au sein de l'équipe * Formuler cette mission sous forme de question * Brainstorming individuel * Présentation - 5' Si on souhaite s'améliorer, créer quelque chose de nouveau; il nous faut parfois défier les contraintes. > "Pour atteindre la lune, il faut viser le soleil" ### Quelle est votre MISSION IMPOSSIBLE ? - 5'[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#quelle-est-votre-mission-impossible-5) * Dot Vote En mission - 40'[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#en-mission-40) ---------------------------------------------------------------------------------------------------------------------------------- > Votre mission, si toutefois vous l'acceptez \[MISSION IMPOSSIBLE\]. Comme toujours si vous, ou l'un de vos agents, étiez capturés ou tués, le Département d'État nierait avoir eu connaissance de vos agissements. Bonne chance. [Mission Impossible Theme(full theme)](https://www.youtube.com/watch?v=XAYhNHhxN0A) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FEHRkDDWsOsCl9BxLALTT%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=c1b05e7a&sv=2) Video web content titled: Mission Impossible Theme(full theme) ### Le meilleur par le pire[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#le-meilleur-par-le-pire) * Faire la liste des pires idées pour échouer/empirer le problème… * Transformer chaque idée négative en opportunité positive [http://coach-agile.com/serious-game/le-meilleur-par-le-pire/](http://coach-agile.com/serious-game/le-meilleur-par-le-pire/) ### Action impossible[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#action-impossible) * En individuel, quelles actions peuvent vous permettre d'avancer sur les différents atomes ? * En pairs, affiner vos actions Chaque espion a la possibilité de se positionner à côté d'une action. * Vote sur 1 et 1 seule des actions * Placer sa carte à côté d'une action. * Qui est le lead Espion ? ### Enigme impossible[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#enigme-impossible) Lors de votre mission, vous avez découvert qu'une bombe a été posée dans l'académie. Vous avez 5 minutes pour résoudre l'énigme sinon vos co-équipiers vont passer à trépas qu'ils l'acceptent ou non. Pour résoudre l'énigme les espions doivent : * Replacer les cartes d'espion dans l'ordre "Espion 001" -> "Espion 012" * Trouver le nombre d'étoiles sur chaque carte * Espion 003 : 6 * Espion 005 : 7 * Espion 006 : 4 * Espion 011 : 5 ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252F4ps4Lhv7TbWtys6rnzDf%252Ffile.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=33334826&sv=2) [PreviousBack to the Future](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future) [NextMovie themes](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/movie-themes) Last updated 6 years ago * [Plan](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#plan) * [Matériel requis](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#materiel-requis) * [La crevasse (25')](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#la-crevasse-25) * [Débrief :](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#debrief) * [Votre identité secrète (20')](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#votre-identite-secrete-20) * [Chaque participant rempli sa carte d'identité : - 10'](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#chaque-participant-rempli-sa-carte-didentite-10) * [Chaque participant : - 10'](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#chaque-participant-10) * [A l’impossible nul n’est tenu - 15'](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#a-limpossible-nul-nest-tenu-15) * [Quelle est votre MISSION IMPOSSIBLE ? - 5'](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#quelle-est-votre-mission-impossible-5) * [En mission - 40'](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#en-mission-40) * [Le meilleur par le pire](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#le-meilleur-par-le-pire) * [Action impossible](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#action-impossible) * [Enigme impossible](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible#enigme-impossible) --- # The Software Craftsman | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman.md) . I really loved this [great book](https://www.amazon.fr/Software-Craftsman-Professionalism-Pragmatism-Pride/dp/0134052501) from [Sandro Mancuso](https://twitter.com/sandromancuso) . ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBsPCaANtOAsjncEMj3%252F-MBsQXGluWgVZqlLyj8s%252Fimage.png%3Falt%3Dmedia%26token%3Dfaaa2bf2-8dc7-4e6f-b013-76c9222b6918&width=768&dpr=3&quality=100&sign=9f1ed3ce&sv=2) Infography[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#infography) ---------------------------------------------------------------------------------------------------------------------- I love this book so much that I have created an infography : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MAffO8xa1ZWmgZvfeK2%252Fuploads%252FWhJJjccoxe3gwVvULqLq%252FThe-Software-Craftsman.webp%3Falt%3Dmedia%26token%3D9b87accb-55f6-4d86-8501-25a194e4d058&width=768&dpr=3&quality=100&sign=9441d67f&sv=2) The Software Craftsman Infographic [The Software Craftsman.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAffO8xa1ZWmgZvfeK2%2Fuploads%2F63yFNA9kkJSBLcgusctM%2FThe%20Software%20Craftsman.pdf?alt=media&token=bbfab9ed-b07c-410b-896b-99dc4a8430d7) PDF · 418KB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAffO8xa1ZWmgZvfeK2%2Fuploads%2F63yFNA9kkJSBLcgusctM%2FThe%20Software%20Craftsman.pdf?alt=media&token=bbfab9ed-b07c-410b-896b-99dc4a8430d7) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBsT6gun_BODhCpqhEU%252F-MBsTRhut0a1SNAbYctp%252Fimage.png%3Falt%3Dmedia%26token%3D4db44dbf-02a9-4b9f-9a9e-a914cb13e2c3&width=768&dpr=3&quality=100&sign=50f2cdc8&sv=2) The Software Craftsman infography Book notes[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#book-notes) ---------------------------------------------------------------------------------------------------------------------- ### Introduction[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#introduction) * Good senior developer in the 90's : No one else can understand his code * Working code * The minimum for a professional * How it is done is as important as getting it done * Is * A mindset * For developers * For companies * Adoption of (XP) * Practices * Disciplines * Not a methodology ### Ideology[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#ideology) #### A new reality[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#a-new-reality) What modern developers do : * Coding (But not only) * Speak to customers * Automate tests/deployment * Make technical choices * Work in distributed teams * Help clients to define and prioritize requirements * Present products to potential clients/partners * Help with pre-sales activities * Estimate time & costs * Interview new team members * Design and evolve software architecture * Understand business goals * Make decisions based on trade-offs * Keep an eye on new technologies/methodologies * ... With agile methodologies, mentality is evolving. More collaboration and dev are now more proud to be dev #### Agile[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#agile) * 2 types of disciplines * Process oriented (Value) * Plan * Measure velocity * Roles people should play * Meetings * ... * Technical Oriented * TDD * Continuous integration * ... _**Agility is about building the right thing, Craftsmanship is about building the thing right**_ * "Craftsmanship over crap", Robert C. Martin (2008) * Team = responsible of the realization (all aspects) * **Being good at writing code is the minimum skill expected from software professionals"** #### Why do agile transformations fail ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#why-do-agile-transformations-fail) * In software project * Most important deliverable = software itself * Change their process through coaching * **Nothing to help writing better software** * Agile coaches * Mainly focused on process * Not focused on technical excellence #### Abstract[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#abstract) * To remain competitive companies need to deliver * Software faster * With better quality * Agile vs software craftsmanship * Agile * Adopting Scrum * Daily stand-up * Manage backlog * Manage W.I.P * Agility does not * Improve magically the quality of the software * Make developers better * Complements each other / need to be focused on both * Improve the process * Improve technical excellence ### The Manifesto for Software Craftsmanship (2008)[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#the-manifesto-for-software-craftsmanship-2008) #### 4 values[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#id-4-values) `Not only working software, but also well-crafted software` * Think about a software * Without * Tests * Team to explain code * You have to maintain and develop on it * It is a working software... * Reasons of failures * Bad business strategy * Bad project management * Big Time To Market Organization do not pay attention to code quality * Well-crafted * Automated tests * TDD * Business language in code * Simple design * Quality of the code * Only visible by dev * No time allowed to refactor Quality of the code may not guarantee the success of a project But can be the main cause of failure. `Not only responding to change, but also steadily adding value` * Not just * Adding new features * Fixing bugs * BUT also * Improve constantly structure of the code * Keep it clean * Testable * Extendable * Change must be fast enough * High Quality Software `Not only individuals and interactions, but also a community of professionals` * Sharing * Knowledge * Ideas * Successes and failures * Humility * Learning from each others * Mentoring * Prepare the next generation * Craftsmen want to work with * Passionates * Inspiring professionals `Not only customer collaboration, but also productive partnerships` * Productive partnerships * Not only do what you are told to do * Not factory workers * Passionate & talented people want * Success * Successful projects * We must help our clients * Some clients are not ready * Software development = industrial process * Developer have to follow orders * Recrute cheaper devs * Will not listen devs Tech leads = outdated people * Very difficult environment for craftsman #### Software Craftsman[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#software-craftsman) * Believes that * Software is a craft * Writing good software requires * Skill * Careful attention * Practices his craft * To become more skillful * To produce better software * A professional * Work is consistently of high quality #### Goal of the manifesto[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#goal-of-the-manifesto) _**Reduce the gap between Agile methodologies Technical world**_ ### Definition[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#definition) * Is NOT * Beautiful code * Test Driven Development * Self selected group of people * Specific technologies/methodologies * Certifications * Religion * Mindset * Consider software dev as a craft * A long journey to mastery * Choose to be responsible for their own careers * Constant learning * Tools * Techniques * _**Key words**_ * Responsibility * Professionalism * Pragmatism * Pride * Learning from others * Share knowledge * Caring about what they do * Help customers #### Attitude[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#attitude) * Constantly finding ways to become better professional * Continuous learning * _**"Who owns your career ?"**_ * What if our company * Does not buy any books * Never sent us to any training course or conferences * Does that mean the company is bad ? * Ourselves * We are professionals * We own our careers * We must keep us up to date * Books * Tech specific * Conceptual * Behavorial * Revolutionary * Blogs * Tech websites * Social medias * `Practice, practice, practice` * **The more we practice, the more comfortable** **we become** * Katas * Simple coding exercices * To practice * Techniques/approaches * Languages * Technologies * Pet projects * Real projects * Without pressure * You choose technologies & methodologies * Open source * Contributes to projects * Pair program * Enhances team spirit * Social activity * Knowledge sharing * Open minds * Learn * Share * Or both * Discovery * Second level of ignorance * I don't know what I don't know * Accept the fact that we have a lot to learn * Sign of maturity * A first step to mastery * Share _"I_'_**m the smartest man in Athens because I know that I know nothing"**_ _- Socrates_ #### Abstract[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#abstract-1) * Essential to a successful career * Determination * Passion * The day we stop learning & practicing * The day we start losing control of our own careers * Focus * Becoming better professionals * Not on "how do I get my promotion/bonus" Peter's principle : "_**Only incompetent people are scared to lose their job**_" ### Technical Practices[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#technical-p-ractices) * `For building the right thing` : * Feedback loops * Visualizing WIP * Backlogs * Stand ups * User Stories * Acceptance criteria * Definitions : Ready / Done * `For building the thing right ?` ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBsYWduKEPpsN190lHS%252F-MBsZ6HbYdYpxP-eolrI%252Fimage.png%3Falt%3Dmedia%26token%3D52ecd2fd-fe83-4793-8437-9a5a03525f55&width=768&dpr=3&quality=100&sign=65f3f04b&sv=2) * How do I sell tech practices ? * Focus on the benefits * Better understanding of requirements * Knowledge sharing * Reduction of bugs * Quick & automated releases * Be pragmatic * Always a better way * Decide your practices * To answer a need * Not because someone says to * Compare values between practices [PreviousDev ethics](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/practices/dev-ethics) [NextEgoless Crafting](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/egoless-crafting) Last updated 4 years ago * [Infography](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#infography) * [Book notes](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#book-notes) * [Introduction](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#introduction) * [Ideology](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#ideology) * [The Manifesto for Software Craftsmanship (2008)](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#the-manifesto-for-software-craftsmanship-2008) * [Definition](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#definition) * [Technical Practices](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman#technical-p-ractices) --- # Write S.O.L.I.D code | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/write-s.o.l.i.d-code.md) . Objectives[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/write-s.o.l.i.d-code#objectives) ------------------------------------------------------------------------------------------------------------------------------- * Understand what is “S.O.L.I.D” * Learn how to use those principles through hands-on Workshop designed using 4C model (support provided) : * **Connection** : Bad code / Good code * **Concepts** : Slide deck * **Concrete** **Practice** : * Bad code / Good code part 2 * Hands on code katas : [**https://github.com/ythirion/solid-kata**](https://github.com/ythirion/solid-kata) * **Conclusion** : Where do you stand ? Resources[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/write-s.o.l.i.d-code#resources) ----------------------------------------------------------------------------------------------------------------------------- * S.O.L.I.D Cheat Sheet : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MKEpXd2czOSbQiFZ0jW%252F-MKEqYKapFEvKQGXFIme%252Fsolid-cheat-sheet.jpg%3Falt%3Dmedia%26token%3D029a4596-97aa-472a-9f1a-a742ad99ab96&width=768&dpr=3&quality=100&sign=fa4f0b22&sv=2) Resources[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/write-s.o.l.i.d-code#resources-1) ------------------------------------------------------------------------------------------------------------------------------- * [Why every element of SOLID are wrong](https://speakerdeck.com/tastapod/why-every-element-of-solid-is-wrong) * [CUPID](https://speakerdeck.com/tastapod/cupid-for-joyful-coding) is the new SOLID [PreviousClean Architecture](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/clean-architecture) [NextMocking](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking) Last updated 5 years ago * [Objectives](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/write-s.o.l.i.d-code#objectives) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/write-s.o.l.i.d-code#resources) * [Resources](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/write-s.o.l.i.d-code#resources-1) --- # Decision Making Principles and Practices | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices.md) . Introduction[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#introduction) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ The better resource I use on this topic is the book [_**27 Decision making principles and practices**_](https://leanpub.com/decision-making-principles) from [Jimmy Janlen](https://twitter.com/jimmyjanlen) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCRh_xcSKUceIXxy1zD%252F-MCRiBGkPBCghjM6JTaB%252Fimage.png%3Falt%3Dmedia%26token%3Da95b946a-33c5-45e3-b6b6-8a386e38984b&width=768&dpr=3&quality=100&sign=b98ae67d&sv=2) I strongly invite you to buy the book on leanpub. In this post I will just give some pieces of it. Self-organized teams need to master the skill of having efficient and constructive discussions that engage and involve everyone. Teams must learn : * How to reach strong inclusive agreements * With clear decisions and next steps * How to make decisions fast ### What is the risk of failing in decision making ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#what-is-the-risk-of-failing-in-decision-making) Often teams struggle in this area and get stuck in decision paralysis. It doesn’t serve anyone and can really block from being competitive. Failing to agree as a team, resorting to “_**the boss decides**_”. It will undermine commitment, create conflicts and grudges, and quickly compromising the team. Always have a facilitator[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#always-have-a-facilitator) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Always ensure you have a facilitator for each and every meeting If you don't have a dedicated facilitator in your team you can : * Elect one at the beginning of the meeting * Rotate the facilitator responsibility (according to you) * For each meeting * Per week * Per sprint * Whatever How to propose ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#how-to-propose) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Before deciding anything we need to work on how to propose something. It's the first step before getting ready for decision taking. ### Present, Discuss, Improve[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#present-discuss-improve) * Allow the person with an idea to present the proposal * If a proposal has emerged through a discussion * Nominate a team member to summarize and present the proposal as he/she has understood it * This person becomes the temporary facilitator During the presentation everyone takes notes. Once the presentation is done : * Clarifying questions are asked * Ideas for improving the proposal are discussed * Concerns are raised, and if possible used to further **improve the proposal** ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCRlOROLMfe1kT3HOOd%252F-MCRlzmTllcrnzYHpSJl%252Fimage.png%3Falt%3Dmedia%26token%3D1d993af3-6b30-4250-adea-3bd960477d42&width=768&dpr=3&quality=100&sign=1e99bfdb&sv=2) ### Survey with fist of five[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#survey-with-fist-of-five) Participants express their current opinion about the direction of the discussion and the emerging proposal by voting with their fingers. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCRpqVv1WTsIhNpURSl%252F-MCRpw6eTq6d5_fv5NAa%252Fimage.png%3Falt%3Dmedia%26token%3De06cf0a8-4fc6-4324-93c4-010d6845e1e2&width=768&dpr=3&quality=100&sign=4108ffe3&sv=2) On a scale from 1 to 5, "_**How much closer do you think we are to an acceptable proposal ?**_" : * 1 : far, far, far away * 5 : We have reached an acceptable proposal Sometimes, despite discussions and concerns the group as a whole might actually agree that there is an acceptable proposal. ### Design proposals as experiment[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#design-proposals-as-experiment) Design a proposal as an experiment invites you to identify concerns that should be paid particular attention to in the evaluation. * What is the hypothesis? * How would we know if the decision has the intended impact? * How can we evaluate? * How would we be able to gauge or measure whether or not we need to revisit the decision and make adjustments, or try something else? * Can we set a date for an evaluation or retrospective? ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCS9RdupGl_R2PLt5aO%252F-MCS9WEgckemSDsREBD8%252Fimage.png%3Falt%3Dmedia%26token%3Dac1670b5-c3f1-4d40-a4f6-75900c584f6d&width=768&dpr=3&quality=100&sign=b779a1d7&sv=2) I like to use this simple template when I formulate an experiment : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCRpqVv1WTsIhNpURSl%252F-MCRs0x_pQVmJxQJEAhc%252Fimage.png%3Falt%3Dmedia%26token%3D12977289-cdea-4cac-a40f-9999676181aa&width=768&dpr=3&quality=100&sign=2eecd0d&sv=2) It forces us to formulate our experiment and structure them. How to decide ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#how-to-decide) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Techniques to decide with consent. ### Definitions[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#definitions) * _**Consent decision making**_ – the proposal is decided in the absent of qualified objection. * _**Consensus**_ - everyone must agree with the proposal. * _**Good enough proposal**_ \- means the proposal is clear enough for you. You trust that the team is capable of dealing with challenges and problems as they surface in a responsible manner. * _**Safe enough**_ - refers to the danger of failing. Is it safe enough to try, and then inspect and adapt? ### Consent voting[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#consent-voting) It’s way faster than consensus more inclusive and collaborative in nature than a democratic majority vote. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCS4jcB6qNos44Es6qh%252F-MCS4kyURvDMZpt73ZSp%252Fimage.png%3Falt%3Dmedia%26token%3Ddac4138d-f311-4f4e-88b3-099d9a813a30&width=768&dpr=3&quality=100&sign=430fe046&sv=2) * **No thumbs down** : a decision has been made and that the proposal has been accepted. * Thumbs sideways or closed fists * Ask those members to share why they voted like this * Clarify that the decision has been made * But it's always valuable to have their points of view * It's not the time to reopen a debate * **Thumbs down :** The proposal didn’t go through. * Ask the people to share their perspective on * Why this would be a bad thing ? * What harm it might cause ? * They could find a way to reformulate the proposal so that everyone is happy with the content. ### Declare intent and ask for objections[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#declare-intent-and-ask-for-objections) Sometimes you can declare decision mandate yourself. **For decisions that don’t impact the whole team, don’t be afraid to simply state you intentions**. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCS920AfRSsy9kGB9zy%252F-MCS9NdvfLFmwjYa9qtC%252Fimage.png%3Falt%3Dmedia%26token%3De8ec10aa-32a4-42c1-8000-d412f4889fc7&width=768&dpr=3&quality=100&sign=927191&sv=2) * Clearly share what you intend do, and why. * Ask if anyone objects. * If no one objects, thank the team for their trust. _Working with objection is even more relevant in this Covid period. Asking for objection only and set a deadline will increase your team decision pace._ ### Dot voting[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#dot-voting) Dot‐voting is an effective voting and sorting technique to order suggestions by popularity. * Agree on how many dot‐votes each person gets * If unsure, go for three dots each as a default * Each person can distribute the points as he/she want (3 dots on the same topic or 1 dot on 3 different post-its) * Once voting is done, rearrange the Post‐its according to the results ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCSD3Ns-U5jeDKSrH2h%252F-MCSDCykV3ROomM0dF1o%252Fimage.png%3Falt%3Dmedia%26token%3D64f434cb-5307-473f-bcfb-2fad2ce4c89f&width=768&dpr=3&quality=100&sign=cf6f2a76&sv=2) What to do when you are stuck ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#what-to-do-when-you-are-stuck) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ How to help the team have good, valuable and constructive discussions, that involve and _**engage everyone.**_ ### **Make decisions smaller**[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#make-decisions-smaller) One approach to make progress when stuck in a discussion around a proposal, or when you as team fail to agree on a way forward, is to r_**educe the size of the proposal or slice up the decisions to be made**_. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCS9l9ZMdC0fVqBrVr7%252F-MCS9ymv4qneR0lxWxRe%252Fimage.png%3Falt%3Dmedia%26token%3D321db5f8-111d-4e22-9e85-c669e60d81c8&width=768&dpr=3&quality=100&sign=57975a81&sv=2) ### Delegate decision mandate[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#delegate-decision-mandate) One approach to make faster progress can be to delegate to a smaller group (can be nominated or volunteers). That group hashes out the details of a proposal, AND are given mandate and trust to make the actual decision. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCSA6pb7BJZ_B1zyYd4%252F-MCSADTvnLpOTHx_cOIb%252Fimage.png%3Falt%3Dmedia%26token%3D14ea5f37-8066-492f-8a8c-3163ff59c26c&width=768&dpr=3&quality=100&sign=bf0dc21d&sv=2) ### Clarify Statu Quo[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#clarify-statu-quo) _**Dont' take a decision just because you have to. Sometimes Status quo is a perfectly valid outcome.**_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCSBHKmPr-eaEp-PS3v%252F-MCSBMG5SUU38V-bsr_k%252Fimage.png%3Falt%3Dmedia%26token%3D7b9ee3af-fa2f-4b3d-b969-5abd93b294cb&width=768&dpr=3&quality=100&sign=a3ad2869&sv=2) If the proposal is not agreed upon : * Clarify what will remain the same * What will still be unclear * Which risks will remain unmitigated * ... ### When critical accountable decides[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#when-critical-accountable-decides) If the team fails to agree upon a decision, being stuck in discussions or having every proposal blocked, the default principle can be to _**delegate the decision to a single person, the accountable**_. It's the last resort solution. To do so, accountability must be crystal clear (see Delegation Poker). **How to stimulate** **t**eam wisdom ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#how-to-stimulate-team-wisdom) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Make everyone heard When a heated discussion has been going on for a while and only a few members vocally engage, call a timeout and do a round. Ask everyone to briefly share : * What they think * How they feel the dialog is going * What opinion they have ### Individual thinking then share[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#individual-thinking-then-share) Start with individual thinking, then share with the whole team. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCSCMZfbmNhXLg8P8tu%252F-MCSCzMvQxTg61kNbV4-%252Fimage.png%3Falt%3Dmedia%26token%3Dc27f0705-8637-4ef1-8600-bf396838b01e&width=768&dpr=3&quality=100&sign=be2543d4&sv=2) ### Collaborative proposals (1-2-4-All)[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#collaborative-proposals-1-2-4-all) It is a workshop format designed to quickly generate a collaborative and inclusive proposal. It is a liberating structure documented [**here**](http://www.liberatingstructures.com/1-1-2-4-all/) . ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCSDnW8730_0DP2DvA0%252F-MCSE9NVeBQO4HXrBidf%252Fimage.png%3Falt%3Dmedia%26token%3D2e3a85a2-7efc-43c8-bba1-c2e4d035eb99&width=768&dpr=3&quality=100&sign=ae7e8acf&sv=2) * Everyone individually drafts a proposal in silence - **3'** * In pair, share and explain their draft to each other - **2'** * Provide feedback on what they like and don’t like * The pair puts away their drafts and creates a joint proposal, building on both their drafts as inspiration - **3'** * Each pair presents their proposal to another pair - **2'** * The two pairs joins up as a group of four, designing a joint proposal. - **4'** * Each group presents their proposal to the whole team. * Vote on most popular proposal. How to structure discussions ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#how-to-structure-discussions) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- How to help the team have good, valuable and constructive discussions, that involve and engage everyone. ### Parking lot[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#parking-lot) To maintain focus / avoid the frustration of leaving important concerns unresolved : * capture the unanswered question on a Post‐it * Put it up on the parking‐lot area on a board ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCSF5WIFjkRMkryC17g%252F-MCSF7zbz9brDP43TFz4%252Fimage.png%3Falt%3Dmedia%26token%3D16f74b44-bb0b-4605-ae50-aff30aebfd6f&width=768&dpr=3&quality=100&sign=f190dbb9&sv=2) It acknowledges that the question is important, which can help people bring their focus back to the original discussion. ### Timebox[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#timebox) Set a strict constraint on the time we allow ourselves to invest in a topic or in a discussion. How to strengthen commitment ?[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#how-to-strengthen-commitment) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Maximize the probability of the agreements becoming reality by strengthening each individual’s commitment to the decisions. ### Summarize actions and owners[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#summarize-actions-and-owners) For each and every ToDo, make sure there is a name associated with it. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCSFcR317LK1ezt0Yjj%252F-MCSFtaIt09pcMVzAxNe%252Fimage.png%3Falt%3Dmedia%26token%3Dc572cb44-2152-4ae6-bfcf-9a8d425123bc&width=768&dpr=3&quality=100&sign=c8aece47&sv=2) ### DIBB rationale narrative[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#dibb-rationale-narrative) A framework to test if you can tell a comprehensive story on why you decided on what you did. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCS3v1joMSs9iH3m6km%252F-MCS3vUOvG_ahNz-xBjf%252Fimage.png%3Falt%3Dmedia%26token%3Ddafbc49e-b541-4082-9e61-a97896348194&width=768&dpr=3&quality=100&sign=a3eb49ee&sv=2) DIBB is created by Spotify and is part of “Spotify Rhythm” * What DATA did you look at? * What were your sources? * Was it quantitative or qualitative? * Which INSIGHTS and conclusions did you draw from the data? * What are your BELIEFS now? * Which hypotheses have you formulated? * Does this reasoning connect to the action you BET will reach the desired outcome? It helps to have a structured dialog in which you invite people to challenge the data, insights and beliefs, providing other perspectives and alternatives, as opposed to have a purely opinion driven dialog. ### Architecture Decision Record[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#architecture-decision-record) In Software Architecture it's a document that captures an important architectural decision made along with its context and consequences. You can use a template and structure your decisions log with this format : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCSAfqR9mCje-RXuysf%252F-MCSB9gLVdn_5kL49euw%252Fimage.png%3Falt%3Dmedia%26token%3Da302e7c3-13d1-44f2-b57c-b6a7710631e5&width=768&dpr=3&quality=100&sign=803af570&sv=2) Clarify team decision scope with Delegation Poker[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#clarify-team-decision-scope-with-delegation-poker) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCS8qFlNciqVKev6266%252F-MCS8wpfXYSOWImc8kUl%252Fimage.png%3Falt%3Dmedia%26token%3Da1d7894a-0d4d-47c3-8284-34f0dff02cba&width=768&dpr=3&quality=100&sign=1ad0e0f8&sv=2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCS8qFlNciqVKev6266%252F-MCS9-5Xkte-aUdsTnwu%252Fimage.png%3Falt%3Dmedia%26token%3D83c80a3b-edcb-4c9f-96f4-e54e2678c80a&width=768&dpr=3&quality=100&sign=e1b3db03&sv=2) Reading notes[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#reading-notes) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MCRit4-G6uc-cY0XrVY%252F-MCRj4y_aX9R1zZTAcIU%252Fimage.png%3Falt%3Dmedia%26token%3D6cb0ae10-dc74-467d-9f31-daf630c901db&width=768&dpr=3&quality=100&sign=8f7128dc&sv=2) [PreviousHow to improve Team Decision making ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making) [NextLearning 3.0](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/learning-3.0) Last updated 6 years ago * [Introduction](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#introduction) * [What is the risk of failing in decision making ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#what-is-the-risk-of-failing-in-decision-making) * [Always have a facilitator](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#always-have-a-facilitator) * [How to propose ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#how-to-propose) * [Present, Discuss, Improve](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#present-discuss-improve) * [Survey with fist of five](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#survey-with-fist-of-five) * [Design proposals as experiment](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#design-proposals-as-experiment) * [How to decide ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#how-to-decide) * [Definitions](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#definitions) * [Consent voting](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#consent-voting) * [Declare intent and ask for objections](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#declare-intent-and-ask-for-objections) * [Dot voting](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#dot-voting) * [What to do when you are stuck ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#what-to-do-when-you-are-stuck) * [Make decisions smaller](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#make-decisions-smaller) * [Delegate decision mandate](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#delegate-decision-mandate) * [Clarify Statu Quo](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#clarify-statu-quo) * [When critical accountable decides](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#when-critical-accountable-decides) * [How to stimulate team wisdom ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#how-to-stimulate-team-wisdom) * [Individual thinking then share](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#individual-thinking-then-share) * [Collaborative proposals (1-2-4-All)](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#collaborative-proposals-1-2-4-all) * [How to structure discussions ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#how-to-structure-discussions) * [Parking lot](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#parking-lot) * [Timebox](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#timebox) * [How to strengthen commitment ?](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#how-to-strengthen-commitment) * [Summarize actions and owners](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#summarize-actions-and-owners) * [DIBB rationale narrative](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#dibb-rationale-narrative) * [Architecture Decision Record](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#architecture-decision-record) * [Clarify team decision scope with Delegation Poker](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#clarify-team-decision-scope-with-delegation-poker) * [Reading notes](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making/decision-making-principles-and-practices#reading-notes) --- # Leadership is language | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language.md) . Pitch[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#pitch) ------------------------------------------------------------------------------------------------ Few of us realize that our language in the workplace inhibits creative problem-solving and escalates uncertainty and stress. In both high-pressure situations and everyday scenarios, in each meeting and email, we have the opportunity to empower our colleagues by using the right words. In Leadership is Language, Former US navy captain David Marquet expands on his bestselling leadership book Turn the Ship Around! and shows managers and leaders the next step in their development: how to enable their team through communication. Marquet outlines a set of principles and tools that help leaders inspire their people to take responsibility and address challenges without waiting to be told what to do, highlighting how small changes in language can lead to dramatic changes in a team's success and happiness. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLgflS2zvtF9QaN2lei%252F-MLgfmAV-2RHtO5tdfil%252Fimage.png%3Falt%3Dmedia%26token%3D01a17ab1-5058-4f48-bfb5-4b1e6312f252&width=768&dpr=3&quality=100&sign=424b8d49&sv=2) _**Source**_ : [https://www.goodreads.com/book/show/42774083-leadership-is-language](https://www.goodreads.com/book/show/42774083-leadership-is-language) Infographic[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#infographic) ------------------------------------------------------------------------------------------------------------ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLl0DHQ_VwZiroWkg32%252F-MLl3kll7K4tUD2Ud_Kj%252Fimage.png%3Falt%3Dmedia%26token%3D343ba92e-3567-4d42-8334-cc62c7e50676&width=768&dpr=3&quality=100&sign=b2dd82f9&sv=2) Home-made infographic of the book [Leadership is language.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MLlthTaNyQmEbnUiRE6%2F-MLlu134QsEpVUmsMyHz%2FLeadership%20is%20language.pdf?alt=media&token=38511d1d-7b67-4914-be56-c99bba934cfb) PDF · 225KB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MLlthTaNyQmEbnUiRE6%2F-MLlu134QsEpVUmsMyHz%2FLeadership%20is%20language.pdf?alt=media&token=38511d1d-7b67-4914-be56-c99bba934cfb) Notes[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#notes) ------------------------------------------------------------------------------------------------ ### Santa Fé[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#santa-fe) * A system over which had little control * What we could control * How we talked to each other * _**Starting with me**_ Changing the way we communicated, changed the culture * Changing ours words changed our world * Replaced * Reactive language * Convince, coerce, comply, conform * WITH Proactive language of intent & commitment to action * A language of "prove & perform" * With a language of "Improve & learn" * A language of invulnerability & certainty * With a language of vulnerability & curiosity ### Sink of El Faro[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#sink-of-el-faro) * Used an old playbook * A real danger to use old thinking in new situations * Language of the captain * Binary affirmations * "You know what I'm saying" * "It's going to be between these 2, right ?" * Justifying decision * "Should work out OK" * No vulnerability displayed * Emotions are necessary for decision-making * They were programmed for * Obeyed the clock when they should have controlled the clock * The captain coerced the crew into compliance instead of collaboration * The crew complied instead of having made their own commitment * They continued to follow a monolithic plan instead of having completed 1 section at a time * They were in prove mode instead of improve mode * They conformed to their roles instead of connected with each other ### The new playbook[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#the-new-playbook) * 6 new leadership principles : * Control the clock instead of obeying the clock * Collaborate instead of coercing * Commitment rather than compliance * Complete defined goals instead of continuing work indefinitely * Improve outcomes rather than prove ability * Connect with people instead of conforming to your role * Diverge first * Allow each member to make his/her guess before being influenced * Greatest possible diversity of thought * WISDOM OF THE CROWD * 2 different kind of work * Decision-making (Thinking) * Bluework * "How do you see it ?" * "What can we do better ?" * Execution (Doing) * Redwork * "Get it done!" * "Make it happen" We are all both Redworkers and Blueworkers #### Differences between Redwork & Bluework[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#differences-between-redwork-and-bluework) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLgil6vz7kdHwQPjwqa%252F-MLgitQLK1Lrhw6jsUX7%252Fimage.png%3Falt%3Dmedia%26token%3D55aa407d-4278-4473-a006-67179a8cbe30&width=768&dpr=3&quality=100&sign=af70412&sv=2) The problem is that the language we use is only about doing, not thinking ### 1) Control the clock : exiting redwork[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-1-control-the-clock-exiting-redwork) * Bluework allows us to adapt * But you have no chance to do bluework if you don't control the clock #### **1) Make a pause possible**[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-1-make-a-pause-possible) * Instead of preempting one * Invite a pause * Examples : score 1 to 5 * `_"We need to make quota today"_`: 1 * `_"I'll be coming by at twelve to check on you"_` : 3 * `_"I'm a bit nervous about the storm. we are going to start work, but we will revisit this decision at twelve" : 5_` #### **2) Give the pause a name**[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-2-give-the-pause-a-name) * "Time-out" * "Hands-off" * Raise a hand * ... #### **3) Call a pause**[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-3-call-a-pause) * Instead of pressing on with redwork #### **4) Preplan the next pause**[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-4-preplan-the-next-pause) * Instead of relying on someone to signal 1 * Metacognition * Thinking about our thinking * By preplanning next pause * Knowing that a pause is coming allows teams to focus 100 percent on the work * Allow leaders to resist the trap of becoming "good idea fairies" _**"If you are on the team and see something unexpected, it's your responsibility to call a pause"**_ #### Attention points[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#attention-points) * Team in redwork want to continue in redwork * The team relies on the leader either to preplan the length of redwork and the moment to exit it ### 2) Collaborate : into the bluework[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-2-collaborate-into-the-bluework) Let the doers be the deciders **\->** move from coercion to collaboration #### **1) Vote first, Then discuss**[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-1-vote-first-then-discuss) * Conduct anonymous blind electronic polling * Ask probabilistic questions instead of binary ones * _**Use probability cards**_ * "How strongly do you believe we should launch on time?" * 1 : totally disagree * 99 : totally agree * Use dot voting * Use fist to five voting #### **2) Be curious, not compelling**[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-2-be-curious-not-compelling) * `Seek first to understand, Then to be understood` * LEADERS SPEAK LAST * Ask better questions Instead of Try Question stacking One and done Teaching moment A learning moment Dirty question Clean one\` Binary questions Start with what / how Self-affirming Self-education Jumping into the future Start with present, past then future _"Before I tell you what I think we should do, what would you do if I weren't there_ #### 3) Invite dissent rather than drive consensus[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-3-invite-dissent-rather-than-drive-consensus) _**Use dissent cards**_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLgnxGPMH_2CI5a2Yax%252F-MLh17CHnX6s1DchU1ON%252Fimage.png%3Falt%3Dmedia%26token%3Da7be85ee-e5e9-4ae6-b35c-14881103ec7e&width=768&dpr=3&quality=100&sign=2420b119&sv=2) * In a ratio of five to one if you have a red card * You have to dissent * The card makes it safe and necessary to do so * Fear in many organizations * Dissent = disharmony * Is to be avoided * In organizations that practice dissent * Where people are dissenting with the best interests fo the organization * And where people respond to dissenters with curiosity * `_**Dissent creates a sense of excitement and energy**_` * Instead of arguing with dissenter * And explaining why he is wrong * Ask curious questions * "What's behind what you are saying ?" * "Can you tell us more about that ?" * Invite for dissent * `_"Paul you've presented your case. I'd like to invite someone to challenge that position"_` #### 4) Give information, not instructions[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-4-give-information-not-instructions) From "Park there" to "I see a parking spot there" _**A leader's obligation is to listen to the dissenters**_ ### 3) Commit[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-3-commit) #### 1) Commit to learn, Not (just) Do[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-1-commit-to-learn-not-just-do) Develop hypothesis to test rather than making decisions to execute #### 2) Commit actions, not beliefs[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-2-commit-actions-not-beliefs) Once the decision is made don't try to convince dissenters #### 3) Chunk it small but do it all[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-3-chunk-it-small-but-do-it-all) * Separate the decision-maker from the decision evaluator : * Junior as the decision-maker * Senior as the decision-evaluator ### 4) Complete : the end of Redwork[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-4-complete-the-end-of-redwork) * Completion mark the end of a period of redwork * It means thinking of work in terms of smaller chunks of production work (redwork) * It serves to proactively control the clock * Exiting us from redwork Launching us into bluework #### 1) Chunk work for frequent completes early (Few completes late)[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-1-chunk-work-for-frequent-completes-early-few-completes-late) _**At the beginning of a project : shorter redwork periods and more frequent bluework periods to bias toward learning and improving**_ * Completes invites Celebrate * Complete is an interruption to redwork * The cost of managing by metrics * `Workers seek to meet only the minimum requirements` #### 2) Celebrate with, NOT For[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-2-celebrate-with-not-for) * Celebrating For : * Usual sentences : * "Good job" * "I m so proud of you" * Here : * Setting myself up as the judge * `Transference of the reward to us rather than leaving it with the person` _**To celebrate with (not for)**_ Don't But Evaluate Observe Judge Observe Praise Prize `_"I saw that the proposal went out yesterday. Thank you. That will allow the client to look at it before the weekend"_` _**Use Descriptive statements**_ It can start with "I see", I" noticed", "It looks like" #### 3) Focus on behavior, not characteristics[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-3-focus-on-behavior-not-characteristics) _**Be conscious about how even positive feedback can have negative consequences it delivered improperly**_ #### 4) Focus on Journey, Not destination[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-4-focus-on-journey-not-destination) * Invite people to tell their story * "Tell me what key decisions you needed to make" * "Tell me more about..." * We need to hear the story behind the achievement ### 5) Improve : completing the cycle[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-5-improve-completing-the-cycle) * Aim for discontinuous improvement * Improvement process (aka learning process) is a stairway not a ramp * "Be good" self vs "Get better" self * Be good * Wants to feel * Competent * Effective * Credible * "I didn't anything wrong" * "I would do it the same next time" * "I've been doing this a long time" * Get better * "What could we do differently ?" _**"Employees with the autonomy to decide how to go about solving problems and achieving goals innovate"**_ #### 1) Forward, Not Backward[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-1-forward-not-backward) "What do we want to do differently next time ?" #### 2) Outward, not inward[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-2-outward-not-inward) * Focusing on others instead of oneself * "What could we do better serve our customers ?" #### 3) Process, not people[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-3-process-not-people) "How could this be done better ?" #### 4) Achieve excellence, Not avoid errors[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-4-achieve-excellence-not-avoid-errors) Improve pits the "get better" self against the "be good" ### 6) Connect : enabling play[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-6-connect-enabling-play) * Play is about caring * What people think * Caring how they feel * Caring for their personal goals #### 1) Flatten the power gradient[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-1-flatten-the-power-gradient) * _**Power Gradient**_ : The amount of social distance there is between one person and another * _Examples_ : Meeting doesn't start until the most senior person shows up * Censoring of information is directly proportionate to it * From * "I've been doing this longer than you" * "Im the boss here" * To * "We need to decide about this" * "Your opinion matters here" #### 2) Admit you don't know[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-2-admit-you-dont-know) * It's hard to connect with a Know-it-all * If a boss says _**"I don't know..."**_ * It allows junior to say * "I know..." * "How about this...?" #### 3) Be vulnerable[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-3-be-vulnerable) * It reduces Power gradient * "How is everyone feeling about this ?" * "I think I m moving away from excited toward worried" #### 4) Trust first[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-4-trust-first) * Your trust in people will affect their behavior * They will work harder * Stay longer * Unlock more discretionary effort Never underestimate the power of fear to distort common sense in environments with a strong culture of control and compliance "Cheat sheet"[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#cheat-sheet) -------------------------------------------------------------------------------------------------------------- * 2 different work modes * Redwork : active production * Mindset : prove * Bluework * Mindset : improve * Within these 2 modes : * Starting in redwork... * Transition from redwork to bluework with * CONTROL THE CLOCK, not obey the clock * COMPLETE not continue * While in bluework * COLLABORATE, not coerce with the goal to : IMPROVE, not prove * Transition from blue work back to redwork with : COMMIT not comply * And use the enabling play CONNECT not conform Mind map[](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#mind-map) ------------------------------------------------------------------------------------------------------ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MLgflS2zvtF9QaN2lei%252F-MLgg3fD1jWR3ITP-qUf%252Fimage.png%3Falt%3Dmedia%26token%3Dee513500-0991-420d-a03f-5a37b61a4006&width=768&dpr=3&quality=100&sign=f8d43c97&sv=2) [PreviousTowards a learning organization and beyond](https://yoan-thirion.gitbook.io/knowledge-base/leadership/towards-a-learning-organization-and-beyond) [NextSerious games](https://yoan-thirion.gitbook.io/knowledge-base/serious-games) Last updated 5 years ago * [Pitch](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#pitch) * [Infographic](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#infographic) * [Notes](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#notes) * [Santa Fé](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#santa-fe) * [Sink of El Faro](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#sink-of-el-faro) * [The new playbook](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#the-new-playbook) * [1) Control the clock : exiting redwork](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-1-control-the-clock-exiting-redwork) * [2) Collaborate : into the bluework](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-2-collaborate-into-the-bluework) * [3) Commit](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-3-commit) * [4) Complete : the end of Redwork](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-4-complete-the-end-of-redwork) * [5) Improve : completing the cycle](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-5-improve-completing-the-cycle) * [6) Connect : enabling play](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#id-6-connect-enabling-play) * ["Cheat sheet"](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#cheat-sheet) * [Mind map](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language#mind-map) --- # Book notes | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes.md) . [Agile People: A Radical Approach for HR & Managers](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers) [Agile testing : A Practical Guide for Testers and Agile Teams](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-testing-a-practical-guide-for-testers-and-agile-teams) [Boite à outils de l'intelligence émotionnelle](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle) [Building a better business using Lego Serious Play method](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-a-better-business-using-lego-serious-play-method) [Building evolutionary architectures](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures) [Code that fits in your head](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/code-that-fits-in-your-head) [Culture Agile](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/culture-agile) [Culture is everything](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/culture-is-everything) [Domain-Driven Design: The First 15 Years](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/domain-driven-design-the-first-15-years) [Dynamic Reteaming - The Art and Wisdom of Changing Teams](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/dynamic-reteaming-the-art-and-wisdom-of-changing-teams) [How to avoid a Climate Disaster](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/how-to-avoid-a-climate-disaster) [La liberté du commandement](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/la-liberte-du-commandement) [Réaliser ses rêves, ça s'apprend](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/realiser-ses-reves-ca-sapprend) [Refactoring at Scale](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/refactoring-at-scale) [Succeeding with OKRs in Agile](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/succeding-with-okrs-in-agile) [Team Topologies](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/team-topologies) [The Good Life](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/the-good-life) [Tu fais quoi dans la vie](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/tu-fais-quoi-dans-la-vie) [Who Does What By How Much?](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/who-does-what-by-how-much) [PreviousResources](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources) [NextAgile People: A Radical Approach for HR & Managers](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers) --- # Back to the Future | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future.md) . ### Contexte[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#contexte) Cette rétrospective est un exercice de projection dans le futur permettant à une équipe de définir ensemble : * Leur futur idéal * Les obstacles qu'ils auront affrontés * Les moments majeurs * Les surprises * Leurs sources de motivation ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdMm3h2VBcKCjXPNWAK%252F-MdMnjpcqmjN8nJbjO4b%252FRetro%2520back%2520to%2520the%2520future.png%3Falt%3Dmedia%26token%3D35323600-14ae-4db8-ad29-d3adb4f9905f&width=768&dpr=3&quality=100&sign=da29ca7a&sv=2) ### Matériel requis[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#materiel-requis) #### **En physique**[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#en-physique) Pour cette rétrospective, il vous faudra préparer le matériel suivant : * Un tableau blanc * Des marqueurs * Des post-its : 5 couleurs différentes * Un téléphone et/ou des enceintes pour la musique (Optionnel) #### En remote[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#en-remote) * 1 Licence miro pour pouvoir importer le board disponible dans les ressources de cette page * Ou le refaire chez soi à partir de la version Read-Only ici : * [https://miro.com/app/board/o9J\_kmsv4R4=/](https://miro.com/app/board/o9J_kmsv4R4=/) _**Temps nécessaire : 2h**_ Déroulé de l'atelier[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#deroule-de-latelier) -------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdM_6vIhuVw10CLWx9L%252F-MdMeUBZoP1DbGIpQOdC%252Fimage.png%3Falt%3Dmedia%26token%3D3169704b-6dc9-46f6-bce9-c8a2731aa6c9&width=768&dpr=3&quality=100&sign=b6f053d8&sv=2) ### Etape 1 - Futurespective (30')[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#etape-1-futurespective-30) #### Introduire le contexte de l'exercice : projection[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#introduire-le-contexte-de-lexercice-projection) On est ici pour se remémorer ce qu'il s'est passé entre aujourd'hui et _****_ Définir en avance la date dans le futur _**:**_ si vous avez 1 milestone d'équipe dans le futur ça peut être 1 bon point de fixation dans le futur. _**Demander à chaque participant(e) de remplir son canvas / ses post-its :**_ * Quels ont été les moments majeurs de l'aventure ? - _**5'**_ * Qu’est-ce qu’il aura fallu mettre en place pour que cela se produise ? - _**5'**_ * Qu'est ce qui t'as le plus surpris durant l'aventure ? - _**5'**_ * En quoi l'équipe a grandi ? - _**5'**_ * Quelles ont été tes principales sources de motivation / démotivation durant cette période ? - _**10'**_ Voici la légende pour chaque question : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdM_6vIhuVw10CLWx9L%252F-MdMgD_btkO1yzitOMH8%252Fimage.png%3Falt%3Dmedia%26token%3Dc30d2f0f-02da-4366-b02d-385a7c2c3a28&width=768&dpr=3&quality=100&sign=8c390216&sv=2) #### En ligne[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#en-ligne) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdM_6vIhuVw10CLWx9L%252F-MdMiU1NXV7BpLeEJ2OK%252Fimage.png%3Falt%3Dmedia%26token%3D3a3e287b-3c70-4ede-84ba-027198e6cddf&width=768&dpr=3&quality=100&sign=44e7ed6b&sv=2) ### Etape 2 - Tell me a Story - 45'[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#etape-2-tell-me-a-story-45) * **Invitez les participant(s) à prendre du temps pour regarder le canva / post-its des autres membres de l'équipe - 15'** * Qu'est ce qui vous surprend ? * Posez vos questions * **Leur demander ensuite de créer une histoire sur base de leurs canvas individuels - 20'** * Le temps s'écoule de gauche (maintenant) à droite (date dans le futur) * Les moment majeurs * Ce qu'il a fallu mettre en place * les surprises de chacun * en quoi on a grandi * **Une fois l'histoire complète demandez leur de vous la présenter - 10'** #### En ligne[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#en-ligne-1) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdM_6vIhuVw10CLWx9L%252F-MdMifbH1q3uLhUi11kb%252Fimage.png%3Falt%3Dmedia%26token%3D49cf2243-be5d-41fe-af3a-3247064ad1bd&width=768&dpr=3&quality=100&sign=346dcbdd&sv=2) ### Etape 3 - What's Next ? - 30'[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#etape-3-whats-next-30) Une fois l'histoire clarifiée, faire réfléchir l'équipe via des questions ouvertes : * Comment on fait pour y arriver ? * **Quelles actions doit-on mettre en place dans le passé pour atteindre ce futur ?** * Qu'est-ce qui nous manque pour que ce futur arrive ? * Comment pouvons-nous nous organiser afin d'être dans les meilleurs conditions pour y arriver ? * Quelles seront les premières manifestations / premiers signes qui nous diront que nous sommes en bon chemin vers ce futur et que nous faisons des progrès ? #### En ligne[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#en-ligne-2) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdM_6vIhuVw10CLWx9L%252F-MdMj-mo3PUG9qG8EIwL%252Fimage.png%3Falt%3Dmedia%26token%3D395063f9-6dc0-4c03-9b21-48f4a8f48f9d&width=768&dpr=3&quality=100&sign=d0d079b5&sv=2) ### Etape 4 - Actions[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#etape-4-actions) * En groupe, reprendre les actions qui auront été remonté durant l'atelier et les prioriser. * L'équipe doit se commiter au moins sur 2 actions concrètes _**Les autres tickets serviront d'inputs pour les prochaines rétrospectives**_ #### En ligne[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#en-ligne-3) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdMjUcVd3fl2OVE2zBG%252F-MdMjgjpfeesWdOoh5TA%252Fimage.png%3Falt%3Dmedia%26token%3Dd2703a69-5e49-461d-ac10-e32cbd5d97aa&width=768&dpr=3&quality=100&sign=6112ec3&sv=2) ### Clôture - Feed-forward[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#cloture-feed-forward) * Demandez aux participant(e)s de se formuler un feed-forward : * _**Pour l'année prochaine je t'invite à ... afin de ...**_ * Invitez ceux qui le souhaitent à le partager _Le "feedforward" consiste à formuler des demandes ou à proposer des options ou des solutions orientées vers l'avenir, par opposition à la technique du "feedback", qui revient sur une situation passée._ #### En ligne[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#en-ligne-4) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MdMjUcVd3fl2OVE2zBG%252F-MdMlgpAmwN0MXtjl_5v%252Fimage.png%3Falt%3Dmedia%26token%3D35e4c6de-a30a-4a67-8c02-8c8403ad9bd9&width=768&dpr=3&quality=100&sign=c6d8507a&sv=2) Ressources[](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#ressources) ------------------------------------------------------------------------------------------------------------------------- [retro futurespective.rtb.zip](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MdM_6vIhuVw10CLWx9L%2F-MdMcJJVXGTEWddm-MVW%2Fretro%20futurespective.rtb.zip?alt=media&token=9368cbe3-85cb-4e6a-959d-8bf5fe0dcfb3) archive · 8MB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MdM_6vIhuVw10CLWx9L%2F-MdMcJJVXGTEWddm-MVW%2Fretro%20futurespective.rtb.zip?alt=media&token=9368cbe3-85cb-4e6a-959d-8bf5fe0dcfb3) Backup miro "Rétro back to the future" [PreviousRetrospectives](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives) [NextMission Impossible](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/mission-impossible) Last updated 5 years ago * [Contexte](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#contexte) * [Matériel requis](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#materiel-requis) * [Déroulé de l'atelier](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#deroule-de-latelier) * [Etape 1 - Futurespective (30')](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#etape-1-futurespective-30) * [Etape 2 - Tell me a Story - 45'](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#etape-2-tell-me-a-story-45) * [Etape 3 - What's Next ? - 30'](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#etape-3-whats-next-30) * [Etape 4 - Actions](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#etape-4-actions) * [Clôture - Feed-forward](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#cloture-feed-forward) * [Ressources](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/retrospectives/back-to-the-future#ressources) --- # TDD | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas.md) . During Workshops you can use Test Cards to help attendees think about Test Cases ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRjO-IgeifZZUD9mw_x%252F-MRjO0CxQcWYjdgBOurX%252Fimage.png%3Falt%3Dmedia%26token%3D4a82e06f-7da0-4a9a-ac60-bc0f8d76e12c&width=768&dpr=3&quality=100&sign=7d2aca35&sv=2) [test-cards.pdf](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MRjO-IgeifZZUD9mw_x%2F-MRjOJCEbcBljgH9VWDF%2Ftest-cards.pdf?alt=media&token=6e7859bc-bad6-4463-b473-b335aa593173) PDF · 566KB Download[Open](https://1936518372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAffO8xa1ZWmgZvfeK2%2F-MRjO-IgeifZZUD9mw_x%2F-MRjOJCEbcBljgH9VWDF%2Ftest-cards.pdf?alt=media&token=6e7859bc-bad6-4463-b473-b335aa593173) Here is the pdf version 2 katas to start your journey to TDD :[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas#id-2-katas-to-start-your-journey-to-tdd) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [Stack kata](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas/stack) [Fizzbuzz](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas/fizzbuzz) [PreviousLe Coding Dojo à l'école](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/le-coding-dojo-a-lecole) [NextStack kata](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/tdd-katas/stack) Last updated 5 years ago --- # Functional Programming made easy in Java & C# | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/functional-programming-made-easy-in-java-and-c.md) . Workshop created with [Alexandre Grison](https://twitter.com/algrison) Objectives[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/functional-programming-made-easy-in-java-and-c#objectives) --------------------------------------------------------------------------------------------------------------------------------------------------------- * Demystify together what is Functional Programming (FP) * Deep dive into FP paradigms like monads, pure functions, high order functions, and much more. * Understand why and how apply those principles in Object Oriented languages like java (with vavr) & C# (with language-ext). In this workshop we will demonstrate how to write Functional code that is: * More robust * Easier to read * Easier to maintain Support[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/functional-programming-made-easy-in-java-and-c#support) --------------------------------------------------------------------------------------------------------------------------------------------------- The coding part consists of _**fixing failing tests**_. Exercises are explained in the comment of the tests. Our solution in both languages are in the "solution" branches. * For Java : [https://github.com/ythirion/vavr-kata](https://github.com/ythirion/vavr-kata) * For C# : [https://github.com/ythirion/language-ext-kata](https://github.com/ythirion/language-ext-kata) * There is a third branch called "solution-async" that demonstrates the us of language-ext in an async [PreviousLet's refactor (FP style)](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-fp-style) [NextRefactoring journey](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/refactoring-journey-kata) Last updated 6 years ago * [Objectives](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/functional-programming-made-easy-in-java-and-c#objectives) * [Support](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/functional-programming-made-easy-in-java-and-c#support) --- # Agile People: A Radical Approach for HR & Managers | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers.md) . Pitch[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#title) ----------------------------------------------------------------------------------------------------------------------------------------------------- Corporate cultures, global mindsets, and employee priorities are changing, which means management and human resources departments must also evolve. To ensure teams are well crafted, motivated, and successful, managers and HR professionals must step outside their comfort zone and adapt to younger, newer ways of thinking—they must become Agile. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjMriGdV2v_lLVFt2i%252F-MAjSk8iQAZk0O858fLc%252Fimage.png%3Falt%3Dmedia%26token%3Dad5e4e4a-dd99-49e9-a591-5877e3b95e17&width=768&dpr=3&quality=100&sign=342a76b3&sv=2) Notes[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#notes) ----------------------------------------------------------------------------------------------------------------------------------------------------- "The most pressing task is to teach people how to learn" - Peter Drucker Ensure teams are * Well crafted * Motivated * Successful * Mangers must step outside their comfort zone ### The agile recruitment manifesto[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#the-agile-recruitment-manifesto) Keys = Transparency + Team involved ### Know people[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#know-people) * Real character * Invite candidates * Spend a day with the people * Speak with a wide range of people * Must have diversity in the talent pool ### Traditional way vs agile way[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#traditional-way-vs-agile-way) Evaluate competence vs Evaluate values and cultural fit ### 70:20:10 Model[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#id-70-20-10-model) * 70% : knowledge is learned through XP * 20% : Through coaching, mentoring, relationships * 10% Through structured course Learning is the only way to adapt ### Agile learning[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#agile-learning) Learn more effectively in small amounts Design : * Their own schedule * To-do list * Goals "Hire for attitude. Train for skills" - Unknown Mind map[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#mind-map) ----------------------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAjMriGdV2v_lLVFt2i%252F-MAjTONDNRqp-kxkGIlh%252Fimage.png%3Falt%3Dmedia%26token%3D2ef432e2-35cc-4a09-b7cf-c93c3bc2ea04&width=768&dpr=3&quality=100&sign=3f720b36&sv=2) [PreviousBook notes](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes) [NextAgile testing : A Practical Guide for Testers and Agile Teams](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-testing-a-practical-guide-for-testers-and-agile-teams) Last updated 3 years ago * [Pitch](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#title) * [Notes](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#notes) * [The agile recruitment manifesto](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#the-agile-recruitment-manifesto) * [Know people](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#know-people) * [Traditional way vs agile way](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#traditional-way-vs-agile-way) * [70:20:10 Model](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#id-70-20-10-model) * [Agile learning](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#agile-learning) * [Mind map](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-people-a-radical-approach-for-hr-and-managers#mind-map) --- # Building evolutionary architectures | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures.md) . Pitch[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures#pitch) ------------------------------------------------------------------------------------------------------------------------------------- **Support Constant Change** The software development ecosystem is constantly changing, providing a constant stream of new tools, frameworks, techniques, and paradigms. Over the past few years, incremental developments in core engineering practices for software development have created the foundations for rethinking how architecture changes over time, along with ways to protect important architectural characteristics as it evolves. This practical guide ties those parts together with a new way to think about architecture and time. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBijbywzAt1RVEDS9mU%252F-MBikfbB7GFLLjdqTWMw%252Fimage.png%3Falt%3Dmedia%26token%3D5489614c-a505-4ad5-a129-162c50061b32&width=768&dpr=3&quality=100&sign=d74f2042&sv=2) Notes[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures#notes) ------------------------------------------------------------------------------------------------------------------------------------- ### Evolutionary architecture[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures#evolutionary-architecture) * Other possible names ? * Agile * Incremental * Continual * ... * Incremental and Guided * Some objective exists Move towards ### Fitness functions[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures#fitness-functions) * From genetic algorithm to define success * "An architectural fitness function provides an objective integrity assessment of some characteristics" * System wide fitness function * Collection of fitness functions * Architecture metrics * Integrations tests * Unit tests * Contract Tests * Monitors * ... * Categories * Atomic * Run against a singular context * Exercise 1 particular aspect * Unit test for example * Holistic * Shared context * Triggered * Continual Mind map[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures#mind-map) ------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MBilFlfVz_VZWn-eHlj%252F-MBin57Njf5r1SGeI3kO%252Fimage.png%3Falt%3Dmedia%26token%3D26b39663-503e-4d6b-9135-3c1aed607490&width=768&dpr=3&quality=100&sign=bb1b8f93&sv=2) [PreviousBuilding a better business using Lego Serious Play method](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-a-better-business-using-lego-serious-play-method) [NextCode that fits in your head](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/code-that-fits-in-your-head) Last updated 6 years ago * [Pitch](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures#pitch) * [Notes](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures#notes) * [Evolutionary architecture](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures#evolutionary-architecture) * [Fitness functions](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures#fitness-functions) * [Mind map](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-evolutionary-architectures#mind-map) --- # Mocking | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking.md) . ### Objectives[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#objectives) * Understand what is a mock * Practice mocking on a code example Connection - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#connection-10) --------------------------------------------------------------------------------------------------------------------------- In groups of 3 answer to this question : in which cases do you use a Mock ? ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRsnMeO-Y24GhquPsqj%252F-MRsoMYjgi6Awy0waB-Q%252Fimage.png%3Falt%3Dmedia%26token%3Dd4dbecc7-842d-40df-a7c9-f63615edb8d3&width=768&dpr=3&quality=100&sign=9f045b8c&sv=2) Concepts - 5'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#concepts-5) --------------------------------------------------------------------------------------------------------------------- ### What is a Mock ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#what-is-a-mock) * Mock objects allow you to simulate the behavior of classes and interfaces * Letting the code in the test interact with them as if they were real * Mocks are used to test behavior of other objects, reals, but link to another object not available in test context or not implemented yet ### In which cases do we use them ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#in-which-cases-do-we-use-them) Be able to execute tests in isolation * Replaces dependency from other object * Set expectations on calls to the dependent object * Set the exact return values it should give you to perform the test you want When using mocks you need to always ask yourselves what are your test boundaries. ### Examples of situation[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#examples-of-situation) * The system needs a DB access * The system call services that are not available * The system call APIs developed by other teams which are not implemented yet ### How does it work ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#how-does-it-work) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRspez8q7HOXTm_V4w6%252F-MRsqH7Ujp1XGDgJhFWr%252Fimage.png%3Falt%3Dmedia%26token%3De7541966-7d4b-4b13-bc55-f2d1c44bd6d0&width=768&dpr=3&quality=100&sign=9da26c3e&sv=2) Concrete Practice - 45'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#concrete-practice-45) ----------------------------------------------------------------------------------------------------------------------------------------- We would like to test a system which convert an amount in a specific currency to another one. The converter method call a service to retrieve the change rate between the two currencies. _**Some rules are checked during treatment :**_ In our Unit Tests methods the service is not accessible -> we need to “mock” it ### How to ?[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#how-to) * Open the source code [here](https://github.com/ythirion/mock-kata) * Demonstrate how to add Mockito to our tests * This annotation allows us to use the @Mock annotation (inject Mocks) * Learn more about it [here](https://www.baeldung.com/mockito-junit-5-extension) ### Implement tests - 35'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#implement-tests-35) * The production code is implemented as expected * Please add the tests to check it When working with existing code and adding test on it : _**use your Code Coverage**_ ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MRtFC6kzrZxXgWsSzyw%252F-MRtFQ5v8oKelrD4inig%252Fimage.png%3Falt%3Dmedia%26token%3Dd37329ad-87cb-4f8d-b030-69df573ed75b&width=768&dpr=3&quality=100&sign=4de14226&sv=2) ### Debrief the exercise - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#debrief-the-exercise-10) * Group sharing * Demo the solution in the dedicated branch Conclusion - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#conclusion-10) --------------------------------------------------------------------------------------------------------------------------- * Think about what we did today. * If you had to explain the main idea of mocking to someone else, what would you say? * Write your explanation in a sentence or two on a post-it [PreviousWrite S.O.L.I.D code](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/write-s.o.l.i.d-code) [NextGilded Rose (Approval Testing)](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/gilded-rose-approval-testing) Last updated 5 years ago * [Objectives](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#objectives) * [Connection - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#connection-10) * [Concepts - 5'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#concepts-5) * [What is a Mock ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#what-is-a-mock) * [In which cases do we use them ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#in-which-cases-do-we-use-them) * [Examples of situation](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#examples-of-situation) * [How does it work ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#how-does-it-work) * [Concrete Practice - 45'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#concrete-practice-45) * [How to ?](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#how-to) * [Implement tests - 35'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#implement-tests-35) * [Debrief the exercise - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#debrief-the-exercise-10) * [Conclusion - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mocking#conclusion-10) Copy - The amount must be equal or greater than zero - Service checks if currencies exist - The service could throw other types of exception following the context - The return rate must be equal or greater than zero - The result must be between 0 and the maximum value pom.xml Copy org.mockito mockito-core 3.3.3 test org.mockito mockito-junit-jupiter 3.3.3 test Copy @ExtendWith(MockitoExtension.class) @Mock private ChangeRateService changeRateService; --- # Retour sur mon année 2020 | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020.md) . A travers cet article je propose de vous partager de manière transparente un bilan de ma première année d'exercice en tant que Freelance. La fin / début d'année est toujours un bon moment pour faire ce genre d'exercice : célébrer les accomplissements et identifier des axes d'amélioration. Je souhaite partager le résultat de cet exercice afin de montrer que même en étant seul on est en capacité de définir et de suivre des objectifs alignés avec ses propres valeurs (des objectifs pas uniquement mercantiles). Je vais donc partager dans un premier temps pourquoi j'ai choisi de devenir indépendant et présenterai mes OKRs 2020 ainsi que leurs status dans un second temps. Devenir indépendant[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#devenir-independant) ------------------------------------------------------------------------------------------------------------------------------------------- ### Pourquoi ?[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#pourquoi) Les raisons souvent invoqués par les personnes qui sautent le pas sont les suivantes : * Flexibilité du temps de travail * Gagner plus d'argent * Pouvoir travailler de n'importe où : plus de contraintes d'espace * Acquérir de nouvelles compétences : notamment en avant-ventes / ventes / comptabilités, ... * Devenir un vrai chef d'entreprise en se libérant de structures hiérarchiques souvent très pyramidales et réduisant pratiquement à néant la motivation * Sortir de sa zone de confort ### Pourquoi j'ai franchi le pas ?[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#pourquoi-jai-franchi-le-pas) Selon moi, les actes des organisations devraient être toujours en accord avec les valeurs qu'elles véhiculent. C'est ce qu'on appelle la congruence. A la recherche de cette congruence je me suis rendu compte que je ne pouvais pas attendre d'une organisation qu'elle soit à la fois congruente et en accord avec les valeurs qui me motivent. ### Mes Valeurs[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#mes-valeurs) * Toujours/tout partager * Apprendre en continu * Respecter tout le monde * Être transparent / honnête à tout instant * Toujours faire de son mieux Pour ces raisons j'ai alors décidé de me lancer dans l'aventure Freelance en mars 2020. Mes objectifs pour 2020[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#mes-objectifs-pour-2020) --------------------------------------------------------------------------------------------------------------------------------------------------- Juste avant de me lancer dans l'aventure j'avais formalisé mes objectifs de l'année en utilisant la méthode [OKR](https://everlaab.com/methode-okr/) . Je commence par me les remémorer et associer les réussites / faire un status par objectif. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MQBCZNC3sEp3hy1vxkL%252F-MQBCazkFZ1J2RDoYNeF%252Fimage.png%3Falt%3Dmedia%26token%3D3db06deb-c1a1-4f4f-b477-d9d8585ff105&width=768&dpr=3&quality=100&sign=fa6ce43a&sv=2) OKRs 2020 Yoan Thirion ### Objectif 1 : Avoir un taux d'occupation supérieur à 90%[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#objectif-1-avoir-un-taux-doccupation-superieur-a-90) C'est la difficulté numéro 1 lorsqu'on se lance en indépendant : garantir un taux d'occupation minimal nous permettant de subvenir à nos besoins. Malgré la crise qui nous a touché en 2020, j'ai pu compter sur la confiance de mon client principal afin d'avoir un taux d'occupation proche de 100%. Une fois cette sécurité acquise j'ai pu alors me concentrer sur les objectifs suivants. ### **Objectif** 2 : Toujours/tout partager #sharingiscaring[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#objectif-2-toujours-tout-partager-sharingiscaring) #### **Résultat clé** : Créer 1 [Knowledge Base](https://yoan-thirion.gitbook.io/knowledge-base) [](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-creer-1-knowledge-base) Avec cette Knowledge Base je compte partager des contenus originaux clés en mains permettant de diffuser des concepts / pratiques et contenus nous permettant de développer des logiciels de manière plus efficiente. * Créer au moins 10 contenus (code katas et ateliers) liés aux pratiques agiles techniques * **Exemples** : [Kata sur Property-Based Testing](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/improve-your-software-quality-with-property-based-testing) , [Approval testing kata](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/gilded-rose-approval-testing) , [How to write S.O.L.I.D code](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/write-s.o.l.i.d-code) * Créer au moins 3 contenus liés au Leadership * **Exemples** : [Le leadership chez les Navy Seals](https://yoan-thirion.gitbook.io/knowledge-base/leadership/learn-leadership-from-the-navy-seals) , [Leadership is language](https://yoan-thirion.gitbook.io/knowledge-base/leadership/leadership-is-language) * Partager au moins 3 contenus basés sur mon expérience de l'agilité * **Exemples** : [Améliorer la prise de décision en équipe](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-improve-team-decision-making) , [Comment lancer et animer une Communauté de Pratiques](https://yoan-thirion.gitbook.io/knowledge-base/agile-coaching/how-to-run-a-community-of-practices-cop) * Créer 5 résumés de livre en infographie * Partiellement réussi à 60% ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MQ7s-RR7VSzufomwZji%252F-MQ7sNbc2CLmiiycIsNH%252Fimage.png%3Falt%3Dmedia%26token%3D55babb58-e93a-45b9-86b0-5211b458a405&width=768&dpr=3&quality=100&sign=f75e27ec&sv=2) #### **Résultat clé :** Créer le [meetup Craft Luxembourg](https://www.meetup.com/fr-FR/software-craft-luxembourg/) avec [Alexandre Grison](https://www.linkedin.com/in/alexandre-grison-b56ba639/) et [Adrien Muller](https://www.linkedin.com/in/adrien-muller-566373a/?originalSubdomain=lu) [](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-creer-le-meetup-craft-luxembourg-avec-alexandre-grison-et-adrien-muller) * Organiser 1 événement par trimestre minimum avec au moins 20 participants * 2 événements organisés en 2020 : [Functional Programming made easy in Java & C#](https://www.meetup.com/fr-FR/software-craft-luxembourg/events/269905414/) , [Craft Beer](https://www.meetup.com/fr-FR/software-craft-luxembourg/events/271373500/) * _En pause depuis le mois de juin_ #### **Résultat clé : Continuer l'initiative Agile HR Luxembourg avec** [**Adrien Muller**](https://lu.linkedin.com/in/adrien-muller-566373a) **et** [**Isabel Van de Voorde**](https://www.linkedin.com/in/isabel-van-de-voorde-8180432/) [](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-continuer-linitiative-agile-hr-luxembourg-avec-adrien-muller-et-isabel-van-de-voorde) * Organiser 1 événement par trimestre minimum avec au moins 10 participants * 4 événements : [New Role of HR and Managers](https://www.meetup.com/fr-FR/Agile-HR-Luxembourg-Meetup/events/268351992/) par **Pia-Maria Thoren**, [Disrupt your Job Interviews through Gamification](https://www.meetup.com/fr-FR/Agile-HR-Luxembourg-Meetup/events/270238558/) , [Disrupt Job Interviews through Gamification - The Sequel](https://www.meetup.com/fr-FR/Agile-HR-Luxembourg-Meetup/events/270484966/) , [Construire l’entreprise de demain, c’est possible](https://www.meetup.com/fr-FR/Agile-HR-Luxembourg-Meetup/events/271316938/) par **Béatrix Charlier** * _En pause depuis juin_ #### **Résultat clé : Faire orateur dans au moins 2 meetups existants**[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-faire-orateur-dans-au-moins-2-meetups-existants) * Partager [Xanpan](https://www.meetup.com/fr-FR/Agile-Luxembourg/events/269793058/) dans le meetup [Agile Luxembourg](https://www.meetup.com/fr-FR/Agile-Luxembourg) * Partager "Le craft - la pièce manquante de votre transformation Agile" dans le meetup [Nord Agile](https://www.meetup.com/fr-FR/Nord-agile/) * Partager Xanpan dans le meetup [Nord Agile](https://www.meetup.com/fr-FR/Nord-agile/) #### **Résultat clé : Répondre à au moins 5 Call For Papers**[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-repondre-a-au-moins-5-call-for-papers) Cet objectif a été atteint mais malheureusement elles ont été majoritairement annulées dû au COVID (cet objectif demeure vrai pour 2021). J'ai alors créé 1 nouveau résultat clé : #### **Résultat clé : Participer en tant qu'orateur à au moins 2 conférences en Ligne**[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-participer-en-tant-quorateur-a-au-moins-2-conferences-en-ligne) * Partager [Xanpan](https://youtu.be/nUkanfJjL-o) lors de la première édition d'[AgileEnLigne](https://agileenligne.wordpress.com/) * Partager un nouveau Talk "[50 nuances de pratiques de développement](https://youtu.be/pJtYefVzUQY) " lors de l'[Agile Tour Toulouse](https://tour.agiletoulouse.fr/) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MQ80IkSIzjJgUnsYjON%252F-MQ824nYJhs1YDstywBX%252Fimage.png%3Falt%3Dmedia%26token%3Df5a5a25d-5460-4c4e-aab5-cf6fb6b83b63&width=768&dpr=3&quality=100&sign=6aa3fc09&sv=2) #### **Autres résultats clés obtenus :**[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#autres-resultats-cles-obtenus) * Présenter l'[agilité et l'artisanat logiciel à l'Université de Nancy](https://speakerdeck.com/thirion/presentation-craft-at-univ-nancy) * Participer à la rédaction du Tome 7 de Rupture Douce à paraître fin janvier 2021 ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MQ838TAUU33qQo-r87K%252F-MQ83ZZashA1D2wk9sYZ%252Fimage.png%3Falt%3Dmedia%26token%3D00f9a193-dc57-44af-8aef-7549477fd6d8&width=768&dpr=3&quality=100&sign=dac64dcd&sv=2) Couverture du prochain Rupture Douce ### **Objectif 3** : être reconnu comme un acteur du marché Luxembourgeois et au-delà[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#objectif-3-etre-reconnu-comme-un-acteur-du-marche-luxembourgeois-et-au-dela) #### **Résultat clé : Créer des supports marketing**[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-creer-des-supports-marketing) * Créer mon [site web perso](https://yoan-thirion.com/) et y formaliser [mon offre de service](https://www.yoan-thirion.com/files/what-i-do.pdf) * Créer un [CV](https://www.yoan-thirion.com/files/yoan-thirion-detailed.pdf) permettant de démontrer rapidement mon vécu et mon savoir-faire * Créer un template d'offre ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MQ7yXy1xfsAjj19DtS7%252F-MQ7zOFAwdmAvTt1zdzt%252Fimage.png%3Falt%3Dmedia%26token%3D7b14164d-9d65-486b-936a-0e319ba3b430&width=768&dpr=3&quality=100&sign=9addfe2f&sv=2) #### **Résultat clé : Identifier des clients cibles**[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-identifier-des-clients-cibles) * Utiliser Linkedin et en référencer au moins 10 * Récupérer des contacts dans au moins 80% d'entre elles * Utiliser un outil de CRM permettant de faire mon suivi Avant-vente / Vente #### **Résultat clé : Lancer une offre de service me permettant de rencontrer à minima 3 prospects**[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-lancer-une-offre-de-service-me-permettant-de-rencontrer-a-minima-3-prospects) * Structurer une [offre gratuite](https://www.yoan-thirion.com/files/brown-bag-offer.pdf) de Brown Bags Lunch * Proposer à minima 10 sujets différents * **13** sujets techniques : Domain Driven Design re-distilled, F# pour les développeurs objets, Refactoring facile avec la méthode Mikado, ... * **10** sujets liés à l'agilité, au leadership et coaching : Drive et la motivation intrinsèque, Initiation au Management 3.0, ... * **5** sujets liés à l'organisation apprenante : Xtrem Reading ou comment lire 2 livres en 1 heure, Xtrem Watch - découvrez la puissance de la veille collective, ... * Lancer une "campagne marketing" à l'aide des canaux emails et linkedin * Organiser à minima 3 Brown Bags dans des organisations différentes * J'ai pu en organiser 5 en 2020 ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MQ84NJoNjJgq44PHGPI%252F-MQ857CQsOiOMFUgIIBO%252Fimage.png%3Falt%3Dmedia%26token%3D60480bea-ca95-4501-8397-1ba5e7e3da68&width=768&dpr=3&quality=100&sign=34bac2f9&sv=2) #### **Résultat clé : être en capacité de travailler / opérer 100% en remote**[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-etre-en-capacite-de-travailler-operer-100-en-remote) Cette pandémie a été l'occasion pour nous tous de redéfinir notre façon de collaborer et de travailler. Ainsi comme nombre d'entre vous je me suis adapté au 100% remote avec l'utilisation de nouvelle pratiques et outils permettant de collaborer et interagir à distance. Pas question pour moi de faire moins d'atelier c'est pourquoi j'utilise des outils comme Miro, Mural, IntelliJ Code With Me, Zoom, ... ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MQ8Q1ojIn6Mx7PmjXry%252F-MQ8Qg67shw92dy315tv%252Fimage.png%3Falt%3Dmedia%26token%3Dabf62c1c-2aa9-4370-8db6-f7393d4184ee&width=768&dpr=3&quality=100&sign=22975873&sv=2) Exemple de board Miro #### **Résultat clé : Publier au moins 1 post / semaine sur mon** [**profil Linkedin**](https://www.linkedin.com/in/yoanthirion/) [](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-publier-au-moins-1-post-semaine-sur-mon-profil-linkedin) _44 posts en 10 mois en 2020_ ### **Objectif** 4 : Apprendre en continu #neverStopLearning[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#objectif-4-apprendre-en-continu-neverstoplearning) En tant qu'indépendant dans le milieu du service ce que l'on vend c'est une somme de savoir-faire, expérience et connaissance. Il est alors primordial de se former en continu. #### **Résultat clé : Lire à minima 8 livres sortie dans l'année**[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-lire-a-minima-8-livres-sortie-dans-lannee) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MQ8AedMhd1FU4IFZzVg%252F-MQ8B4pgAFfCVGL-4_YN%252Fimage.png%3Falt%3Dmedia%26token%3D99bc96e5-34c1-4bd6-8c40-53364a48478b&width=768&dpr=3&quality=100&sign=46e874b2&sv=2) #### **Résultat clé : Participer à au moins à 2 formations / conférences**[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-participer-a-au-moins-a-2-formations-conferences) * Participer à la formation de 2 jours de Scott Wlaschin : Domain Modeling Made Functional * Participer au Forward Summit organisé par Management 3.0 * Participer à AgileEnLigne, FrugAgile France, Agile Tour Toulouse * Participer à la conf Virtual DDD #### **Résultat clé : Améliorer mes compétences en Programmation fonctionnelle**[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-ameliorer-mes-competences-en-programmation-fonctionnelle) * Participer à une formation avec Scott Wlaschin sur F# et DDD * Apprendre 1 nouveau langage fonctionnel : Kotlin * Via les Koltin Koans * Via le développement des [solutions de l'AdventOfCode](https://github.com/ythirion/advent-of-code) en Koltin ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MQ8AedMhd1FU4IFZzVg%252F-MQ8DuWCCOwrPZEq4ciT%252Fimage.png%3Falt%3Dmedia%26token%3D6acac5d6-d669-430d-ae29-60b7c8e7a3de&width=768&dpr=3&quality=100&sign=9d99cc31&sv=2) #### **Résultat clé : Participer à au moins 10 événements en ligne**[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#resultat-cle-participer-a-au-moins-10-evenements-en-ligne) Avec l'avénement du Remote j'ai pu participer à des dizaines d'événements en ligne parlant de sujets divers et variés. Voici mes tops de l'année : * Comment gérer sa Culture Tech - Sfeir talks * Fais survivre ta communauté dans un monde hostile - Wemanity * Set Objectives like Google : OKRs - Richard Russell * Craft-conf Meetup - Kevline Henney, Woody Zuill, Micheal Feathers * Virtual DDD (24 heures de DDD) * Aie j’ai mal à mon management - Good * Effective Technical coaching - Codurance Spain * Accelerate : Building and Scaling High Performing Technology Organizations - Octo * Code Review Best Practices - Trisha Gee (JetBrains) Voici mes notes et Screen-shots de ces quelques événements : ### Objectif 5 : Dédier du temps à des actions à but non lucratifs[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#objectif-5-dedier-du-temps-a-des-actions-a-but-non-lucratifs) En cette première année d'exercice ça n'a pas forcément été un objectif facile à atteindre mais je suis quand même assez fier d'avoir pu contribuer à l'initiative des [formations de Noël](https://formationsdenoel.fr/) en donnant 2 formations : Introduction au Management 3.0 et une autre sur l'artisanat Logiciel. Je me suis engagé à organiser l'édition 2021 sur Luxembourg d'ailleurs. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MQ8Mf0ALY6zc1XXNw9s%252F-MQ8OIVtDZvNLbxpSvn9%252Fimage.png%3Falt%3Dmedia%26token%3Db06db2d8-32a1-4512-b1c4-8c03330c42d9&width=768&dpr=3&quality=100&sign=ab14c57a&sv=2) Formations de Noël 2020 ### Objectifs atteints ?[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#objectifs-atteints) Le plus difficile pour moi en 2020 a été de ne plus réellement travailler en équipe pour un objectif plus grand nous regroupant et ainsi : * Ne plus pouvoir compter sur des fonctions de support m'aidant au quotidien * Avoir la possibilité d'avoir du feedback instantané sur mes idées / réalisations Malgré ce manque je suis très satisfait de ces 10 premiers mois d'existence. Même si tout n'a pas été rose j'ai pu réalisé complètement ou partiellement de nombreux objectifs que je me suis moi-même fixé. A l'heure actuelle je ne troquerais cette liberté pour rien au monde. Malgré la triste période que nous traversons mon avenir professionnel apparaît prometteur. De nombreuses personnes ne se trouvent pas dans cette situation, c'est pourquoi je vais faire preuve de plus d'altruisme et de partage en 2021. Je serai forcément encore plus tournés vers les autres. Les axes d'amélioration pour 2021[](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#les-axes-damelioration-pour-2021) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- En me remémorant 2020 j'ai pu identifier certains axes d'amélioration : * Avoir un meilleur équilibre vie professionnelle / vie personnelle * Pas facile à obtenir dans une première année d'existence * De nombreuses tâches à effectuer sans support d'autres collaborateurs * Sera plus facile à obtenir avec une petite assise financière * Relancer les meetups communautaires sur Luxembourg * Ce qu'on a considéré comme une situation transitoire à l'époque (Remote dû au Covid) ne l'est pas en réalité * Les repenser pour réussir à attirer et construire de la connaissance ensemble * Ouvrir vers plus de pluri-disciplinarité ? * Me dédier plus de temps pour la formation * J'avais prévu de suivre plus de formations (en physique) mais de nombreuses ont été annulé * Quasiment tout le monde s'est désormais adapté et les experts que je voulais voir en 2020 aussi [PreviousMy Activity](https://yoan-thirion.gitbook.io/knowledge-base/my-activity) Last updated 5 years ago * [Devenir indépendant](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#devenir-independant) * [Pourquoi ?](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#pourquoi) * [Pourquoi j'ai franchi le pas ?](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#pourquoi-jai-franchi-le-pas) * [Mes Valeurs](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#mes-valeurs) * [Mes objectifs pour 2020](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#mes-objectifs-pour-2020) * [Objectif 1 : Avoir un taux d'occupation supérieur à 90%](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#objectif-1-avoir-un-taux-doccupation-superieur-a-90) * [Objectif 2 : Toujours/tout partager #sharingiscaring](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#objectif-2-toujours-tout-partager-sharingiscaring) * [Objectif 3 : être reconnu comme un acteur du marché Luxembourgeois et au-delà](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#objectif-3-etre-reconnu-comme-un-acteur-du-marche-luxembourgeois-et-au-dela) * [Objectif 4 : Apprendre en continu #neverStopLearning](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#objectif-4-apprendre-en-continu-neverstoplearning) * [Objectif 5 : Dédier du temps à des actions à but non lucratifs](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#objectif-5-dedier-du-temps-a-des-actions-a-but-non-lucratifs) * [Objectifs atteints ?](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#objectifs-atteints) * [Les axes d'amélioration pour 2021](https://yoan-thirion.gitbook.io/knowledge-base/my-activity/retour-dun-freelance-sur-lannee-2020#les-axes-damelioration-pour-2021) --- # Boite à outils de l'intelligence émotionnelle | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle.md) . Pitch[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle#pitch) ---------------------------------------------------------------------------------------------------------------------------------------------- Qu’est-ce qui distingue les émotions les unes des autres ? Pourquoi exprimer ses émotions peut-il avoir un impact positif sur son interlocuteur ? Comment gérer les manifestations d’émotions sur le lieu de travail ? Comment apaiser les tensions entre collègues ? Quelles sont les meilleures façons de prendre soin de soi afin de maintenir son équilibre émotionnel ? Quelles actions favorisent la confiance ? Découvrez **58 outils** **indispensables** **pour mieux gérer ses émotions** dans ses relations professionnelles ou personnelles, **favoriser son épanouissement personnel** et **renforcer son efficacité au quotidien**. Chaque outil est traité de façon visuelle sur **2 ou 4 pages** avec illustration, l’essentiel, les objectifs, le contexte d’utilisation, des conseils méthodologiques, les avantages et les précautions à prendre. **Des études de cas, quiz et auto-évaluations viennent compléter et approfondir certains outils**. ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzSLisoLZWfV3ptLqL%252F-MAzSktFUXJZ5rpoBgCu%252Fimage.png%3Falt%3Dmedia%26token%3D35a61f04-e085-4c8e-8309-c3c7d6707c72&width=768&dpr=3&quality=100&sign=bdcee64c&sv=2) Notes[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle#notes) ---------------------------------------------------------------------------------------------------------------------------------------------- ### Définition[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle#definition) * Capacité à percevoir l'émotion * L'intégrer pour faciliter la pensée * Comprendre les émotions / les maitriser * Favoriser épanouissement personnel * 6 émotions fondamentales * Joie * Colère * Peur * Tristesse * Surprise * Dégoût ### Utiliser les émotions[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle#utiliser-les-emotions) * La mémoire est émotionnelle * Spirale des émotions * Croyances * Ressenti * Attitude * Comportement * Résultat * La pensée positive * Faire pénétrer dans notre esprit * Mots /images * Contribue au développement de soi * **Méthode LKM** * **L**oving **K**indness **M**editation * Favorise ouverture/créativité/bien être * Visualisation * Se centrer sur soi-même * Position confortable Mind map[](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle#mind-map) ---------------------------------------------------------------------------------------------------------------------------------------------------- ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAzUjXr4kJrEHQlHem6%252F-MAzUtVo0HRhXA1IK4bi%252Fimage.png%3Falt%3Dmedia%26token%3D8be33078-4aae-45d2-858d-0ae9146d8b0d&width=768&dpr=3&quality=100&sign=f69d2d47&sv=2) [PreviousAgile testing : A Practical Guide for Testers and Agile Teams](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/agile-testing-a-practical-guide-for-testers-and-agile-teams) [NextBuilding a better business using Lego Serious Play method](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/building-a-better-business-using-lego-serious-play-method) Last updated 6 years ago * [Pitch](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle#pitch) * [Notes](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle#notes) * [Définition](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle#definition) * [Utiliser les émotions](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle#utiliser-les-emotions) * [Mind map](https://yoan-thirion.gitbook.io/knowledge-base/xtrem-reading/resources/book-notes/boite-a-outils-de-lintelligence-emotionnelle#mind-map) --- # Let's refactor (FP style) | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-fp-style.md) . Start by establishing our plan[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-fp-style#start-by-establishing-our-plan) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- We can use the [mikado method](http://mikadomethod.info/) to do so. Here is mine : ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MAkVWNCz0dW_YcPzL-H%252F-MAkXGm5MAk134VzMT-p%252Fimage.png%3Falt%3Dmedia%26token%3Daf94b662-5481-4b3e-834c-9ac9f144e317&width=768&dpr=3&quality=100&sign=2a332ecd&sv=2) We will use [vavr](https://www.vavr.io/) to refactor this code in java. 1) Extract the amount calculation[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-fp-style#id-1-extract-the-amount-calculation) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2) Build a statement[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-fp-style#id-2-build-a-statement) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 3) Run the pipeline[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-fp-style#id-3-run-the-pipeline) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 4) Putting whole together[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-fp-style#id-4-putting-whole-together) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Our code is now ready to be extended with the new HTLM printer. [PreviousLet's refactor (OOP style)](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-oop-style) [NextFunctional Programming made easy in Java & C#](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/functional-programming-made-easy-in-java-and-c) Last updated 6 years ago * [Start by establishing our plan](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-fp-style#start-by-establishing-our-plan) * [1) Extract the amount calculation](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-fp-style#id-1-extract-the-amount-calculation) * [2) Build a statement](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-fp-style#id-2-build-a-statement) * [3) Run the pipeline](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-fp-style#id-3-run-the-pipeline) * [4) Putting whole together](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata/lets-refactor-fp-style#id-4-putting-whole-together) PlayAmounts.java Copy @UtilityClass class PlayAmounts { private static final NumberFormat FORMAT = NumberFormat.getCurrencyInstance(Locale.US); private static final IntUnaryOperator TRAGEDY = audience -> 40_000 + (audience > 30 ? 1_000 * (audience - 30) : 0); private static final IntUnaryOperator COMEDY = audience -> 30_000 + 300 * audience + (audience > 20 ? 10_000 + 500 * (audience - 20) : 0); private static final Map TYPES = HashMap.of("tragedy", TRAGEDY, "comedy", COMEDY); static Integer forTypeAndAudience(String type, Integer audience) { return TYPES.get(type).map(f -> f.applyAsInt(audience)) .getOrElseThrow(() -> new Error("Unknown type: " + type)); } static String format(Integer amount) { return FORMAT.format(amount / 100); } } Copy private String formatLine(String name, Integer amount, Integer audience) { return String.format(" %s: %s (%s seats)%n", name, format(amount), audience); } private String formatStatement(Invoice invoice, Statement pc) { return String.format("Statement for %s%n%sAmount owed is %s%nYou earned %s credits", invoice.customer, pc.line, format(pc.amount), pc.credits); } private Statement makeStatement(Performance perf, Play play) { int amount = PlayAmounts.forTypeAndAudience(play.type, perf.audience); int volumeCredits = computeCredits(play.type, perf.audience); String line = formatLine(play.name, amount, perf.audience); return new Statement(line, amount, volumeCredits); } Copy public String print(Invoice invoice, java.util.Map plays) { return Vector.ofAll(invoice.performances) // for each performance make a statement .map(perf -> makeStatement(perf, plays.get(perf.playID))) // compute total amount and credit .reduceOption(Statement::add) // make the final statement to be printed .map(p -> formatStatement(invoice, p)) .getOrElse(""); } StatementPrinter.java Copy public class StatementPrinter implements StatementPrinter { private String formatLine(String name, Integer amount, Integer audience) { return String.format(" %s: %s (%s seats)%n", name, format(amount), audience); } private String formatStatement(Invoice invoice, Statement pc) { return String.format("Statement for %s%n%sAmount owed is %s%nYou earned %s credits", invoice.customer, pc.line, format(pc.amount), pc.credits); } private Statement makeStatement(Performance perf, Play play) { int amount = PlayAmounts.forTypeAndAudience(play.type, perf.audience); int volumeCredits = computeCredits(play.type, perf.audience); String line = formatLine(play.name, amount, perf.audience); return new Statement(line, amount, volumeCredits); } private int computeCredits(String type, Integer audience) { return Math.max(audience - 30, 0) + ("comedy".equals(type) ? (audience / 5) : 0); } public String print(Invoice invoice, java.util.Map plays) { return Vector.ofAll(invoice.performances) // for each performance make a statement .map(perf -> makeStatement(perf, plays.get(perf.playID))) // compute total amount and credit .reduceOption(Statement::add) // make the final statement to be printed .map(p -> formatStatement(invoice, p)) .getOrElse(""); } } --- # Pure functions | Knowledge-base For the complete documentation index, see [llms.txt](https://yoan-thirion.gitbook.io/knowledge-base/llms.txt) . This page is also available as [Markdown](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions.md) . Objectives :[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions#objectives) --------------------------------------------------------------------------------------------------------------------------- Understand what are Pure Functions and the benefits of using them Connection - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions#connection-10) ---------------------------------------------------------------------------------------------------------------------------------- Categorize these code samples in _**Pure Functions**_ vs _**Impure Functions**_ : Copy import random def f(x): if random.randint(1, 2) == 1: return x + 1 return x + 2 Copy public class MathUtility { public static int sum(int num1, int num2) { return num1 + num2; } } Copy public class Line { private int value = 0; public int add(int nextValue) { this.value += nextValue; return this.value; } } Explain your choices. Concept - 5'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions#concept-5) -------------------------------------------------------------------------------------------------------------------------- Pure functions don’t refer to any global state. _**Those functions do not produce any side effects (state changes).**_ They are _**easier to test because**_ of these properties: 1. You can see all the inputs in the argument list 2. The execution is deterministic (the same inputs will always get the same outputs) 3. You can see all the outputs in the return value _Code that is harder to test will lack some or all of these properties._ Concrete Practice - 30'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions#concrete-practice-30) ------------------------------------------------------------------------------------------------------------------------------------------------ * Clone the repository [here](https://github.com/ythirion/pure-functions) * Identify the design problems related to the RentalCalculator * Refactor this code by using _**Pure Functions**_ A step by step solution is provided in the _**solution**_ branch (Look at the commits) ![](https://yoan-thirion.gitbook.io/knowledge-base/~gitbook/image?url=https%3A%2F%2F1936518372-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MAffO8xa1ZWmgZvfeK2%252F-MT5cm4iB5V7AzDKHuDV%252F-MT5d-oaQiy6S5OUmbkR%252Fimage.png%3Falt%3Dmedia%26token%3Dd1467f18-bd8f-4d11-9648-a8c10ca2ae76&width=768&dpr=3&quality=100&sign=415bc697&sv=2) Conclusion - 10'[](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions#conclusion-10) ---------------------------------------------------------------------------------------------------------------------------------- * How much of the time do you find yourself writing tests for functions that have all the three properties of pure functions ? * What do you need to write more Pure Functions ? [PreviousMikado kata](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/mikado-method/mikado-kata) [NextTheatrical players refactoring Kata](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/theatrical-players-refactoring-kata) Last updated 5 years ago * [Objectives :](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions#objectives) * [Connection - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions#connection-10) * [Concept - 5'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions#concept-5) * [Concrete Practice - 30'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions#concrete-practice-30) * [Conclusion - 10'](https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas/pure-functions#conclusion-10) Copy public class MathUtility { private static int count = 1; public static int sum(int num1, int num2) { count++; multiply(num1,num2); return num1 + bnum2; } } Copy const double = x => x * 2; ---