<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="https://www.niceideas.ch/roller2/roller-ui/styles/rss.xsl" media="screen"?><rss version="2.0" 
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:atom="http://www.w3.org/2005/Atom" >
<channel>
  <title>niceideas.ch</title>
  <link>https://www.niceideas.ch/roller2/badtrash/</link>
      <atom:link rel="self" type="application/rss+xml" href="https://www.niceideas.ch/roller2/badtrash/feed/entries/rss?cat=Agile" />
    <description>Technological Thoughts by Jerome Kehrli</description>
  <language>en-us</language>
  <copyright>Copyright 2026</copyright>
  <lastBuildDate>Thu, 9 Apr 2026 06:13:17 -0400</lastBuildDate>
  <generator>Apache Roller 5.1.2</generator>
        <item>
    <guid isPermaLink="true">https://www.niceideas.ch/roller2/badtrash/entry/a-proposed-framework-for-agile</guid>
    <title>A proposed framework for Agile Roadmap Design and Maintenance</title>
    <dc:creator>Jerome Kehrli</dc:creator>
    <link>https://www.niceideas.ch/roller2/badtrash/entry/a-proposed-framework-for-agile</link>
        <pubDate>Fri, 11 Jun 2021 04:25:42 -0400</pubDate>
    <category>Agile</category>
    <category>agile</category>
    <category>agile-roadmap</category>
    <category>planning</category>
    <category>roadmap</category>
    <atom:summary type="html">&lt;!--&lt;h1&gt;A proposed framework for Agile Roadmap Design and Maintenance&lt;/h1&gt;--&gt;

&lt;p&gt;
In my current company, we embrace agility down the line, from the &lt;i&gt;Product Management&lt;/i&gt; Processes and approaches down to the Software Development culture. 
&lt;br&gt;
However, from the early days and due to the nature of our activities, we understood that we had two quite opposed objectives: on one side the need to be very flexible and change quickly priorities as we refine our understanding of our market and on the other side, the need to respect commitment taken with our customers regarding functional gaps delivery due dates.
&lt;br&gt;
In terms of road-mapping and forecasting, these two challenges are really entirely opposed:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Strong delivery due dates on project gaps with hard commitment on planning&lt;/b&gt;. Our sales processes and customer delivery projects are all but Agile. We know when in the future we will start any given delivery project and we know precisely when the production rollout is scheduled, sometimes up to 12 months in advance. We have most of the tine a small set of &lt;i&gt;Project Gaps&lt;/i&gt; required for these projects. Since we need to provide the delivery team with these functional gaps a few weeks prior to the production rollout, it turns out that we have actually &lt;b&gt;strong delivery due dates&lt;/b&gt; for them, sometimes 12 months in advance.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Priorities changing all the time as our sales processes and market understanding progress&lt;/b&gt;. We are an agile company and mid-term and even sometimes short-term focus changes very frequently as we sign deals and refine our understanding of our market, not to mention that the market itself evolves very fast
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
These two opposed challenges are pretty common in companies that are refining their understanding of their &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/the-search-of-product-market&quot;&gt;Product-Market Fit&lt;/a&gt;. Having to commit strongly on sometimes heavy developments up to more than a year in advance, while at the same time changing the mid-term and short-term priorities very often is fairly common.
&lt;/p&gt;

&lt;p&gt;
In this article, I would like to propose a framework for managing such a common situation by leveraging on &lt;b&gt;a roadmap as a communication, synchronization and management tool&lt;/b&gt; by inspiring from what we do in my current company (leveraging on some elements brought by Mr. Roy Belchamber - whom I take the opportunity to salute here).
&lt;/p&gt;

&lt;p&gt;
There are three fundamental cultural principles and practices that are absolutely crucial in our context to handle such opposed objectives. These three elements are as follows:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;b&gt;Multiple interchangeable development teams&lt;/b&gt;: multiple teams that have to be interchangeable are required to be able to &lt;b&gt;spread the development effort&lt;/b&gt; among flexible evolutions - that can be reprioritized at will - and hard commitments - that need to be considered frozen and with a fixed delivery due date.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Independent and autonomous development teams&lt;/b&gt;: these development team need to be able to work entirely independently and without and friction from any other team. This is essential to have &lt;b&gt;reliable estimations and forecasts&lt;/b&gt;. A lot of the corollary principles and practices I will be presenting in this article are required towards this very objective.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;An up to date and outcome-based Roadmap&lt;/b&gt;. Having a roadmap that crystallizes the path and the foreseen development activities in the next 2 years is absolutely key. Such a roadmap is all of an internal communication tool, an external communication support, a management and planning tool.&lt;/b&gt;.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/cc46c114-ab4d-4433-b61c-9ad3d3833ea1&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;An Agile roadmap sample&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/cc46c114-ab4d-4433-b61c-9ad3d3833ea1&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Agile Roadmap Example
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
In this article, I intend to present the fundamental principles behind the design and maintenance of such a roadmap that are required to make it a powerful and reliable tool - and not yet another good looking but useless drawing - along with everything that is required in terms of Agile principles practices.
&lt;/p&gt;
</atom:summary>        <description>&lt;!--&lt;h1&gt;A proposed framework for Agile Roadmap Design and Maintenance&lt;/h1&gt;--&gt;

&lt;p&gt;
In my current company, we embrace agility down the line, from the &lt;i&gt;Product Management&lt;/i&gt; Processes and approaches down to the Software Development culture. 
&lt;br&gt;
However, from the early days and due to the nature of our activities, we understood that we had two quite opposed objectives: on one side the need to be very flexible and change quickly priorities as we refine our understanding of our market and on the other side, the need to respect commitment taken with our customers regarding functional gaps delivery due dates.
&lt;br&gt;
In terms of road-mapping and forecasting, these two challenges are really entirely opposed:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Strong delivery due dates on project gaps with hard commitment on planning&lt;/b&gt;. Our sales processes and customer delivery projects are all but Agile. We know when in the future we will start any given delivery project and we know precisely when the production rollout is scheduled, sometimes up to 12 months in advance. We have most of the tine a small set of &lt;i&gt;Project Gaps&lt;/i&gt; required for these projects. Since we need to provide the delivery team with these functional gaps a few weeks prior to the production rollout, it turns out that we have actually &lt;b&gt;strong delivery due dates&lt;/b&gt; for them, sometimes 12 months in advance.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Priorities changing all the time as our sales processes and market understanding progress&lt;/b&gt;. We are an agile company and mid-term and even sometimes short-term focus changes very frequently as we sign deals and refine our understanding of our market, not to mention that the market itself evolves very fast
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
These two opposed challenges are pretty common in companies that are refining their understanding of their &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/the-search-of-product-market&quot;&gt;Product-Market Fit&lt;/a&gt;. Having to commit strongly on sometimes heavy developments up to more than a year in advance, while at the same time changing the mid-term and short-term priorities very often is fairly common.
&lt;/p&gt;

&lt;p&gt;
In this article, I would like to propose a framework for managing such a common situation by leveraging on &lt;b&gt;a roadmap as a communication, synchronization and management tool&lt;/b&gt; by inspiring from what we do in my current company (leveraging on some elements brought by Mr. Roy Belchamber - whom I take the opportunity to salute here).
&lt;/p&gt;

&lt;p&gt;
There are three fundamental cultural principles and practices that are absolutely crucial in our context to handle such opposed objectives. These three elements are as follows:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;b&gt;Multiple interchangeable development teams&lt;/b&gt;: multiple teams that have to be interchangeable are required to be able to &lt;b&gt;spread the development effort&lt;/b&gt; among flexible evolutions - that can be reprioritized at will - and hard commitments - that need to be considered frozen and with a fixed delivery due date.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Independent and autonomous development teams&lt;/b&gt;: these development team need to be able to work entirely independently and without and friction from any other team. This is essential to have &lt;b&gt;reliable estimations and forecasts&lt;/b&gt;. A lot of the corollary principles and practices I will be presenting in this article are required towards this very objective.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;An up to date and outcome-based Roadmap&lt;/b&gt;. Having a roadmap that crystallizes the path and the foreseen development activities in the next 2 years is absolutely key. Such a roadmap is all of an internal communication tool, an external communication support, a management and planning tool.&lt;/b&gt;.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/cc46c114-ab4d-4433-b61c-9ad3d3833ea1&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;An Agile roadmap sample&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/cc46c114-ab4d-4433-b61c-9ad3d3833ea1&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Agile Roadmap Example
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
In this article, I intend to present the fundamental principles behind the design and maintenance of such a roadmap that are required to make it a powerful and reliable tool - and not yet another good looking but useless drawing - along with everything that is required in terms of Agile principles practices.
&lt;/p&gt;

&lt;p&gt;
This article is available as a &lt;a href=&quot;https://www.slideshare.net/JrmeKehrli/a-proposed-framework-for-agile-roadmap-design-and-maintenance&quot;&gt;Slideshare presentation&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Summary&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;


&lt;li&gt;&lt;a href=&quot;#sec1&quot;&gt;1. A Software Development Roadmap &lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec12&quot;&gt;1.2 Roadmap elements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec13&quot;&gt;1.3 Hierarchy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec14&quot;&gt;1.4 A realistic Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec15&quot;&gt;1.5 In the next chapters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec2&quot;&gt;2. Prerequisites &lt;/a&gt;

&lt;ul&gt;

&lt;li&gt;&lt;a href=&quot;#sec21&quot;&gt;2.1 A. Agile Software Development Teams &lt;/a&gt;

&lt;ul&gt;

&lt;li&gt;&lt;a href=&quot;#sec211&quot;&gt;2.1.1 eXtreme Programming &lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec2111&quot;&gt;2.1.1.1 Small-releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec2112&quot;&gt;2.1.1.2 Testing, testing and more testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec2113&quot;&gt;2.1.1.3 On-site customer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec2115&quot;&gt;2.1.1.5 The Planning Game&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec2116&quot;&gt;2.1.1.6 XP Takeaways&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec212&quot;&gt;2.1.2 Lean Startup&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec2121&quot;&gt;2.1.2.1 Pizza Teams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec2122&quot;&gt;2.1.2.2 Feature Teams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec2123&quot;&gt;2.1.2.3 Lean Startup Takeaways&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec213&quot;&gt;2.1.3 DevOps&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec2131&quot;&gt;2.1.3.1 Infrastructure as Code &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec2132&quot;&gt;2.1.3.2 Continuous Delivery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec2133&quot;&gt;2.1.3.3 DevOps Takeaways&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec22&quot;&gt;2.2 B. The 3 Horizons Framework&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec221&quot;&gt;2.2.1 Business economics &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec222&quot;&gt;2.2.2 The three Horizon framework from McKinsey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec223&quot;&gt;2.2.3 Three Horizons framework - takeaways&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec23&quot;&gt;2.3 C. The Estimation process&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec231&quot;&gt;2.3.1 The roles and rituals involves in the estimation process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec232&quot;&gt;2.3.2 Rituals are scheduled&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec233&quot;&gt;2.3.3 Now the Estimation Process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec234&quot;&gt;2.3.4 Team Sprint velocity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec235&quot;&gt;2.3.5 Forecasting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec236&quot;&gt;2.3.6 The Estimation process - Takeaways&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec24&quot;&gt;2.4 D. Roadmap timeline&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec241&quot;&gt;2.4.1 Monthly roadmap update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec242&quot;&gt;2.4.2 Back on Continuous Delivery&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec3&quot;&gt;3. Conclusions and final notes&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;



&lt;a name=&quot;sec1&quot;&gt;&lt;/a&gt;
&lt;h2&gt;1. A Software Development Roadmap &lt;/h2&gt;

&lt;p&gt;
A &lt;i&gt;good&lt;/i&gt; roadmap implies some important characteristics:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aligns with company strategy, rallies all around this and steers us towards delivering on this strategy&lt;/li&gt;
&lt;li&gt;Focuses on delivering customer value &amp; articulating benefits&lt;/li&gt;
&lt;li&gt;Excites our customers about our company &amp; product direction&lt;/li&gt;
&lt;li&gt;Reflects what we have learned, over time, as an organisation&lt;/li&gt;
&lt;li&gt;Does not pretend to have all the answers, neither needs to&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
If it is done well, &lt;b&gt;a roadmap is a strategic communication tool, a statement of intent and direction&lt;/b&gt;.
&lt;br&gt;
A good roadmap has to set a clear direction and simultaneously embrace uncertainty inherent in product development
&lt;/p&gt;

&lt;p&gt;
Some pitfalls have to be avoided when designing a good roadmap:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Excessive granularity – too much focus on detail and dates means it will inevitably soon be inaccurate or even obsolete!&lt;/li&gt;
&lt;li&gt;Mistakenly thinking every item in the roadmap demands upfront design and estimation - this is impossible and wasteful. Only the short-to-mid-term elements have to be estimated accurately.&lt;/li&gt;
&lt;li&gt;Believing each stakeholders must personally value every item&lt;/li&gt;
&lt;li&gt;Ensuring our roadmap is not conflated with our product release plan!&lt;/li&gt;
&lt;/ul&gt;

&lt;a name=&quot;sec12&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.2 Roadmap elements&lt;/h3&gt;

&lt;p&gt;
The essential elements of a roadmap are as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A good roadmap starts with a &lt;b&gt;vision&lt;/b&gt; of where we are going, guides us there and explains the stops along the way. The vision is the guiding principle.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Broad timeframes&lt;/b&gt; avoid overcommitment - it&apos;s the sequence that matters (now, next, future). As we move along the sequence, accurate estimations become less important. Down to the point where we don&apos;t really care about the time that might take something on which we are not going to be working before several years.&lt;/li&gt;
&lt;li&gt;Focus on &lt;b&gt;outcomes&lt;/b&gt; not outputs. Themes are not granular features and functions.&lt;/li&gt;
&lt;li&gt;What &lt;b&gt;goals&lt;/b&gt; will our product accomplish? What outcomes?&lt;/li&gt;
&lt;li&gt;Protects against claims of broken promises by explaining that changes can happen.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
These elements would be illustrated as follows for instance for a &lt;i&gt; RIAO - Rich Internet Application Organizer&lt;/i&gt; (as introduced in my &lt;a href=&quot;https://www.slideshare.net/JrmeKehrli/from-product-vision-to-story-map-lean-agile-product-shaping&quot;&gt;&quot;Lean / Agile Product shaping&quot; slideshare&lt;/a&gt; and detailed in my &lt;a href=&quot;https://www.slideshare.net/JrmeKehrli/introduction-to-modern-software-architecture-249211724&quot;&gt;&quot;Introduction to Modern Software Architecture&quot; slideshare.&lt;/a&gt;):
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/475e949d-312d-4296-81f0-13e241879d3d&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Roadmap elements&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/475e949d-312d-4296-81f0-13e241879d3d&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Roadmap Elements&lt;br&gt;
(inspired from Roy Belchamber @ NetGuardians)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec13&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.3 Hierarchy&lt;/h3&gt;

&lt;p&gt;
In terms of hierarchy, we have to wonder why we are doing this, why it supports our strategy, what customer problems it will solve, and finally how to solve it. &lt;br&gt;
The &lt;b&gt;Roadmap&lt;/b&gt; is about &lt;i&gt;what&lt;/i&gt; customer problem we&apos;re about to solve. And the &lt;b&gt;Product Backlog&lt;/b&gt; is about how will we solve them and what solutions do we need to implement to solve these. &lt;br&gt;
The roadmap is a product management concern, while the backlog is an R&amp;D concern.

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d63adcea-c7c7-44e1-b7e7-2e85a84d2928&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;The why / what / how to to roadmapping&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d63adcea-c7c7-44e1-b7e7-2e85a84d2928&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Roadmap hierarchy&lt;br&gt;
(© Roy Belchamber @ NetGuardians)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;a name=&quot;sec14&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.4 A realistic Roadmap&lt;/h3&gt;

&lt;p&gt;
Let&apos;s look at something more realistic.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/cc46c114-ab4d-4433-b61c-9ad3d3833ea1&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;An Agile roadmap sample&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/cc46c114-ab4d-4433-b61c-9ad3d3833ea1&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Realistic Agile Roadmap
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
This example is a slightly reworked (anonymized and generified) version of the roadmap we use today (April 2021) in my current company. It is really an instantiation of all the fundamental principles expressed above and we will be using it throughout the remainder of this article to illustrate all key practices required to make it a living and yet fairly useful tool.
&lt;/p&gt;

&lt;p&gt;
A first important thing is to be noted. 
&lt;br&gt;
As we move along the timeline of the roadmap, the confidence and certainty diminishes down to the point where, in 2 years from now, the roadmap is more a collection of long term development ideas and in no way any kind of actual commitment on working on any of these.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/78f69efe-5730-490e-a5dd-5927f64ce804&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Uncertainty on the roadmap&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/78f69efe-5730-490e-a5dd-5927f64ce804&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;a name=&quot;sec15&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.5 In the next chapters&lt;/h3&gt;

&lt;p&gt;
In the next chapters of this article, we will be covering all the fundamental concepts, principles and practices that need to be understood and adopted to make this roadmap a useful communication and planning tool.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c06fba7b-d0ed-412b-b785-ae96832f6e9a&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Next chapters&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c06fba7b-d0ed-412b-b785-ae96832f6e9a&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;



&lt;a name=&quot;sec2&quot;&gt;&lt;/a&gt;
&lt;h2&gt;2. Prerequisites &lt;/h2&gt;

&lt;p&gt;
In order to be able, to design and maintain such a roadmap, some organizational principles as well as some product management principles are required.
&lt;br&gt;
Then, if one intends such a &lt;i&gt;Product Roadmap&lt;/i&gt; to be more than a fancy marketing tool, really a strong communication, management and planning tool, it&apos;s essential that the forecasts are as reliable and realistic as possible. And this is fairly complicated since it relies on the ability of the individual development teams working on a specific topic to be able to &lt;b&gt;work autonomously, independently and without any friction&lt;/b&gt; with other teams. And this in turn requires an in depth adoption of &lt;i&gt;Agile Principles and practices&lt;/i&gt; not only in the development team but at product Management level as well.
&lt;/p&gt;

&lt;p&gt;
In this chapter, we will be looking at each and every of these prerequisites.
&lt;/p&gt;

&lt;a name=&quot;sec21&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.1 A. Agile Software Development Teams &lt;/h3&gt;

&lt;p&gt;
First, if we want to be in a situation where we can respect the roadmap timeline and have reliable forecasts, the multiple development teams working in parallel on the multiple streams need state-of-the-art agile culture, principles and practices.&lt;br&gt;
The whole problem is &lt;i&gt;How to build a team with a culture, an organization and a set of principles and practices that make estimations possible and forecasting reliable and accurate ?&lt;/i&gt;
&lt;br&gt;
The answer is &lt;i&gt;by adopting a state of the art Agile Engineering methodologies&lt;/i&gt;.
&lt;/p&gt;

&lt;p&gt; 
The schema below is a slide that I&apos;ve designed when I was a consultant carrying on digital transformation projects in big corporations. Very often I was meeting IT teams that were not agile at all. I needed a slide to explain to them what are the prerequisites if one want to embrace digital transformation.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/80f83d69-2302-40f6-a088-f862c09aba59&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;Agile prerequisites&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/80f83d69-2302-40f6-a088-f862c09aba59&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;My message here was as follows: &lt;br&gt;
&lt;i&gt;&quot;Look, if you want to go digital, if you want to come up with digital products and be able to develop and adapt them at the pace that is required in the digital world, it&apos;s going to be fairly difficult if you&apos;re not an agile Corporation, if you haven&apos;t &lt;b&gt;scaled agile principles and practices&lt;/b&gt; at the level of the whole organization. 
&lt;br&gt;
And then scaling agile, if you haven&apos;t embraced the &lt;b&gt;Lean Startup&lt;/b&gt; methodology, and if you don&apos;t have company wide monitoring and improvement approaches such as &lt;b&gt;Kanban and Kaizen&lt;/b&gt;, will be difficult. 
&lt;br&gt;
Then doing Lean Startup, Kanban, and Kaizen if you don&apos;t have a &lt;b&gt;state of the art Agile software development methodology&lt;/b&gt;, and if you haven&apos;t embraced &lt;b&gt;DevOps&lt;/b&gt; principles, will be difficult.
&lt;br&gt;
And finally doing Agile and DevOps, if you&apos;re not state of the art regarding &lt;b&gt;eXtreme Programming&lt;/b&gt; principles and practices will be difficult.&quot;
&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
Now, if you want to be in a situation where you have independent and autonomous teams which can benefit from reliable estimations, and eventually come up with reliable forecasting abilities, then you have to have raised agility adoption to this level in your company. 
&lt;/p&gt;

&lt;p&gt;
Another way to illustrate, these agile methodologies such as DevOps, Lean Startup and others would be &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/periodic-table-of-agile-principles&quot;&gt;The Periodic table of Agile principles and practices&lt;/a&gt;.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/eaa33988-0916-4c98-93d8-efce52c72bea&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Periodic Table of Agile Principles and practices&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/eaa33988-0916-4c98-93d8-efce52c72bea&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Periodic Table of Agile Principles and Practices
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
All the principles and practices with a red border are effectively needed for accurate planning and road mapping. All these practices are required to have independent and autonomous teams giving you the ability to parallelize development epics and be in a position where you can accurately estimate the velocity of these teams, in such a way that eventually you&apos;re able to do reliable estimations and forecasting on the items for which you need to have an accurate due date. 
&lt;br&gt;
Now in reality the situation is more complex since at the end of the day all the practices from the table heavily depend on one another so in the end you need to have embraced most of them.
&lt;/p&gt;

&lt;p&gt;
We will now review the most essential practices with direct impact on planning and forecasting abilities from these various methodologies.
&lt;br&gt;
We can&apos;t review all of the required practices, of course, but at least those that I believe are the most essential ones from eXtreme Programming, Lean Startup and DevOps that one needs to adopt, if one want to be able to reach the ultimate goal, which is having autonomous and independent team, giving one the ability to paralyze development items, while still being able, within teams, to have accurate planning capacity and estimations, and eventually reliable forecasting.
&lt;/p&gt;

&lt;a name=&quot;sec211&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.1.1 eXtreme Programming &lt;/h4&gt;

&lt;p&gt;
The eXtreme Programming practices are as follows. This representation is interesting since it shows that even only within XP, all these practices depend from each others.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/be3fc61c-68dc-4d23-b356-3560430dda38&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px;&quot; alt=&quot;eXtreme Programming Practices&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/be3fc61c-68dc-4d23-b356-3560430dda38&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
XP Practices
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Let&apos;s discuss more in detail 4 essential principles when it comes to planning: Small-releases, Testing, On-Site Customer and the Planning Game.
&lt;/p&gt;

&lt;a name=&quot;sec2111&quot;&gt;&lt;/a&gt;
&lt;h5&gt;2.1.1.1 Small-releases&lt;/h5&gt;

&lt;p&gt;
And the first part I want to mention is XP&apos;s &lt;i&gt;Small Releases&lt;/i&gt; principle, which DevOps streamlines as &lt;i&gt;Continuous Delivery&lt;/i&gt;. The fundamental idea behind it is that if you want to master your release process, you have to release as often as possible, for multiple reasons. First, because if you release as often as possible, the releases are small. And as a result, your chances of mastering the process are much higher than if you have rare and then very large releases.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d591f1d9-6449-4e57-9826-dbf4d50ede6f&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;XP Small Releases&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d591f1d9-6449-4e57-9826-dbf4d50ede6f&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
XP Practices
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Having smaller gaps and smaller changes in your releases significantly reduces the risk inherent to the release.
&lt;br&gt;
But there&apos;s another reason behind it. If you ask an engineer to do something very often, he will automate it. This is not necessarily the case if an engineer does only a few releases a year, why would one bother automating it?
&lt;br&gt;
But if you ask your development team, your engineering team, to release at the end of every single sprint a &lt;i&gt;production-ready&lt;/i&gt; and &lt;i&gt;shippable version&lt;/i&gt; of the product, then your development team will automate the release process. That&apos;s what engineers do.
&lt;/p&gt;

&lt;a name=&quot;sec2112&quot;&gt;&lt;/a&gt;
&lt;h5&gt;2.1.1.2 Testing, testing and more testing&lt;/h5&gt;

&lt;p&gt;
The next topic is about testing. XP&apos;s practitioners are always saying that one has to invest the 20% of time required to reach 80% coverage of the cyclomatic complexity of the code or branch / line coverage, and not more (since the remaining 20% would require 80% of the investment) .
&lt;br&gt;
But if one wants to go to continuous delivery, if one wants to be in a situation where one is able to entirely automate the release process, then the 80% target is not sufficient anymore, one has to target 100% coverage. 
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/499760ff-0cea-4723-aef0-ab346dbd6422&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;TDD&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/499760ff-0cea-4723-aef0-ab346dbd6422&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
And this is doable with different types of test. Covering more than 80% of the code complexity with unit test only is impossible. But integration tests enable to go beyond, for instance typically 90%. Then if one is able to have the product entirely built and deployed automatically on a production like environment, then one is able to implement &lt;i&gt;end-to-end&lt;/i&gt; / functional tests using for instance protractor, Selenium or whatever. And with end-to-end / functional tests, you are able to cover the remaining 10% to reach nearly 100% coverage with your whole automated tests suite. 
&lt;br&gt;
And this is essential if one wants to be able to have reliable forecasting abilities. Because stop the world releases are killing it. It&apos;s fundamentally unpredictable how much time it takes to complete acceptance tests, fix the remaining issues and eventually release the software if one waits for periodic releases. 
&lt;br&gt;
One needs to entirely automate non-regression tests &lt;b&gt;and acceptance tests&lt;/b&gt; using functional, integration and unit tests. And this will be absolutely key to reach continuous delivery.
&lt;/p&gt;

&lt;p&gt;
But there&apos;s something else that needs to be accounted. In this next chart, we&apos;re looking at three typical situations of a feature development. The first situation is without any automated test, the second is with some tests implemented after the development is done, and the last situation is when embracing TDD.
&lt;br&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/tdd-test-driven-development-is#sec45&quot;&gt;This chart is explained in detail here in a previous article.&lt;/a&gt;
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c625635e-a891-4769-9a58-73b67523dd38&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;3 scenarii&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c625635e-a891-4769-9a58-73b67523dd38&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;This is interesting. We have the illusion that skipping the development of tests makes us gain time. And if you look at the blue box, it does indeed make us gain time in terms of pure development time. But the time lost after the development phase exceeds greatly the time gained by skipping tests.
&lt;br&gt;
Writing some tests after implementing the code really helps, we can see that the development time takes longer but is really compensated by the time gained on debugging and manual testing. Not to mention the formidable documentation that unit and integration tests form. 
&lt;br&gt;
But the striking approach is when we&apos;re putting in place TDD - enabling us to reach a close to 100% coverage of the code with our automated tests - where we spend most of the time doing pure development, which takes longer of course, but the return on investment is absolutely brilliant.
&lt;/p&gt;

&lt;p&gt;
And the interesting thing when it comes to planning and forecasting is that the blue box can be estimated. This is typically what we estimate, when we do the planning game with Story Points. It&apos;s possible to estimate the time it takes to develop a feature, including the tests. On the contrary the time that it would take to debug it, manually testing it or re-understanding it is fundamentally unpredictable. 
&lt;br&gt;
&lt;b&gt;TDD brings most of the development activities back to something that can be estimated&lt;/b&gt;, which is the pure development time. And this is not optional. If one wants to be able to have reliable forecasts and reliable estimations, one needs to bring most of the development activities back to something that can be estimated. This is absolutely precious with TDD.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/tdd-test-driven-development-is&quot;&gt;For more information on TDD, refer to my previous article.&lt;/a&gt;
&lt;/p&gt;

&lt;a name=&quot;sec2113&quot;&gt;&lt;/a&gt;
&lt;h5&gt;2.1.1.3 On-site customer&lt;/h5&gt;

&lt;p&gt;
XP insists on the need to have an &lt;i&gt;on-site customer&lt;/i&gt; to streamline the development pace by being able to answer questions, provide refine specifications and, importantly, do acceptance testing continuously as development tasks are being completed.&lt;br&gt;
The notion of on-site customer - having someone with a true business expertise - is replaced in scrum with the notion of &lt;b&gt;product Owner&lt;/b&gt;.
&lt;br&gt;
If one wants the development teams to be independent and autonomous then one needs to make sure that this team can work on a feature peacefully and in isolation down to production readiness without any interruption and without any dependency on an external actor.
&lt;br&gt;
The product owner enables to do &lt;i&gt;continuous acceptance testing&lt;/i&gt; thus avoiding stop the world events and streamlines acceptance testing as part of the development activities.
&lt;br&gt;
For this reason mostly, the on-site customer - or the scrum product owner - is crucial.
&lt;/p&gt;

&lt;a name=&quot;sec2115&quot;&gt;&lt;/a&gt;
&lt;h5&gt;2.1.1.5 The Planning Game&lt;/h5&gt;

&lt;p&gt;
And finally, the planning game. You need to think of it this way: imagine you&apos;re looking at a big stone somewhere in a field. Estimating &lt;i&gt;out of the blue&lt;/i&gt; the weight of the stone is very difficult. Estimating absolute figures is a very difficult game. 
&lt;br&gt;
But answering to another question which would be &quot;is the stone heavier or lighter than this other stone ?&quot; is a completely different story. It&apos;s a comparison game. And that&apos;s surprisingly easier. Finding out whether a stone is somewhat bigger than another one, but also somewhat smaller than a third one, is a much easier game.
&lt;br&gt;
Story points enabled to transform a very difficult estimation game into a much more a much easier comparison game.
&lt;br&gt;
And that&apos;s what the planning poker with Story Points is all about.
&lt;/br&gt;
It&apos;s about finding ways to transform a difficult problem in an easier problem. And after a while, the team becomes quite good at it
&lt;/p&gt;

&lt;p&gt;
And if you&apos;re able to accurately estimate a task in story points using the comparison game, then you&apos;re able to compute how many story points a team is able to do in a sprint. And if you know how many story points a feature cost and what is the &lt;i&gt;sprint velocity&lt;/i&gt; of a team, then you can compute how many sprints does the team need to implement this very feature. 
&lt;br&gt;
And with this, you can do forecasting and planning ... if and only if the team is able to work independently, autonomously, without any synchronization point, without stop the world events and without any friction coming from the need to collaborate with another team. 
&lt;br&gt;
And we will see what these teams are to enable such independence. 
&lt;/p&gt;

&lt;p&gt;
More information on the Planning game in &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-planning-tools-and-processes&quot;&gt;a previous article&lt;/a&gt; and further in this very article.
&lt;/p&gt;


&lt;a name=&quot;sec2116&quot;&gt;&lt;/a&gt;
&lt;h5&gt;2.1.1.6 XP Takeaways&lt;/h5&gt;

&lt;p&gt;
Summing things up:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
First, the product owner (i.e. &lt;i&gt;on-site customer&lt;/i&gt;) - enables the team to be autonomous and work on its own without interruption by answering questions as they pop up and, more importantly, running acceptance test continuously, so that a developer can consider his task being finished as soon as possible before he moves to the next one. 
&lt;/li&gt;
&lt;li&gt;
Small releases - which we will see as &lt;i&gt;Continuous Delivery&lt;/i&gt; in the DevOps methodology - enables to avoid periodic releases as &lt;i&gt;stop the world&lt;/i&gt; events, which would break both the autonomy and the pace of the team by forcing synchronization points everywhere on the roadmap timeline.
&lt;/li&gt;
&lt;li&gt;
TDD enables to have reliable forecasting by bringing most of the development team activities to something that can actually be estimated and forecasted, which is code implementation time. Debugging sessions, testing and re-understanding the code are activities that are fundamentally impossible to estimate. 
&lt;/li&gt;
&lt;li&gt;
And finally, the planning poker estimation game enables to have reliable estimation and forecasting abilities, surprisingly and counter-intuitively much more than traditional waterfall.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e1b9f1dd-afc9-4166-9abe-c557a90dc41e&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;XP Takeaways&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e1b9f1dd-afc9-4166-9abe-c557a90dc41e&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
XP takeaways
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec212&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.1.2 Lean Startup&lt;/h4&gt;

&lt;p&gt;
Eric Ries presents Lean Startup as the &lt;i&gt;Build - Measure - Learn&lt;/i&gt; loop.
&lt;br&gt;
Steve Blank presents it as the &lt;i&gt;Four Steps to the Epiphany&lt;/i&gt; process as follows. We won&apos;t be discussing Lean Startup in depth today but I would want to discuss &lt;i&gt;two Lean Startup Practices&lt;/i&gt; that are crucial to shape autonomous and independent, and yet interchangeable and equivalent teams: &lt;b&gt;Pizza Teams&lt;/b&gt; and &lt;b&gt;Feature Teams&lt;/b&gt;.
&lt;br&gt;
One might refer to &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/lean-startup-a-focus-on&quot;&gt;my previous article on lean startup&lt;/a&gt; to get an overview of all Lean Startup principles and practices.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/81a7edce-4619-452d-8364-5cbb5a0c83a4&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Lean Startup&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/81a7edce-4619-452d-8364-5cbb5a0c83a4&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Lean startup - The four steps to the Epiphany.
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Let&apos;s discuss shortly these two important principles related to Agile Teams.
&lt;/p&gt;

&lt;a name=&quot;sec2121&quot;&gt;&lt;/a&gt;
&lt;h5&gt;2.1.2.1 Pizza Teams&lt;/h5&gt;

&lt;p&gt;
I discussed in length Pizza Teams in &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/lean-startup-a-focus-on#sec341&quot;&gt;my previous article about Lean Startup&lt;/a&gt; so I will only recap a few things here.
&lt;/p&gt;

&lt;p&gt;
The reason for small teams is that the more people you have in your team, the more you explode the number of &lt;i&gt;one-to-one&lt;/i&gt; communication channels. So one needs to keep a team being sufficiently small to make it so that everyone is able to understand what everyone else is working on.
&lt;br&gt;
One needs to keep the team sufficiently small to have an efficient organization within the team, and so the ability to have people collaborating together, for instance, the UI UX expert with the backend developer, the DevOps engineer, etc.
&lt;br&gt;
But the teams needs to be sufficiently large to enable efficient brainstorming, the ability to generate new ideas, interchangeability of essential resources, etc.
&lt;br&gt;
In my current company, we believe that the ideal size for our &lt;i&gt;Feature Teams&lt;/i&gt; is between 5 and 8 engineers.
&lt;/p&gt;


&lt;a name=&quot;sec2122&quot;&gt;&lt;/a&gt;
&lt;h5&gt;2.1.2.2 Feature Teams&lt;/h5&gt;

&lt;p&gt;
Just as for Pizza Teams, I discussed in length &lt;i&gt;Feature Teams&lt;/i&gt; in &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/lean-startup-a-focus-on#sec342&quot;&gt;my previous article about Lean Startup&lt;/a&gt; so I will only recap a few things here.
&lt;/p&gt;

&lt;p&gt;
The key point with Feature Teams is to have teams that are independent and autonomous as possible without any synchronization needs or friction with any other team. This is essential to guarantee that the team cam deliver a feature from A to Z on its own, where Z is the production rollout or release. This in turn is key to have reliable estimations and eventually forecasting abilities.
&lt;br&gt;
Organizing an R&amp;D department with Feature Teams is striking in this regards.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4ba88a93-48b5-4953-99cf-c7f3baa3d3dd&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Feature Teams&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4ba88a93-48b5-4953-99cf-c7f3baa3d3dd&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Feature Teams&lt;br&gt;
(Source : Large Scale Scrum : &lt;a href=&quot;http://less.works/&quot;&gt;http://less.works/&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;
To understand this, consider the following. 
&lt;br&gt;
Most of the time, the way software engineering development projects or IT departments are organized in companies is by having component teams. In the component teams model, one team is taking care of the UI, another team takes care of developing the back-end, there is perhaps a data science team, another team takes are of data management and database infrastructure, and so on. 
&lt;br&gt;
These multiple teams have to collaborate to develop a feature or to implement an evolution on the set of products that they develop or maintain. And that&apos;s where the problem is, every single team cannot go faster than the slowest of all the teams on which they all have a dependency. 
&lt;br&gt;
Imagine that each and every feature requires some changes in the database model. And these can only be done by the database team. Then no team can go faster than the database team because they all have to wait on the database team to finally implement the changes to the database model that they require.
&lt;br&gt;
Components team are killing the performance of the IT development department or project as a whole.
&lt;/p&gt;

&lt;p&gt;
A feature team on the other hand is able to implement a feature from A to Z, from refined specifications down to production deployment, entirely independently and autonomously. 
&lt;br&gt;
This can only work if you have within the feature team all the competencies that are required for that: developers, UI/UX experts, data scientists, QA engineers, DevOps engineers - not necessarily to operate the software in production, but to &lt;b&gt;automate&lt;/b&gt; the deployment and operation of the software in production - and so forth.
&lt;br&gt;
And since these feature teams are able to work on a feature entirely independently and autonomously, then &lt;b&gt;if you know the velocity of your feature team, you know how long it will take it to implement a feature&lt;/b&gt; that you have been able to estimate.
&lt;br&gt;
Feature teams are multiplying the performance of the whole development or software development organization by several orders of magnitude. And the side benefit is they are autonomous and independent by design.
&lt;/p&gt;

&lt;p&gt;
Just a little note about component teams, people are sometimes confusing component teams and product teams. While it is not acceptable to have component teams (one team working on the UI, another team working on the back end, another team working on the research, yet another working on the database and so on=, it is on the contrary crucial to have product teams. 
&lt;br&gt;
Component teams are killing performance by introducing strong dependencies between teams. 
&lt;br&gt;
But having a Feature Team linked not to a component, but to a product makes a lot of sense. We want to leverage and develop &lt;b&gt;business expertise of the feature team&lt;/b&gt;. And this can&apos;t happen if a feature team is moving all the time from one product to another. 
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a9f2679f-e8a0-47ce-91bf-0eef1db8e081&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Feature Teams&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a9f2679f-e8a0-47ce-91bf-0eef1db8e081&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Product Teams
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
A feature team is fundamentally linked to a product or perhaps a consistent set of products (or product line), because that&apos;s the product they will start to be familiar with in terms of business understanding.
&lt;br&gt;
And that is essential to avoid wasting time. With experience on a product, the team can become even more autonomous and slowly reduce its dependency on the product owner to be there and working with the team all the time to understand what it has to do in terms of business requirements.
&lt;/p&gt;

&lt;a name=&quot;sec2123&quot;&gt;&lt;/a&gt;
&lt;h5&gt;2.1.2.3 Lean Startup Takeaways&lt;/h5&gt;

&lt;p&gt;
Summing things up:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
First, a feature team is an independent and autonomous team that&apos;s able to implement a feature from A to Z. And the fundamental idea behind that is that as soon as a team has any dependency on another team, its estimation and forecasts are simply not reliable anymore. Multi-team consolidated planning and forecasting is a much more difficult problem.
&lt;br&gt;
&lt;i&gt;From A to Z&lt;/i&gt; means that the team needs to have everything it takes to carry on its mission, 3rd level support, documentation, maintenance, automated test development, code reviews, IT testing, acceptance testing with the product owner, releasing, continuous delivery, continuous deployment, deployment and delivery automation, everything... And the &lt;i&gt;DoD - Definition Of Done&lt;/i&gt; on a task or epic has to account all these elements.
&lt;br&gt;
And the takeaway here is that because the team is autonomous and independent, its planning and forecasts are accurate and reliable.
&lt;/li&gt;

&lt;li&gt;
The reason you want to have many of these independent teams is that you want to be able to work on different things in parallel. You want to have a fair share of spread between the project gaps and the short term development, while retaining the ability to work on long term topics. 
&lt;br&gt;
And how you want to do this if you don&apos;t have different teams able to work on different things at the same time? 
&lt;br&gt;
So you want to have multiple feature teams in your project development organization to be able to have different core focuses at the same time.
&lt;/li&gt;

&lt;li&gt;
Finally, because a feature is being given to one autonomous team, and that team is able to work without any friction without an interruption, and more importantly, without any stop the world event, the team&apos;s velocity calculation enables to do reliable forecasting.
&lt;br&gt;
As a side note, something that&apos;s important to understand as well is that the development team should never ever be exposed to customers. If all the time the team has to answer customer requests then its performance will critically suffer. First and second levels of Support need to be external to R&amp;D.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/bd19e59e-8e9c-4194-8663-901be7cd97ac&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Lean Startup Takeaways&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/bd19e59e-8e9c-4194-8663-901be7cd97ac&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Lean Startup Takeaways
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec213&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.1.3 DevOps&lt;/h4&gt;


&lt;p&gt;
At the very root of DevOps is the wall of confusion between developers and operators. And the wall of confusion is a crystallization of the fact that developers and operators have fundamentally different objectives, and fundamentally different cultures.
&lt;br&gt;
A developer is challenged to deliver new functionalities to production as fast as possible. An operator, on the other hand, has the fundamental mission of maintaining the production stability, which is precisely what a developer pushing changes all the time is compromising. These two different roles in an organization have entirely different and completely opposed objectives.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/7fc925f4-e338-4fc4-87b8-a53c6fd1723d&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;DevOps&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/7fc925f4-e338-4fc4-87b8-a53c6fd1723d&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
DevOps
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;
Interestingly, the web giants have built organizations making this wall of confusion nearly vanish. DevOps is a lot about understanding how traditional industries can inspire from the web giants to streamline the interactions, and smoothen the relationship between developers and operators. 
&lt;br&gt;
And DevOps relies on three pillars:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b8141259-13e3-48ab-87a7-0df32674b057&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px;&quot; alt=&quot;DevOps pillars&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b8141259-13e3-48ab-87a7-0df32674b057&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
DevOps pillars
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
I described these principles and practices in length in &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/devops-explained&quot;&gt;my previous article on DevOps&lt;/a&gt; so I wont be repeating much more here.
&lt;br&gt;
I will just emphasize a little two aspects that are utmost essential for planning and estimations that are &lt;i&gt;Infrastructure as code&lt;/i&gt; and &lt;i&gt;Continuous Delivery&lt;/i&gt;
&lt;/p&gt;

&lt;a name=&quot;sec2131&quot;&gt;&lt;/a&gt;
&lt;h5&gt;2.1.3.1 Infrastructure as Code &lt;/h5&gt;

&lt;p&gt;
Again, this is very much detailed in my previous article so have a look at the section on &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/devops-explained#sec2&quot;&gt;Infrastructure as Code.&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The reason why &lt;i&gt;Infrastructure As Code&lt;/i&gt; and &lt;i&gt;Continuous Delivery&lt;/i&gt; are essential to planning and forecasting is because both enable to automate entirely the deployment and release process - the deployment process in case of a cloud or SaaS application, and the release process in case of an application deployed on premise.
&lt;br&gt;
Automating release and/or deployment is crucial since we don&apos;t want &lt;i&gt;stop the world&lt;/i&gt; events. We want a feature team to be able to implement changes on the software, release them and push them to a customer, without any friction and without any contention coming from other teams that have different speed or timelines. And this can only work if the whole release or deployment process is entirely automated. And at the end of the day, this is what DevOps is about.
&lt;br&gt;
We have all the possible tools today to automate machine provisioning, system configuration, application deployment, etc.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a58fd379-8035-450b-9ea3-60132c5cef02&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;IaaS&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a58fd379-8035-450b-9ea3-60132c5cef02&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Infrastructure as Code
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Automating all of this is difficult, I&apos;m not saying it&apos;s easy. it&apos;s everything but easy when you implement features that involve significant technology changes to keep up to date the automated deployment process, the automated release process, etc. At the end of the day, there is a reason why &lt;i&gt;courage&lt;/i&gt; is the most essential value in eXtreme Programming.
&lt;br&gt;
But again, you don&apos;t have much of a choice. &lt;b&gt;That&apos;s the only way you can make teams independent from each other and avoid stop the world events&lt;/b&gt;. And 20 years ago, that would have been crazy. But with the tools we have today, with virtual machines, Docker containers, Ansible, Chef, Puppet, with everything you can build around these tools to make it so that you click a button and the release is entirely automated with all the tests being executed, etc. this can definitely be done. And it has to be done.
&lt;br&gt;
The &lt;i&gt;Return On Investment&lt;/i&gt; in building and maintaining such automation infrastructure is absolutely striking. It enables a team to deploy to production (or create a release) independently from every other team. And this is absolutely key when planning and forecasting matters.
&lt;/p&gt;

&lt;a name=&quot;sec2132&quot;&gt;&lt;/a&gt;
&lt;h5&gt;2.1.3.2 Continuous Delivery&lt;/h5&gt;

&lt;p&gt;
The fundamental idea behind continuous delivery is that doing deployments is difficult. And because it&apos;s difficult, one has to do it as often as one can. 
&lt;br&gt;
There are two reasons for this:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
The first reason is that the more often you release, the smallest the changeset will be. And the smallest the changeset is, the more you master it, the more you can control it and the smallest the inherent risks are.
&lt;/li&gt;
&lt;li&gt;
But there&apos;s another reason: if you ask an engineering team to do something all the time, they will automate it, that&apos;s the way engineers work. They will invest the time to make it so that the next time they need to do something it&apos;s as easy as pushing a button. And that&apos;s absolutely key, because if you automate your release and production rollout processes, then you can do it as often as you can. 
&lt;/li&gt;
&lt;/ol&gt;

&lt;b&gt;A little note about &lt;i&gt;on premise&lt;/i&gt; deployment.&lt;/b&gt;



&lt;p&gt;
If you want to release an application, for instance at every end of sprint or at the end of every feature and push it to a customer, then internally you have to organize the team in such a way that it makes it possible to release at every end of sprint a shippable, production ready version of the product. 
&lt;br&gt;
Releasing the product and deploying it to any given customer has to be a product management decision. As far as the development team or the R&amp;D is concerned, every single sprint has to finish with a production ready, shippable version. Period.
&lt;br&gt;
For this to be possible, you have to be in a situation where if one day you push, for instance, version 7.3.4 to a customer, then then a few months or years later you release a 9.46.5, you need to be able to push that upgrade to that very customer automatically. For this you have to build a framework that enables you to apply these upgrades entirely automatically. It should be possible all the time to push upgrades automatically. If you don&apos;t do that, if applying an upgrade to a customer involves manual steps, manual data migration, manual configuration migration, etc. then you&apos;re screwed because it would force you to potentially maintain all the individual versions you have in production at your customers. And that would kill the performance of your team with its ability to focus on the last development version only.
&lt;/p&gt;

&lt;p&gt;
In short, Continous delivery is key for planning!
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You don’t want to loose time on Deployment&lt;/li&gt;
&lt;li&gt;You want deployment to be automated&lt;/li&gt;
&lt;li&gt;You want deployment and production release to happen without you worrying about it or even only noticing&lt;/li&gt;
&lt;li&gt;You want to be able to develop on one single branch, the latest development branch, and push any version to any customer thanks to the data migration framework maintained along the software.
&lt;li&gt;it&apos;s key to avoid multiple team synchronization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
I won&apos;t detail continuous delivery any further here and would refer to &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/devops-explained&quot;&gt;my article on DevOps&lt;/a&gt;, specifically the sections about:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/devops-explained#sec34&quot;&gt;Continuous Delivery deployments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/devops-explained#sec35&quot;&gt;Zero Downtime Deployments&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec2133&quot;&gt;&lt;/a&gt;
&lt;h5&gt;2.1.3.3 DevOps Takeaways&lt;/h5&gt;

&lt;p&gt;
Summing things up:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
You have to be in a situation where releasing a new version of the product or pushing it to the SaaS of cloud environment is a &lt;i&gt;push-a-button&lt;/i&gt;, anecdotal event. You don&apos;t want to lose time on releasing or deploying in production because that would mean you have &lt;i&gt;stop the world&lt;/i&gt; events in your entire development department, killing the ability of your teams to work independently on their own feature.
&lt;br&gt;
If every three months or every two months or even every month a team has to stop everything because a release process is going on, it&apos;s impossible to respect the estimations and forecasts.
&lt;/li&gt;
&lt;li&gt;
Automated tests are essential. You want to be in a situation where you push a button to deploy the software to production. This only works if you have a complete suite of automated tests and end-to-end tests that ensure the software is working 100% before it&apos;s automatically pushed to a production environment or automatically released.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6bac9d55-d610-4110-a16d-cccc69592c38&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;DevOps Takeaways&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6bac9d55-d610-4110-a16d-cccc69592c38&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
DevOps Takeaways
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;a name=&quot;sec22&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.2 B. The 3 Horizons Framework&lt;/h3&gt;

&lt;p&gt;
Your might have noticed these H1, H2 and H3 notions on the roadmap. It&apos;s now time to explain this. This comes from McKinsey&apos;s &lt;b&gt;3 Horizons framework&lt;/b&gt;
&lt;br&gt;
In order to introduce the three horizons framework by McKinsey, I need to start by explaining a few concepts of &lt;i&gt;Business Economics&lt;/i&gt;.
&lt;/p&gt;

&lt;a name=&quot;sec221&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.2.1 Business economics &lt;/h4&gt;

&lt;p&gt;
So let&apos;s start by looking at the following charts:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/f2ed9fee-290e-4e53-b547-d39a9cbbac0f&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Business Economics&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/f2ed9fee-290e-4e53-b547-d39a9cbbac0f&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
On the left here, we have what we call the &lt;i&gt;Technology S Curve&lt;/i&gt;. And it&apos;s quite typical in product development stories with a strong innovation dimension. 
&lt;br&gt;
The &lt;i&gt;technology S curve&lt;/i&gt; illustrates that when you invent a new product, when you invent a new technology or come up with a new offering for specific market, the progresses you make at first from a technology standpoint are huge. But after a while, continuing to invest more and more in your product or your technology doesn&apos;t make a whole lot of sense. Because after a while, the amount of investment you have to consent to develop your technology further is exploding. After a while, you have reached the maximum you can do with your technology or your innovative product. And it doesn&apos;t make a whole lot of sense at that point to keep investing in it, you better move your idea to the next level, or look at adjacent segments, or even entirely new products. 
&lt;/p&gt;

&lt;p&gt;
And this is shown pretty well by the &lt;i&gt;technology profit curve&lt;/i&gt; on the right as well, which is saying basically the same thing, but from a different perspective.
&lt;br&gt;
When you have a new idea, when you put a new product on the market, in a real &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/the-search-of-product-market&quot;&gt;Product-Market fit&lt;/a&gt; situation, the money you make out of your product gets very high quite early. You make very fast a lot of profits. But after a while, this technology is being disrupted in its turn - you have competitors offering the same idea, you have alternative offering coming up, and your profit will go down. And when this happens, you have to find the next level investment, the next level innovation in your idea or develop something completely different. And again this is quite typical in companies developing product with a strong innovation dimension.
&lt;/p&gt;


&lt;a name=&quot;sec222&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.2.2 The three Horizon framework from McKinsey&lt;/h4&gt;

&lt;p&gt;
This is at the root of the three horizons framework from McKinsey.
&lt;br&gt;
McKinsey is basically saying that, in order to keep developing your company, and perhaps your solution or your technology, you have to be aware, monitor, foresee and manage these situations. If you&apos;re working on your current technology, you have to be aware that it has a deadline. After a while it doesn&apos;t make a whole lot of sense to keep investing in what you&apos;re doing today. You have to identify your next idea, you have to identify the next level evolution to enhance your idea or technology that will make you reach the next level. 
&lt;br&gt;
And also, you have to keep in mind that eventually you might need to come up with something completely new to keep developing your company further. 
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/20384e68-12e2-41ed-963a-9766d291cb59&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Three Horizons Framework&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/20384e68-12e2-41ed-963a-9766d291cb59&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Three Horizons Framework
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
This reads as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Horizon 1&lt;/b&gt; is about maintaining and strengthening your core business.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Horizon 2&lt;/b&gt; is about expanding your offering further for new opportunities or emerging markets. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Horizon 3&lt;/b&gt; is about genuinely new businesses, competencies and possibilities, perhaps on top of your current technology, but likely on something completely new, yet related to your &lt;i&gt;product vision&lt;/i&gt;, the next level idea. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The best example of that is Uber. They came up with their initial application very fast. And after a while, developing the Uber application itself didn&apos;t make much sense anymore. It was working perfectly. And it started to be challenged by competitors offering. So Uber came with Uber Eats leveraging on their technology to provide a completely new product on a new market.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/623ba280-d810-4215-9a99-aa73322ec9d6&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Three Horizons description&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/623ba280-d810-4215-9a99-aa73322ec9d6&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Again:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
The first horizon involves implementing innovations that are improving the current operations or the UX of the product or covering functional aspects that were not covered so far. 
&lt;/li&gt;
&lt;li&gt;
The second horizon is about innovations that extend the human competencies or technology abilities into new related markets. It&apos;s about looking at new verticals or adjacent segments.
&lt;/li&gt;
&lt;li&gt;
The third is about disruption or high-end innovations that will change the nature of your industry and generate entirely new possibilities and competencies.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
McKinsey speaks of the horizon 1 being one to two years, horizon 2 being two to four years and Horizon 3 being three to five years.
&lt;br&gt;
In my current company, this doesn&apos;t speak to us, since, well, we have absolutely no idea of what we&apos;re going to be doing in five years, this is like forever to us. And it doesn&apos;t make a whole lot of sense to think of it so much today aside of some high-level orientations. For us, our interpretation in terms of timeline is as follows. Horizon 1 is now to 12 months, Horizon 2 is six to 24 months, Horizon 3 is three years from now.
&lt;/p&gt;

&lt;p&gt;
An important aspect of the 3 horizons model is that at every single moment, you should have a fair share of investment on the thre horizons, meaning elements from the 3 horizons in your current backlog.
&lt;br&gt;
If you have not reached the flattening of the profit curve, the you have mostly H1 innovations or elements, but you should also have a fair share of Horizon 2 and 3 elements.
&lt;br&gt;
If you have reached the flattening of your profit curve, then the ratio of Horizon 2 and 3 elements in your backlog should be higher.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/cbfa9c34-8bf6-4644-888f-da0a19c46e69&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Three Horizons - fair share of focuses&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/cbfa9c34-8bf6-4644-888f-da0a19c46e69&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;a name=&quot;sec223&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.2.3 Three Horizons framework - takeaways&lt;/h4&gt;

&lt;p&gt;
Summing things up:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
You should have a fair share between the different Horizons in your backlog and your sprint development tasks. If most of the time, the majority of your investment should be on Horizon 1, there should still be a fair share of Horizon 2 and 3 elements. Whenever your reach the flattening of your curves, the ratio should change in favor of Horizon 2. But you can&apos;t avoid investing on Horizon 2 and 3 already today. If you don&apos;t, you will die.
&lt;/li&gt;
&lt;li&gt;
A little note about the stories related to individual customer integration projects or individual delivery project: for some of them, you might not know before you actually start the project or the specific implementation, all of that very customer needs, the precise scope, and hence you can&apos;t estimate accurately. In this case, you have to take some reserves. And it&apos;s fine to take reserves, you can absolutely be in a situation where you don&apos;t know exactly what the team will be working on. There are always backlog fillers tasks, tiny tasks like a typo fixing or another small change somewhere that are literally filling up your backlog. These tasks are fillers. And this is what your teams work on when they need to fill in the blanks.
&lt;/li&gt;
&lt;li&gt;
In a normal situation though, these fillers - all these tiny tasks - shouldn&apos;t be prioritized and scheduled independently, it&apos;s impossible. So as far as roadmapping is concerned, all these small tasks have to be grouped together in batches, consistent batches - grouping them together by theme, or scope or value. Such evolution batches are prioritized and scheduled as one big block. And this kind of makes sense, you&apos;re almost forced to implement all these tasks in a continuous way all the time. But you might decide that in the next six months, we will implement this batch of consistent evolution together on the platform. 
&lt;/li&gt;
&lt;li&gt;
Regarding what are these stories or epics on the roadmap, most of them comes from the PMC identified topics or Project Gaps. There&apos;s also some long and large functional evolution coming from business analyst or from the product owners just as technology evolutions and maintenance come from the CTO. The project gaps are coming from delivery of course. The takeaway here is that the cardinality has to be larger, big, important topics. And if you want to schedule smaller things, group them together in consistent evolution batches.
&lt;/li&gt;
&lt;li&gt;
If you have a team that&apos;s working on H1 topics, such as project gaps or evolution batches for six months, make it so that six months after they work on H2 or H3 topics. This is crucial to avoid frustration. You can tell a team that in the coming four months they will be working on tiny and not so passionate improvements here and there, but only as long as they know that the next big technology evolution is coming up and is for them. If you have a fair amount of tasks in the teams among H1, H2, H3, everybody keeps being motivated. 
&lt;br&gt;
And then, if you don&apos;t do that you&apos;re somehow back to having component teams, which doesn&apos;t make a whole lot of sense. 
&lt;/li&gt;
&lt;li&gt;
Finally, you want to have independent and autonomous team for estimations and reliable forecasting. And you want to have many of them to keep the possibility to have a fair share of investment between H1, H2 and H3 at any given time in your product development timeline.
&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/3288679a-cdfe-4689-8031-104f1da1e452&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;3 Horizons Takeaways&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/3288679a-cdfe-4689-8031-104f1da1e452&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
3 Horizons Takeaways
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;a name=&quot;sec23&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.3 C. The Estimation process&lt;/h3&gt;

&lt;p&gt;
I won&apos;t spend much time on the estimation process since I detailed a few years ago all of this in &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-planning-tools-and-processes&quot;&gt;a dedicated article on this very blog&lt;/a&gt;.
&lt;br&gt;
So I will just be repeating some essential information regarding how epics or stories on the roadmap are estimated and how &lt;i&gt;team velocity&lt;/i&gt; is estimated.
&lt;/p&gt;

&lt;a name=&quot;sec231&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.3.1 The roles and rituals involves in the estimation process&lt;/h4&gt;

&lt;p&gt;
Let&apos;s start by defining all the roles involved in the estimation process. In this regards, the most important roles are the Product Manager, the CTO, the Tech Leads and Architects, the Team Leaders and of course the Product Owners.
&lt;br&gt;
Their core responsibilities are as follows, at least in my current company.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/efbcda67-4675-4076-8af1-ff34191e0788&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Roles involved in estimation&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/efbcda67-4675-4076-8af1-ff34191e0788&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Roles involves in the estimation process
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
For the estimation process in our context, the important rituals are the &lt;i&gt;Product Management Committee&lt;/i&gt;, and the &lt;i&gt;Architecture committee&lt;/i&gt;. The first is central to identifying evolutions and prioritizing them while the second is central to designing and estimating them.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/40354c47-0d2d-4081-b58f-2f7d30ae695c&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Rituals involved in estimation&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/40354c47-0d2d-4081-b58f-2f7d30ae695c&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Rituals involved in estimation
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The Product Management Committee identifies the opportunities and evolutions and prioritize them. 
&lt;br&gt;
The Architecture committee is responsible to proceed with everything that is required for accurate estimations: the detailed specification of these epics and stories, their breakdown in tasks and their estimations. 
&lt;br&gt;
It&apos;s key to estimate the short to mid-term elements accurately, but then we don&apos;t care so much in estimating something on which we will work in two years. Why would you care how much time it takes to develop something we are not even sure we will be doing? We want at all cost to have accurate estimations of the things on which we know we will be working, to prioritize and plan them efficiently. But for long term ideas, a &lt;i&gt;T-Shirt sizing&lt;/i&gt; approach is sufficient.
&lt;/p&gt;

&lt;a name=&quot;sec232&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.3.2 Rituals are scheduled&lt;/h4&gt;

&lt;p&gt;
All precautions should be taken to avoid interupting the development sprint all the time. For this reason, rituals are clearly scheduled and take place at a predefined time and pace. There should be no unforeseen interruption of the sprint course.
&lt;br&gt;
In my company, we stick to the following month organization, with 2 sprints per month:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/7728d1d1-77c8-4dd7-a9b0-07bc9690e353&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Rituals are scheduled&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/7728d1d1-77c8-4dd7-a9b0-07bc9690e353&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;
This reads as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
A sprint ends with a &lt;b&gt;Sprint Retrospective&lt;/b&gt; (Kaizen) and starts with a &lt;b&gt;Sprint Planning&lt;/b&gt; where the sprint backlog is filled up to the &lt;i&gt;team sprint velocity&lt;/i&gt; by the Product Owner and the Team Leader. Tasks are discussed with all the team at the same time and some estimations may be reviewed. 
&lt;br&gt;
In my current company, we do both on Friday since we want everything to be ready for Monday morning regardless of the timezone of the teams.
&lt;/li&gt;
&lt;li&gt;
Of course every single day there is a &lt;b&gt;Daily Scrum&lt;/b&gt; in the morning where everyone presents where they are and where problems are discussed and escalated to the Team Leader and Tech Lead who might schedule dedicated meetings to discuss them further if required. 
&lt;br&gt;
Also, every day finishes with an automated deployment of the whole product in a production-like setup on the &lt;b&gt;Integration Environment&lt;/b&gt;.
&lt;/li&gt;
&lt;li&gt;
At the end of the sprint, a production-ready, shippable version of the product is automatically deployed on the &lt;i&gt;Test Environment&lt;/i&gt;. This internal release is considered as a &lt;i&gt;customer release&lt;/i&gt; as far as the development teams are concerned.
&lt;/li&gt;
&lt;li&gt;
The PMC - &lt;b&gt;Product Management Committee&lt;/b&gt; occurs once a month. It&apos;s sometimes a very short meeting, just reviewing the updated roadmap and fine tuning priorities and sometimes a very long meeting finishing late at night, when multiple opportunities have to be discussed and prioritized.
&lt;/li&gt;
&lt;li&gt;
The ARCHCOM - &lt;b&gt;Architecture Committee&lt;/b&gt; - is a fairly central ritual in my current company. This is where we do all of:
&lt;ul&gt;
&lt;li&gt;Dispatch stories among Architects, Tech Leads, Product Owners and even the CTO for design, refined specifications and tasks breakdown.&lt;/li&gt;
&lt;li&gt;Discuss open points, comment and amend designs and breakdowns.&lt;/li&gt;
&lt;li&gt;Proceed with task estimations&lt;/li&gt;
&lt;li&gt;Identify and Challenge technical evolutions and maintenance &lt;/li&gt;
&lt;/ul&gt;
As far as the estimation process is concerned, this ritual is really central. It can last a few dozens of minutes in some cases, and long hours until late in the evening sometimes. We run it every week at the same time.
&lt;/li&gt;
&lt;/ul&gt;

&lt;a name=&quot;sec233&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.3.3 Now the Estimation Process&lt;/h4&gt;

&lt;p&gt;
Shortly put, the estimation process consists in identifying topics and evolutions in the PMC, specifying them with details, having the ARCHCOM design them and then proceeding with the breakdown in tasks for estimations, having the tasks estimated and eventually computing the overall epic or story estimations. With everything in the short-to-mid term properly estimated, the Product Manager can proceed with updating and maintaining the roadmap.
&lt;br&gt;
The process looks as follows:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/483fb6a6-9c28-4cc8-b6ef-32bbc1993e81&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Estimation Process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/483fb6a6-9c28-4cc8-b6ef-32bbc1993e81&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Which reads as follows:
&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt;
The PMC decides to prioritize a new feature, a new element or an evolution, as a &lt;b&gt;new story&lt;/b&gt; and we shall proceed with its estimation so that it can be positioned accurately on the roadmap.
&lt;/li&gt;
&lt;li&gt;
So the product manager or a product owner will be specifying the story in a detailed way with the help of the CTO perhaps, focusing on identifying as precisely as possible its functional elements. The result in our context is called a &lt;b&gt;detailed story&lt;/b&gt;
&lt;br&gt;
This closes the specification phase.
&lt;/li&gt;
&lt;li&gt;
Now comes the design phase.
&lt;br&gt;
Then the CTO, a PO, an architect or sometimes a teach lead will be transforming the &lt;i&gt;detailed story&lt;/i&gt; - which is a marketing / product formalism - into a &lt;b&gt;development epic&lt;/b&gt; - which is a technical formalism where we cover functional design, solution design, application design, perhaps data identification, data research needs and so on.
&lt;br&gt;
It can happen that the CTO creates himself some development epics for mandatory technology evolutions, refactorings, etc.
&lt;/li&gt;
&lt;li&gt;
The ARCHCOM will challenge the design and other technical elements and discuss / refine open points before an ARCHCOM member will be assigned the task to proceed with the &lt;b&gt;breakdown in tasks&lt;/b&gt; of the development epic. &lt;br&gt;
The breakdown in task is challenged and discussed at ARCHCOM before being validate.
&lt;br&gt;
It can happen that tasks are created directly from architects or tech leads for refactorings for instance or transformed from delivery wishes. In such case, they are bound to an existing epic or a container epic is created for them (for instance for a specific Project Gaps).
&lt;/li&gt;
&lt;li&gt;
Then all individual tasks can be &lt;b&gt;estimated&lt;/b&gt;.
&lt;/li&gt;
&lt;li&gt;
With the individual task estimations finalized, the CTO or a PO will compute the total amount of &lt;b&gt;Story Points at Epic level&lt;/b&gt;.
&lt;/li&gt;
&lt;li&gt;
The CTO or a PO will then liaise with the PM to communicate the &lt;b&gt;estimations on the story&lt;/b&gt;.
&lt;/li&gt;
&lt;li&gt;
Finally the PM will &lt;b&gt;update the roadmap&lt;/b&gt; accordingly and send the updated roadmap to the PMC. The next PMC can challenge the view, re-prioritize or end up taking a different decision regarding the evolution or new feature now that it knows how much it costs.
&lt;/li&gt;
&lt;/ul&gt;

&lt;a name=&quot;sec234&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.3.4 Team Sprint velocity&lt;/h4&gt;

&lt;p&gt;
The approach is fairly usual, one needs to monitor the number of story points a team has been able to implement in the past five sprints. Then the extreme values are eliminated because they make no sense (people tend to go on holidays, people are sick, some tasks have been postponed to another sprint, etc.). 
&lt;br&gt;
We take the second and the last but one and with these we&apos;re able to compute an upper and a lower bound. This range addresses the uncertainty inherent to software development. 
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6bb888cc-6c23-4042-bab1-e5917dc74a68&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px;&quot; alt=&quot;Team Sprint capacity&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6bb888cc-6c23-4042-bab1-e5917dc74a68&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Computing Team Sprint capacity
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
As far as estimations and planning are concerned, we will take the lower bound to compute the &lt;b&gt;team sprint velocity&lt;/b&gt; since we have to be defensive. 
&lt;/p&gt;

&lt;a name=&quot;sec235&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.3.5 Forecasting&lt;/h4&gt;

&lt;p&gt;
Now that we know how many Story Points a team can do in a sprint, we know how many it can do in a month of 2 sprints (the additional days are ignored, they form a reserve).
&lt;br&gt;
Add if we know how many Story Points a team can do in a month, then we know how many months a team needs to implement any given story that has been properly estimated.
&lt;br&gt;
Boom. Done.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/0fda5e39-7a75-4b88-ad8e-6cb7c738a027&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 650px;&quot; alt=&quot;Forecasting delivery dates&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/0fda5e39-7a75-4b88-ad8e-6cb7c738a027&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Forecasting delivery dates
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
As far as delivery date estimations are concerned, we will take the pessimistic estimation coming from the lower bound of the Team Sprint capacity.
&lt;/p&gt;

&lt;a name=&quot;sec236&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.3.6 The Estimation process - Takeaways&lt;/h4&gt;

&lt;p&gt;
Summing things up:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
First a note about something specific to our context in my project company. In our model, the project gaps are the only items on which we decide to have hard commitments. 
&lt;br&gt;
In our model, we know that we have to start any given customer delivery project at a precise moment in time and that it has to be in production at another precise moment in time. So we need to make sure we will deliver the missing functionalities sufficiently in advance for our integration team or delivery team to be able to integrate them at the customer sufficiently in advance. 
&lt;br&gt;
So we don&apos;t have much of a choice, we need to have at least some elements of our roadmap that are strong commitments. And in our model, these are the project gaps. 
&lt;br&gt;
To handle this, we make sure the project gaps are well balanced between the different teams. They become the only items from the roadmap that can&apos;t be moved, they are frozen items; we want to ensure that we will respect their delivery dates. 
&lt;br&gt;
The way we do that is that we consider them as frozen once they are scheduled. Once they are planned, they can&apos;t move anymore.
&lt;/li&gt;
&lt;li&gt;
The estimation game tells us the total story point for each and every story of epic that we want to follow on the roadmap. So assuming two things, the amounts with the team sprint velocity, we know how many sprints and how many months will be required to implement a story or an epic. So we can put it on the roadmap. The key word here is &lt;i&gt;reserve!&lt;/i&gt;. Take reserves, more reserves and even more reserves. 
&lt;br&gt;
In our model, sufficient reserve is taken by the fact that we schedule these elements for the end of a period, the end of the month in the three to six months timeline, and then the end of a quarter in the next periods, or even the end of the year in the following period. And by doing so, most of the time, we find out who have sufficient reserve taken when laying these elements down the roadmap.
&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/538bd676-bf44-4c16-aeb7-3f07d573febf&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Estimation Process Takeaways&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/538bd676-bf44-4c16-aeb7-3f07d573febf&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Estimation Process Takeaways
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;



&lt;a name=&quot;sec24&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.4 D. Roadmap timeline&lt;/h3&gt;

&lt;p&gt;
The roadmap timeline is also an important aspect. The whole principle is to avoid having a timeline with too many different deadlines since they would be impossible to follow and only bring noise, but we have to have a sufficient number since they form our scheduling unit.
&lt;br&gt;
A good number of terms of scheduling deadlines is eight. Eight deadlines are easy to follow and with a reducing granularity approach, they provide enough scheduling and synchronization points to successfully draw a 24 to 36 months roadmap.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a2f03749-a2e2-4647-b171-8b9a9d2429f2&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;Roadmap timeline&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a2f03749-a2e2-4647-b171-8b9a9d2429f2&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Roadmap timeline
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Which reads as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
The &lt;b&gt;Next 3 months&lt;/b&gt; are followed on three elements. This makes it more than 1/3 of the roadmap dedicated to this shortest term and is a reflection of the fact that we follow and monitor things carefully on this short term roadmap. In addition, we&apos;re having strong commitment there and any change on the activity plan of the next three months should really be considered and weighted very carefully since we commit on most of these elements.
&lt;/li&gt;
&lt;li&gt;
The next 2 elements are related to the &lt;b&gt;following 2 quarters&lt;/b&gt;. This makes 1/4 of the roadmap timeline dedicated to a 6 months period and is an indication that we want a fine control over the next priorities past the shortest term 3 months period. This is where changes can happen frequently as we discover our market or sign new deals. Priorities can change thre but it has to be backed by strong business objectives.
&lt;/li&gt;
&lt;li&gt;
The following 2 elements are related to the &lt;b&gt;following 2 semesters&lt;/b&gt;. This is the mid term roadmap basically related to &lt;i&gt;what we will do in a year or so&lt;/i&gt;. This is really rather indicative and &lt;b&gt;estimations there do not necessarily need to be precise&lt;/b&gt;, a &lt;i&gt;T-shirt sizing&lt;/i&gt; approach can be sufficient. 
&lt;br&gt;
The elements on the mid-term roadmap yet need to be realistic and correspond to the vision we have today, even though that vision can entirely change.
&lt;/li&gt;
&lt;li&gt;
The last element being the &lt;b&gt;following year&lt;/b&gt; is really related to the long-term roadmap, a basket of ideas.
&lt;/li&gt;
&lt;/ul&gt;

&lt;a name=&quot;sec241&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.4.1 Monthly roadmap update&lt;/h4&gt;

&lt;p&gt;
The roadmap is updated every month and a trick needs to be found to ensure that whatever happens and wherever we are within the year, we keep tracking 8 baskets, not more and importantly not less.
&lt;br&gt;
This is done by tricking the vision and adapting some periods to fit the specific situation in which we are within the year.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2edd8777-8816-4953-b667-e35a6b80f263&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Timeline Update&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2edd8777-8816-4953-b667-e35a6b80f263&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Roadmap timeline
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt; 
By tricking the period this way every month, we  make sure that we only follow eight different buckets in the in the roadmap since anything beyond eight wouldn&apos;t make a whole lot of sense, at least in our model.
&lt;/p&gt;

&lt;p&gt;
Again, one aspect that is absolutely critical to be in a position where we can have reliable forecasts is to avoid at all cost &lt;i&gt;stop-the-world&lt;/i&gt; events (refactorings, releases, etc.)
&lt;br&gt;
&lt;i&gt;Stop-the-world&lt;/i&gt; releases or refactoring, or big technology evolutions that require synchronizing the teams, are killing the ability of a team to work independently and autonomously. So eventually, it&apos;s killing the ability of a team to respect the forecast on schedule and planning. These have to be avoided at all cost. 
&lt;br&gt;
And interestingly, even though implementing a big refactoring or technology evolution without &lt;i&gt;stopping the world&lt;/i&gt; is much more difficult, from a purely technical standpoint, most of the time, it&apos;s &lt;b&gt;absolutely doable&lt;/b&gt;. It will be more expensive. It will indeed take longer. But it&apos;s absolutely doable.
&lt;br&gt;
And it&apos;s absolutely worth it. Because avoiding &lt;i&gt;stop the world&lt;/i&gt; events enable the team to respect and fulfill expectations in terms of forecasts and planning.
&lt;/p&gt;

&lt;a name=&quot;sec242&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.4.2 Back on Continuous Delivery&lt;/h4&gt;

&lt;p&gt;
Continous delivery is very hard to reach in the mind of software development teams working on SaaS platforms.
&lt;br&gt;
But think of the web giants. Think of what they are doing ...
&lt;br&gt;
Let&apos;s see some examples. Amazon is deploying code in production every 11 seconds, on average. Netflix is pushing code to production 1000 times a day. They have even developed &lt;i&gt;Chaos Monkeys&lt;/i&gt;, which is a software literally killing VMs, services and containers all the time in production, as a way to force developers to &lt;i&gt;design for failure&lt;/i&gt;. Facebook, before 2016, were cherry picking the features in a few release trains a day. They don&apos;t do that anymore, they push the master branch directly in a dozen of release trains a day.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/16cff642-0b83-4b41-a082-cbca59af25ce&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Web Giants continuous delivery&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/16cff642-0b83-4b41-a082-cbca59af25ce&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Now that&apos;s what the Web Giants manage to do. If you embrace the same techniques - they are using state of the art XP, agile, Scrum, DevOps and lean startup principles and practices, then you can do this as well.
&lt;/p&gt;

&lt;p&gt;
And even if you do &lt;i&gt;on premise&lt;/i&gt; deployment, it still makes sense to do continuous delivery since it forces you to automate your release process.
&lt;br&gt;
As far as the development teams are concerned, every sprint ends up with a shippable and production-ready version of the product. And because Database migration scripts are maintained along the software, you end up in a situation where it&apos;s perfectly feasible from a technology standpoint to push this version at a customer. It&apos;s perfectly doable because you have designed the product and developed it this way. 
&lt;br&gt;
If the developments teams stick to this, then releasing the product as an actual end-customer version becomes purely a Product management decision, not any more a technical concern. At the end of every feature development, Product Management has the possibility to decide to transform the internal release into a customer release and give it a proper version number.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4a1c4998-6939-4add-b745-94e129fba4c6&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Releases&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4a1c4998-6939-4add-b745-94e129fba4c6&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
Releases
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec3&quot;&gt;&lt;/a&gt;
&lt;h2&gt;3. Conclusions and final notes&lt;/h2&gt;


&lt;p&gt;
In terms of conclusion I would say that embracing the core Agile practices from XP, Scrum, DevOps and Lean Startup enables a company to have reliable forecasting and planning abilities which eventually lead to design a relevant and useful roadmap.
&lt;br&gt;
This principles and practices enables the company to have autonomous and independent teams, which are then able to work on a development topic or technology evolution without interruptions and without and friction with other teams, which is key to have their real-life development pace aligned with estimations and forecasts.
&lt;br&gt;
In addition, multiple autonomous teams have the possibility to work in parallel on multiple development topics which enables the company to have a fair share of development in the multiple Horizons.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/82a6044e-22b4-4d9b-8cf6-61780600a0ac&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Conclusion - Agile roadmap requirements&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/82a6044e-22b4-4d9b-8cf6-61780600a0ac&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Some tools are required to give life to all of this and I will leave the reader to discover them hereunder:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4dd1a1b4-d127-4265-bf4d-ec57c4019914&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px;&quot; alt=&quot;Tools&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4dd1a1b4-d127-4265-bf4d-ec57c4019914&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
My final words would be that such an Agile roadmap has the potential to be much more that a communication tool, it&apos;s really an internal alignment tool and provides the high-level management view to align everyone in the company towards the common product development objectives.
&lt;/p&gt;

&lt;p&gt;
This article is available as a &lt;a href=&quot;https://www.slideshare.net/JrmeKehrli/a-proposed-framework-for-agile-roadmap-design-and-maintenance&quot;&gt;Slideshare presentation&lt;/a&gt;
&lt;/p&gt;



</description>          </item>
    <item>
    <guid isPermaLink="true">https://www.niceideas.ch/roller2/badtrash/entry/the-search-of-product-market</guid>
    <title>The Search for Product-Market Fit</title>
    <dc:creator>Jerome Kehrli</dc:creator>
    <link>https://www.niceideas.ch/roller2/badtrash/entry/the-search-of-product-market</link>
        <pubDate>Mon, 17 Aug 2020 04:31:43 -0400</pubDate>
    <category>Agile</category>
    <category>agile</category>
    <category>agile-methods</category>
    <category>design-thinking</category>
    <category>four-steps-epiphany</category>
    <category>lean-canvas</category>
    <category>lean-startup</category>
    <category>mvp</category>
    <category>pmf</category>
    <category>product-market-fit</category>
    <category>scale-up</category>
    <category>startup</category>
    <category>value-proposition-canvas</category>
    <atom:summary type="html">&lt;p&gt;
The Search for Product-Market Fit is the sinews of war in a startup company. While the concept and whereabouts are well known by most founders, the importance of this event in the company and product building process, what it means to be Before-Product-Market-Fit and After-Product-Market-Fit and the fundamental differences in terms of objectives, processes, culture, activities, etc. between these two very distinct states is almost always underestimated or misunderstood. 
&lt;/p&gt;

&lt;p&gt;
Product-Market Fit is this sweet spot that startups reach when they feel eventually that the market is really pulling out their product. It&apos;s what happens when they found out that they can only deliver as fast as the customers buys their product or when they can only add new servers in the SaaS cloud as fast as is required to sustain the rise in workload.
&lt;br&gt;
Product-Market Fit is so important because it has to be a turn point in the life of a young company.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-Product-Market Fit, the startups needs to focus on the leanest possible ways to solve Problem-Solution Fit, define and verify its business model and eventually reach Product-Market-Fit.
&lt;/li&gt;
&lt;li&gt;
Post-Product-Market Fit, the company becomes a scale up, needs to ramp up its marketing roadmap and effort, build and scale it&apos;s sales team, build mission-centric departments, hire new roles and recruit new competencies, etc.
&lt;/li&gt;
&lt;/ul&gt; 

&lt;p&gt;
Dan Olsen designed the following pyramid to help figure what Product-Market Fit means (we&apos;ll be discussing this in length in this article):
&lt;/P&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/1098b6c5-6e4e-4846-84d6-0de114355ae5&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Product Market Fit Pyramid&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/1098b6c5-6e4e-4846-84d6-0de114355ae5&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Understanding Product-Market Fit and being able to measure and understand whether it&apos;s reached or not is crucial. Reaching PMF should be the core focus of a startup in its search phase and understanding whether it&apos;s reached is key before scaling up.
&lt;br&gt;
This article is an in-depth overview of what Product-Market-Fit means and the various perspective regarding how to get there. We will present the Lean-Startup fundamentals required to understand the process and the tools to reach product market fit, along with the Design thinking fundamentals, the metrics required to measure it, etc.
&lt;/p&gt;
</atom:summary>        <description>&lt;!-- The Search for Product-Market Fit 


TODO: replace design thinking circle with inner arrows

--&gt;

&lt;p&gt;
The Search for Product-Market Fit is the sinews of war in a startup company. While the concept and whereabouts are well known by most founders, the importance of this event in the company and product building process, what it means to be Before-Product-Market-Fit and After-Product-Market-Fit and the fundamental differences in terms of objectives, processes, culture, activities, etc. between these two very distinct states is almost always underestimated or misunderstood. 
&lt;/p&gt;

&lt;p&gt;
Product-Market Fit is this sweet spot that startups reach when they feel eventually that the market is really pulling out their product. It&apos;s what happens when they found out that they can only deliver as fast as the customers buys their product or when they can only add new servers in the SaaS cloud as fast as is required to sustain the rise in workload.
&lt;br&gt;
Product-Market Fit is so important because it has to be a turn point in the life of a young company.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-Product-Market Fit, the startups needs to focus on the leanest possible ways to solve Problem-Solution Fit, define and verify its business model and eventually reach Product-Market-Fit.
&lt;/li&gt;
&lt;li&gt;
Post-Product-Market Fit, the company becomes a scale up, needs to ramp up its marketing roadmap and effort, build and scale it&apos;s sales team, build mission-centric departments, hire new roles and recruit new competencies, etc.
&lt;/li&gt;
&lt;/ul&gt; 

&lt;p&gt;
Dan Olsen designed the following pyramid to help figure what Product-Market Fit means (we&apos;ll be discussing this in length in this article):
&lt;/P&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/1098b6c5-6e4e-4846-84d6-0de114355ae5&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Dan Olsen&apos;s Product Market Fit Pyramid&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2546b5e4-b772-4a08-a2d5-9b5d58b6f07c&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Understanding Product-Market Fit and being able to measure and understand whether it&apos;s reached or not is crucial. Reaching PMF should be the core focus of a startup in its search phase and understanding whether it&apos;s reached is key before scaling up.
&lt;br&gt;
This article is an in-depth overview of what Product-Market-Fit means and the various perspective regarding how to get there. We will present the Lean-Startup fundamentals required to understand the process and the tools to reach product market fit, along with the Design thinking fundamentals, the metrics required to measure it, etc.
&lt;/p&gt;

&lt;p&gt;
This article is available as a &lt;a href=&quot;https://www.slideshare.net/JrmeKehrli/the-search-for-productmarket-fit-237078155&quot;&gt;Slideshare presentation&lt;/a&gt; and a &lt;a href=&quot;https://www.youtube.com/watch?v=k41qAv3NwqM&quot;&gt;Youtube video&lt;/a&gt;.
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;Summary&lt;/b&gt;
&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec1&quot;&gt;1. Introduction - Product Market Fit&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec11&quot;&gt;1.1 Startups ... &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec12&quot;&gt;1.2 From Product-Market Fit to &quot;Lean Startup&quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec13&quot;&gt;1.3 Defining &quot;Product-Market Fit&quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec14&quot;&gt;1.4 Four myths about Product-Market Fit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec15&quot;&gt;1.5 Feeling Product-Market Fit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec16&quot;&gt;1.6 Dan Olsen&apos;s PMF Pyramid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec17&quot;&gt;1.7 A first high-level process&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec2&quot;&gt;2. Lean Startup Fundamentals&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec21&quot;&gt;2.1 Lean Startup &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec22&quot;&gt;2.2 Key principles &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec23&quot;&gt;2.3 The Feedback loop &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec24&quot;&gt;2.4 The Four steps to the Epiphany &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec25&quot;&gt;2.5 Customer development - the practices &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec26&quot;&gt;2.6 Get out of the building&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec27&quot;&gt;2.7 Problem interview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec28&quot;&gt;2.8 Solution interview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec29&quot;&gt;2.9 MVP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec210&quot;&gt;2.10 Fail Fast&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec211&quot;&gt;2.11 Metrics Obsession&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec212&quot;&gt;2.12 Pivot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec213&quot;&gt;2.13 The Lean Canvas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec214&quot;&gt;2.14 The Value Proposition Canvas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec3&quot;&gt;3. Design Thinking Fundamentals&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec31&quot;&gt;3.1 Design Thinking &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec32&quot;&gt;3.2 The Design Thinking Process &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec33&quot;&gt;3.3 The Design Thinking Framework &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec34&quot;&gt;3.4 Thinking Outside of the Box &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec35&quot;&gt;3.5 Sum-up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec4&quot;&gt;4. Reaching Product Market fit - Different perspectives&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec41&quot;&gt;4.1 The Lean Startup Perspective &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec42&quot;&gt;4.2 The &quot;MVP-Centric&quot; Perspective &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec43&quot;&gt;4.3 The &quot;Lean Canvas-Centric&quot; Perspective &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec44&quot;&gt;4.4 The &quot;Design Thinking-Centric&quot; Perspective &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;


&lt;li&gt;&lt;a href=&quot;#sec5&quot;&gt;5. Measure Obsession&lt;/a&gt;&lt;/li&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec51&quot;&gt;5.1 Net Promoter Score&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec52&quot;&gt;5.2 CLV to CAC Ratio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec53&quot;&gt;5.3 Retention Ratio / Curve &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec54&quot;&gt;5.4 Growth Rate &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec55&quot;&gt;5.5 Further readings: pirate metrics &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
    
&lt;li&gt;&lt;a href=&quot;#sec6&quot;&gt;6. Conclusion &lt;/a&gt;&lt;/li&gt;    
&lt;/ul&gt;



&lt;a name=&quot;sec1&quot;&gt;&lt;/a&gt;
&lt;h2&gt;1. Introduction - Product Market Fit&lt;/h2&gt;

&lt;p&gt;
&lt;i&gt;&quot;The term product/market fit describes &quot;the moment when a startup finally finds a widespread set of customers that resonate with its product&apos;.&quot;&lt;/i&gt;
&lt;br&gt;by Eric Ries
&lt;/p&gt;

&lt;p&gt;
In this chapter, we will detail what is Product-Market Fit, what it means and how it&apos;s defined.
&lt;/p&gt;

&lt;a name=&quot;sec11&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.1 Startups ... &lt;/h3&gt;

&lt;p&gt;
&lt;b&gt;A startup&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
We can find multiple definitions of a &lt;i&gt;Startup&lt;/i&gt; online:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/dc7f3495-3c31-4f89-a3a8-941756a9aa89&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px;&quot; alt=&quot;various definitions of a startup&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/dc7f3495-3c31-4f89-a3a8-941756a9aa89&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;The &lt;i&gt;Most of the time ...&lt;/i&gt; definition is from my perspective downright wrong. A startup is not a scaled down version of a company. There are important inherent differences between a running company and a startup (we&apos;ll come back to this later)
&lt;/p&gt;

&lt;p&gt;
The &lt;i&gt;wikipedia&lt;/i&gt; definition is better. There is the important notion of search - a startup is indeed still searching the Product-Market Fit, the very important notion of validating - need to make assumptions, test them and confirm or contradict them and the notion of scaling.
&lt;/p&gt;

&lt;p&gt;
But Eric Ries&apos; definition is the best from my perspective since it emphasizes three important aspects of a startup:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Notion of Human institution is better than company or project - a startup can be many things, a guy working in his garage on his idea is in some ways a startup&lt;/li&gt;
&lt;li&gt;The notion of &lt;b&gt;new&lt;/b&gt; product or service&lt;/li&gt;
&lt;li&gt;Most importantly, the notion of &lt;b&gt;Extreme uncertainty&lt;/b&gt; - that&apos;s the root of the problem&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
&lt;b&gt;Startup often fail!&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
Most frequently cited reasons for startup failures:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2d0ca791-67b5-4f5b-8c08-e887878a1a3a&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px; &quot; alt=&quot;Top reasons why startup fail&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2d0ca791-67b5-4f5b-8c08-e887878a1a3a&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source:  &lt;a href=&quot;https://www.statista.com/chart/11690/the-top-reasons-startups-fail/&quot;&gt;CB Insights -  https://www.statista.com/chart/11690/the-top-reasons-startups-fail/
&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
One of the main reasons why products fail is because they don&apos;t meet customer needs in a way that is better than other alternatives. That is the essence of &lt;b&gt;product-market fit&lt;/b&gt;.  
&lt;/p&gt;

&lt;p&gt;
Most startup fail because the founder have an idea, work in a tunnel for multiples months or even year to build their idea, and only eventually rise their head looking for customers and face the ugly truth: the idea may well be brilliant indeed, but there&apos;s no market. I&apos;ve seen this so many times, so many times.  
&lt;br&gt;
Whenever one has an idea of a product, a new technology, before writing the single Line of Code, before investing a single dollar on it, one needs to answer the single and only question that matters: &lt;i&gt;Is there a market for it and what is that market?&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
In the reasons why startups fail mentioned above, there are a few others interesting things to note:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ran out of cash - why spend so much cash before Product / Market Fit. If your each Product-Market fit before heavily investing in your product / company,  you can&apos;t run out of cash because investors will be killing themselves to put money in your product / company. When you reached Product - Market fit, you WILL have the data points to raise investments, BIG investments.
&lt;/li&gt;
&lt;li&gt;
Not the right team - when you reach Product Market fit , you can raise investments and then hire the right team - Founders do not necessarily need to remain CEO and COO of their company.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Interestingly, The Lean startup Methodology with its processes, principles and practices gives a solution to most of the top 10 problems listed above. Today, I intend to focus a lot on Lean Startup in this article.
&lt;/p&gt;


&lt;a name=&quot;sec12&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.2 From Product-Market Fit to &quot;Lean Startup&quot;&lt;/h3&gt;

&lt;p&gt;
The &quot;&lt;b&gt;Product-market fit&lt;/b&gt;&quot; term and concept is widely misattributed to Marc Andreessen by bloggers and writers, but Andy Rachleff coined the term. In a 2007 article, &quot;The only thing that matters,&quot; Andreessen credits Rachleff for the term and synthesizes much of Rachleff&apos;s thinking 
&lt;/b&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/159d63a7-0203-4507-a1a8-a7d0c91bfb0c&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;History of Lean startup&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/159d63a7-0203-4507-a1a8-a7d0c91bfb0c&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Alex Osterwalder is a swiss guy living in Lausanne. He wrote &quot;&lt;i&gt;Business Model Generation&lt;/i&gt;&quot; where he presents the business model canvas and the lean approach to it along with a lot of hints on how to efficiently (and cheaply) relieve uncertainties in startup with concepts such as prototyping, getting feedback from the market, challenging the status quo, etc.
&lt;br&gt;
Eric Ries is a Silicon Valley Serial Entrepreneur with failures and successes. His failures make him think of them and come up with the &lt;b&gt;Lean Startup&lt;/b&gt; way, putting the customer at the center of the process.
&lt;br&gt;
Ash Maurya is an entrepreneur from Austin that understood on his end as well most of the Lean Startup principles. In his Running Lean book he details a lot of the Lean Startup principles and practices and came up with the Lean Canvas, a version of Osterwalder&apos;s Business Model Canvas adapted for Startups.
&lt;br&gt;
Steve Blank is the grand-father of the Lean Startup. He is a professor in Stanford University and a Silicon Valley Serial entrepreneur (search for him on Linkedin) - Steve Blank designed the &lt;b&gt;customer development&lt;/b&gt; methodology that he presents in his &quot;&lt;i&gt;Four Steps to the Epiphany&lt;/i&gt;&quot; book. &lt;i&gt;Four steps to the Epiphany&lt;/i&gt; is a process for finding Product Market Fit and eventually scaling the company.
&lt;/p&gt;

&lt;p&gt;
With Lean Startup, Product Market Fit is the step separating a startup from a scale up and Customer development methodology is the path to Product Market Fit.
&lt;/p&gt;

&lt;a name=&quot;sec13&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.3 Defining &quot;Product-Market Fit&quot;&lt;/h3&gt;

&lt;p&gt;
The product/market fit (PMF) concept was developed and named by Andy Rachleff.
&lt;/p&gt;

&lt;p&gt;
It answers the question some might wonder about: what correlates the most to success, team, product, or market? 
&lt;br&gt;
Or, more bluntly, what causes success? And, for those of us who are students of startup failure, what&apos;s most dangerous: a bad team, a weak product, or a poor market? 
&lt;br&gt;
If you ask entrepreneurs or VCs which of team, product, or market is most important, many will say team. 
&lt;br&gt;
On the other hand, if you ask engineers, many will say product. 
&lt;br&gt;
But actually market is the most important factor in a startup&apos;s success or failure. 
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/de1a7c40-4a0a-48c0-a580-06e9b51bd455&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;Rachleff&apos;s laws of Startup&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/de1a7c40-4a0a-48c0-a580-06e9b51bd455&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source: June 25, 2007 / Marc Andreessen - The only thing that matters (blog post))
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
In a great market - a market with lots of real potential customers - the &lt;b&gt;market pulls product out&lt;/b&gt; of the startup.
&lt;br&gt;
The market needs to be fulfilled and the market will be fulfilled, by the first viable product that comes along.
&lt;br&gt;
The product doesn&apos;t need to be great; it just has to basically work. And, the market doesn&apos;t care how good the team is, as long as the team can produce that viable product.
&lt;br&gt;
Conversely, in a terrible market, you can have the best product in the world and an absolutely killer team, and it doesn&apos;t matter -- you&apos;re going to fail. 
&lt;/p&gt;

&lt;p&gt;
You can obviously screw up a great market - and that has been done, and not infrequently - but assuming the team is baseline competent and the product is fundamentally acceptable, a great market will tend to equal success and a poor market will tend to equal failure. Market matters most. 
&lt;br&gt;
To quote Tim Shephard : &lt;i&gt;&quot;A great team is a team that will always beat a mediocre team, given the same market and product.&quot; &lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
Second question: Can&apos;t great products sometimes create huge new markets?
&lt;br&gt;
And the answer is yes, this is possible. But it&apos;s really exceptional.
&lt;br&gt;
VMWare is a good example of this since it was so profoundly transformative out of the box that it catalyzed a whole new movement towards operating system virtualization, which turned out to be a monster market. But then again this is an exception.
&lt;/p&gt;

&lt;p&gt;
Rachleff&apos;s corollary of startup success gives us the first and most crucial definition of Product Market Fit :
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;
&quot;Product market fit means being in a good market with a product that can satisfy that market&quot;
&lt;/b&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;i&gt;A good market is essential&lt;/i&gt;, there needs to be a market and the product needs to &lt;i&gt;satisfy that market&lt;/i&gt;, give a solution to the market&apos;s problem.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;So what is Product-Market Fit?&lt;/b&gt;
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/315715d1-8236-46cb-a418-55eccf47307b&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 550px; &quot; alt=&quot;Human centric View of Product Market Fit&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/315715d1-8236-46cb-a418-55eccf47307b&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source: &lt;a href=&quot;https://medium.com/@briantod/about-product-market-fit-what-ive-learned-about-the-goal-the-process-and-the-nuance-e7b317740f43
&quot;&gt;https://medium.com/@briantod/about-product-market-fit-what-ive-learned-about-the-goal-the-process-and-the-nuance-e7b317740f43
&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Looking at things from a Human Centered Design perspective - Product Market fit is the intersection between:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A problem that a sizeable group of people really need solved = i.e.: Desirability&lt;/li&gt;
&lt;li&gt;A product that can actually be built well to fully solve that problem = i.e.: Feasibility&lt;/li&gt;
&lt;li&gt; business model that can be executed to be profitable at some point in time = i.e.: Viability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
If all three of these elements are not well identified, assessed, controlled and balanced, you can&apos;t reach PMF. 
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If desirability is weak, not many people want what you can make and believe you can sold =&gt; waste&lt;/li&gt;
&lt;li&gt;If feasibility is weak, your are not able to build the product =&gt; failure&lt;/li&gt;
&lt;li&gt;If viability is weak, you&apos;re not making money =&gt; failure&lt;/li&gt;
&lt;li&gt;Etc.
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Another view&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
Product-market fit occurs when your product or service solves a problem that directly affects your target customers/audience. But it can&apos;t be just a few people. It&apos;s got to fill a gap and fix a problem for a large market. So when approximately 40% of your customers say that they can&apos;t imagine living or working without, then you know you have product-market fit.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/993c07ab-aca2-49f6-b506-665737cff7ac&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 450px; &quot; alt=&quot;Human centric View of Product Market Fit&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/993c07ab-aca2-49f6-b506-665737cff7ac&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source: &lt;a href=&quot;https://startupdevkit.com/guide-to-product-market-fit-with-everything-you-need-to-know/&quot;&gt;https://startupdevkit.com/guide-to-product-market-fit-with-everything-you-need-to-know/
&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
However, there are times when there&apos;s a gap in the market, but most of the target audience doesn&apos;t know about this gap. That is, they don&apos;t know about the problem until you show them how your solution improves their lives. By doing this, you create the need for the market and you directly solve an existing problem in their niche or market.
&lt;/p&gt;

&lt;a name=&quot;sec14&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.4 Four myths about Product-Market Fit&lt;/h3&gt;

&lt;p&gt;
(Source : &lt;a href=&quot;https://blog.pmarca.com/2010/03/20/the-revenge-of-the-fat-guy/&quot;&gt;https://blog.pmarca.com/2010/03/20/the-revenge-of-the-fat-guy/&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;MYTH 1 : Product market fit is always a discrete, big bang event&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
Some companies achieve primary product market fit in one big bang. But Most don&apos;t, instead getting there through partial fits, a few false alarms, and a big pile of perseverance. 
Most of the time it&apos;s a lot of trial and error, running around it until finally all indicators are green
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;MYTH 2: It&apos;s patently obvious when you have product market fit&lt;/b&gt;

&lt;p&gt;
I am sure that Twitter knew when it achieved product market fit, but it&apos;s far blurrier for most startups. Twitter is a good example because most of these myths were actually true for Twitter. But Twitter is an exception.
&lt;br&gt;
Determining if you reached product market fit will require you to have very good understanding of your market and your product and give a lot of thoughts into coming up with the proper metrics and indicators and the recipe to interpret them.
&lt;br&gt;
Pretty much every product and market will require a different set of indicators and a specific way to interpret them.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;MYTH 3: Once you achieve product market fit, you can&apos;t lose it.&lt;/b&gt;
&lt;br&gt;
And
&lt;br&gt;
&lt;b&gt;MYTH 4: Once you have product-market fit, you don&apos;t have to sweat the competition.&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
These two myths really go together and are obviously wrong.
&lt;br&gt;
It&apos;s fine to stay lean if you are not quite sure that you have product market fit and there are no competitors in your face every day. But usually there are. In fact, the best markets are usually the ones in which competition is fierce because the opportunity is big. The number and quality of competitors is actually a fairly good indicator of the market.
&lt;br&gt;
The big principle here is that post PMF, monitoring and watching competitors closely should be an every day concern, just as staying very close the customer and keeping to run lean.
&lt;/p&gt;

&lt;a name=&quot;sec15&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.5 Feeling Product-Market Fit&lt;/h3&gt;

&lt;p&gt;
These two quotes from Marc Andreessen are spot on and give a good perspective on how Product Market Fit can be felt.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a6571420-ca42-4ac2-ac23-1cb9a2c47874&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 650px; &quot; alt=&quot;Feeling Product Market Fit&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a6571420-ca42-4ac2-ac23-1cb9a2c47874&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source: &lt;a href=&quot;https://hackernoon.com/product-market-fit-heres-why-youre-probably-confused-about-it-1dr73zgd 
&quot;&gt;https://hackernoon.com/product-market-fit-heres-why-youre-probably-confused-about-it-1dr73zgd 
&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;a name=&quot;sec16&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.6 Dan Olsen&apos;s PMF Pyramid&lt;/h3&gt;

&lt;p&gt;
Dan Olsen represents Product-Market Fit using the following pyramid:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/1098b6c5-6e4e-4846-84d6-0de114355ae5&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Product Market Fit Pyramid&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2546b5e4-b772-4a08-a2d5-9b5d58b6f07c&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source: &lt;a href=&quot;https://www.mindtheproduct.com/the-playbook-for-achieving-product-market-fit/
&quot;&gt;https://www.mindtheproduct.com/the-playbook-for-achieving-product-market-fit/
&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;b&gt;The Problem Space&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
A market is a set of related customer needs, which rests squarely in problem space or you can say &quot;problems&quot; define market, not &quot;solutions&quot;. A market is not tied to any specific solutions that meet market needs. It is a broader space. There is no product or design that exists in problem space. Instead, problem space is where all the customer needs that you&apos;d like your product to deliver live. You shouldn&apos;t interpret the word &quot;needs&quot; too narrowly: Whether it&apos;s a customer pain point, a desire, a job to be done, or a user story, it lives in problem space.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;The Solution Space&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
If I speak of solution space, any product or the product design - such as mock-ups, wire-frame, prototype, depends on and is built upon problem space, but is in solution space. So we can say problem space is at the base of solution space. Solution space includes any product or representation of a product that is used by or intended for use by a customer. When you build a product, you have chosen a specific implementation. Whether you&apos;ve done so explicitly or not, you&apos;ve determined how the product looks, what it does, and how it works.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;The What and How Approach&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&quot;What&quot; the product needed to accomplish for customers is Problem space. The &quot;what&quot; describes the benefits product should give to the target customer.
Whereas, &quot;how&quot; the product would accomplish it, is solution space. The &quot;how&quot; is the way in which the product delivers the &quot;what&quot; to target customer. The &quot;how&quot; is the design of the product and the specific technology used to implement the product.
&lt;/p&gt;

&lt;p&gt;
The best problem space learning often comes from feedback you receive from customers on the solution space. 
&lt;/p&gt;

&lt;a name=&quot;sec17&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.7 A first high-level process&lt;/h3&gt;

&lt;p&gt;
Based on Dan Olsen&apos;s pyramid, we can introduce here already a first idea of a process to reach Product-Market Fit:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/697409ef-e06a-467d-ac37-13b1c84b08d3&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px;&quot; alt=&quot;A first idea of a process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/697409ef-e06a-467d-ac37-13b1c84b08d3&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
This is a first idea only, we will see different processes and different perspective in chapter &lt;a href=&quot;#sec4&quot;&gt;Different Perspective&lt;/a&gt;
&lt;/p&gt;





&lt;a name=&quot;sec2&quot;&gt;&lt;/a&gt;
&lt;h2&gt;2. Lean Startup Fundamentals&lt;/h2&gt;

&lt;p&gt;
In this chapter we will be covering the most fundamentals aspects of Lean Startup required to understand the different perspective in the Search for Product-Market Fit presented in chapter &lt;a href=&quot;#sec1&quot;&gt;1. Introduction&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;The Lean Startup&lt;/b&gt; is a movement, initiated and supported by some key people that I presented in the previous section.
&lt;br&gt;
But it&apos;s also a framework, an inspiration, an approach, a methodology with a set of fundamental principles and practices for helping entrepreneurs increase their odds of building a successful startup. 
&lt;br&gt;
Lean Startup cannot be thought as a set of tactics or steps. Don&apos;t expect any checklist (well, at least not only checklists) or any recipe to be applied blindly, but it gives you a set or processes, principles and practices to reach Product-Market Fit and eventually scale the company.
&lt;/p&gt;


&lt;a name=&quot;sec21&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.1 Lean Startup &lt;/h3&gt;

&lt;p&gt;
&lt;b&gt;Lean Movement (1990)&lt;/b&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;Lean thinking&lt;/b&gt; is a &lt;b&gt;business methodology&lt;/b&gt; that aims to provide a new way to think about how to organize human activities to deliver more benefits to society and value to individuals while &lt;b&gt;eliminating waste&lt;/b&gt;.
&lt;br&gt;
The aim of lean thinking is to create a &lt;b&gt;lean enterprise&lt;/b&gt;, one that &lt;b&gt;sustains growth&lt;/b&gt; by aligning customer satisfaction with employee satisfaction, and that &lt;b&gt;offers innovative products&lt;/b&gt; or services profitably while &lt;b&gt;minimizing unnecessary over-costs&lt;/b&gt; to customers, suppliers and the environment.
&lt;br&gt;
The Lean Movement finds its roots in Toyotism and values &lt;b&gt;performance, visual management&lt;/b&gt; (Kanban) and &lt;b&gt;continuous improvement&lt;/b&gt; (Kaizen)
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Lean Startup (2010)&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/223c22b4-f903-4441-92ce-51d1e227ceb3&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;Lean Startup origins&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/223c22b4-f903-4441-92ce-51d1e227ceb3&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;
Blank, Ries, Osterwalder and Maurya are the founders or initiators of the &lt;i&gt;Lean Startup Movement&lt;/i&gt;. Eric Ries is considered as the leader of the movement, while Steve Blank considers himself as its godfather. 
&lt;br&gt;
Osterwalder and Maurya&apos;s work on business models is considered to fill a gap in Ries and Blank&apos;s work on processes, principles and practices. In Steve Blank&apos;s &quot;The four Steps the the Epiphany&quot;, the business model section is a vague single page.
&lt;br&gt;
Moreover, Maurya&apos;s &quot;&lt;i&gt;Running Lean&lt;/i&gt;&quot; magnificently completes Blank&apos;s work on &lt;i&gt;Customer Development&lt;/i&gt;. We&apos;ll get to that.
&lt;/p&gt;


&lt;a name=&quot;sec22&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.2 Key principles &lt;/h3&gt;

&lt;p&gt;
Before digging any further into Lean Startup, below are the essential principles that characterize &lt;i&gt;The Lean Startup&lt;/i&gt; approach, as reported by Eric Ries&apos; book.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Entrepreneurs are everywhere&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
You don&apos;t have to work in a garage to be in a startup. The concept of entrepreneurship includes anyone who works within Eric Ries&apos; definition of a startup, which I repeat here:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;A startup is a human institution designed to create new products and services under conditions of extreme uncertainty.&lt;/b&gt; 
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
That means entrepreneurs are everywhere and the Lean Startup approach can work in any size company, even a very large enterprise, in any sector or industry.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Entrepreneurship is management&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
A startup is an institution, not just a product, and so it requires a new kind of management specifically geared to its context of extreme uncertainty. 
&lt;br&gt; 
In fact, Ries believes &quot;&lt;i&gt;entrepreneur&lt;/i&gt;&quot; should be considered a job title in all modern companies that depend on innovation for their future growth
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Validated learnings&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Startups exist not just to make stuff, make money, or even serve customers. They exist to learn how to build a sustainable business. This learning can be validated scientifically by running frequent experiments that allow entrepreneurs to test each element of their vision.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Innovation accounting&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
To improve entrepreneurial outcomes and hold innovators accountable, we need to focus on the boring stuff: how to measure progress, how to set up milestones, and how to prioritize work. This requires a new kind of accounting designed for startups-and the people who hold them accountable.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Build-Measure-Learn&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The fundamental activity of a startup is to turn ideas into products, measure how customers respond, and then learn whether to &lt;b&gt;pivot or persevere&lt;/b&gt;. All successful startup processes should be geared to accelerate that &lt;b&gt;feedback loop&lt;/b&gt;.
&lt;/p&gt;


&lt;a name=&quot;sec23&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.3 The Feedback loop &lt;/h3&gt;

&lt;p&gt;
The feedback loop is represented as below.
&lt;br&gt;
The five-part version of the &lt;i&gt;Build-Measure-Learn&lt;/i&gt; schema helps us see that the real intent of building is to test &quot;&lt;i&gt;ideas&lt;/i&gt;&quot; - not just to build blindly without an objective. 
&lt;br&gt;
The need for &quot;&lt;i&gt;data&lt;/i&gt;&quot; indicates that after we measure our experiments we&apos;ll use the data to further refine our learning. And the new learning will influence our next ideas. So we can see that the goal of Build-Measure-Learn isn&apos;t just to build things, the goal is to build things to validate or invalidate the initial idea.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6da0f813-d05e-420f-92e8-178f31b2122b&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;The feedback loop&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6da0f813-d05e-420f-92e8-178f31b2122b&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Again, the goal of &lt;i&gt;Build-Measure-Learn&lt;/i&gt; is not to build a final product to ship or even to build a prototype of a product, but to &lt;b&gt;maximize learning&lt;/b&gt; through incremental and iterative engineering. 
&lt;br&gt;
In this case, learning can be about product features, customer needs, distribution channels, the right pricing strategy, etc.
&lt;br&gt;
The &quot;&lt;i&gt;build&lt;/i&gt;&quot; step may refer to building an &lt;b&gt;MVP&lt;/b&gt; - Minimal Viable Product - or simply a prototype, mock-up or even simply a hand sketch, whatever works for collecting market / customer feedback.
&lt;br&gt;
&lt;p&gt;
In the end, the &lt;i&gt;Build-Measure-Learn&lt;/i&gt; framework let startups be fast, agile and efficient by validating every single assumption of the Problem, The Solution fit and the Business Model before consenting to any heavy investment.
&lt;/p&gt;

&lt;a name=&quot;sec24&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.4 The Four steps to the Epiphany &lt;/h3&gt;

&lt;p&gt;
Most startups lack a process for discovering their markets, locating their first customers, validating their assumptions, and growing their business. 
&lt;br&gt;
The &lt;b&gt;Customer Development Model&lt;/b&gt; creates the process for these goals. 
&lt;/p&gt;

&lt;p&gt;
The life of any startup can be divided into two parts: before product/market fit (call this &quot;BPMF&quot;) and after product/market fit (&quot;APMF&quot;).
&lt;br&gt;
When you are BPMF, focus obsessively on getting to product/market fit.
&lt;br&gt;
Do whatever is required to get to product/market fit. Including changing out people, rewriting your product, moving into a different market, telling customers no when you don&apos;t want to, telling customers yes when you don&apos;t want to, raising that fourth round of highly dilutive venture capital, whatever is required! When you get right down to it, you can ignore almost everything else.
&lt;/p&gt;

&lt;p&gt;
Whenever you see a successful startup, you see one that has reached product/market fit, and usually along the way screwed up all kinds of other things, from channel model to pipeline development strategy to marketing plan. And the startup is still successful.
&lt;/p&gt;

&lt;p&gt;
PMF means it&apos;s safe to scale !!
&lt;br&gt;
If you decide to scale-up a SaaS company without proven Product/Market Fit, you&apos;re taking a huge risk. There&apos;s no guarantee that a market for your product exists. Even if it does, it might not be able to sustain your business.&lt;br&gt;
Without PMF, major investments into marketing, sales and customer success are premature.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a4aff1ad-cca8-416b-b499-550b9173a41e&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;The four steps to the Epiphany&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a4aff1ad-cca8-416b-b499-550b9173a41e&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Customer discovery&lt;/b&gt;: is to determine who your customers are, and whether the problem you&apos;re solving is important to them. In this phase, you may spend a lot of time conducting primary research, with surveys and interviews, or looking through secondary research. For example, in the case of Uber, Travis Kalanick, decided to build the business model as a private black cab service for himself. Gradually as the service was shared with friends, they began to realize demand from others.
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Customer validation&lt;/b&gt;: is when you build a sales process that can be repeated by a sales and marketing team. This process is validated by selling the product to early customers for money. In the case of Uber, customers were paying for the ride from the get go, hence the business model was validated. And for Facebook, in its early days, Mark Zuckerberg was selling banners to local college businesses as a proof that the freemium monetization model will work.
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Customer creation / Get new Customers&lt;/b&gt;: seeks to increase demand for a product and scale the business. In the case of Uber, the referral bonus program with ride subsidies was the key to its rapid growth, or customer creation.
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Customer building / Company Creation&lt;/b&gt;: is when a company transitions into a more formalized structure where different specialized departments are created to specialize functions such as sales, marketing, and business development.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/f8101263-5b88-43c1-9013-6639f43fdd81&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;The four steps to the Epiphany - Details&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/f8101263-5b88-43c1-9013-6639f43fdd81&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Shortly put, Steve Blank proposes that companies need a &lt;b&gt;Customer Development process&lt;/b&gt; that complements, or even in large portions replaces, their &lt;i&gt;Product Development Process&lt;/i&gt;. The &lt;i&gt;Customer Development process&lt;/i&gt;  goes directly to the theory of &lt;a href=&quot;https://en.wikipedia.org/wiki/Product/market_fit&quot;&gt;Product/Market Fit&lt;/a&gt;. 
&lt;br&gt;
In &quot;&lt;i&gt;The four steps to the Epiphany&lt;/i&gt;&quot;, Steve Blank provides a roadmap for how to get to Product/Market Fit.
&lt;/p&gt;

&lt;a name=&quot;sec25&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.5 Customer development - the practices &lt;/h3&gt;

&lt;p&gt;
So I want to present the most essentials principles and practices introduced and discussed by &lt;i&gt;the Lean Startup&lt;/i&gt; approach.
&lt;br&gt;
These principles and practices are presented on the following schema attached to the stages of the &lt;i&gt;Customer Development&lt;/i&gt; process where I think they make more sense:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/29ff320d-3e48-4261-b2ad-a165165fd1e4&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px; &quot; alt=&quot;Lean Startup Practices&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/29ff320d-3e48-4261-b2ad-a165165fd1e4&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
We will be focusing now on the relevant practices to reach product-market fit.
&lt;/p&gt;

&lt;a name=&quot;sec26&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.6 Get out of the building&lt;/h3&gt;


&lt;p&gt;
&lt;b&gt;If you&apos;re not Getting out of the Building, you&apos;re not doing Customer Development and Lean Startup.&lt;/b&gt;
&lt;br&gt;
There are no facts inside the building, only opinions.
&lt;/p&gt;
&lt;p&gt;
If you aren&apos;t actually talking to your customers, you aren&apos;t doing Customer Development. And talking here is really speaking, with your mouth. Preferably in-person, but if not, a video call would work as well, messaging or emailing doesn&apos;t.
&lt;/p&gt;
&lt;p&gt;
As Steve Blank said &quot;&lt;i&gt;One good customer development interview is better for learning about your customers / product / problem / solution / market than five surveys with 10&apos;000 statistically significant responses.&lt;/i&gt;&quot;
&lt;/p&gt;

&lt;p&gt;
The problem here is that tech people, especially software engineers, try to avoid going out of the building as much as possible. But this is so important. Engineers need to fight against their nature and get out of the building and talk to customers as much as possible; find out who they are, how they work, what they need and what your startup needs to do, to build and then sell its solution.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2d7ea9a3-3537-47f3-8a28-abdf0a4220e6&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px; &quot; alt=&quot;Get Out of the Building&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2d7ea9a3-3537-47f3-8a28-abdf0a4220e6&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Again, getting out of the building is not getting in the parking lot, it&apos;s really about getting in front of the customer. 
&lt;br&gt;
At the end of the day, it&apos;s about &lt;i&gt;Customer Discovery&lt;/i&gt;. And &lt;i&gt;Customer Discovery&lt;/i&gt; is not sales, it&apos;s a lot of listening, a lot of understanding, not a lot of talking.
&lt;/p&gt;
&lt;p&gt;
A difficulty that people always imagine is that young entrepreneurs with an idea believe that they don&apos;t know anybody, so how to figure out who to talk to ?
&lt;br&gt;
But at the time of Linkedin, Facebook, Twitter, it&apos;s hard to believe one cannot find a hundred of people to have a conversation with.
&lt;/p&gt;
&lt;p&gt;
And when having a conversation with one of them, whatever else one&apos;s asking (&lt;a href=&quot;#sec27&quot;&gt;Problem interview&lt;/a&gt;, &lt;a href=&quot;#sec28&quot;&gt;Solution interview&lt;/a&gt;), one should ask two very important final questions:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; 
&quot;&lt;i&gt;Who else should I be talking to ?&lt;/i&gt;&quot;
&lt;br&gt;
And because you&apos;re a pushy entrepreneur, when they give you those names, you should ask &quot;&lt;i&gt;Do you mind if I sit here while you email them introducing me ?&lt;/i&gt;&quot;
&lt;/li&gt;
&lt;li&gt;
&quot;&lt;i&gt;What should I have really asked you ?&lt;/i&gt;&quot;
&lt;br&gt;
And sometimes that gets into another half hour related to what the customer is &lt;i&gt;really&lt;/i&gt; worried about, what&apos;s really the customer&apos;s problem.
&lt;/ol&gt;


&lt;p&gt;
Customer Discovery becomes really easy once you realize you don&apos;t need to get the world&apos;s best first interview. 
&lt;br&gt;
In fact its the sum of these data points over time, it&apos;s not one&apos;s just going to be doing one and one wants to call on the highest level of the organization.
&lt;br&gt;
In fact you actually never want to call on the highest level of the organization because you&apos;re not selling yet, you don&apos;t know enough.
&lt;br&gt;
What one actually wants is to understand enough about the customers, their problems and how they&apos;re solving it today, and whether one&apos;s solution is something they would want to consider.
&lt;/p&gt;



&lt;a name=&quot;sec27&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.7 Problem interview&lt;/h3&gt;

&lt;p&gt;
Problem Interview is Ash Maurya&apos;s term for the interview you conduct to validate whether or not you have a real problem that your target audience has.
&lt;/p&gt;
&lt;p&gt;
In the Problem Interview, you want to find out 3 things:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Problem&lt;/b&gt; - What are you solving? - How do customers rank the top 3 problems?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Existing Alternatives&lt;/b&gt; - Who is your competition? - How do customers solve these problems today?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Customer Segments&lt;/b&gt; - Who has the pain? - Is this a viable customer segment?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Talking to people is hard, and talking to people in person is even harder. The best way to do this is building a script and sticking to it. Also don&apos;t tweak your script until you&apos;ve done enough interviews so that your responses are consistent.
&lt;br&gt;
The main point is to collect the information that you will need to validate your problem, and to do it face-to-face, either in-person or by video call. It&apos;s actually important to see people and be able to study their body language as well. 
&lt;/p&gt;
&lt;p&gt;
The interview script - at least the initial you should follow until you have enough experience to build yours - is as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b54ec66a-fda7-4938-94b4-10456335746d&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Problem Interview&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b54ec66a-fda7-4938-94b4-10456335746d&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
If you have to remember just three rules for problem interviews here they are:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do not talk about your business idea or product. You are here to understand a problem, not imagine or sell a solution yet.&lt;/li&gt;
&lt;li&gt;Ask about past events and behaviours&lt;/li&gt;
&lt;li&gt;No leading question, learn from the customer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
After every interview, take a leap backwards, analyze the answers, make sure you understand everything correctly and synthesize the results.
&lt;br&gt;
After a few dozen of interviews, you should be a able to make yourself a clear understanding of the problem and initiate a few ideas regarding the solution to it.
&lt;br&gt;
Finding and validating your solution brings us to the next topic: the &lt;i&gt;Solution Interview&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
And what if a customer tells you that the issues you thought are important really aren&apos;t? Learn that you have gained important data.
&lt;/p&gt;

&lt;a name=&quot;sec28&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.8 Solution interview&lt;/h3&gt;

&lt;p&gt;
In the Solution Interview, you want to find out three things:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Early Adopters&lt;/b&gt; - Who has this problem? - How do we identify an early adopter?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Solution&lt;/b&gt; - How will you solve the problems? - What features do you need to build?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pricing/Revenue&lt;/b&gt; - What is the pricing model? - Will customers pay for it?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
The key point here is to understand how to come up with a solution fitting the problem, step by step getting to the right track with your prototype and also understanding what could be a pricing model.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9ef49888-50eb-4778-bc52-3f4584eeabf7&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Solution Interview&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9ef49888-50eb-4778-bc52-3f4584eeabf7&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
A &lt;i&gt;demo&lt;/i&gt; is actually important. Many products are too hard to understand without some kind of demo. If a picture is worth a thousand words, a demonstration is probably worth a million.
&lt;/p&gt;
&lt;p&gt;
Identifying early adopters is also key.
&lt;br&gt;
Think of something: if one of the guys you meet tells you that you definitely hold something, ask him if he would want to buy it. If he says he would definitely buy it when it&apos;s ready and available, ask him if he would commit to this. If he says he commits to this, ask him if he would be ready to pay half of it now and have it when its ready, thus becoming a partner or an investor.
&lt;br&gt;
If you find ten persons committing on already paying for the solution you draw, you may not even need to search for investors, you already have them. And that is the very best proof you can find that your solution is actually something.
&lt;br&gt;
And customers or partners are actually the best possible type of investors.
&lt;/p&gt;

&lt;a name=&quot;sec29&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.9 MVP&lt;/h3&gt;

&lt;p&gt;
The &lt;b&gt;Minimum Viable Product&lt;/b&gt; is an engineering product with just the set of features required to gather &lt;i&gt;validated learnings&lt;/i&gt; about it - or some of its features - and its continuous development. 
&lt;br&gt;
This notion of &lt;i&gt;Minimum Feature Set&lt;/i&gt; is key in the MVP approach.
&lt;/p&gt;
&lt;p&gt;

The key idea is that it makes really no sense developing a full and finalized product without actually knowing what will be the market reception and if all of it is actually worth the development costs.
&lt;br&gt;
Gathering insights and directions from an MVP avoids investing too much in a product based on wrong assumptions. Even further, The &lt;i&gt;Lean Startup&lt;/i&gt; methodology seeks to avoid assumptions at all costs, see &lt;a href=&quot;#sec23&quot;&gt;The Feedback Loop &lt;/a&gt; and &lt;a href=&quot;#sec5&quot;&gt;Metrics Obsession&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
The &lt;i&gt;Minimum Viable Product&lt;/i&gt; should have just that set of initial features strictly required to have a valid product, usable for its very initial intent, and nothing more. In addition these features should be as minimalist as possible but without compromising the overall &lt;i&gt;User Experience&lt;/i&gt;. A car should move, a balloon should be round and bounce, etc.
&lt;br&gt;
when adopting an MVP approach, the MVP is typically put at disposal at first only to &lt;i&gt;early adopters&lt;/i&gt;, these customers that may be somewhat forgiving for the &quot;naked&quot; aspect of the product and more importantly that would be willing to give feedback and help steer the product development further.
&lt;/p&gt;
&lt;p&gt;
Eric Ries defines the MVP as:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;
&quot;The minimum viable product is that version of a new product a team uses to collect the maximum amount of validated learning about customers with the least effort.&quot;
&lt;/b&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The definition&apos;s use of the words &lt;i&gt;maximum&lt;/i&gt; and &lt;i&gt;minimum&lt;/i&gt; means it is really not formulaic. In practice, it requires a lot of judgement and experience to figure out, for any given context, what MVP makes sense.
&lt;/p&gt;
&lt;p&gt;
The following chart is pretty helpful in understanding why both terms &lt;i&gt;minimum&lt;/i&gt; and &lt;i&gt;viable&lt;/i&gt; are equally important and why designing an MVP is actually difficult:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/abd771cd-b5a4-4a74-91c4-03951407517f&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 300px; &quot; alt=&quot;Minimum and Viable&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/abd771cd-b5a4-4a74-91c4-03951407517f&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
When applied to a new feature of any existing product instead of a brand new product, the MVP approach is in my opinion somewhat different. It consists of implementing the feature itself not completely; rather, a mock-up or even some animation simulating the new feature should be provided.
&lt;br&gt;
The mock-up or links should be properly instrumented so that all user reactions are recorded and measured in order to get insights on the actual demand of the feature and the best form it should take (&lt;a href=&quot;#sec331&quot;&gt;Measure Obsession&lt;/a&gt;),
&lt;br&gt;
This is called a &lt;b&gt;deploy first, code later&lt;/b&gt; method.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.expressiveproductdesign.com/minimal-viable-product-mvp/&quot;&gt;Fred Voorhorst&apos; work&lt;/a&gt; does a pretty good job in explaining what an MVP is:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/756e983e-5fd7-4dc1-a395-f5f1a69747f8&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;MVP - How-To&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/756e983e-5fd7-4dc1-a395-f5f1a69747f8&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Fred Voorhorst - Expressive Product Design - &lt;a href=&quot;http://www.expressiveproductdesign.com/minimal-viable-product-mvp/&quot;&gt;http://www.expressiveproductdesign.com/minimal-viable-product-mvp/&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Developing an MVP is most definitely not the same as developing a sequence of elements which maybe, eventually combine into a product. A single wheel is not of much interest to a user wanting a personal transporter like a car, as illustrated by the first line.
&lt;br&gt;
Instead, developing an MVP is about developing the vision. This is not the same as developing a sequence of intermediate visions, especially not, if these are valuable products by themselves. As an example, a skateboard will likely neither interest someone in search for a car, as illustrated by the second line.
&lt;/p&gt;
&lt;p&gt;
Developing an MVP means developing a sequence of prototypes through which you explore what is key for your product idea and what can be omitted. 
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Sidenote on Product Design Artifacts&lt;/b&gt;
&lt;/pa&gt;

&lt;p&gt;
&lt;b&gt;This is important&lt;/b&gt;:  The MVP is not the only solution to capture user feedback, there are multiple different tools.
&lt;br&gt;
For instance during the first customer solution interviews, something as stupid as a multiples hand sketch move around with your hands may well be sufficient to capture feedback.
&lt;br&gt;
You should always settle to the simplest form of demonstration that is required to capture the feedback you need from your customer to verify your assumption, your hypothesis or your idea.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/019896bb-51a3-415f-900c-1b184e6b70a3&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;Product Design Artifcats&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/019896bb-51a3-415f-900c-1b184e6b70a3&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source:  &lt;a href=&quot;https://www.slideshare.net/LeanStartupConf/a-playbook-for-achieving-productmarket-fit&quot;&gt;https://www.slideshare.net/LeanStartupConf/a-playbook-for-achieving-productmarket-fit 
&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;



&lt;a name=&quot;sec210&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.10 Fail Fast&lt;/h3&gt;

&lt;p&gt;
The key point of the &quot;&lt;b&gt;fail fast&lt;/b&gt;&quot; principle is to quickly abandon ideas that aren&apos;t working. And the big difficulty of course is not giving up too soon on an idea that could potentially be working. should one find the right channel, the right approach.
&lt;br&gt;
Fail fast means getting out of planning mode and into testing mode, eventually for every component, every single feature, every idea around your product or model of change. &lt;i&gt;Customer development&lt;/i&gt; is the process that embodies this principle and helps you determine which hypotheses to start with and which are the most critical for your new idea.
&lt;/p&gt;
&lt;p&gt;
It really is OK to fail if one knows the reason of the failure, and that is where most people go wrong. Once a site or a product fails then one needs to analyse why it bombed. It&apos;s only then that one can learn from it. 
&lt;br&gt;
The key aspect here is really learning. And learning comes from experimenting, &lt;b&gt;trying things, &lt;a href=&quot;#sec5&quot;&gt;measuring&lt;/a&gt; their success and &lt;a href=&quot;#sec212&quot;&gt;adapting&lt;/a&gt;&lt;/b&gt;.
&lt;br&gt;
An entrepreneur should really be a pathologist investigating a death and finding the cause of the failure. Understanding the cause of a failure can only work if the appropriate measures and metrics around the experiment are in place.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/559f0efe-95eb-4e4e-bdf1-3f6bb998932a&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 350px; &quot; alt=&quot;Success - what it really looks like&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/559f0efe-95eb-4e4e-bdf1-3f6bb998932a&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Now failing is OK as long as we learn from it and as long as we &lt;b&gt;fail as fast as possible&lt;/b&gt;. Again, the whole &lt;i&gt;lean&lt;/i&gt; idea is to avoid waste as much as possible and there&apos;s no greater waste than keeping investing on something that can ultimately not work. Failing as fast as possible, adapting the product, &lt;a href=&quot;#sec212&quot;&gt;pivoting&lt;/a&gt; the startup towards its next approach as soon as possible is key.
&lt;br&gt;
But then again, the big difficulty is not to give up too soon on something that could possible work.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;
Fail fast, &lt;br&gt;
Learn faster, &lt;br&gt;
Succeed sooner !
&lt;/b&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
So how do you know when to turn, when to drop an approach and adapt your solution ? How can you know it&apos;s not too soon?
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;#sec5&quot;&gt;Measure, measure, measure&lt;/a&gt; of course!
&lt;/p&gt;
&lt;p&gt;
The testing of new concepts, failing, and building on failures are necessary when creating a great product. 
&lt;br&gt;
The adage, &quot;&lt;i&gt;If you can&apos;t measure it, you can&apos;t manage it&lt;/i&gt;&quot; is often used in management and is very important in &lt;i&gt;The Lean Startup&lt;/i&gt; approach. &lt;br&gt;
Lean Startup is about verifying all your assumptions and hypothesis, and the only way to verify them is to take measures, compute metrics, infer insights and adapt.
&lt;/p&gt;



&lt;a name=&quot;sec211&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.11 Metrics Obsession&lt;/h3&gt;

&lt;p&gt;
In the &lt;i&gt;build-measure-learn&lt;/i&gt; loop, there is measure ... &lt;i&gt;The Lean Startup&lt;/i&gt; makes from measuring everything an actual obsession. And I believe that this is a damn&apos; good thing.
&lt;br&gt;
Think of it: what if you have an idea regarding a new feature or an evolution of your product and you don&apos;t already have the metrics that can help you take a sound and enlightened decision? You&apos;ll need to introduce the new measure and wait until you get the data. Waiting is not good for startups.
&lt;/p&gt;
&lt;p&gt;
This is why I like thinking of it as a &lt;b&gt;Metrics Obsession&lt;/b&gt;. Measure everything, everything you can think of!
&lt;br&gt;
And repeat a hundred times:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;
I will never ever again think that ... &lt;br&gt;
Instead I will &lt;i&gt;measure&lt;/i&gt; that ...
&lt;/b&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Or as Edward Deming said :
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;
&quot;In god we trust, all others must bring data&quot;
&lt;/b&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;a href=&quot;#sec5&quot;&gt;We&apos;ll come back to this&lt;/a&gt;


&lt;a name=&quot;sec212&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.12 Pivot&lt;/h3&gt;

&lt;p&gt;
In the process of learning by iterations, a startup can discover through field returns with real customers that its product is either not adapted to the identified need, that it does not meet that need. 
&lt;br&gt;
However, during this learning process, the startup may have identified another need (often related to the first product) or another way to answer the original need. 
&lt;br&gt;
When the startup changes its product to meet either this new need or the former need in a different way, it is said to have performed a &lt;b&gt;Pivot&lt;/b&gt;.
&lt;br&gt;
A startup can &lt;i&gt;pivot&lt;/i&gt; several times during its existence.
&lt;/p&gt;
&lt;p&gt;
A &lt;i&gt;pivot&lt;/i&gt; is ultimately a &lt;b&gt;change in strategy&lt;/b&gt; without &lt;i&gt;a change in vision&lt;/i&gt;. 
&lt;br&gt;
It is defined as a structured course correction designed &lt;b&gt;to test a new fundamental hypothesis&lt;/b&gt; about the product, business model and engine of growth.
&lt;/p&gt;
&lt;p&gt;
The vision is important. A startup is created because the founder has a vision and the startup is really built and organized around this vision. If the feedback from the field compromises the vision, the startup doesn&apos;t need to pivot, it needs to resign, cease its activities and another startup, another organization aligned to the new vision should perhaps be created.
&lt;/p&gt;
&lt;p&gt;
There are various kind of pivots:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Zoom-In :&lt;/b&gt; a single feature becomes the whole product &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Zoom-Out :&lt;/b&gt; the whole initial product becomes a feature of a new product &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Customer segment :&lt;/b&gt; Good product, bad customer segment &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Customer need :&lt;/b&gt; Repositioning, designing a completely new product (still sticking to the vision)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Platform : &lt;/b&gt; Change from an application to a platform, or vice versa&lt;/li&gt;
&lt;li&gt;Many others ...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Pivot or Persevere&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Since entrepreneurs are typically emotionally attached to their product ideas, there is a tendency to hang in there too long. This wastes time and money. The pivot or persevere process forces a non-emotional review of the hypothesis.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/0ea0e3ba-a1ce-42cb-a805-c14c5a757537&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 360px;&quot; alt=&quot;Pivot or Persevere&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/0ea0e3ba-a1ce-42cb-a805-c14c5a757537&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Unsuprisingly, knowing when to pivot is an art, not a science. It requires to be well thought through and can be pretty complicated to manage. 
&lt;br&gt;
At the end of the day, knowing when to pivot or persevere requires experience and, more importantly, metrics: proper performance indicators giving the entrepreneur clear insights about the market reception of the product and the fitting of customer needs.
&lt;/p&gt;
&lt;p&gt;
One thing seems pretty clear though, if it becomes clear to everyone in the company that another approach would better suit the customer needs, the startup needs to pivot, and fast.
&lt;/p&gt;

&lt;a name=&quot;sec213&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.13 The Lean Canvas&lt;/h3&gt;


&lt;p&gt;
Evolution on Business Models and the relative processes were surprisingly missing or poorly addressed from Ries&apos; and Blank&apos;s initial work. 
&lt;br&gt;
Fortunately, Osterwalder and Maurya caught up and filled the gap.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Business Model Canvas&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The &lt;a href=&quot;https://en.wikipedia.org/wiki/Business_Model_Canvas&quot;&gt;Business Model Canvas&lt;/a&gt; is a strategic management template invented by Alexander Osterwalder and Yves Pigneur for developing new business models or documenting existing ones. 
&lt;br&gt;
It is a visual chart with elements describing a company&apos;s value proposition, infrastructure, customers, and finances. It assists companies in aligning their activities by illustrating potential trade-offs.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Lean Canvas&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The Lean Canvas is a version of the Business Model Canvas adapted by Ash Maurya specifically for startups. The Lean Canvas focuses on addressing broad customer problems and solutions and delivering them to customer segments through a unique value proposition.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ef01cc87-68ed-4ec9-8fd4-ad9694fda417&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px; &quot; alt=&quot;Lean Canvas&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ef01cc87-68ed-4ec9-8fd4-ad9694fda417&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
So how should one use the Lean Canvas?
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Customer Segment and Problem&lt;/b&gt;&lt;br&gt;
Both Customer Segment and Problem sections should be filled in together.
&lt;br&gt;
Fill in the list of potential &lt;i&gt;customers&lt;/i&gt; and &lt;i&gt;users&lt;/i&gt; of your product, distinguish customers (willing to pay) clearly from users, then refine each and every identified customer segment. Be careful not no try to focus on a too broad segment at first, think of Facebook whose first segment was only Harvard students.
&lt;br&gt;
Fill in carefully the problem encountered by your identified customers.
&lt;br&gt;
Identify carefully your early adopters since they will help you test and refine your business model
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;UVP - Unique Value Proposition&lt;/b&gt;&lt;br&gt;
For new products, the initial battle is about how to get noticed ? How will you get the customer&apos;s attention ?
&lt;br&gt;
The UVP is the unique characteristic of your product or your service making it different from what is already available on the market an that makes it worth the consideration of your customers. Focus on the main problem you are solving and what makes your solution different.
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Solution&lt;/b&gt;&lt;br&gt;
Filling this is initially is tricky, since knowing about the solution for real requires trial and error, build-measure-learn loop, etc. In an initial stage one shouldn&apos;t try to be to precise here and keep things pretty open.
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Channels&lt;/b&gt;&lt;br&gt;
This consists in answering: how should you get in touch with your users and customers ? How do you get them to know about your product ? Indicate clearly your communication channels.
&lt;br&gt;
it&apos;s one of the riskiest item on your canvas! Start testing from day 1! (Social networks, Newsletter, Ads, Friends, Events, SEO, Etc.)
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Revenue Stream and Cost Structure&lt;/b&gt;&lt;br&gt;
Both these sections should also be filled in together.
&lt;br&gt;
At first, at the time of the initial stage of the startup, this should really be focused on the costs and revenues related to launching the MVP (how to interview 50 customers ? Whats the initial burn rate ? etc.)
&lt;br&gt;
Later this should evolve towards an initial startup structure and focus on identifying the &lt;i&gt;break-even&lt;/i&gt; point by answering the question : how many customers are required to cover my costs ?
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Key Metrics&lt;/b&gt;&lt;br&gt;
Ash Maurya refers to Dave McClure Pirate Metrics to identify the relevant KPIs to be followed :  &lt;br&gt;
Aquisition - How do user find you ?&lt;br&gt;
Activation - Do user have a great first experience ?&lt;br&gt;
Retention - Do users come back ?&lt;br&gt;
Revenue - How do you make money ?&lt;br&gt;
Referral - Do users tell others ?
&lt;/li&gt;


&lt;li&gt;&lt;b&gt;Unfair Advantage&lt;/b&gt;&lt;br&gt;
This consists in indicating the adoption barriers as well as the competitive advantages of your solution. An &lt;i&gt;unfair advantage&lt;/i&gt; is defined as something that cannot be copied easily neither bought.
&lt;br&gt;
Examples: Insider Information, Personal authority, A dream team, Existing customers, &quot;Right&quot; celebrity endorsement, Large network effect, Community, SEO ranking, Patents, Core values, etc.


&lt;/li&gt;

&lt;/ol&gt;


&lt;p&gt;
&lt;b&gt;Lean Startup : test your plan !&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Using the new &quot;Build - Measure - Learn&quot; diagram, the question then becomes, &quot;What hypotheses should I test?&quot;. This is precisely the purpose of the initial Lean Canvas,
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9400cf47-0a75-4f96-87ed-662a381ae070&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 750px; &quot; alt=&quot;Canvas Principle&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9400cf47-0a75-4f96-87ed-662a381ae070&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;b&gt;Product Market Fit on the Lean Canvas&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
The Lean-Canvas is a formidable tool to capture the assumptions and hypothesis leading to Product Market Fit.
&lt;br&gt;
Product Market Fit happens here on the Lean Canvas:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6324b197-c8b1-4f92-8ebc-90819519dd39&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px; &quot; alt=&quot;Product Market Fit on the Lean Canvas&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6324b197-c8b1-4f92-8ebc-90819519dd39&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Filling up these two parts can be challenging, so another tool comes in the game to help identify Assumptions leading to Product-Market Fit.
&lt;/p&gt;


&lt;a name=&quot;sec214&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.14 The Value Propostion Canvas&lt;/h3&gt;

&lt;p&gt;
The Value Proposition Canvas is a tool which can help ensure that a product or service is positioned around what the customer values and needs.
&lt;br&gt;
The Value Proposition Canvas was initially developed by Dr Alexander Osterwalder as a framework to ensure that there is a fit between the product and market. It is a detailed look at the relationship between two parts of the Osterwalder&apos;s broader Business Model Canvas; customer segments and value propositions.
&lt;br&gt;
The Value Proposition Canvas can be used when there is need to refine an existing product or service offering or where a new offering is being developed from scratch.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Customer Profile&lt;/b&gt;
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Customer jobs&lt;/b&gt; - the functional, social and emotional tasks customers are trying to perform, problems they are trying to solve and needs they wish to satisfy.&lt;/li&gt;
A customer profile should be created for each customer segment, as each segment has distinct gains, pains and jobs.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gains&lt;/b&gt; - the benefits which the customer expects and needs, what would delight customers and the things which may increase likelihood of adopting a value proposition.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pains&lt;/b&gt; - the negative experiences, emotions and risks that the customer experiences in the process of getting the job done.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
&lt;b&gt;Value Map&lt;/b&gt;
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Gain creators&lt;/b&gt; - how the product or service creates customer gains and how it offers added value to the customer.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pain relievers&lt;/b&gt; - a description of exactly how the product or service alleviates customer pains.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Products and services&lt;/b&gt; - the products and services which create gain and relieve pain, and which underpin the creation of value for the customer.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2bc8b37e-f920-4b92-991e-85579c1d2c0b&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px; &quot; alt=&quot;Value Proposition Canvas&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2bc8b37e-f920-4b92-991e-85579c1d2c0b&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;
&lt;b&gt;Achieving fit between the value proposition and customer profile&lt;/b&gt;
&lt;/p&gt;

After listing gain creators, pain relievers and products and services, each point identified can be ranked from nice to have to essential in terms of value to the customer. A fit is achieved when the products and services offered as part of the value proposition address the most significant pains and gains from the customer profile.
Identifying the value proposition on paper is only the first stage. It is then necessary to validate what is important to customers and get their feedback on the value proposition. These insights can then be used to go back and continually refine the proposition.



&lt;a name=&quot;sec3&quot;&gt;&lt;/a&gt;
&lt;h2&gt;3. Design Thinking Fundamentals&lt;/h2&gt;

&lt;p&gt;
Just as the previous chapter intended to cover the Lean Startup fundamentals required to present the different perspective in the Search for Product-Market fit presented in the next chapter, this one covers the most essential Design Thinking Fundamentals
&lt;/p&gt;



&lt;a name=&quot;sec31&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.1 Design Thinking &lt;/h3&gt;

&lt;p&gt;
Design Thinking is &lt;b&gt;an iterative process&lt;/b&gt; in which we seek to &lt;b&gt;understand the user, challenge assumptions, and redefine problems&lt;/b&gt; in an attempt to &lt;b&gt;identify alternative and innovative strategies and solutions&lt;/b&gt; that might not be instantly apparent with our initial level of understanding (Creative thinking, Outside-the-box thinking, ...).
&lt;br&gt;
Design thinking is a way of thinking and working as well as a collection of hands-on methods.
&lt;/p&gt;

&lt;p&gt;
The &lt;i&gt;Design Thinking Process&lt;/i&gt; involves five phases: Empathize, Define, Ideate, Prototype and Test-it is most useful to tackle problems that are ill-defined or unknown. 
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ce4f907e-cc10-4174-b533-214242dcafe6&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 400px; &quot; alt=&quot;Design Thinking Big Picture&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ce4f907e-cc10-4174-b533-214242dcafe6&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Design Thinking revolves around a deep interest in developing an understanding of the people for whom we&apos;re designing the products or services. Experience says customers are not likely to communicate their needs clearly. It&apos;s not how the human brain works. We have a natural tendency to think in terms of solutions. 
&lt;br&gt;
Design Thinking is based on the assumption that designers&apos; work processes can help us systematically extract, teach, learn, and apply these human-centered techniques to solve problems in a creative and innovative way. It is kind of a capture of the best practices in use by designers for ages, formalized and collected in a process and set of tools. It&apos;s an attempt to leverage designer&apos;s ways of working and thinking to other business fields where brainstorming is required to converge to a solution to a given problem.
&lt;/p&gt;

&lt;a name=&quot;sec32&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.2 The Design Thinking Process &lt;/h3&gt;



&lt;p&gt;
Design thinking starts with Empathy and uses collaborative and participatory methods, repeating all 5 steps as many times as needed to achieve a complete solution.
&lt;br&gt;
The process helps not skipping to solution thinking before crystal clear problem understanding and formulation !
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/1418f19e-700b-4868-97b6-fcf12a168c3e&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;Design Thinking Process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/1418f19e-700b-4868-97b6-fcf12a168c3e&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Design Thinking is an iterative and non-linear process. This simply means that the design team continuously use their results to review, question and improve their initial assumptions, understandings and results. Results from the final stage of the initial work process inform our understanding of the problem, help us determine the parameters of the problem, enable us to redefine the problem, and, perhaps most importantly, provide us with new insights so we can see any alternative solutions that might not have been available with our previous level of understanding. 
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get back to the customer for further refinement of the problem expression&lt;/li&gt;
&lt;li&gt;Working on the prototype give new ideas : challenge them and reprioritize!&lt;/li&gt;
&lt;li&gt;Tests give new ideas : challenge them and reprioritize!&lt;/li&gt;
&lt;li&gt;Tests reveal insights that redefine the problem &lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/927f8e98-a7f9-4d1b-b216-f64a579e92e6&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 650px; &quot; alt=&quot;Design thinking - Different perspectrives&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/927f8e98-a7f9-4d1b-b216-f64a579e92e6&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source : &lt;a href=&quot;https://www.slideshare.net/ChrisJackson43/i-design-think-therefore-i-am-a-uxer&quot;&gt;https://www.slideshare.net/ChrisJackson43/i-design-think-therefore-i-am-a-uxer&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Designers don&apos;t become designers from day 1, there are design schools, it requires experience etc.
&lt;br&gt;
Design thinking is just the same. It requires a lot of practice and familiarity with the process and the tools to become good at it.
&lt;/p&gt;


&lt;a name=&quot;sec33&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.3 The Design Thinking Framework &lt;/h3&gt;

&lt;p&gt;
This is intended as a map of the different tools and practices in use in the different stages of the design thinking process.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/f8d76eab-062b-4d82-966c-be39c28a2398&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px; &quot; alt=&quot;Design Thinking Framework&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/f8d76eab-062b-4d82-966c-be39c28a2398&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;
I wont go any deeper today in detailing these practices and tools and let the reader google them.
&lt;br&gt;
I will likely dedicate a full article to design thinking on this very blog in the short term
&lt;/p&gt;

&lt;p&gt;
At the end of the day, Design thinking is a lot about bringing Agility and Lean practices to the design and problem solving process.
&lt;br&gt;
In this perspective, it is different to the &lt;i&gt;traditional&lt;/i&gt; thinking process in many ways, just as Agile Development is different than Waterfall Development.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;table class=&quot;centered&quot; style=&quot;border: solid 1px #999999; border-collapse: collapse; padding: 4px;&quot;&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;text-align: center; border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;text-align: center; border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;&lt;b&gt;Traditional thinking&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;text-align: center; border-bottom: solid 1px #CCCCCC; padding: 4px;&quot;&gt;&lt;b&gt;Design thinking&lt;/b&gt;&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;&lt;b&gt;Style&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;Directed&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px;&quot;&gt;Emergent&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;&lt;b&gt;Process&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;Planning of flawless intellect&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px;&quot;&gt;Enlightened trial and error&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;&lt;b&gt;Path to success&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;Avoid failure, secure&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px;&quot;&gt;Fail fast&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot; rowspan=4&gt;&lt;b&gt;Factor of success&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;Expert Advantage&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px;&quot;&gt;Ignorance advantage&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;Right answers&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px;&quot;&gt;Right questions&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;Rigorous Analysis&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;padding: 3px;&quot;&gt;Rigorous Testing&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;Subject experts&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;padding: 3px;&quot;&gt;Process experts&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;&lt;b&gt;Rituals&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;Presentations and meetings&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px;&quot;&gt;Experiments and experiences&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;&lt;b&gt;Communication&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;Telling&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px;&quot;&gt;Showing&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;Headquarters&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px;&quot;&gt;In the field&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot; rowspan=2&gt;&lt;b&gt;Customer involvement&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;Arm&apos;s length customer research&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px;&quot;&gt;Deep customer immersion&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;Periodic&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;padding: 3px;&quot;&gt;Continuous&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;&lt;b&gt;Activities&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px; border-right: solid 1px #CCCCCC;&quot;&gt;Thinking and planning&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;border-bottom: solid 1px #CCCCCC; padding: 3px;&quot;&gt;Doing&lt;/td&gt;

&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec34&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.4 Thinking Outside of the Box &lt;/h3&gt;

&lt;p&gt;
The best way to illustrate this key aspect of &lt;i&gt;Design Thinking&lt;/i&gt; is with the following quote from Henri Ford:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/8acb4773-60a5-4d8f-9b5f-fa87afcdbe46&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;Henri Ford - faster horsed&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/8acb4773-60a5-4d8f-9b5f-fa87afcdbe46&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
I&apos;d like to illustrate this quote with the following process as an example, to show what a over-simplied design thinking 
process to the problem above could look like:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2d02c29c-9884-4e23-a382-b27fa0791916&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;Design thinking Example process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2d02c29c-9884-4e23-a382-b27fa0791916&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec35&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.5 Sum-up&lt;/h3&gt;

&lt;p&gt;
Design Thinking is essentially 
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a problem-solving approach specific to design, &lt;/li&gt;
&lt;li&gt;which involves assessing known aspects of a problem and &lt;/li&gt;
&lt;li&gt;identifying the more ambiguous or peripheral factors that contribute to the conditions of a problem. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
It contrasts with a more scientific approach where the concrete and known aspects are tested in order to arrive at a solution. 
&lt;/p&gt;

&lt;p&gt;
Design Thinking is 
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an iterative process to identify alternative strategies and solutions that might not be instantly apparent with our initial level of understanding. &lt;/li&gt;
&lt;li&gt;often referred to as &quot;outside the box thinking&apos;, as designers are attempting to develop new ways of thinking that do not abide by the dominant or more common problem-solving methods - just like artists do. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
At the heart of Design Thinking is the intention to improve products by analyzing how users interact with them  and investigating the conditions in which they operate. 
&lt;br&gt;
Design Thinking offers a means of digging that bit deeper to uncover ways of improving User eXperiences.
&lt;/p&gt;


&lt;a name=&quot;sec4&quot;&gt;&lt;/a&gt;
&lt;h2&gt;4. Reaching Product Market fit - Different perspectives&lt;/h2&gt;

&lt;p&gt;
Now with all we have covered above - lean startup and design thinking fundamentals - we can come back to this very article topic, the &lt;b&gt;search for Product-Market Fit&lt;/b&gt;.
&lt;br&gt;
When searching online articles or posts about Product Market Fit, you will mostly likely fall in one of the following four perspectives
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;b&gt;The &lt;i&gt;Lean-Startup&lt;/i&gt; perspective&lt;/b&gt;: with actually two sub-cases that converge to the same thing:
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;The &lt;i&gt;Feedback-loop&lt;/i&gt; perspective&lt;/b&gt;: Searching Product-market fit is applying the &lt;i&gt;Build-Measure-Learn&lt;/i&gt; feedback loop comprehensively throughout the product identification and design lifecycle and the business plan definition to shape a product fulfilling perfectly the customer needs.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;The &lt;i&gt;Four-Steps-to-the-Epiphany&lt;/i&gt; perspective&lt;/b&gt;: Product-market fit is the result of the search phase, when the solution to the customer problem is clearly identified along with its feature set, market potential, business plan, foreseen evolutions, etc.
&lt;/li&gt;
&lt;/ul&gt;
Again, these two perspectives actually converge to what I will describe hereunder as the &lt;i&gt;Lean Startup&lt;/i&gt; Perspective.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;The &lt;i&gt;MVP-Centric&lt;/i&gt; perspective&lt;/b&gt;: For many, searching product-market fit is iterating around a &lt;i&gt;Minimum Viable Product&lt;/i&gt;. It is the result of a process centered around the MVP design iterations, when the MVP and what we learned from it enabled to identify the product fulfilling the market needs.

&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;The &lt;i&gt;Lean-Canvas-Centric&lt;/i&gt; perspective&lt;/b&gt;: For others, Product-market fit happens when you succeeded in designing great value propositions that match your customer needs and jobs-to-be-done and helps solve their problems.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;The &lt;i&gt;Design Thinking&lt;/i&gt; perspective&lt;/b&gt;: Product-market-fit is what happens when applying successfully Lean-Startup principles to the last design-thinking process stages to reach maturity and the growth stage.

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
These different perspectives are all, well, perspectives ... Different visions of the same thing: putting the customer needs at the center of the Solution Search and Design process and being &lt;i&gt;lean-by-the-book&lt;/i&gt; as long as the Problem, the Solution, the Market and the Product along with its minimum features are not well identified.
&lt;br&gt;
We should now detail these different perspectives.
&lt;/p&gt;


&lt;a name=&quot;sec41&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.1 The Lean Startup Perspective &lt;/h3&gt;

&lt;p&gt;
Again, actually the &lt;i&gt;Feedback loop&lt;/i&gt; and the &lt;i&gt;Four Steps to the Epiphany&lt;/i&gt; - both described and referenced often in the literature - converge to the very same thing: The Lean Startup way, which can be represented this way:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d3a297a2-0dba-4c91-903e-81589bd5ab57&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;The Lean Startup Perspective to Product Market Fit&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d3a297a2-0dba-4c91-903e-81589bd5ab57&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The Lean Startup perspective to product market fit consists, well, in being Lean Startup by the book:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&quot;&lt;i&gt;4-steps to the Epiphany&lt;/i&gt;&quot; as a high level process&lt;/li&gt;
&lt;li&gt;Lower-level process is represented by the Lean-Startup Feedback Loop
&lt;ul&gt;
&lt;li&gt;First Problem-Solution Fit&lt;/li&gt;
&lt;li&gt;Then Business-Model validation&lt;/li&gt;
&lt;li&gt;Eventually Product-Market Fit&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MVP happens late in the process, most assumptions are verified during interviews with mock-ups and prototype (Lean-by-the-book)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
At the end of the day Lean Startup &lt;b&gt;is&lt;/b&gt; about reaching Product-Market Fit.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Key Aspects&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
The &lt;i&gt;Lean Startup&lt;/i&gt; way to product market fit is fundamentally Customer-centric: &lt;i&gt;Get out of the building&lt;/i&gt;, work with your customers:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand your customer&apos;s problem&lt;/li&gt;
&lt;li&gt;Understand if your solution works for your customer!&lt;/li&gt;
&lt;li&gt;Understand your market, capture its constraints, abilities, means.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
It&apos;s lean-by-the-book, only very little investment should be made upfront, focus on Problem-Solution Fit first, then design your business mode, all of this can be done almost for free.
&lt;br&gt;
Only then one should develop an MVP - which requires some investment - at the latest stage, in any case after Problem-Solution Fit.
&lt;br&gt;
The whole process is fundamentally Data-driven: make an hypothesis, test it, measure, learn, adapt or persevere, move to next assumption, etc.
&lt;br&gt;
Product-Market Fit is reached when the metrics measured from the MVP confirms it.
&lt;/p&gt;



&lt;div class=&quot;centering&quot;&gt;
&lt;table class=&quot;centered&quot; style=&quot;border: 0 none; border-collapse: collapse; margin: 2px; padding: 4px;&quot;&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;text-align: center; border: 0 none; border-right: solid 1px #CCCCCC; padding: 3px;&quot;&gt;&lt;b&gt;Advantages&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;text-align: center; border: 0 none; padding: 4px;&quot;&gt;&lt;b&gt;Drawbacks&lt;/b&gt;&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;text-align: left; border: 0 none; border-right: solid 1px #CCCCCC; padding: 3px;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
Little investment on MVP, everything remains theoretical before Problem-Solution Fit and Business Model validation - Lean by the book!
&lt;/li&gt;
&lt;li&gt;
Only when most assumptions are verified one moves to developing MVP (which requires money!)
&lt;/li&gt;
&lt;/ul&gt;

&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;text-align: left; border: 0 none; padding: 4px;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
While this approach -  working a lot upfront before starting to work on an MVP - is seducing (less investment required), it is also challenging
&lt;ul&gt;
&lt;li&gt;
The first feedback we get from the MVP often challenges a lot the initial assumptions, even though they were validated with customers.
&lt;/li&gt;
&lt;li&gt;
This is because users and customers have a strong tendency not to be able to clearly state what they need and want before something concrete us put in front of them

&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;

&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec42&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.2 The &quot;MVP-Centric&quot; Perspective &lt;/h3&gt;

&lt;p&gt;
The &lt;i&gt;MVP-centric&lt;/i&gt; perspective is very similar to the &lt;i&gt;Lean-Startup&lt;/i&gt; perspective, with only one fundamental difference.
&lt;br&gt;
Instead of remaining lean too long and focusing a lot on Problem / Solution fit and the Business Model Design from a theoretical perspective (through interview, design sessions with customers, etc.), for some it makes more sense to rush it to the MVP and capture better feedback based on something concrete, the MVP, instead of remaining nearly theoretical too long.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/70f2eef4-cddc-42a1-bee1-46ba1ac2e5b3&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px;&quot; alt=&quot;The MVP-Centric Perspective to Product Market Fit&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/70f2eef4-cddc-42a1-bee1-46ba1ac2e5b3&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The MVP-Centric approach puts the iterations on MVP at the center of the process.
&lt;br&gt;
it is very relevant approach for online and very wide audience services, such as SaaS platform, online services, etc.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Fundamental Idea &lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Jump to the MVP development stage as fast as possible - without neglecting Problem / Solution fit though -  and iterate on MVP as long as required to reach PMF
&lt;/li&gt;
&lt;li&gt;
Getting IRL - In Real Life - and live as fast as possible to optimize feedback
&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;Note about MVP&lt;/b&gt;
&lt;/p&gt; 

&lt;p&gt;
Refer to section &lt;a href=&quot;#sec29&quot;&gt;MVP&lt;/a&gt;, the first version of the MVP in this context can very well be a prototype or a simple mock-up of even sketch-up.
&lt;br&gt;
What the MVP-centric approach is saying is that at every stage (Problem/Solution fit, etc.) you should have something concrete to present to the customer to have him react on something real, not just open questions or theoretical solutions.
&lt;br&gt;
In this perspective, every kind of feedback that is not measured on something real (in the sense of existing, as real as a simple sketch-up can be) is simply useless. This is opposed to the previous &lt;i&gt;Lean-by-the-book&lt;/i&gt; perspective where the first stages can me made through simple interviews.
&lt;br&gt;

&lt;p&gt;
&lt;b&gt;Key aspects&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
Some believe that reasoning on a concrete MVP is the best way (again, the definition of MVP in this context is wide)
&lt;br&gt;
The principles behind the underlying process are:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build MVP, put it live in real-life and start getting feedback&lt;/li&gt;
&lt;li&gt;Feedback and metrics collection automation is key&lt;/li&gt;
&lt;li&gt;A/B Testing / UX Metrics / etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
In contrary to the Lean-Startup perspective, in this approach there some more significant investment up-front required, one needs to develop the MVP.
&lt;br&gt;
The Problem-Solution fit search phase is not neglected, but shorten as much as possible to reach the more concrete MVP stage faster.
&lt;br&gt;
Product-Market Fit is reached when the metrics measured from the MVP confirms it (as usual).
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;table class=&quot;centered&quot; style=&quot;border: 0 none; border-collapse: collapse; margin: 2px; padding: 4px;&quot;&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;text-align: center; border: 0 none; border-right: solid 1px #CCCCCC; padding: 3px;&quot;&gt;&lt;b&gt;Advantages&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;text-align: center; border: 0 none; padding: 4px;&quot;&gt;&lt;b&gt;Drawbacks&lt;/b&gt;&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;text-align: left; border: 0 none; border-right: solid 1px #CCCCCC; padding: 3px;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
People have difficulties reasoning on abstractions and customers have trouble expressing clearly what they need as long as they don&apos;t see anything concrete (the infamous &quot;that&apos;s not what I wanted&quot;
&lt;/li&gt;
&lt;li&gt;
Moving AFAP to the MVP enables to address this and get feedback on the real-thing as fast as possible
&lt;/li&gt;
&lt;li&gt;
Very well suited for online and wide audience services (e.g. Netflix, Google, Facebook, etc.)
&lt;/li&gt;
&lt;/ul&gt;

&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;text-align: left; border: 0 none; padding: 4px;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
More up-front investment, need to develop the MVP and put it live
&lt;/li&gt;
&lt;li&gt;
Does not apply to all businesses / products - how to develop an MVP in Pharma, Bio-tech or heavy industry?
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;

&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;a name=&quot;sec43&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.3 The &quot;Lean Canvas-Centric&quot; Perspective &lt;/h3&gt;

&lt;p&gt;
The &lt;i&gt;Lean Canvas-Centric&lt;/i&gt; perspective is kind of the the symmetric of the &lt;i&gt;MVP-Centric&lt;/i&gt; perspective if the &lt;i&gt;Lean Startup&lt;/i&gt; perspective is the pivot point.
&lt;br&gt;
It&apos;s fundamental idea is the exact opposite of the MVP Centric approach: postponing the MVP and the investment required in it as much as possible and stay lean and theoretical as long as possible, even as long as is required to reach &quot;&lt;i&gt;theoretical Product-Market fit&lt;/i&gt;&quot;
&lt;br&gt;
The Lean-Canvas centric approach puts a strong emphasis on the theoretical work and customer representatives / market experts interviews instead of the MVP
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/96fd46a9-5ba8-4123-9bf5-f449c649cd39&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;The Lean Canvas-Centric Perspective to Product Market Fit&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/96fd46a9-5ba8-4123-9bf5-f449c649cd39&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;
&lt;i&gt;Theoretical Product-Market fit&lt;/i&gt; would be defined as &quot;&lt;i&gt;Designing a Product and a Business Model that has the potential to have Product-Market Fit&lt;/i&gt;&quot; as measured by whatever possible means to confirm most assumptions without having the actual product or even only an MVP.
&lt;br&gt;
The Lean Canvas and the Value proposition Canvas form a formidable tool to drive researches with customers towards Product-Market fit and discussion with Investors. They sum up the findings and validated assumptions based on theoretical work (such as prototype, academic research, scientific findings, etc.) leads to theoretical product market-fit before actually building anything on the product
&lt;br&gt;
Developing, evolving and maintaining these canvas is
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Useful during the search phase for every startup&lt;/li&gt;
&lt;li&gt;Essential when an MVP is not possible or very expensive. These canvas provide a guiding line for the theoretical search phase.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Key aspects&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
Designing a lean-Canvas, maintaining and evolving it , along with a Value proposition canvas, always makes sense and should always be done to drive the initial assumptions on the Problem solution fit, the Business Model and the Product Market-Fit and their evolutions.
&lt;br&gt;
But most of the time, coming back over and over again to the Lean Canvas is dropped in favor of iterations around the MVP and it&apos;s predominant usage to capture customer feedback and converge to Product-Market Fit.
&lt;br&gt;
When working with and around the MVP is not possible - heavy industry, Bio-Tech, Pharma, etc. - the lean canvas and its maintenance remains the principal guideline when searching for Product Market Fit
Every customer interview, expert consulting, scientific research should lead to evolving the Lean Canvas and the Value Proposition Canvas. The Lean canvas is the Big Picture of the Business Plan leading discussions with investors
&lt;br&gt;
The Lean canvas is the map to the data points that need to be collected before talking to investors.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;table class=&quot;centered&quot; style=&quot;border: 0 none; border-collapse: collapse; margin: 2px; padding: 4px;&quot;&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;text-align: center; border: 0 none; border-right: solid 1px #CCCCCC; padding: 3px;&quot;&gt;&lt;b&gt;Advantages&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;text-align: center; border: 0 none; padding: 4px;&quot;&gt;&lt;b&gt;Drawbacks&lt;/b&gt;&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;text-align: left; border: 0 none; border-right: solid 1px #CCCCCC; padding: 3px;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
The Lean-Canvas helps create a quick visualization of an idea, share it and get feedback.
&lt;/li&gt;
&lt;li&gt;
The Value Proposition canvas helps capture how Product Market fit will be reached.
&lt;/li&gt;
&lt;li&gt;
Sometimes - when working with an MVP is not possible - every single word on these canvas capture an essential assumption that has been verified and that is key to build the eventual product and the company.
&lt;/li&gt;
&lt;/ul&gt;

&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;text-align: left; border: 0 none; padding: 4px;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
Again, if working with these canvas is important in the initial stage and perhaps at later stage when discussing with potential customers and investors,  iterating and evolving these canvas takes a lesser importance in favor of working with an MVP as e move forward in the search phase.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;

&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;a name=&quot;sec44&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.4 The &quot;Design Thinking-Centric&quot; Perspective &lt;/h3&gt;


&lt;p&gt;
The &lt;i&gt;Design Thinking-Centric&lt;/i&gt; perspective is actually not a variation of the previous ones, but rather a complementary approach.
&lt;br&gt;
Lean startup doesn&apos;t tell a lot about how to conduct brainstorming and the thinking process towards solutions. This is where &lt;i&gt;Design Thinking&lt;/i&gt; kicks in.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/26986622-a945-4c40-9f39-ccc923552b7d&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 550px;&quot; alt=&quot;The Design Thinking-Centric Perspective to Product Market Fit&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/26986622-a945-4c40-9f39-ccc923552b7d&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The Design-Thinking Perspective is actually a way to structure and formalize the Problem-solving approach in the search phase.
&lt;br&gt;
There&apos;s some overlap between Lean Startup and Design Thinking
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design thinking emphasizes on Problem / Solution Fit, MVP design and UX as ultimate results from a Design perspective, &lt;/li&gt;
&lt;li&gt;while Lean Startup focuses on reaching Product Market Fit before scaling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Both are very complementary!
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The design thinking process is a very good fit for the Lean-Startup Search Phase&lt;/li&gt;
&lt;li&gt;Lean Startup doesn&apos;t give much processes and tools on how to get to Problem / Solution Fit (aside from some general principles, Get out of the building, Problem / Solution interview, etc.), how to design the MVP, etc.&lt;/li&gt;
&lt;li&gt;This is where Design thinking kicks in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Applying the Design-thinking process to the required brainstorming in the Lean-Startup search phase is a striking fit.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Key aspects&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
Lean-Startup insists on the need to reach Problem Solution Fit, a working Business Model and eventually Product Market fit and gives principles and practices to it (Get out of the Building, Converge to MVP, Lean Canvas, etc.).
&lt;br&gt;
But Lean startup doesn&apos;t give much recipe for how to conduct brainstorming, how to search for solution, how to design the MVP, etc.
&lt;/p&gt;

&lt;p&gt;
Here comes Design thinking!
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
The Design thinking process can be applied every time a solution to a problem, a design job or simply a brainstorming exercise  has to be performed in the search phase … or after.
&lt;/li&gt;
&lt;li&gt;
Design thinking and Lean Startup share some genes (getting feedback, iterate, etc.), but they are rather very much complementary with each other
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;table class=&quot;centered&quot; style=&quot;border: 0 none; border-collapse: collapse; margin: 2px; padding: 4px;&quot;&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;text-align: center; border: 0 none; border-right: solid 1px #CCCCCC; padding: 3px;&quot;&gt;&lt;b&gt;Advantages&lt;/b&gt;&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;text-align: center; border: 0 none; padding: 4px;&quot;&gt;&lt;b&gt;Drawbacks&lt;/b&gt;&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;

&lt;td class=&quot;story&quot; style=&quot;text-align: left; border: 0 none; border-right: solid 1px #CCCCCC; padding: 3px;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
Helps structuring the search for solutions to various problems and aspects in the search phase
&lt;ul&gt;
&lt;li&gt; 
Problem-Solution fit (striking application for the design thinking process)
&lt;/li&gt;
&lt;li&gt;
MVP Design
&lt;/li&gt;
&lt;li&gt;
Commercial and marketing issues
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Very much relevant only when a lot of thoughts need to be put in the design of the product or the search for a solution to the customer problem.
&lt;/li&gt;
&lt;/ul&gt;

&lt;/td&gt;
&lt;td class=&quot;story&quot; style=&quot;text-align: left; border: 0 none; padding: 4px;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
When the solution is clear after the sets of interviews with key customers, or on the contrary when searching for a solution requires a lot of scientific research, Design thinking is out of scope.
&lt;ul&gt;
&lt;li&gt;
If the solution is crystal clear, a structured brainstorming process such as design thinking is not required.
&lt;/li&gt;
&lt;li&gt;
If the solution requires a lot of scientific research, design thinking is not of a great help
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;

&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec5&quot;&gt;&lt;/a&gt;
&lt;h2&gt;5. Measure Obsession&lt;/h2&gt;


&lt;p&gt;
There is one fairly important topic that I haven&apos;t covered in this paper and that would require a dedicate blog post on its own. 
&lt;br&gt;
And that is &quot;&lt;i&gt;How do you know when you have reached Product-Market Fit&lt;/i&gt;&quot; ?
&lt;br&gt;
I said in the introduction that a lot of it is about feeling, when you really feel the market &lt;i&gt;pulling out&lt;/i&gt; your product.
&lt;br&gt;
But fortunately, knowing whether your startup reached product-market fit or whether simply you are going in the right direction is a lot more than feelings. It&apos;s all about &lt;b&gt;metrics&lt;/b&gt; !
&lt;/b&gt;

&lt;p&gt;
Or, as W. Edwards Deming said:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;
&quot;In God we trust, All others must bring data.&quot;
&lt;/b&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/8786f243-6a78-44f9-8090-bdb9707cdfb1&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 650px; &quot; alt=&quot;Measure Obsession&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/8786f243-6a78-44f9-8090-bdb9707cdfb1&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source : &lt;a href=&quot;http://fr.slideshare.net/sperin/les-pratiques-des-geants-du-web&quot;&gt;Les pratiques des géants du web / Stephen Perrin - OCTO Technology&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Now the question of course is which metrics makes sense in measuring whether one is going in the right direction (Product-Market Fit)?
&lt;/p&gt;

&lt;p&gt;
Honestly there is no magic silver bullet and it can in fact be pretty difficult to pick up the right metric that would be most helpful to validate a certain hypothesis. However, metrics should at all cost respect the three A&apos;s. 
&lt;br&gt;
Good metrics
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;are actionable,&lt;/li&gt;
&lt;li&gt;can be audited and&lt;/li&gt;
&lt;li&gt;are accessible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
An actionable metric is one that ties specific and repeatable actions to observed results. The actionable property of picked up metrics is important since it prevents the entrepreneur from distorting the reality to his own vision. 
&lt;br&gt;
We speak of &lt;i&gt;Actionable&lt;/i&gt; vs. &lt;i&gt;Vanity&lt;/i&gt; Metrics. 
&lt;br&gt;
Meaningless metrics such as &quot;&lt;i&gt;How many visitors ?&lt;/i&gt;&quot;, &quot;&lt;i&gt;How many followers ?&lt;/i&gt;&quot; are vanity metrics and are useless.
&lt;/p&gt;

&lt;p&gt;
Ultimately, your metrics should be useful to measure progress against your own questions.
&lt;/p&gt;

&lt;p&gt;
Now giving you a list of metrics and the proper way to interpret them is a topic on his own and I might write another article on this blog in a near future to define and present such metrics.
&lt;br&gt;
Since this article is already long enough this way, I&apos;ll just mention four metrics that I believe should be among the minimum set of metrics that any startup retain:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;NPS&lt;/b&gt; - Net Promoter Score&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CLV (or LTV) to CAC Ratio&lt;/b&gt;  Customer LifeTime Value to Customer Acquisition Cost Ratio&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Retention Ratio&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Growth Rate&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b5634003-834c-40c6-aae6-ddb94161f1d2&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px;&quot; alt=&quot;PMF Metrics&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b5634003-834c-40c6-aae6-ddb94161f1d2&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;



&lt;a name=&quot;sec51&quot;&gt;&lt;/a&gt;
&lt;h3&gt;5.1 Net Promoter Score&lt;/h3&gt;

&lt;p&gt;
The &lt;b&gt;Net promoter Score&lt;/b&gt; - or NPS - is perhaps both the simplest metrics to gather and computer as well as one of the most meaningful.
&lt;br&gt;
It consists in understanding how great your product is by capturing how much your users are so enthusiastic about it that they would recommend it to others. On other words, it&apos;s really about how much your product is susceptible to generate a &lt;i&gt;Wow&lt;/i&gt; effect.
&lt;/p&gt;

&lt;p&gt;
The &lt;b&gt;Net Promoter Score&lt;/b&gt; is a metric that has become a standard for measuring customer loyalty and satisfaction by many companies. 
&lt;br&gt;
It is built on the power of one simple question: &quot;&lt;i&gt;how likely is it that you would recommend your product to a friend or colleague?&lt;/i&gt;&quot;
&lt;br&gt; 
it&apos;s now used by companies of all sizes in virtually every industry all over the world.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d51343f3-f4e6-4fce-9874-9c8f4d8373aa&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px;&quot; alt=&quot;NPS Intro&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d51343f3-f4e6-4fce-9874-9c8f4d8373aa&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
While NPS is a good leading indicator of business growth, it can also be a vanity metric if used alone without looking at the context of why your customers would recommend (or not recommend) your product.
&lt;br&gt;
If your company is committed to measuring NPS, here&apos;s a tip that you can use to understand the &quot;why&quot; behind your NPS score and potentially increase it. Follow up the standard NPS question with one additional question, &quot;&lt;i&gt;What would it take for you to recommend my product to someone you know?&lt;/i&gt;&quot;, and target the people who are not your promoters, which means they rated their likelihood to recommend your product an 8 or lower. You can then analyze those open-ended responses to identify key trends in the data.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Computing the Net Promoter Score&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;Net Promoter Score&lt;/b&gt; 
= 
&lt;span style=&quot;color: green;&quot;&gt;% Promoters&lt;/span&gt;
-
&lt;span style=&quot;color: red;&quot;&gt;% Detractors&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/123905db-2c96-4a3c-b18c-1fc63721d4ff&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px; &quot; alt=&quot;NPS calculation elements&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/123905db-2c96-4a3c-b18c-1fc63721d4ff&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source : &lt;a href=&quot;https://www.netigate.net/articles/customer-satisfaction/nps-ultimate-guide-to-net-promoter-score&quot;&gt;https://www.netigate.net/articles/customer-satisfaction/nps-ultimate-guide-to-net-promoter-score&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;b&gt;Understanding the Net Promoter Score&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
There&apos;s a simple rule of thumb:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A positive value is OK/li&gt;
&lt;li&gt;A value above 20% is what you want to reach/li&gt;
&lt;li&gt;A value above 50% is extremely good&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec52&quot;&gt;&lt;/a&gt;
&lt;h3&gt;5.2 CLV to CAC Ratio&lt;/h3&gt;

&lt;p&gt;
The &lt;b&gt;CLV to CAC Ratio&lt;/b&gt; is an expression of how much money you can make built on two key figures:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;CAC - Customer Acquisition Costs&lt;/b&gt; - is the figure representing what it costs to your company in average to acquire a new customer. 
&lt;br&gt;
It&apos;s the total cost of converting a prospect or convincing a potential customer to become an actual customer. It&apos;s the total cost devoted to your sales and marketing effort - cross department, domains and worldwide divided by the number of your new customers over the period.

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/eff44437-8801-4061-8ba7-d6e914e0b568&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;CAC&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/eff44437-8801-4061-8ba7-d6e914e0b568&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;CLV - Customer Lifetime Value&lt;/b&gt; (or often &lt;b&gt;LTV&lt;/b&gt; in the literature) - is the figure representing how much money you make in average with one of your customer. CLV is more difficult to compute and no formula working out of the box can be expressed easily since one need to account upselling, sales model such as subscriptions vs. one time license, etc. 
&lt;br&gt;
One can however simplify it by considering incomes only incomes from new customers

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/f5a37c09-190d-4ede-a65b-8ccf7e62320d&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px;&quot; alt=&quot;CLV&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/f5a37c09-190d-4ede-a65b-8ccf7e62320d&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The &lt;b&gt;CLV to CAC ratio&lt;/b&gt; gives you an indication of how much your business is profitable.
&lt;br&gt;
The metric is computed by dividing LTV by CAC. It is a signal of customer profitability, and sales and marketing efficiency.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ab4b3a13-1c74-42a6-a8dd-a6f4ce81e60d&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px; &quot; alt=&quot;CAC to CLV Ratio&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ab4b3a13-1c74-42a6-a8dd-a6f4ce81e60d&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Sources :
&lt;br&gt;
&lt;a href=&quot;https://www.klipfolio.com/resources/kpi-examples/saas/customer-lifetime-value-to-customer-acquisition-cost&quot;&gt;https://www.klipfolio.com/resources/kpi-examples/saas/customer-lifetime-value-to-customer-acquisition-cost&lt;/a&gt;
&lt;br&gt;
&lt;a href=&quot;https://www.forentrepreneurs.com/startup-killer/&quot;&gt;https://www.forentrepreneurs.com/startup-killer/ &lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec53&quot;&gt;&lt;/a&gt;
&lt;h3&gt;5.3 Retention Ratio / Curve &lt;/h3&gt;

&lt;p&gt;
Acquisition isn&apos;t the whole answer. Retention is even more important!
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Definitions:&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;N-Day Retention&lt;/b&gt;: The proportion of users who come back on the &apos;Nth&apos; day after first use.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Retention Curve&lt;/b&gt;: A line graph depicting the average percentage of active users for each day within a specified timeframe.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
At a high level, retention is a measure of how many users return to your product over time. 
&lt;br&gt;
It is the mathematical inverse of the customer churn (which can be another metric)
&lt;/p&gt;

&lt;p&gt;
The point is, every improvement that you make to retention also improves all of these other things-virality, LTV, payback period. It is literally the foundation to all of growth, and that&apos;s really why retention is the king
&lt;/p&gt;

&lt;p&gt;
A good way of visualizing retention rate is by plotting a retention curve:
&lt;br&gt;
Retention can actually indicate if you have a product-market fit problem; if you plot out your retention numbers as a percentage of active users over time and you have a flat line that reaches zero instead of a curve that stabilizes-you need to solve a product-market fit problem, not a retention problem.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/29851f5f-2609-4134-bdb1-6ad23c391868&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px; &quot; alt=&quot;Retention Curve&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/29851f5f-2609-4134-bdb1-6ad23c391868&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source : &lt;a href=&quot;https://amplitude.com/mastering-retention/why-care-about-user-retention&quot;&gt;https://amplitude.com/mastering-retention/why-care-about-user-retention &lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;a name=&quot;sec54&quot;&gt;&lt;/a&gt;
&lt;h3&gt;5.4 Growth Rate &lt;/h3&gt;


&lt;p&gt;
The &lt;b&gt;Growth Rate&lt;/b&gt; is an expression of the speed at which your business is growing.
&lt;br&gt;
The Growth Rate is unfortunately a metric that is simple to understand, yet fairly difficult to compute since a lot of different elements need to be accounted.
&lt;/p&gt;

&lt;p&gt;
Imagine a situation where the growth would be 10% monthly, composed by 40% new customers every months and 30% customers leaving or stopping to use the product.
&lt;br&gt;
In such a situation, even though the monthly growth seems interesting, the company is actually losing all its customers every 3 months!
&lt;br&gt;
Under such conditions, the survival of the company is almost impossible after the hype effect passes.
&lt;br&gt;
For this reason, the growth rate metrics needs to account the ability of the company to retain its customers, the churn rate, etc.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2432fd5a-c280-4361-8263-2a77d5171d43&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px; &quot; alt=&quot;Growth Rate example&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2432fd5a-c280-4361-8263-2a77d5171d43&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Sources : &lt;br&gt;
&lt;a href=&quot;https://tribecap.co/a-quantitative-approach-to-product-market-fit/&quot;&gt;https://tribecap.co/a-quantitative-approach-to-product-market-fit/&lt;/a&gt;
&lt;br&gt;
&lt;a href=&quot;https://www.lightercapital.com/blog/how-to-establish-product-market-fit/&quot;&gt;https://www.lightercapital.com/blog/how-to-establish-product-market-fit/&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;b&gt;Growth accounting framework&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
The &lt;i&gt;Growth Accounting Framework&lt;/i&gt; proposed on tribecap.co at &lt;a href=&quot;https://tribecap.co/a-quantitative-approach-to-product-market-fit/&quot;&gt;https://tribecap.co/a-quantitative-approach-to-product-market-fit/&lt;/a&gt; presents a fairly relevant approach to computing the Growth Rate.
&lt;/p&gt;

&lt;p&gt;
Shortly put, it consists of working with the &lt;b&gt;Compound Monthly Growth Rate&lt;/b&gt; over past X months as illustrated here:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/428e095f-9f33-42ba-8b35-181dd96ab687&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;Compund Monthly Growth Rate&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/428e095f-9f33-42ba-8b35-181dd96ab687&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source : &lt;a href=&quot;https://tribecap.co/a-quantitative-approach-to-product-market-fit/&quot;&gt;https://tribecap.co/a-quantitative-approach-to-product-market-fit/&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Product Market Fit is confirmed when these indicators - the cmgr3, cmgr6 and cmgr12 go up consistently.
&lt;br&gt;
If you intend to work to use the &lt;i&gt;Growth Rate&lt;/i&gt; as key metric, you definitely should read very carefully the article above.
&lt;/p&gt;


&lt;a name=&quot;sec55&quot;&gt;&lt;/a&gt;
&lt;h3&gt;5.5 Further readings: pirate metrics &lt;/h3&gt;

&lt;p&gt;
In this article, I have presented four example metrics, the ones that are used most of the time. But there are many more.
&lt;/p&gt;

&lt;p&gt;
The reader should get familiar with the &lt;b&gt;Pirate Metrics&lt;/B&gt; framework proposed by Dave McClure.
&lt;br&gt;
Pirate metrics is a helpful customer-lifecycle framework invented by Dave McClure from 500 startups that you can use to determine where you should focus on optimizing your marketing funnel, to make the most of your scarcest resource - your time.
&lt;br&gt;
Pirate metrics is essentially a way of categorizing different metrics and KPIs, and is made up of the metric “categories” Awareness, Acquisition, Activation, Revenue, Retention, Referral - or AAARRR for short (like a pirate. Pirate metrics, get it?).
&lt;/p&gt;

&lt;p&gt;
The reader might want to head on over to Slideshare to read the &lt;a href=&quot;https://www.slideshare.net/dmc500hats/startup-metrics-for-pirates-long-version&quot;&gt;original slide deck outlining Pirate Metrics&lt;/a&gt;.
&lt;/p&gt;
    
    
&lt;a name=&quot;sec6&quot;&gt;&lt;/a&gt;
&lt;h2&gt;6. Conclusion &lt;/h2&gt;    

&lt;p&gt;
&lt;b&gt;So there is a recipe for success. &lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
Entrepreneurship has a magic power, it triggers positive energies and it leaves people with an irresistible willingness to start doing things. 
&lt;br&gt;
However, all these positive energies can very easily become negative when they are not channeled in the correct direction. And by negative we mean: having quit a day job, having spent most of our savings, having re-mortgaged the house and ultimately having trouble explaining to our life partner, family and friends why we have done all of that and we still haven&apos;t been able to succeed. That&apos;s awful.
&lt;br&gt;
&lt;b&gt;Luckily there is a process that we can follow, developed after having worked with hundreds of entrepreneurs.&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Instead of starting to develop a product and hiring people immediately, these are the questions that we need to answer&lt;/b&gt; in order to build and launch a product that customers need and for which there is market demand:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which problem are we going to solve?&lt;/li&gt;
&lt;li&gt;Who has the problem in our market?&lt;/li&gt;
&lt;li&gt;Who are the early adopters?&lt;/li&gt;
&lt;li&gt;What is the value proposition able to satisfy their needs?&lt;/li&gt;
&lt;li&gt;How much are they willing to pay for it?&lt;/li&gt;
&lt;li&gt;What is the minimum set of features required for launch?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The way to answer most of these questions is to &lt;b&gt;engage with customers from the very early stage of a new business idea&lt;/b&gt;, get to know them profoundly, create a value proposition based on the insights captured that relies on the company&apos;s key strengths to create a competitive advantage customers care about, and test and iterate that proposition on the market until we reach &lt;b&gt;Product-Market Fit&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
Most of this can be done before investing any substantial resource into the business, and that&apos;s really the best thing about Lean Startup methodology. The most difficult thing is to resist from the instinct to jump into “build mode”. Instead, we invest some time to de-risk an idea before investing heavily in it. Everyone is in love with their idea, and the last thing we want to know is that it&apos;s not a good one. But the sooner we realize an idea is flawed - i.e. there is no market need for it - the better it is.
&lt;br&gt;
In terms of practical steps, this is a possible process to validate a new business idea and achieve product-market fit:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Compile a lean canvas to have clarity of a business idea (with Value Proposition Canvas)&lt;/li&gt;
&lt;li&gt;Identify the riskiest assumptions for the business idea. 
&lt;br&gt;
Hint: usually these are the ones around target segment, problems and market size.&lt;/li&gt;
&lt;li&gt;(Problem Interview) Conduct a round of qualitative interviews with target customers, to understand if they have the problem, how big it is, and what they currently do to solve it.&lt;/li&gt;
&lt;li&gt;Run a collaborative workshop with the entire team to refine the value proposition based on customer insights collected so far. This is how disruptive ideas are generated!&lt;/li&gt;
&lt;li&gt;Prepare a cheap and quick form of a prototype.&lt;/li&gt;
&lt;li&gt;(Solution Interview) Conduct another round of qualitative interviews with target customers, to understand if the solution prepared solves the problem and if they are willing to pay for it. At this stage it is mandatory to attempt to get a commitment from them.&lt;/li&gt;
&lt;li&gt;Iterate the solution, and conduct new interviews if they didn&apos;t commit already.&lt;/li&gt;
&lt;li&gt;(MVP) When we get enough commitment, we define a MVP (Minimum Viable Product) and start proper development (when an MVP is not possible - heavy industry, pharma, etc. - we conduct additional confirmation research and engage with more potential customers)&lt;/li&gt;
&lt;li&gt;Put MVP on the market, collect feedback on MVP and evolve / adapt / pivot as required until reaching Product-Market-Fit&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
&lt;b&gt;An on-going health check&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;n&gt;The Innovator&apos;s Dilemma?&lt;/b&gt;
&lt;br&gt;
A new solution achieves PMF, and manages to capture the lion&apos;s share of the market.
&lt;br&gt;
They become the dominant player, and stay that way, until new technology appears and supersedes their solution.
&lt;br&gt;
By failing to stay ahead of changing technology, the incumbent company loses market share to a smaller, disruptive business, who in turn, go on to dominate the market.
&lt;br&gt;
Rinse and repeat.
&lt;/p&gt;

&lt;p&gt;
In this narrative, the market for a product evolved over time, and the definition of Product/Market Fit changed with it. As a result of developing technology, a solution that fits the market in the here-and-now might not fit the same market in the future.
&lt;/p&gt;

&lt;p&gt;
PMF is like an ongoing health check for your business, allowing you to periodically test the key assumptions that underpin your business:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the problem we solve still exist?&lt;/li&gt;
&lt;li&gt;Is the problem important enough?&lt;/li&gt;
&lt;li&gt;Is the market for our product still a &apos;good&apos; market?&lt;/li&gt;
&lt;/ul&gt;

</description>          </item>
    <item>
    <guid isPermaLink="true">https://www.niceideas.ch/roller2/badtrash/entry/tdd-test-driven-development-is</guid>
    <title>TDD - Test Driven Development - is first and foremost a way to reduce the TCO of Software Development</title>
    <dc:creator>Jerome Kehrli</dc:creator>
    <link>https://www.niceideas.ch/roller2/badtrash/entry/tdd-test-driven-development-is</link>
        <pubDate>Sat, 18 Jan 2020 17:23:56 -0500</pubDate>
    <category>Agile</category>
    <category>agile</category>
    <category>agile-methods</category>
    <category>agility</category>
    <category>extreme-programming</category>
    <category>software-development</category>
    <category>software-engineering</category>
    <category>tco</category>
    <category>tdd</category>
    <category>xp</category>
    <atom:summary type="html">&lt;p&gt;
&lt;b&gt;Test Driven Development&lt;/b&gt; is a development practice from &lt;i&gt;e&lt;b&gt;X&lt;/b&gt;treme &lt;b&gt;P&lt;/b&gt;rogramming&lt;/i&gt; which combines &lt;i&gt;test-first development&lt;/i&gt; where you write a test before you write just enough production code to fulfill that test and &lt;i&gt;refactoring&lt;/i&gt;.  
&lt;br&gt;
TDD aims to improve the &lt;b&gt;productivity&lt;/b&gt; and &lt;b&gt;quality&lt;/b&gt; of software development. It consists in jointly building the software and its suite of non-regression tests. 
&lt;/p&gt;

&lt;p&gt;
The principle of TDD is as follows: 
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;write a failing test,&lt;/li&gt;
&lt;li&gt;write code for the test to work, &lt;/li&gt;
&lt;li&gt;refactor the written code, &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
and start all over again.
&lt;/p&gt;

&lt;p&gt;
Instead of writing functional code first and then the testing code afterwards (if one writes it at all), one instead &lt;b&gt;writes the test code before the functional code&lt;/b&gt;.
&lt;br&gt;
In addition, one does so in tiny small steps - write one single test and a small bit of corresponding functional code at a time. A programmer taking a TDD approach shall refuse to write a new function until there is first a test that fails - or even doesn&apos;t compile - because that function isn&apos;t present. In fact, one shall refuse to add even a single line of code until a test exists for it. Once the test is in place one then does the work required to ensure that the test suite now passes (the new code may break several existing tests as well as the new one).  
&lt;br&gt;
This sounds simple in principle, but when one is first learning to take a TDD approach, it does definitely require great discipline because it&apos;s easy to &quot;&lt;i&gt;slip&lt;/i&gt;&quot; and write functional code without first writing or extending a new test. 
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d99df247-37ed-471e-83b4-70df826121b7&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;TDD Principle&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d99df247-37ed-471e-83b4-70df826121b7&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
In theory, the method requires the involvement of two different developers, one writing the tests, then other one writing the code. This avoids subjectivity issues. Kent Beck has more than a lot of examples of why and how TDD and &lt;i&gt;pair programming&lt;/i&gt; fit eXtremely well together.
&lt;br&gt;
Now in practice, most of the time one single developer tends to write tests and the corresponding code all alone by himself which enforces the integrity of a new functionalities in a largely collaborative project.
&lt;/p&gt;

&lt;p&gt;
There are multiple perspective in considering what is actually TDD. 
&lt;br&gt;
For some it&apos;s about specification and not validation. In other words, it&apos;s one way to think through the requirements or design before one writes the functional code (implying that TDD is both an important agile requirements and an agile design technique). These considers that TDD is first and foremost a design technique.
&lt;br&gt;
Another view is that TDD is a programming technique streamlining the development process.
&lt;br&gt;
TDD is sometimes perceived as a way to improve quality of software deliverables, sometimes as a way to achieve better design and sometimes many other things.


&lt;p&gt;
I myself believe that TDD is &lt;b&gt;all of this&lt;/b&gt; but most importantly a way to significantly &lt;b&gt;reduce the &quot;Total Cost of Ownership (TCO)&quot; of software development projects&lt;/b&gt;, especially when long-term maintenance and evolution is to be considered.
&lt;br&gt;
The &lt;i&gt;Total Cost of Ownership (TCO)&lt;/i&gt; of enterprise software is the sum of all direct and indirect costs incurred by that software, where the development, for in-house developped software, is obviously the biggest contributor. Understanding and forecasting the TCO and is a critical part of the &lt;i&gt;Return on Investment (ROI)&lt;/i&gt; calculation. 
&lt;/p&gt;

&lt;p&gt;
This article is an in depth presentation of my views on TDD and an attempt to illustrate my perspective on why TDD is first and foremost a way to get control back on large Software Development Projects and &lt;b&gt;significantly reduce their TCO&lt;/b&gt;.
&lt;/p&gt;
</atom:summary>        <description>&lt;p&gt;
&lt;b&gt;Test Driven Development&lt;/b&gt; is a development practice from &lt;i&gt;e&lt;b&gt;X&lt;/b&gt;treme &lt;b&gt;P&lt;/b&gt;rogramming&lt;/i&gt; which combines &lt;i&gt;test-first development&lt;/i&gt; where you write a test before you write just enough production code to fulfill that test and &lt;i&gt;refactoring&lt;/i&gt;.  
&lt;br&gt;
TDD aims to improve the &lt;b&gt;productivity&lt;/b&gt; and &lt;b&gt;quality&lt;/b&gt; of software development. It consists in jointly building the software and its suite of non-regression tests. 
&lt;/p&gt;

&lt;p&gt;
The principle of TDD is as follows: 
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;write a failing test,&lt;/li&gt;
&lt;li&gt;write code for the test to work, &lt;/li&gt;
&lt;li&gt;refactor the written code, &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
and start all over again.
&lt;/p&gt;

&lt;p&gt;
Instead of writing functional code first and then the testing code afterwards (if one writes it at all), one instead &lt;b&gt;writes the test code before the functional code&lt;/b&gt;.
&lt;br&gt;
In addition, one does so in tiny small steps - write one single test and a small bit of corresponding functional code at a time. A programmer taking a TDD approach shall refuse to write a new function until there is first a test that fails - or even doesn&apos;t compile - because that function isn&apos;t present. In fact, one shall refuse to add even a single line of code until a test exists for it. Once the test is in place one then does the work required to ensure that the test suite now passes (the new code may break several existing tests as well as the new one).  
&lt;br&gt;
This sounds simple in principle, but when one is first learning to take a TDD approach, it does definitely require great discipline because it&apos;s easy to &quot;&lt;i&gt;slip&lt;/i&gt;&quot; and write functional code without first writing or extending a new test. 
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d99df247-37ed-471e-83b4-70df826121b7&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;TDD Principle&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d99df247-37ed-471e-83b4-70df826121b7&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
In theory, the method requires the involvement of two different developers, one writing the tests, then other one writing the code. This avoids subjectivity issues. Kent Beck has more than a lot of examples of why and how TDD and &lt;i&gt;pair programming&lt;/i&gt; fit eXtremely well together.
&lt;br&gt;
Now in practice, most of the time one single developer tends to write tests and the corresponding code all alone by himself which enforces the integrity of a new functionalities in a largely collaborative project.
&lt;/p&gt;

&lt;p&gt;
There are multiple perspective in considering what is actually TDD. 
&lt;br&gt;
For some it&apos;s about specification and not validation. In other words, it&apos;s one way to think through the requirements or design before one writes the functional code (implying that TDD is both an important agile requirements and an agile design technique). These considers that TDD is first and foremost a design technique.
&lt;br&gt;
Another view is that TDD is a programming technique streamlining the development process.
&lt;br&gt;
TDD is sometimes perceived as a way to improve quality of software deliverables, sometimes as a way to achieve better design and sometimes many other things.


&lt;p&gt;
I myself believe that TDD is &lt;b&gt;all of this&lt;/b&gt; but most importantly a way to significantly &lt;b&gt;reduce the &quot;Total Cost of Ownership (TCO)&quot; of software development projects&lt;/b&gt;, especially when long-term maintenance and evolution is to be considered.
&lt;br&gt;
The &lt;i&gt;Total Cost of Ownership (TCO)&lt;/i&gt; of enterprise software is the sum of all direct and indirect costs incurred by that software, where the development, for in-house developped software, is obviously the biggest contributor. Understanding and forecasting the TCO and is a critical part of the &lt;i&gt;Return on Investment (ROI)&lt;/i&gt; calculation. 
&lt;/p&gt;

&lt;p&gt;
This article is an in depth presentation of my views on TDD and an attempt to illustrate my perspective on why TDD is first and foremost a way to get control back on large Software Development Projects and &lt;b&gt;significantly reduce their TCO&lt;/b&gt;.
&lt;/p&gt;



&lt;p&gt;
&lt;b&gt;Summary&lt;/b&gt;
&lt;/p&gt;


&lt;ul&gt;

&lt;li&gt;&lt;a href=&quot;#sec1&quot;&gt;1. So what is TDD exactly ?&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec11&quot;&gt;1.1 Principle of TDD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec12&quot;&gt;1.2 Advantages of TDD over tests after or even no tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec13&quot;&gt;1.3 Different types of tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec14&quot;&gt;1.4 Styles of TDD&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec141&quot;&gt;1.4.1 Inside-Out TDD (Bottom Up / Detroit School / Classic Approach)&lt;/a&gt;&lt;/li&gt;  
&lt;li&gt;&lt;a href=&quot;#sec142&quot;&gt;1.4.2 Outside-In TDD (Top Down / London School / Mockist Approach)&lt;/a&gt;&lt;/li&gt;  
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec2&quot;&gt;2. Improving Design&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec21&quot;&gt;2.1 Design by testing and initial design&lt;/a&gt;&lt;/li&gt;  
&lt;li&gt;&lt;a href=&quot;#sec22&quot;&gt;2.2 Emergent Design&lt;/a&gt;&lt;/li&gt;  
&lt;li&gt;&lt;a href=&quot;#sec23&quot;&gt;2.3 Design principles to identify refactoring opportunities&lt;/a&gt;&lt;/li&gt;  
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec3&quot;&gt;3. Reducing TCO &lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec31&quot;&gt;3.1 Implementing Automated tests&lt;/a&gt;&lt;/li&gt;  
&lt;li&gt;&lt;a href=&quot;#sec32&quot;&gt;3.2 Embracing TDD&lt;/a&gt;&lt;/li&gt;  
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec4&quot;&gt;4. An example to illustrate the TCO reduction&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec41&quot;&gt;4.1 Illustration Example&lt;/a&gt;&lt;/li&gt;  
&lt;li&gt;&lt;a href=&quot;#sec42&quot;&gt;4.2 No automated tests whatsoever (A)&lt;/a&gt;&lt;/li&gt;  
&lt;li&gt;&lt;a href=&quot;#sec44&quot;&gt;4.4 Strict TDD following Bottom-Up approach (C)&lt;/a&gt;&lt;/li&gt; 
&lt;li&gt;&lt;a href=&quot;#sec45&quot;&gt;4.5 How do these methods compare with each others in regards to TCO?&lt;/a&gt;&lt;/li&gt;  
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec5&quot;&gt;5. Conclusion / Take Aways&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;


&lt;a name=&quot;sec1&quot;&gt;&lt;/a&gt;
&lt;h2&gt;1. So what is TDD exactly ?&lt;/h2&gt;


&lt;a name=&quot;sec11&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.1 Principle of TDD&lt;/h3&gt;

&lt;p&gt;
The principle of TDD is simple: when one wants to develop a new feature, one starts by writing the test that assesses how it shall work. In the next step, the functional code is developed so that the test is validated. And nothing more!
&lt;br&gt;
Focusing on functionalities avoids writing code without meeting a requirement satisfied by a validated test.
&lt;/p&gt;

&lt;p&gt;
The principle then consists in working in small iterative cycles consisting of:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;writing the minimum possible code to pass the test;&lt;/li&gt;
&lt;li&gt;enriching the test base with a new test;&lt;/li&gt;
&lt;li&gt;rewriting the minimum code to pass the test;&lt;/li&gt;
&lt;li&gt;and so on...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
This practice mostly comes from Kent Beck, one of the signatories of the Agile Manifesto. It encourages a simple, clean and sound design of software products and makes the developer more confident in the ability of his code to do what he wants correctly, without hiding a few bugs.
&lt;/p&gt;

&lt;p&gt;
Let&apos;s take a closer look at the different stages of the TDD cycle.
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;b&gt;Write a test.&lt;/b&gt; The first thing to do when one wants to implement a new feature is to write a test. It involves understanding the functionality that one has to develop beforehand, which is a very good thing.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Execute the test(s).&lt;/b&gt; Then one has to run the test that he just wrote. In practice, the new test is executed, along with all those already existing. This implies that they must be very quick to execute, otherwise too much time is wasted waiting for feedback. Some IDEs even push it to the extent of running the tests continuously during the development, in order to have an even faster response.
&lt;br&gt;
The test must fail, since no code has been written to make it pass. In general, it doesn&apos;t event compile, because the method / class doesn&apos;t even exist.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Write the code.&lt;/b&gt; Then, one writes the strictly minimum functional code required to make the test pass and nothing more. If the written code is not perfect yet, or makes the test inelegantly, it doesn&apos;t really matter for now. 
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Execute the test(s) again.&lt;/b&gt; The developer then re-runs all the tests ane makes sure that they run successfuly and that everything is working fine.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Refactoring.&lt;/b&gt; In this phase, one shall improve the code he has written. This helps to see if it may be simplified, written better, made generic, factorized, etc. One shall get rid of duplications, rename variables if some are not utmost meaningful, as well as methods, classes, etc., so that the code is clean, simple and clearly expresses its intentions. One shall separate responsibilities, maybe extract some design patterns, etc.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/16bf09a8-bc9a-4b8a-8071-471f4df6875d&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px; &quot; alt=&quot;TDD Principle details&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/16bf09a8-bc9a-4b8a-8071-471f4df6875d&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

Following this virtuous development approaches enforces &lt;i&gt;single responsibilities&lt;/i&gt;, &lt;i&gt;separation of concerns&lt;/i&gt;, important &lt;i&gt;code coverage&lt;/i&gt;, etc. and comes with multiple benefits described in &lt;a href=&quot;#sec12&quot;&gt;the next section&lt;/a&gt;.

&lt;p&gt;
&lt;b&gt;What to do when a bug manages to make it through to production?&lt;/b&gt;
&lt;p&gt;

&lt;p&gt;
When TDD is properly applied, it makes it simply impossible for the vaste majority of bugs to make it through to production.
&lt;br&gt;
However, some very tricky corner case situations may be difficult to assess with automated tests and as a consequence, even when TDD is applied by the book, it may happen that a bug passes through the cracks and is discovered late in production, sometimes after months, when the specific situation triggering the bug occurs.
&lt;/p&gt;

&lt;p&gt;
This is an interesting situation and is worth discussing: what shall happen with TDD whenever a bug still manages to make it through to production?
&lt;br&gt;
Long story short: whenever a bug is spot in production, the resolution of the bug shall follow TDD as well:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
First, implement a new unit test or integration test that reproduces the bug. The test shall fail at first, since the bug exists.
&lt;/li&gt;
&lt;li&gt;
Then do whatever it takes to have the test passing.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
This method shall simply &lt;b&gt;always&lt;/b&gt; be respected whenever a bug that passes through the cracks is encountered. Eventually, these bug resolution tests will form the most important assets in the non-regression tests suite.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;A note about 100% functional code coverage&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
When following the TDD methodology, one shall target 100% coverage of the &lt;b&gt;functional code&lt;/b&gt; with automated tests, both in terms of &lt;i&gt;Lines of Code&lt;/i&gt; and &lt;i&gt;Conditions Branches&lt;/i&gt;.
&lt;br&gt;
This does not mean that sonar with its default configuration - or other code coverage measuring tools - shall necessarily report 100% coverage.
&lt;br&gt;
In practice, some boilertplate code doesn&apos;t neet to be tested. It&apos;s note considered as &lt;i&gt;functional code&lt;/i&gt;.
&lt;br&gt;
For instance in Java, some exception catch blocks - that may be mandatory for the code to compile but that simply can&apos;t happen in practice because of the impossibility of the functional code to enter the specific branch triggering the exception - shall not be tested. Testing those would be a waste of time.
&lt;br&gt;
On the other hand, if the exception catch block corresponds to a specific exceptional business situation that can happen in practice, it has to have a proper unit test assessing it and it shall be covered.
&lt;/p&gt;

&lt;p&gt;
Most of the time, the code coverage computation tool or the quality assessment tool - such as sonar - shall be properly configured to exclude from the coverage computation the blocks of code that would be a waste of time to test.
&lt;br&gt;
In practice that is rarely the case and the reported coverage never reaches 100%. This is not a problem as long as the &lt;i&gt;functional code&lt;/i&gt; coverage reaches nearly 100%.
&lt;/p&gt;

&lt;p&gt;
For this reason, there is an important distinction between the &lt;i&gt;functional code&lt;/i&gt; and the &lt;i&gt;whole code&lt;/i&gt;.
&lt;br&gt;
The essential point is that the functional code - the business meaningful conditions - are covered 100%. The technical boilerplate code doesn&apos;t need to be covered 100%.
&lt;/p&gt;


&lt;a name=&quot;sec12&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.2 Advantages of TDD over tests after or even no tests&lt;/h3&gt;

&lt;p&gt;
Implementing automated tests - mostly unit tests and some integration tests - is a formidable development tool.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Even without TDD, automated tests provide significant benefits:&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
In software development, the written functional code has to be tested continuously as it is written. Without automated tests, one needs to test the code on a live running application to assess its behaviour. In addition, when some misbehaviour is happening, one is left with the debugger to figure what is going wrong. There is no less efficient mean to figure what some code is doing than using a debugger (even though sometimes it&apos;s the only way). Implementing unit tests assessing some conditions capturing what the code under testing is doing is a much simpler way. Automated tests enable to understand the code behaviour in a simple and unitary way. Again, going through the debugger once is a while to understand why an assessment fails is still required, but to a much lesser extent.
&lt;/li&gt;
&lt;li&gt;
Automated tests form a formidable non-regression tests suite. Instead of testing the live running application over and over again to search for regressions, on simply re-runs the whole automated test suite and, if it succeeds, one can be confident that no regression have been introduced by some maintenance or evolution.
&lt;br&gt;
This non-regression benefit also helps during the development process. Running the existing tests indicates whether the last change breaks something in the existing code base.
&lt;/li&gt;
&lt;li&gt;
Bugs passing through the cracks and making it to production are significantly reduced. Unit testing and integration testing provides a much larger coverage of code both in terms of lines of codes and condition branches over manual testing. On large software products, there is simply no way manual testing can compete with automated tests, regardless of the size, the complexity and the maturity of the test plan.
&lt;/li&gt;
&lt;li&gt;
Developers are getting more productive since they get confident in changing and evolving the code. When programming, the bigger the codebase gets, the harder it gets to move further or to change the code because it&apos;s easier to mess up. When one has automated tests, they become the safety net, allowing one to see what the mistake are, where they are, and how they affects the system. It helps identify errors in a really short period of time. These tests give developers very fast feedback when something breaks.
&lt;/li&gt;
&lt;li&gt;
Automated tests, mostly unit tests, form a very good form of detailed specification and documentation. This not only streamlines the development process but helps re-understanding the code quickly when it has to be maintained, sometimes several months or even years after its initial development.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;TDD, or &lt;i&gt;driving the software development with the tests&lt;/i&gt;, brings additional benefits over &lt;i&gt;writing the tests after&lt;/i&gt;:&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
TDD is about getting feedback. Some define TDD as being a mental model (discipline) which relies on a very short feedback loop at the code level. Getting short and frequent feedback about what the code is doing streamlines the whole development process. Quick and small feedback is much easier to understand than late and large feedback. TDD gives the ability to think more about simplicity, focusing on writing only the code strictly necessary to pass an assumption. In that sense, with TDD one challenges the wrong assumptions as early as possible and one identifies errors and problems very quickly.
&lt;/li&gt;
&lt;li&gt;
The number of bugs passing through the cracks are reduced even further with TDD. 
&lt;br&gt;
TDD enables to reach an almost exhaustive coverage of the code both in terms of &lt;i&gt;Lines of Code&lt;/i&gt; and &lt;i&gt;Condition branches&lt;/i&gt;. 
&lt;/li&gt;
&lt;li&gt;
The increase in code coverage by tests also makes it much more straightforward to proceed with large refactorings. And without refactoring ability, one&apos;s screwed to ensure best possible design since, unless one is a genius, achieving the best possible design relies mostly on his ability to refactor (improve the design)
&lt;/li&gt;
&lt;li&gt;
TDD is ultimately about design. One is forced to write small class focused about one concern and small methods dedicated to one responsibility. TDD enforces SOLID design rules (see below). TDD enforces clean, simple and sound design since it simply makes it difficult not to say impossible to write convoluted code with TDD. One of the principal reasons behind this is that writing the tests first requires one to really consider what do he wants from the code a the very beginning.
&lt;/li&gt;
&lt;li&gt;
All of this leads to significant reduction of the TCO (Total Cost of Ownership) of Software Development
&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec13&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.3 Different types of tests&lt;/h3&gt;

&lt;p&gt;
There is a distinction between automated tests and unit tests. Not all automated tests are necessarily unit tests and while TDD is mostly about unit testing, other types of tests also make a lot of sense and bring value when embracing TDD.
&lt;/p&gt;

&lt;p&gt;
There are basically three types of automated tests:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;b&gt;Unit tests&lt;/b&gt;: are meant to test individual modules of an application in isolation (without any interaction with dependencies) to confirm that an individual piece of code - typically a method - is doing things right.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Integration tests&lt;/b&gt;: are meant to check if different modules are working fine when combined together as a group and that their interactions is producing the expected results.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Functional tests&lt;/b&gt;: are meant to test a slice of functionality in the system (may interact with dependencies) to confirm that the code is doing the right things.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Functional tests are comparable to integration tests in some way, with the difference that they are intended to ensure the sound behaviour of the entire application&apos;s functionality with all the code running together and deployed in a realistic way, nearly somehow a &lt;i&gt;super integration test&lt;/i&gt;. 
&lt;br&gt;
Unit tests considers checking a single component of the system whereas functional tests are intended to assess the conformity of a whole feature with its specifications (such as the user story and its acceptance criterias).
&lt;br&gt;
Functional tests are intended as a safety net and form a good way to automate acceptance tests. Working with the Product Owner, the Product Managers or Business Experts, developers can formalize acceptance criterias and automate acceptance tests in the form of functional tests. This is actually the best possible way to implicate business experts in assessing the product quality.
&lt;/p&gt;

&lt;p&gt;
Unit tests alone are not sufficient since it&apos;s nearly impossible to achieve near to 100% coverage of the functional code with unit tests. For instance, assessing behaviour related to interactions between modules is by design impossible with unit tests.
&lt;br&gt;
This is where integration tests kick in. Integrations tests are meant to cover and assess behaviour that unit tests are not targeting by assessing the well behaviour of the different units when working with each others.
&lt;/p&gt;

&lt;p&gt;
These different kind of tests don&apos;t have the same level of complexity and the same target in terms of coverage. Yet they have a large overlap of scope which can be represented as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9cab545d-60f0-48f9-a4ae-e4aa3a904c78&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;Different types of tests&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9cab545d-60f0-48f9-a4ae-e4aa3a904c78&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
All these tests shall be operated in a consistent way, using maven for instance if maven is the chosen tool to build and package the software. 
&lt;br&gt;
In terms of technology though, while unit tests and integration tests usually share a common base, this is not necessarily the case for automated tests which often rely on a completely different technical stack.
&lt;/p&gt;

&lt;p&gt;
The technologies quite widely used for these different kinds of tests can be reprsented as follows :
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/817ef8b6-ba7c-400f-bb10-1d4e056abcc0&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;Different technologies for tests&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/817ef8b6-ba7c-400f-bb10-1d4e056abcc0&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Again, while TDD is mostly about unit testing, and depending on the approach as well as the stage of the development, some other types of tests are fully part of the TDD scope. 
&lt;br&gt;
Eventually, &lt;b&gt;all these tests together form the &lt;i&gt;non-regression test suite&lt;/i&gt;.&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
For instance while unit tests are intended to tests a method (or other forms of units) specifically (perhaps under multiple conditions), integration tests are intended to  while functional tests are expected to tests end to end features and mimim user behaviour on the software.
&lt;/p&gt;


&lt;a name=&quot;sec14&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.4 Styles of TDD&lt;/h3&gt;   

&lt;p&gt;
There are actually two quite opposed approaches when applying TDD on a large software development project, the Inside-Out approach and the Outside-In approach:
&lt;/p&gt;

&lt;a name=&quot;sec141&quot;&gt;&lt;/a&gt;
&lt;h4&gt;1.4.1 Inside-Out TDD (Bottom Up / Detroit School / Classic Approach)&lt;/h4&gt;   

&lt;p&gt;
The first approach is &lt;b&gt;Inside-Out&lt;/b&gt; TDD, which is sometimes called the &quot;&lt;i&gt;Detroit School&lt;/i&gt;&quot; of TDD, or &lt;i&gt;bottom-up&lt;/i&gt;, or even &lt;i&gt;classical&lt;/i&gt; approach. With Inside-Out TDD, one starts by writing tests and implementation for small aspects of the system. The aim is to grow the design through a process of refactoring and generalizing the codebase as tests become increasingly specific.
&lt;/p&gt;

&lt;p&gt;
Although all developers should be mindful of the bigger picture, Inside-Out TDD enables developers to focus on one thing at a time. Every component (i.e. an individual module or single class) is created one after the other and pile up until the whole application is built up. 
&lt;br&gt;
One one hand, individual components written this way could be deemed somewhat worthless until they are connected together by higher level components and working together. Also wiring the system together at a late stage may constitute a higher risk in terms of overall design consistency. On the other hand, focusing on one component at a time helps parallelize development work efficiently within a team and refactoring is here to ensure the overall design when the components starts to pile up.
&lt;/p&gt;

&lt;p&gt;
The main characteristics of the Inside-Out approach are as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Emergent Design happens during the refactoring phase.&lt;/li&gt;
&lt;li&gt;Very often tests are state-based tests.&lt;/li&gt;
&lt;li&gt;During the refactoring phase, the unit under test may grow to multiple classes.&lt;/li&gt;
&lt;li&gt;Mocks are rarely used, unless when isolating external systems.&lt;/li&gt;
&lt;li&gt;No or little up-front design considerations are made except for breaking it in small features. Overall design emerges from code and is improved with refactoring..&lt;/li&gt;
&lt;li&gt;Inside-Out TDD is often used in conjunction with the 4 Rules of Simple Design.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Its advantages are often considered as being the following:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It&apos;s a great way to avoid over-engineering.&lt;/li&gt;
&lt;li&gt;Easier to understand and adopt due to state-based tests and little design up-front.&lt;/li&gt;
&lt;li&gt;Good for exploration, when one knows what the input and desired output are but one doesn&apos;t really know how the implementation looks like at the early stage.&lt;/li&gt;
&lt;li&gt;Great for cases where one can&apos;t rely on a domain expert or domain language (data transformation, algorithms, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Of course, it suffers from some commonly accepted drawbacks:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exposing state for tests purpose only.&lt;/li&gt;
&lt;li&gt;Refactoring phases are normally bigger and more complexe when compared to Outside-In approach (more on that below).&lt;/li&gt;
&lt;li&gt;Unit under test becomes bigger than a class when classes emerge during the refactoring phase. This is fine when we look at that test in isolation but as classes emerge, they evolved and are extended significantly as they are being reused by other parts of the application. As these other classes evolve, they often break completely unrelated tests, since the tests use their real implementation instead of &lt;i&gt;mocks&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;The refactoring step (improvement of the design) is often skipped or not done properly by inexperienced practitioners, leading to a cycle that looks more like RED-GREEN-RED-GREEN-...-RED-GREEN-MASSIVE AND YET NOT EFFICIENT REFACTORING.&lt;/li&gt;
&lt;li&gt;Due to its exploratory nature, some classes under test are created according to the &quot;&lt;i&gt;I think I&apos;ll need this class with this interface (public methods)&lt;/i&gt;&quot;, making them not fit well when connected to the rest of the system and requiring further more complex refactorings.&lt;/li&gt;
&lt;li&gt;Can be slow and wasteful since quite often one already knows that one cannot have so many responsibilities in the class under test. The classicist advice is to wait for the refactoring phase to fix the design, only relying on concrete evidence to extract other classes. Although this is good for novices, this is often somewhat a waste of time for more experienced developers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
An illustration of the inside-out method could be as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9fce8a45-9fc7-477a-b728-cd21dd0cc474&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px; &quot; alt=&quot;TDD Inside-Out process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9fce8a45-9fc7-477a-b728-cd21dd0cc474&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec142&quot;&gt;&lt;/a&gt;
&lt;h4&gt;1.4.2 Outside-In TDD (Top Down / London School / Mockist Approach)&lt;/h4&gt;   

&lt;p&gt;
Second approach is &lt;b&gt;Outside-In&lt;/b&gt; TDD, which is sometimes called &quot;&lt;i&gt;London School&lt;/i&gt;&quot; of TDD, or &lt;i&gt;Top-Down&lt;/i&gt; or even &lt;i&gt;Mockist Approach&lt;/i&gt;. Using this approach, development begins at the very top of the system&apos;s architecture and is grown downwards. The aim is to progressively implement increasing functionality of lower levels, one layer of the system at a time. 
&lt;br&gt;
As a result, a reliance on mocks is required to simulate the functionality of lower level components.
&lt;/p&gt;

&lt;p&gt;
Outside-In TDD lends itself well to having a definable route through the system from the very start, even if some (most if not all at first) parts are initially mocked.
&lt;br&gt;
The tests are based upon user-requested scenarios (or user stories with proper acceptance criteria well defined), and components are wired together from the beginning. This allows a fluent API to emerge and integration is performed from the very start of development.
&lt;/p&gt;

&lt;p&gt;
By focusing on a complete flow through the system from the start, knowledge of how different parts of the system interact with each other is required from the very beginning. A little time to come up with a proper architecture of the system and even a rough design of every layer and functional blocks is required.
&lt;br&gt;
As required components emerge, they are &lt;i&gt;mocked&lt;/i&gt; or &lt;i&gt;stubbed&lt;/i&gt; out, which allows their detail to be deferred until later, when their time comes. This approach means that the developer needs to know how to test interactions up front, either through a mocking framework or by writing their own test doubles. The developer will then loop back, providing the real implementation of the mocked or stubbed components through new unit tests as the development moves forward.
&lt;/p&gt;

&lt;p&gt;
The main characteristics of the Outside-In approach are as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different from the classicist, Outside-In TDD prescribes a direction in which we start test-driving our code: from outside (first class to receive an external request) to the inside (classes that will contain single pieces of behaviour that satisfy the feature being implemented).&lt;/li&gt;
&lt;li&gt;One normally starts with an acceptance test which verifies if the feature as a whole works. The acceptance test also serves as a guide for the implementation as it progresses to lower layers.&lt;/li&gt;
&lt;li&gt;With a failing acceptance test informing why the feature is not yet complete (no data returned, no message sent to a queue, no data stored in a database, etc.), one starts writing unit tests. The first class to be tested is the class handling an external request (a controller, queue listener, event handler, the entry point for a component, etc.)&lt;/li&gt;
&lt;li&gt;As one already knows that the entire application won&apos;t be built in a single class, one makes some assumptions of which type of collaborators the class under test will need. One then writes tests that verify the collaboration between the class under test and its collaborators.&lt;/li&gt;
&lt;li&gt;Collaborators are identified according to all the things the class under test needs to do when its public method is invoked. Collaborators names and methods should come from the domain language (nouns and verbs).&lt;/li&gt;
&lt;li&gt;Once a class is tested, one picks the first collaborator (which was created with no implementation) and test-drive its behaviour, following the same approach one used for the previous class. This is why Outside-In is called this way: one starts from classes that are closer to the input of the system (outside) and move towards the inside of the application as more collaborators are identified.&lt;/li&gt;
&lt;li&gt;Design starts in the red phase, while writing the tests.&lt;/li&gt;
&lt;li&gt;Tests are rather about collaboration and behaviour, and only little about state.&lt;/li&gt;
&lt;li&gt;Design is refined during the refactoring phase.&lt;/li&gt;
&lt;li&gt;Each collaborator and its public methods are always created to serve an existing client class, making the code read very well.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
It&apos;s advantages are often considered as being the following:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Since most classes are designed to serve the client calling code, the design is &lt;i&gt;client-centric&lt;/i&gt;. This is not only better conceptually but also helps enforcing the domain language when naming methods.&lt;/li&gt;
&lt;li&gt;Refactoring phases are much smaller, when compared to the classicist approach.&lt;/li&gt;
&lt;li&gt;Promotes a better encapsulation since usually less state is exposed for test purposes only.&lt;/li&gt;
&lt;li&gt;More aligned to the original ideas of &lt;i&gt;Object Oriented Programming&lt;/i&gt;: tests are about objects sending messages to other objects instead of checking their state.&lt;/li&gt;
&lt;li&gt;More suitable for business applications, where names and verbs can be extracted from user stories and acceptance criteria (domain model, domain language).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Of course, it also suffers from some commonly accepted drawbacks:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The architecture needs to be defined up-front and a significant design work needs to be done as well before starting to work on the first feature.&lt;/li&gt;
&lt;li&gt;Much harder for novices to adopt since a higher level of design skill is necessary.&lt;/li&gt;
&lt;li&gt;Developers don&apos;t get feedback from code in order to create collaborators. They need to visualize collaborators while writing the test.&lt;/li&gt;
&lt;li&gt;May lead to over-engineering due to premature type (collaborators) creation.&lt;/li&gt;
&lt;li&gt;Less suitable for exploratory work or behaviour that is not specified in a user story (data transformation, algorithms, etc).&lt;/li&gt;
&lt;li&gt;Bad design skills may lead to an explosion of mocks.&lt;/li&gt;
&lt;li&gt;Behavioural tests are harder to write than state tests.&lt;/li&gt;
&lt;li&gt;Knowledge of &lt;i&gt;Domain Driven Design&lt;/i&gt; and other design techniques, including 4 Rules of Simple Design (SOLID, see below), are required while writing tests.&lt;/li&gt;
&lt;li&gt;Doesn&apos;t enforce simple and clean design as much as the classical approach (the emergent design is weaken)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
An illustration of the Outside-In method could be as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/fd80cb2a-d018-4688-8db8-d3d6b2b75e0c&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px; &quot; alt=&quot;TDD Outside-In process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/fd80cb2a-d018-4688-8db8-d3d6b2b75e0c&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
At the end of the day, every development team shall ask itself what it is more comfortable with, what makes more sense considering the product management and development organization around it, the maturity of the software architects and their ability to come up with a design first or a good breaking down in functionality.
&lt;br&gt;
One method is not better than the other one even though, again, Inside-Out fits better exploratory work and technical software while Outside-In works better for Business Applications and large software development projects.
&lt;br&gt;
But at the end of the day it&apos;s more related to the culture of the software develpment team and different cultures might prefer one or the other.
&lt;/p&gt;


&lt;a name=&quot;sec2&quot;&gt;&lt;/a&gt;
&lt;h2&gt;2. Improving Design&lt;/h2&gt;


&lt;a name=&quot;sec21&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.1 Design by testing and initial design&lt;/h3&gt;  

&lt;p&gt;
TDD is eventually a tool to help us design faster, first because of the necessity to write testable code, and second by easing refactoring.
&lt;br&gt;
The fact that one needs to write code that fullfills a unit test, magically forces to write code with simple, clear and sound design.
&lt;br&gt;
There really is some kind of magic in this which is interesting to explain a little.
&lt;/p&gt;

&lt;p&gt;
Whenever one starts by writing some code and perhaps only then write a few unit tests (most of the time only for the methods that are easy to test this way), the testability of the code is not a key concern and it&apos;s likely that significant portions of it won&apos;t be testable using unit tests. 
&lt;br&gt;
For the sake of solely testing and test coverage, integration tests can help a little of course, but as far as design is concerned, they don&apos;t.
&lt;/p&gt;

&lt;p&gt;
Even when one tries to write code with testability in mind, ending up with code that is really only a well-thought collection of single-responsibility classes and methods each doing one and only one clearly identified functional action is really hard, not to say impossible.
&lt;/p&gt;

&lt;p&gt;
With TDD, one writes the unit test first. 
&lt;br&gt;
Writing a unit test that tests and assesses a single and unique clearly identified behaviour (or responsibility) is natural to everyone, even junior developers. When code is implemented by strictly following a logic of &quot;&lt;i&gt;making this unit test pass&lt;/i&gt;&quot;, it naturally and logically ends up in being a collection of &lt;i&gt;single concern&lt;/i&gt; methods and class.
&lt;br&gt;
This really happens magically because it simply becomes natural to write the code this way. Implementing a unit test that would require a very convoluted code to make it pass is nearly impossible. 
&lt;/p&gt;

&lt;p&gt;
This is the magic part in TDD.
&lt;br&gt;
Interestingly, following TDD, even very junior developers end up with an initial design that is way simpler, cleaner and sound than what experienced developers could do without TDD.
&lt;/p&gt;

&lt;p&gt;
Specifically, TDD is especially good at ensuring &lt;i&gt;Low Coupling&lt;/i&gt; between different modules, different classes, etc. by forcing to think and design interactions and dependencies very carefully. 
&lt;/p&gt;

&lt;p&gt;
But that is not all in TDD that related to design, the next section is even more important.
&lt;/p&gt;

&lt;a name=&quot;sec22&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.2 Emergent Design&lt;/h3&gt;  

&lt;p&gt;
The next level of clarity and simplicity is then achieved with &lt;i&gt;refactoring&lt;/i&gt;, which TDD makes easy and natural, thanks to the way it promotes nearly 100% functional code coverage both in terms of lines of code and condition branches.
&lt;br&gt;
TDD is a design help tool. The quality of the design one gets out of TDD depends largely on the capacity of the developer to use refactoring to &lt;i&gt;Design Patterns&lt;/i&gt;, or refactoring to &lt;i&gt;SOLID principles&lt;/i&gt;.
&lt;br&gt;
We say that the developer makes the design &lt;i&gt;emerge&lt;/i&gt; using &lt;i&gt;continuous refactoring&lt;/i&gt;. Applying TDD without doing constant refactoring is missing half of the job and will often lead to systems not being designed as good as they could / should be.
&lt;/p&gt;

&lt;p&gt;
TDD is always associated with this important notion of &quot;&lt;b&gt;emergent design&lt;/b&gt;&quot;. In agile, one often builds the software incrementaly, feature by feature. So one can&apos;t know right from the start what &lt;i&gt;fine design&lt;/i&gt; will be required, it will evolve / emerge as the development moves forward. So any time one adds a new piece of functionality, one does some refactoring to improve the design of the application. It&apos;s continuous / incremental design. That&apos;s why TDD is key in agile development processes.
&lt;/p&gt;

&lt;p&gt;
Doing a lot of design upfront (BDUF = Big Design Up Front) is not incompatible with TDD though, on the contrary. There is nothing wrong with starting a piece of sofware while having the design already in mind. TDD will then enable one to put that design in place quickly. And in the case the design one thought about was wrong, TDD will allow one to refactor it nicely and safely. Again, it&apos;s just a tool, it&apos;s there to help one develop his ideas faster and design stuff safely and faster.
&lt;br&gt;
Now RDUF - Rough Design Up Front - probably makes more sense when embracing TDD.
&lt;br&gt;
When using Outside-In TDD, the RDUF is a strong requirement along with a proper pre-identification of the architecture of the software product.
&lt;/p&gt;

&lt;p&gt;
In every case, one should never try to do emergent design without being willing to do some constant refactoring, they both go together and it does really require a lot of discipline
&lt;/p&gt;


&lt;a name=&quot;sec23&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.3 Design principles to identify refactoring opportunities&lt;/h3&gt;  

&lt;p&gt;
In the world of Agile projects and Agile design, several principles shall be respected to help the code keep a clean, simple and sound design.
&lt;/p&gt;

&lt;p&gt;
First, the SOLID principles:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Single responsibility principle (SRP)&lt;/b&gt; : A class should have one and only one reason to change, meaning that a class should only have one job, one single respnsibility. Note that the same should apply to a method, a package, one could consider even a whole application, with different levels of abstraction of course.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Open-closed Principle (OCP)&lt;/b&gt; : Objects or components should be open for extension, but closed for modification. 
Open for extension means that we should be able to add new features or components to the application without breaking existing code.
Closed for modification means that we should not be able to introduce breaking changes to existing functionality, because that would force one to refactor a lot of existing code.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Liskov Substitution Principle (LSP)&lt;/b&gt; : Every subclass / derived class should be substitutable for its base / parent class. In other words, a subclass should override the parent class methods in a way that does not break functionality from a client&apos;s point of view. &lt;br&gt;
The LSP stats that whenever one is tempted to introduce some inheritance between classes but would break this principle in doing so, then one should consider composition instead of inheritance.
&lt;br&gt;
At the end of the day, it&apos;s about answering the question &quot;&lt;i&gt;Is that X really an Y ?&lt;/i&gt;&quot; and if the answer is positive, then inheritance between X and Y can be used. For instance, the answer to &quot;&lt;i&gt;Is a cat really an animal ?&lt;/i&gt; is clearly yes. But the answer to the question &quot;&lt;i&gt;Is than appartment really a room ?&lt;/i&gt;&quot; is clearly negative even though they share some common properties - such as size, volume, number of light switches, etc. - some common methods - such as Enter, Leave, etc. This is a good indication that &lt;i&gt;Apartment&lt;/i&gt; should not inherit from &lt;i&gt;Room&lt;/i&gt;, an appartment should own a collection of rooms. Now The Composite pattern would help factorize the common stuff.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Dependency Inversion Principle (DIP)&lt;/b&gt; : Entities must depend on abstractions not on concretions. It states that the high level module must not depend on the low level module, but they should depend on abstractions.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Then, some common sense principles:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;YAGNI - You ain&apos;t gonna need it&lt;/b&gt; : Don&apos;t implement today something that is not strictly required today. When one thinks of some cool feature and one&apos;s tempted to implement it because it may one day be required, one shall simply never implement it today, rather implement it that one day, when the need is confirmed, not today. This way, if eventually it&apos;s not required, one doesn&apos;t loose the amount of time needed to develop it.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;DRY - Don&apos;t repeat yourself&lt;/b&gt; : Use sonar or else to identify every piece of duplicated code or feature and factorize the it to eliminate the duplication. Take the opportunity to identify the duplicated code responsibility and introduce a new proper abstraction.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;KISS - Keep It Simple and Stupid&lt;/b&gt; : Keep design as simple as possible. This sound easy ... but it&apos;s not. Actually coming up with the simplest possible design is much harder and requires a lot more thoughts than settling for the first idea that comes in mind.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Design Patterns&lt;/b&gt; : Introduce Design Patterns when identifying an opportunity for it.
&lt;/li&gt;
&lt;/ul&gt;



&lt;a name=&quot;sec3&quot;&gt;&lt;/a&gt;
&lt;h2&gt;3. Reducing TCO &lt;/h2&gt;

&lt;a name=&quot;sec31&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.1 Implementing Automated tests&lt;/h3&gt;  

&lt;p&gt;
Automated tests reduce maintenance costs significantly since they:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;form a formidable form of documentation aimed at understanding the code much faster when it needs to be maintained and/or evoluted, sometimes months or years after the initial development, &lt;/li&gt;
&lt;li&gt;prevent from long sessions of manual tests to assess the behaviour of the application on edge cases, &lt;/li&gt;
&lt;li&gt;prevent from deploying the code over and over again in a live running application to test it as the development is ongoing,&lt;/li&gt;
&lt;li&gt;prevent from relying exclusively on the debugger to understand misbehaviour. Using the debugger is highly inefficient. Unit and Integration tests don&apos;t entirely anihilate the needs to use the debugger once in a while, but significantly reduce this need,&lt;/li&gt;
&lt;li&gt;finally, unit tests (as well as integration tests) prevents a lot of bugs from passing through the cracks and making it to production, being discovered weeks or months later when a specific conditions occurs and making the business users as well as the developers loose a lot of time to figure and fix.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
All these benefits that reduce the TCO comes out of the box when one reaches a good coverage of the lines of code and the condition branches with automated tests.
&lt;br&gt;
A good coverage of the code with unit tests means reaching 80% of lines of code and condition branches covered. 
&lt;br&gt;
The 80/20 rule states the following : &lt;i&gt;&quot;If 100 days would be required to cover 100% of the functional code in lines and condition branches coverage, then it&apos;s likely that only 20 days are required to cover 80% of them and the remaining 20% to be covered require the additional 80 days. This overwhelming investment is not worth it and one is better of limiting the invested development effort to the 20 days to cover 80%. of the code&quot;&lt;/i&gt;. 
&lt;/p&gt;


&lt;a name=&quot;sec32&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.2 Embracing TDD&lt;/h3&gt;  

&lt;p&gt;
Implementing unit tests after the code suffers from two important drawbacks:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It doesn&apos;t enforce, simple, clean and sound design. The emergent design approach - relying on testability of the code and refactoring - is not enforced whenever one writes tests after the code.&lt;/li&gt;
&lt;li&gt;Because of the previous problem, covering (nearly) 100% of the functional code with tests is overkill and one limits to the 80/20 rule. &lt;/li&gt;
&lt;li&gt;Since the design is not as simple, clean and sound as it shall be, long term maintenance and evolution of the code will be more expensive that when the design is as good as it can be with&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
These drawbacks have direct consequences on the TCO.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Hence the reason for Tests Driven Development.&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
With TDD:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Because a unit test is written first and the code written after limited to each and every line of code required for the unit test to run successfully, the functional code coverage both in terms of lines coverage and condition branches reaches (almost) 100%.&lt;/li&gt;
&lt;li&gt;The code is forced to be simple and clean because it has to fullfill the specification of a single unit test. When following TDD, it&apos;s impossible to write convoluted code since it would have been impossible to implement a unit test for this convoluted code first.&lt;/li&gt;
&lt;li&gt;Thanks to the nearly 100% functional code coverage by automated tests and to the simple design, refactoring is not only always possible but also simple and straightforward.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
These advantages have direct benefits on the maintenance cost since:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the need to spend long hours re-understanding the code over and over again every time it needs to be maintained is significantly reduced futher, benefiting from the simple, clean and sound design enforced by TDD,&lt;/li&gt;
&lt;li&gt;the need to use a debugger to figure and understand misbehaviour the code, thanks to both the documentation that the test form and the simple and clean design, is almost eliminated,&lt;/li&gt;
&lt;li&gt;the need to deploy the code in a live running application to test is reduced significantly further.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
TDD is really about embracing unit and other formats of automated testing to the next level which benefits first and foremost to the TCO.
&lt;br&gt;
The next section will illustrate this statement with an example.
&lt;/p&gt;

&lt;a name=&quot;sec4&quot;&gt;&lt;/a&gt;
&lt;h2&gt;4. An example to illustrate the TCO reduction&lt;/h2&gt;


&lt;a name=&quot;sec41&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.1 Illustration Example&lt;/h3&gt;  

&lt;p&gt;
Let&apos;s take an example as an illustration of the gain in TCO when coding with TDD.
&lt;br&gt;
This example assume that some code must be developed, representing some 10 days of work.
&lt;/p&gt;

&lt;p&gt;
This code will be developed following 3 methods:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;A. No automated tests whatsoever&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;B. Automated tests implemented after the code&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;C. Strict TDD following Bottom-Up approach&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
For the sake of illustrating the potential TCO gain with TDD, the code will experience some maintenance after a few weeks (next maintenance) and then a major evolution (further evolution) after a few months.
&lt;/p&gt;

&lt;p&gt;
In details, the development and maintenance tasks in the illustration scenario are as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Initial development&lt;/b&gt; : initial development of the feature down to production rollout
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Development Time&lt;/b&gt; : this is the initial development time of the first version of the feature&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Debugging Time&lt;/b&gt; : this is the debugging at development time, on the live running application to polish the behaviour&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Manual Testing time&lt;/b&gt; : this is the manual testing of the application at development time on the live running application&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pre and Post-Production Debugging Time&lt;/b&gt; : this is the additional debugging just before and after the features enters production, most of the time required when the test coverage is not good.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;After a few weeks maintenance&lt;/b&gt; : few weeks after, a small set of changes are required
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Next maintenance re-understanding time&lt;/b&gt; : time lost on re-understanding the code and doing the small changes&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Next maintenance Debugging time&lt;/b&gt; : time lost again in debugging the code to figure and assess its behaviour&lt;/li&gt;
&lt;/ul&gt;  
&lt;/li&gt;
&lt;li&gt;  
&lt;b&gt;After a few months evolution&lt;/b&gt; : few months after, an important evolution is required.
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Further evolution re-understanding time&lt;/b&gt; : time lost on re-understanding the code&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Further evolution implementation time&lt;/b&gt; : time required to implement the evolution&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Further evolution manual testing&lt;/b&gt; : time required to tests the evolution manually&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Further evolution non-regression testing&lt;/b&gt; : time required to re-test the feature as a whole and assessing the evolution didn&apos;t break anything.&lt;/li&gt;
&lt;/ul&gt;  
&lt;/li&gt;  
&lt;/ul&gt;

&lt;p&gt;
This is a simplification over what could be a real development and maintenance scenario of course since it leaves out all aspects that are not relevant to compare the different methods such as Documentation, Acceptance testing by business users or the product owner, etc.
&lt;/p&gt;

&lt;p&gt;
Each and every approach listed above is discussed hereunder in terms of advantages and drawbacks related to costs.
&lt;/p&gt;

&lt;a name=&quot;sec42&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.2 No automated tests whatsoever (A)&lt;/h3&gt;  

&lt;p&gt;
The costs for the different steps above of the software component development and maintenance lifecycle in the case of the &quot;&lt;i&gt;no tests&lt;/i&gt;&quot; method are as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e57cc240-512c-4a99-9875-e138f9bd2080&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px; &quot; alt=&quot;No tests TCO&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e57cc240-512c-4a99-9875-e138f9bd2080&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
We can see that the actual coding cost (&quot;&lt;i&gt;Development Time&lt;/i&gt;&quot; and &quot;&lt;i&gt;Further evolution implementation time&lt;/i&gt;&quot;) is only a tiny part of the whole development and maintenance lifecycle.
&lt;br&gt;
Debugging, manual testing and struggling to understand the software again after a few months represents a significant portion of the whole TCO.
&lt;/p&gt;

&lt;a name=&quot;sec43&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.3 Automated tests implemented after the code (B)&lt;/h3&gt;  

&lt;p&gt;
The costs for the different steps above of the software component development and maintenance lifecycle in the case of the &quot;&lt;i&gt;test after&lt;/i&gt;&quot; method are as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6969812a-3bcc-4fdd-a7b1-d5352b2303c9&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px; &quot; alt=&quot;Tests after TCO&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6969812a-3bcc-4fdd-a7b1-d5352b2303c9&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The actual coding time becomes a lot more significative compared to the other activities (debugging, manual testing, etc.) which are significantly reduces thanks to the introduction of automated tests. Their cumulated cost remains significant though.
&lt;/p&gt;

&lt;a name=&quot;sec44&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.4 Strict TDD following Bottom-Up approach (C)&lt;/h3&gt;  

&lt;p&gt;
The costs for the different steps above of the software component development and maintenance lifecycle in the case of the &quot;&lt;i&gt;test before&lt;/i&gt;&quot; (TDD) method are as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/710ac473-0f74-4666-8e95-612fd61dc513&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px; &quot; alt=&quot;TDD TCO&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/710ac473-0f74-4666-8e95-612fd61dc513&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
We can see that most of the TCO is related to coding activity, either writing tests or the functional code.
&lt;br&gt;
Other activities are reduced to marginal levels.
&lt;/p&gt;

&lt;a name=&quot;sec45&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.5 How do these methods compare with each others in regards to TCO?&lt;/h3&gt;  

&lt;p&gt;
We can now compare how these methods compare together in termd of TCO.
&lt;/p&gt;

&lt;p&gt;
Let&apos;s first explain how these different method diverge from each others on each and every task of our scenario :
&lt;/p&gt;


&lt;table class=&quot;allborder&quot;&gt;

&lt;tr style=&quot;background: #CCCCCC; font-weight: bold;&quot;&gt;
&lt;td&gt;
&lt;/td&gt;
&lt;td&gt;
No automated tests
&lt;/td&gt;
&lt;td&gt;
Tests implemented after code
&lt;/td&gt;
&lt;td&gt;
TDD
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td style=&quot;font-weight: bold;&quot;&quot;&gt;
Development Time
&lt;/td&gt;
&lt;td&gt;
Not implementing any automated tests makes the &quot;purely&quot; development part of the process quicker indeed. There is much less code to be written. However this illusional gain will need to be paid later on. In addition, the need to deploy the application to run live tests after every block of code implemented reduces the gain. One is better off assessing the code with unit tests instead of with a running application.
&lt;/td&gt;
&lt;td&gt;
Implementing tests after writing the business logic code is better than nothing, it prevents from the need to test the code within the live running application. It comes with a little additional cost, the need to write these unit tests. The problem here is mostly that impementing tests after the code doesn&apos;t benefit from the first advantage of TDD which is ensuring a clear, simple and sound design. In addition, when writing the tests after the code, one struggles to have a good code coverage. In most-if-not-all cases the code coverage is way below what is achieved with TDD. This will be paid later on.
&lt;/td&gt;
&lt;td&gt;
With TDD, tests are implemented first. This forces the code to have a clear, simple and sound design and to be utmost testable. This comes with an additional cost over tests implemented after. However, the testing, the maintainance and the future evolution of the code will tremendously benefit from the almost exhaustive coverage of the code by automated tests and the simple design.
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td style=&quot;font-weight: bold;&quot;&quot;&gt;
Debugging Time
&lt;/td&gt;
&lt;td&gt;
Without unit tests, one is left with a debugger to spot the misbehaviour of the code. Debugging a running application to figure what the code is doing and where the problems are form the worst possible way to develop software.
&lt;/td&gt;
&lt;td&gt;
The unit tests are preventing from loosing so much time with a debugger here. However, the poor coverage makes it so that one still needs to rely quite a lot on the debugger to figure the interactions between the different parts of the code and understand misbehaviours.
&lt;/td&gt;
&lt;td&gt;
The almost exhaustive coverage by unit tests makes it almost entirely useless to debug the running application to figure mishbehaviours and side effects. Everything, including edge cases, is properly covered by unit tests and the debugger is only required very rarely to understand tricky code parts.
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td style=&quot;font-weight: bold;&quot;&quot;&gt;
Manual Testing time
&lt;/td&gt;
&lt;td&gt;
Debugging is one thing, but the worst aspect without unit tests is that one needs to tests the whole behaviour of the code manually. And this is where it can get quite tricky, sometimes several minutes of manipulations are required on the UI of the running application to put in place the conditions required to test a specific edge case of the business logic.
&lt;/td&gt;
&lt;td&gt;
Tests prevents manual testing to some extend only when they are not exhaustive. Most of the time when tests are implemented after the code, edge cases are not covered and as such manual testing is still required quite extensively to assess the behaviour of the code on edge cases.
&lt;/td&gt;
&lt;td&gt;
This is one of the most striking advantages of TDD. The almost exhaustive coverage of condition branches and code by automated tests reduces significantly the need for manual testing. Just the tricky integration aspects remain to be tested manually.
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td style=&quot;font-weight: bold;&quot;&quot;&gt;
Pre and Post-Production Debugging Time
&lt;/td&gt;
&lt;td&gt;
Without integration tests, most of the time when the application is prepared for production and/or integrated in a realistic production environment for the first time, a whole new range of corner cases appear and require a new set of very lengthy debugging session, not to mention the need to reproduce the production environment on the developer&apos;s computer first. In addition, after the production roll-out, specific conditions triggering new bugs will most certainly occur and make busines users as well as developers loose a lot of time to figure and fix.
&lt;/td&gt;
&lt;td&gt;
Unfortunately, the poor coverage of condition branches as well as the lack of good integration tests reproducing different production situations most of the time prevent from benefitting from the advantages of the tests. When tests are implemented after the code, most of the time an important level of debugging under the specific conditions of the production environment is still required. Nevertheless, automated tests prevents the majority of bugs to pass through the cracks and make through post-production rollout.
&lt;/td&gt;
&lt;td&gt;
Unit and integration tests can easily reproduce the whole range of specificities of the possibles conditions around the code being tested and assessed. Especially with intgeration tests, developers have the possibility to reproduce different production conditions and assess the well behaviour of the code under these specific conditions. This prevents most-if-not-all of the production debugging nightmare.
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td style=&quot;font-weight: bold;&quot;&quot;&gt;
Next maintenance re-understanding time
&lt;/td&gt;
&lt;td&gt;
Unit and integration tests form a formidable form of documentation for the code. Without any of these, whenever a developer needs to apply a maintenance on some piece of code after a few months, he needs first to dedicate the required amount of time to understand the code all over again. 
&lt;/td&gt;
&lt;td&gt;
With unit and integration tests, the developer benefits from a surprisingly good form of documentation to understand the code very quickly and be fast in a position where he can apply the maintenance changes. However, writing the tests after the code doesn&apos;t enforce the clean, simple and sound design that TDD brings. As such, without TDD, some time is still lost due to the need to understand sometimes quite convoluted code.
&lt;/td&gt;
&lt;td&gt;
With TDD, the developer doesn&apos;t only benefit from the exhaustive automated tests forming a good documentation, he also benefits from the fact that TDD enforces clean, simple and sound design and can underdstand the code produced this way much faster.
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td style=&quot;font-weight: bold;&quot;&quot;&gt;
Next maintenance Debugging Time
&lt;/td&gt;
&lt;td&gt;
Without tests, the need to debug the code over and over again at every maintenance kicks in. Deploying the code in a live application is the only way to figure and understand it&apos;s misbehaviours.
&lt;/td&gt;
&lt;td&gt;
The unit tests are preventing from loosing so much time with a debugger here. However, the poor coverage doesn&apos;t entirely prevent from its usage to understand some tricky part of the code or some complex interactions and side effects.
&lt;/td&gt;
&lt;td&gt;
The almost exhaustive coverage by automated tests makes it almost entirely useless to debug the running application to figure mishbehaviours and side effects. This is especially important when maintaining the code or evoluting it months or years after it&apos;s been initially written.  Finally, with TDD the proper reaction whenever a bug is encountered is implement a unit or integration test that reproduces the bug and assess the wrong behaviour and then fixing the failing tests. This is a much more efficient way of fixing a bug than debugging.
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td style=&quot;font-weight: bold;&quot;&quot;&gt;
Further evolution re-understanding time
&lt;/td&gt;
&lt;td&gt;
Same as above. Without unit tests documenting the behaviour, one is left with reading the code itself to figure what it does.
&lt;/td&gt;
&lt;td&gt;
Same as above, the developer benefits from unit tests to understand and assess the expected behaviour of the code which comes with a significant gain of time when needed to maintain or evolve the code sometimes several months after the initial development.
&lt;/td&gt;
&lt;td&gt;
TDD comes with better and more tests, making the whole process even more efficient. In addition, the enforcement of a simple, clean and sound design makes the code itself much more readable which comes with a great increase of TCO gains.
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td style=&quot;font-weight: bold;&quot;&quot;&gt;
Further evolution implementation time
&lt;/td&gt;
&lt;td&gt;
Once all the required time to understand the code all over again is invested, the developer can proceed with implementing the evolution. Not writing any tests is again quicker of course. But that gain is an illusion and without tests a lot of time will be lost further on the process.
&lt;/td&gt;
&lt;td&gt;
Writing the tests after the development does take some additional development time, of course. But for all the reasons already presented, this time lost will be regained with huge benefits further on the process. Now again writing the tests after the code doesn&apos;t lead neither to an optimal code coverage nor to the best possible design which will have consequences later.
&lt;/td&gt;
&lt;td&gt;
Here as well again the development of the tests will require some additional coding time but the other acitivites will be significantly reduced thanks to these almost exhaustive automated tests suite, not to mention the simple design which makes the whole evolution process easier.
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td style=&quot;font-weight: bold;&quot;&quot;&gt;
Further evolution manual testing
&lt;/td&gt;
&lt;td&gt;
Same as above. Without unit tests, one is left with manual testing of every aspect of the feature and all corner cases on the live running application. This takes a lot of time and more importantly this has to be done over and over again everytime the feature evolves.
&lt;/td&gt;
&lt;td&gt;
Again, writing unit tests after the code is better than nothing of course. But doing so, one struggles to come up with a sufficient coverage of the code with automated tests. And in this case at least some level of manual testing of the feature and egde cases is required.
&lt;/td&gt;
&lt;td&gt;
Again, with an almost exhaustive coverage of code both in terms of lines of code and in terms of condition branches, the need for manual testing is significantly reduced. Only specific integration concerns and very rare border cases need to be assessed on the live running application. And most of the time when a glitch is discovered, it comes from a lack of prevision of some corner cases, almost never from a bug passing through.
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td style=&quot;font-weight: bold;&quot;&quot;&gt;
Further evolution non-regression testing
&lt;/td&gt;
&lt;td&gt;
This is perhaps the biggest problem from which a software development project not leveraging on automated tests will suffer. Without a proper suite of automated tests to assess the non-regression of the software, one is left with manually testing almost the whole application each and every time some code is changed. This comes with the most amazing hidden cost and is the price to pay when not investing on automated tests at the development time.
&lt;/td&gt;
&lt;td&gt;
Automated tests, even when written after the code, form a formidable protection against regressions. Most of the manual testing needed against regressions is prevented by the suite of automated tests. In case the coverage of the functional code is not 100%, which is the case most of the time when tests are written after the code, a little level of manual testing is still required.
&lt;/td&gt;
&lt;td&gt;
This is another one of the most striking benefits from TDD: the fact that the test suite form a formidable non-regression testing approach. With an almost exhaustive coverage of the code with automated tests, non-regression testing boils down to simply running these tests.
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

&lt;p&gt;
As a consequence, the TCO in terms of required man/days diverge quite a lot between the three different approaches:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c625635e-a891-4769-9a58-73b67523dd38&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 850px; &quot; alt=&quot;Approaches TCO Comparison&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c625635e-a891-4769-9a58-73b67523dd38&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The scenario above gives us the following figures in terms of man/days required for every approach:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;37 M/D for the approach without any test&lt;/li&gt;
&lt;li&gt;30 M/D for the approach with tests written after the code&lt;/li&gt;
&lt;li&gt;26 M/D for the TDD approach&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Which represents the following difference
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;20% TCO gain when working with a consistent suite of automated tests over the no tests approach&lt;/li&gt;
&lt;li&gt;10% addition gains with TDD over the &lt;i&gt;tests written after&lt;/i&gt; approach.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;This represents a 30% reduction of TCO when embracing TDD over an approach without a comprehensive suite of automated tests.&lt;/b&gt;
&lt;br&gt;
On software development projects requiring millions of dollars of investment, this represents a more than significant gain.
&lt;/p&gt;

&lt;a name=&quot;sec5&quot;&gt;&lt;/a&gt;
&lt;h2&gt;5. Conclusion / Take Aways&lt;/h2&gt;

&lt;p&gt;
I believe that the most important take away when reading an article about TDD is that TDD is eventually the only way to recover some level of mastery on software development processes. 
&lt;br&gt;
Please allow me to develop this statement.
&lt;/p&gt;

&lt;p&gt;
Software Engineering forms a very specific and peculiar domain in the engineering business. Let&apos;s compare its situation with &lt;i&gt;Civil Engineering&lt;/i&gt; for instance. We are building bridges for litterally several thousands of years. Today, even a 10 years old child can have a basic understanding of how a bridge shall be built, some pilars should be anchored in the ground and a deck shall be layed on top of these, etc.
&lt;br&gt;
Everyone is able to figure what would be the trivial steps when building a bridge.
&lt;/p&gt;

&lt;p&gt;
A software product is something completely different. Due to its very abstract nature, building large software products is very hazardous. In contrary to other engineering domains, it&apos;s nearly impossible to estimate the required effort to develop a large software component and the reality shifts simply always from the plan.
&lt;br&gt;
And this is not even accounting debugging, maintenance and evolutions.
&lt;/p&gt;

&lt;p&gt;
Without TDD, whenever a development team believe it&apos;s quite close to completing the project is most of the time also the very moment it just starts figuring the tons of bugs that will need to be solved and the tremedous amount of work that actually still remains to be done.
&lt;/p&gt;

&lt;p&gt;
TDD is a way to get the control back.
&lt;/p&gt;

&lt;p&gt;
TDD enables to reduce significantly maintenance and evolution costs and at the same time master the software development process. With TDD, the implemented code is most of the time almost production ready from a functional perspective and pre-production debugging sessions are largely reduced.
&lt;br&gt;
But more importantly TDD enables to smoothing the future evolutions of the software product by significantly improving its design and providing an exhaustive set of non-regression tests out of the box. 
&lt;/p&gt;

&lt;p&gt;
At the end of the day, this significant reduction of the TCO is the most important aspect of TDD. The pressure to deliver should never dictate whether one uses TDD or not. The time gained at development time when skipping automated tests is an illusion. Eventually much more time will be lost without tests. And then again TDD is not only about tests...
&lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://www.niceideas.ch/roller2/badtrash/entry/the-agile-collection</guid>
    <title>The Agile Collection Book</title>
    <dc:creator>Jerome Kehrli</dc:creator>
    <link>https://www.niceideas.ch/roller2/badtrash/entry/the-agile-collection</link>
        <pubDate>Tue, 12 Dec 2017 17:57:20 -0500</pubDate>
    <category>Agile</category>
    <category>agile</category>
    <category>agile-collection</category>
    <category>agile-methods</category>
    <category>agility</category>
            <description>&lt;!-- The Agile Collection --&gt;
&lt;!-- agile-collection agile-methods agile agility --&gt;

&lt;p&gt;
Agility in Software Development is a lot of things, a collection of so many different methods. &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-landscape&quot;&gt;In a recent article&lt;/a&gt; I presented the &lt;i&gt;Agile Landscape V3&lt;/i&gt; from Christopher Webb which does a great job in listing these methods and underlying how much Agility is much more than some scrum practices on top of some XP principles.
&lt;br&gt;
I really like this infographic since I can recover &lt;i&gt;most-if-not-all&lt;/i&gt; of the principles and practices from the methods I am following.
&lt;/p&gt;
&lt;p&gt;
Recently I figured that I have written on this very blog quite a number of articles related to these very Agile Methods and after so much writing I thought I should assemble these articles in a book.
&lt;br&gt;
So here it is, &lt;a href=&quot;https://www.niceideas.ch/the_agile_methods_collection.pdf&quot;&gt;The Agile Methods Collection&lt;/a&gt; book.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/5ad812bb-d038-4f3a-924d-b13af76941ca&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 550px;&quot; alt=&quot;The Agile Methods Tree&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/5ad812bb-d038-4f3a-924d-b13af76941ca&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.niceideas.ch/the_agile_methods_collection.pdf&quot;&gt;The Agile Methods Collection&lt;/a&gt; book is simply a somewhat reformatted version of all the following articles:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-landscape&quot;&gt;Agile Landscape from Deloitte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-software-development-lessons-learned&quot;&gt;Agile Software Development, lessons learned&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-planning-tools-and-processes&quot;&gt;Agile Planning : tools and processes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/devops-explained&quot;&gt;DevOps explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/lean-startup-a-focus-on&quot;&gt;The Lean Startup - A focus on Practices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/periodic-table-of-agile-principles&quot;&gt;Periodic Table of Agile Principles and Practices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
So if you already read all these articles, don&apos;t download this book.
&lt;br&gt;
If you didn&apos;t so far or want to have a kind of reference on all the methods from the collection illustrated above, you might find this book useful.
&lt;br&gt;
I hope you&apos;ll have as much pleasure reading it than I had writing all these articles.
&lt;/p&gt;
</description>          </item>
    <item>
    <guid isPermaLink="true">https://www.niceideas.ch/roller2/badtrash/entry/periodic-table-of-agile-principles</guid>
    <title>Periodic Table of Agile Principles and Practices</title>
    <dc:creator>Jerome Kehrli</dc:creator>
    <link>https://www.niceideas.ch/roller2/badtrash/entry/periodic-table-of-agile-principles</link>
        <pubDate>Thu, 29 Jun 2017 17:19:29 -0400</pubDate>
    <category>Agile</category>
    <category>agile</category>
    <category>periodic-table</category>
    <category>practices</category>
    <atom:summary type="html">&lt;p&gt;
After writing &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-planning-tools-and-processes&quot;&gt;my previous article&lt;/a&gt;, I wondered how I could represent on a single schematic all the &lt;i&gt;Agile Principles and Practices&lt;/i&gt; from the methods I am following, XP, Scrum, Lean Startup, DevOps and others.
&lt;br&gt;
I found that the approach I used in &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-planning-tools-and-processes#sec5&quot;&gt; in a former schematic&lt;/a&gt; - a graph of relationship between practices - is not optimal. It already looks ugly with only a few practices and using the same approach for the whole set of them would make it nothing but a mess.
&lt;/p&gt;
&lt;p&gt;
So I had to come up with something else, something better.
&lt;br&gt;
Recently I fell by chance on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Periodic_table&quot;&gt;Periodic Table of the Elements&lt;/a&gt;... Long time no see... Remembering my physics lessons in University, I always loved that table. I remembered spending hours understanding the layout and admiring the beauty of its natural simplicity.
&lt;br&gt;
So I had the idea of trying the same layout, not the same approach since both are not comparable, really only the same layout for &lt;i&gt;Agile Principles and Practices&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
The result is hereunder: &lt;b&gt;The Periodic Table of Agile Principles and Practices&lt;/b&gt;:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/78e8967b-a55b-4639-9ae1-bad60b0befda&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 750px; &quot; alt=&quot;Periodic Table of Agile Principles and Practices&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e1e282ca-a48e-456d-b876-4734563573a6&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The layout principle is and the description of the principles and practices is explained hereafter.
&lt;/p&gt;
</atom:summary>        <description>&lt;!-- Periodic Table of Agile Principles and Practices --&gt;

&lt;p&gt;
After writing &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-planning-tools-and-processes&quot;&gt;my previous article&lt;/a&gt;, I wondered how I could represent on a single schematic all the &lt;i&gt;Agile Principles and Practices&lt;/i&gt; from the methods I am following, XP, Scrum, Lean Startup, DevOps and others.
&lt;br&gt;
I found that the approach I used in &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-planning-tools-and-processes#sec5&quot;&gt; in a former schematic&lt;/a&gt; - a graph of relationship between practices - is not optimal. It already looks ugly with only a few practices and using the same approach for the whole set of them would make it nothing but a mess.
&lt;/p&gt;
&lt;p&gt;
So I had to come up with something else, something better.
&lt;br&gt;
Recently I fell by chance on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Periodic_table&quot;&gt;Periodic Table of the Elements&lt;/a&gt;... Long time no see... Remembering my physics lessons in University, I always loved that table. I remembered spending hours understanding the layout and admiring the beauty of its natural simplicity.
&lt;br&gt;
So I had the idea of trying the same layout, not the same approach since both are not comparable, really only the same layout for &lt;i&gt;Agile Principles and Practices&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
The result is hereunder: &lt;b&gt;The Periodic Table of Agile Principles and Practices&lt;/b&gt;:
&lt;/p&gt;
&lt;p&gt;
(This article is available as a PDF document here &lt;a href=&quot;https://www.niceideas.ch/Agile_table.pdf&quot;&gt;https://www.niceideas.ch/Agile_table.pdf&lt;/a&gt; and a slideshare presentation there &lt;a href=&quot;https://www.slideshare.net/JrmeKehrli/periodic-table-of-agile-principles-and-practices&quot;&gt;https://www.slideshare.net/JrmeKehrli/periodic-table-of-agile-principles-and-practices&lt;/a&gt;)
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/78e8967b-a55b-4639-9ae1-bad60b0befda&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 750px; &quot; alt=&quot;Periodic Table of Agile Principles and Practices&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e1e282ca-a48e-456d-b876-4734563573a6&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The layout principle is and the description of the principles and practices is explained hereafter.
&lt;/p&gt;


&lt;h2&gt;Layout Principle&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
The &lt;b&gt;Origin Method&lt;/b&gt; such as XP, Scrum, DevOps, etc is indicated by the color as well as the name of the method on the top-right corner. 
&lt;/li&gt;
&lt;li&gt;
The &lt;b&gt;Category&lt;/b&gt;, &lt;i&gt;Principle&lt;/i&gt; or &lt;i&gt;Practice&lt;/i&gt; is indicated by the shape: rectangle or round corners.
&lt;/li&gt;
&lt;li&gt;
The number represents the &lt;b&gt;Complexity&lt;/b&gt; expressed as the number of dependencies.
&lt;/li&gt;
&lt;li&gt;
The &lt;b&gt;team or committee&lt;/b&gt; concerned with the principle or practice is indicated as note on the bottom-right corner.
&lt;/li&gt;
&lt;li&gt;
The &lt;b&gt;horizontal dimension&lt;/b&gt; is related to the complexity. The more on the right is an element, the higher its complexity.
&lt;/li&gt;
&lt;li&gt;
The &lt;b&gt;vertical dimension&lt;/b&gt; is related to classifying principles and practices more organization or more related to engineering, in specific layers related to the category or team they apply to.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
This is best presented as follows:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/7a36d6d6-446b-4834-b087-57dbfe1c91a6&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px;&quot; alt=&quot;Periodic Table of Agile Principles and Practices - Explanations&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/230510f9-15fd-46ef-9625-f504ecd249f7&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;h2&gt;Remarks&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
Interestingly, but not surprisingly, scrum is really in the middle of the schematic, underlying the fact that it impacts as well development principles and the development team organization.
&lt;/li&gt;
&lt;li&gt;
XP is really everywhere down the line.
&lt;/li&gt;
&lt;li&gt;
Product Development is really about Product Management in the Agile world.
&lt;/li&gt;
&lt;li&gt;
DevOps is more related to development practices than everything else.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The next part of this article describes each and every principle and practice.
&lt;/p&gt;

&lt;h2&gt;XP&lt;/h2&gt;


&lt;style&gt;
table.pte {
    border: 0px none;
    border-collapse: collapse;
}
div.entryContent table.pte tr td,
table.pte tr td {
    padding-top: 10px;
    border: 0px none;
    border-bottom: 1px solid #888888;
}
table.pte tr td img {
    display: inline;
}
td.desc_right {
    padding-left: 10px;
}
.pte-image-big {
    width: 90px;
    min-width: 90px;
    max-width: 90px;
}
.pte-image-small {
    width: 30px;
    min-width: 30px;
    max-width: 30px;
}
&lt;/style&gt;


&lt;a name=&quot;Sn&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sn.png&quot; 
alt=&quot;Sn : Simple Design&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Sn : Simple Design 
&lt;/b&gt;&lt;br&gt;
A simple design always takes less time to finish than a complex one. So always do the simplest thing that could possibly work next. If you find something that is complex replace it with something simple. It&apos;s always faster and cheaper to replace complex code now, before you waste a lot more time on it.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Td&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Td.png&quot; alt=&quot;Td&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Rf&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Rf.png&quot; alt=&quot;Rf&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Su&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Su.png&quot; alt=&quot;Su&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Mt&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Mt.png&quot; alt=&quot;Mt&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Si&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Si.png&quot; alt=&quot;Si&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Mt&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Mt.png&quot; 
alt=&quot;Mt : Metaphor&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Mt : Metaphor
&lt;/b&gt;&lt;br&gt;
System Metaphor is itself a metaphor for a simple design with certain qualities. The most important quality is being able to explain the system design to new people without resorting to dumping huge documents on them. A design should have a structure that helps new people begin contributing quickly. The second quality is a design that makes naming classes and methods consistent.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Sn&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sn.png&quot; alt=&quot;Sn&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Rf&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Rf.png&quot; alt=&quot;Rf&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Oc&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Oc.png&quot; alt=&quot;Oc&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Td&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Td.png&quot; 
alt=&quot;Td : TDD = Test Driven Development &quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Td : TDD = Test Driven Development 
&lt;/b&gt;&lt;br&gt;
Test-driven development is a software development process that relies on the repetition of a very short development cycle: requirements are turned into very specific test cases, then the software is improved to pass the new tests, only. This is opposed to software development that allows software to be added that is not proven to meet requirements.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Wt&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Wt.png&quot; alt=&quot;Wt&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Ci&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ci.png&quot; alt=&quot;Ci&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Cs&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cs.png&quot; alt=&quot;Cs&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Sc&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sc.png&quot; alt=&quot;Sc&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Oc&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Oc.png&quot; 
alt=&quot;Oc : Onsite Customer&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Oc : Onsite Customer
&lt;/b&gt;&lt;br&gt;
One of the few requirements of extreme programming (XP) is to have the customer available. Not only to help the development team, but to be a part of it as well. All phases of an XP project require communication with the customer, preferably face to face, on site. It&apos;s best to simply assign one or more customers to the development team.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Rf&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Rf.png&quot; 
alt=&quot;Rf : Refactoring&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Rf : Refactoring
&lt;/b&gt;&lt;br&gt;
We computer programmers hold onto our software designs long after they have become unwieldy. We continue to use and reuse code that is no longer maintainable because it still works in some way and we are afraid to modify it. But is it really cost effective to do so? Extreme Programming (XP) takes the stance that it is not. When we remove redundancy, eliminate unused functionality, and rejuvenate obsolete designs we are refactoring. Refactoring throughout the entire project life cycle saves time and increases quality. 
&lt;br&gt;
 Refactor mercilessly to keep the design simple as you go and to avoid needless clutter and complexity. Keep your code clean and concise so it is easier to understand, modify, and extend
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Td&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Td.png&quot; alt=&quot;Td&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Sn&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sn.png&quot; alt=&quot;Sn&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Mt&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Mt.png&quot; alt=&quot;Mt&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Cs&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cs.png&quot; alt=&quot;Cs&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Ci&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ci.png&quot; alt=&quot;Ci&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Cs&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cs.png&quot; 
alt=&quot;Cs : Coding Standards&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Cs : Coding Standards
&lt;/b&gt;&lt;br&gt;
Code must be formatted to agreed coding standards. Coding standards keep the code consistent and easy for the entire team to read and refactor. Code that looks the same encourages collective ownership.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Su&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Su.png&quot; 
alt=&quot;Su : Sustainable Pace&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Su : Sustainable Pace
&lt;/b&gt;&lt;br&gt;
 To set your pace you need to take your iteration ends seriously. You want the most completed, tested, integrated, production ready software you can get each iteration. Incomplete or buggy software represents an unknown amount of future effort, so you can&apos;t measure it. If it looks like you will not be able to get everything finished by iteration end have an iteration planning meeting and re-scope the iteration to maximize your project velocity. Even if there is only one day left in the iteration it is better to get the entire team re-focused on a single completed task than many incomplete ones.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Wt&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Wt.png&quot; 
alt=&quot;Wt : Whole Team&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Wt : Whole Team
&lt;/b&gt;&lt;br&gt;
All the contributors to an XP project sit together, members of a whole team. The team shares the project goals and the responsibility for achieving them. This team must include a business representative, the &quot;Customer&quot; who provides the requirements, sets the priorities, and steers the project
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Ci&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ci.png&quot; 
alt=&quot;Ci : Continuous Integration&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Ci : Continuous Integration
&lt;/b&gt;&lt;br&gt;
Developers should be integrating and commiting code into the code repository every few hours, when ever possible. In any case never hold onto changes for more than a day. Continuous integration often avoids diverging or fragmented development efforts, where developers are not communicating with each other about what can be re-used, or what could be shared. Everyone needs to work with the latest version. Changes should not be made to obsolete code causing integration headaches.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Td&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Td.png&quot; alt=&quot;Td&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Cs&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cs.png&quot; alt=&quot;Cs&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Co&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Co.png&quot; alt=&quot;Co&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Sc&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sc.png&quot; alt=&quot;Sc&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Co&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Co.png&quot; 
alt=&quot;Co : Collective Ownership&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Co : Collective Ownership
&lt;/b&gt;&lt;br&gt;
Collective Ownership encourages everyone to contribute new ideas to all segments of the project. Any developer can change any line of code to add functionality, fix bugs, improve designs or refactor. No one person becomes a bottle neck for changes. 
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Cr&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cr.png&quot; 
alt=&quot;Cr : Code Review&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Cr : Code Review
&lt;/b&gt;&lt;br&gt;
Code review is increasingly favored over strict Pair Programming as initially requires by the XP Method. The problem with Pair programming is that it cannot fitr everybody.
&lt;br&gt;
Code reviews are considered important by many large-process gurus. They are intended to ensure conformance to standards, and more importantly, intended to ensure that the code is clear, efficient, works, and has QWAN. They also intended to help disseminate knowledge about the code to the rest of the team.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Sn&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sn.png&quot; alt=&quot;Sn&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Cs&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cs.png&quot; alt=&quot;Cs&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;,
&lt;a href=&quot;#Sc&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sc.png&quot; alt=&quot;Sc&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Pg&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pg.png&quot; 
alt=&quot;Pg : Planning Game&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Pg : Planning Game
&lt;/b&gt;&lt;br&gt;
The main planning process within extreme programming is called the Planning Game. The game is a meeting that occurs once per iteration, typically once a week. The planning process is divided into two parts: Release Planning and Sprint Planning.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Sr&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sr.png&quot; alt=&quot;Sr&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Oc&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Oc.png&quot; alt=&quot;Oc&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Po&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Po.png&quot; alt=&quot;Po&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Pm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pm.png&quot; alt=&quot;Pm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Sr&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sr.png&quot; 
alt=&quot;Sr : Small Releases&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Sr : Small Releases
&lt;/b&gt;&lt;br&gt;
The development team needs to release iterative versions of the system to the customers often. Some teams deploy new software into production every day. At the very least you will want to get new software into production every week or two. At the end of every iteration you will have tested, working, production ready software to demonstrate to your customers. The decision to put it into production is theirs.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Sc&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sc.png&quot; 
alt=&quot;Sc : Source Code Management&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Sc : Source Code Management
&lt;/b&gt;&lt;br&gt;
A component of software configuration management, version control, also known as revision control or source control, is the management of changes to documents, computer programs, large web sites, and other collections of information. Changes are usually identified by a number or letter code, termed the &quot;revision number&quot;, &quot;revision level&quot;, or simply &quot;revision&quot;. For example, an initial set of files is &quot;revision 1&quot;. When the first change is made, the resulting set is &quot;revision 2&quot;, and so on. Each revision is associated with a timestamp and the person making the change. Revisions can be compared, restored, and with some types of files, merged.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Bs&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Bs.png&quot; 
alt=&quot;Bs : Boyscout Rule&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Bs : Boyscout Rule
&lt;/b&gt;&lt;br&gt;
The Boy Scouts have a rule: &quot;Always leave the campground cleaner than you found it.&quot; If you find a mess on the ground, you clean it up regardless of who might have made the mess. You intentionally improve the environment for the next group of campers. Actually the original form of that rule, written by Robert Stephenson Smyth Baden-Powell, the father of scouting, was &quot;Try and leave this world a little better than you found it.&quot;
&lt;br&gt;
What if we followed a similar rule in our code: &quot;Always check a module in cleaner than when you checked it out.&quot; No matter who the original author was, what if we always made some effort, no matter how small, to improve the module. What would be the result?
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Rf&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Rf.png&quot; alt=&quot;Rf&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Td&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Td.png&quot; alt=&quot;Td&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Sn&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sn.png&quot; alt=&quot;Sn&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;No&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/No.png&quot; 
alt=&quot;No : No premature optimization&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
No : No premature optimization
&lt;/b&gt;&lt;br&gt;
In Donald Knuth&apos;s paper &quot;Structured Programming With GoTo Statements&quot;, he wrote: &quot;Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.&quot;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;At&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/At.png&quot; 
alt=&quot;At : Acceptance testing&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
At : Acceptance testing
&lt;/b&gt;&lt;br&gt;
Acceptance tests are created from user stories. During an iteration the user stories selected during the iteration planning meeting will be translated into acceptance tests. The customer specifies scenarios to test when a user story has been correctly implemented. A story can have one or many acceptance tests, what ever it takes to ensure the functionality works. 
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Oc&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Oc.png&quot; alt=&quot;Oc&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Sr&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sr.png&quot; alt=&quot;Sr&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Ac&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ac.png&quot; 
alt=&quot;Ac : Automated Tests Coverage&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Ac : Automated Tests Coverage
&lt;/b&gt;&lt;br&gt;
Code Coverage is a measurement of how many lines/blocks/arcs of your code are executed while the automated tests are running.
&lt;br&gt;
Code coverage on every dimension should be above possible to 80% (the famous 80/20) rule and close to 100% (TDD).
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Ci&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ci.png&quot; alt=&quot;Ci&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Td&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Td.png&quot; alt=&quot;Td&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;Scrum&lt;/h2&gt;


&lt;a name=&quot;Sp&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sp.png&quot; 
alt=&quot;Sp : Sprint&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Sp : Sprint
&lt;/b&gt;&lt;br&gt;
A Sprint is a time-box of one month or less during which a &quot;Done&quot;, useable, and potentially releasable product Increment is created. Sprints best have consistent durations throughout a development effort. A new Sprint starts immediately after the conclusion of the previous Sprint.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Sr&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sr.png&quot; alt=&quot;Sr&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Sl&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sl.png&quot; alt=&quot;Sl&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#So&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/So.png&quot; alt=&quot;So&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Sb&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sb.png&quot; alt=&quot;Sb&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;In&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/In.png&quot; 
alt=&quot;In : Product Increment&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
In : Product Increment (Shippable Product)
&lt;/b&gt;&lt;br&gt;
In Scrum, the Development Team delivers each Sprint a Product Increment. 
&lt;br&gt;
The increment must consist of thoroughly tested code that has been built into an executable, and the user operation of the functionality is documented either in Help files or user documentation. These requirements are documented in the Definition of Done. 
&lt;br&gt;
If everything works fine and the Development Team has estimated well, the Product Increment includes all items, which were planned in the Sprint Backlog, tested and documented.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Sr&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sr.png&quot; alt=&quot;Sr&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Sp&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sp.png&quot; alt=&quot;Sp&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Pb&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pb.png&quot; alt=&quot;Pb&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Ci&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ci.png&quot; alt=&quot;Ci&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Cd&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cd.png&quot; alt=&quot;Cd&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Ft&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ft.png&quot; alt=&quot;Ft&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Pt&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pt.png&quot; alt=&quot;Pt&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Ff&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ff.png&quot; alt=&quot;Ff&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Sl&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sl.png&quot; 
alt=&quot;Sl : Sprint Planning&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Sl : Sprint Planning
&lt;/b&gt;&lt;br&gt;
In Scrum, the sprint planning meeting is attended by the product owner, ScrumMaster and the entire Scrum team. Outside stakeholders may attend by invitation of the team, although this is rare in most companies.
&lt;br&gt;
During the sprint planning meeting, the product owner describes the highest priority features to the team. The team asks enough questions that they can turn a high-level user story of the product backlog into the more detailed tasks of the sprint backlog.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Pg&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pg.png&quot; alt=&quot;Pg&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Po&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Po.png&quot; alt=&quot;Po&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Tv&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Tv.png&quot; alt=&quot;Tv&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Us&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Us.png&quot; alt=&quot;Us&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Pm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pm.png&quot; alt=&quot;Pm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;So&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/So.png&quot; 
alt=&quot;So : Sprint Retrospective&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
So : Sprint Retrospective
&lt;/b&gt;&lt;br&gt;
No matter how good a Scrum team is, there is always opportunity to improve. Although a good Scrum team will be constantly looking for improvement opportunities, the team should set aside a brief, dedicated period at the end of each sprint to deliberately reflect on how they are doing and to find ways to improve. This occurs during the sprint retrospective.
&lt;br&gt;
The sprint retrospective is usually the last thing done in a sprint. Many teams will do it immediately after the sprint review. The entire team, including both the ScrumMaster and the product owner should participate. You can schedule a scrum retrospective for up to an hour, which is usually quite sufficient. However, occasionally a hot topic will arise or a team conflict will escalate and the retrospective could take significantly longer.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Kb&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Kb.png&quot; alt=&quot;Kb&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Wh&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Wh.png&quot; alt=&quot;Wh&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Sb&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sb.png&quot; 
alt=&quot;Sb : Sprint Backlog&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Sb : Sprint Backlog
&lt;/b&gt;&lt;br&gt;
The sprint backlog is a list of tasks identified by the Scrum team to be completed during the Scrum sprint. During the sprint planning meeting, the team selects some number of product backlog items, usually in the form of user stories, and identifies the tasks necessary to complete each user story. Most teams also estimate how many hours each task will take someone on the team to complete.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Pb&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pb.png&quot; alt=&quot;Pb&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Sp&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sp.png&quot; alt=&quot;Sb&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Pb&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pb.png&quot; 
alt=&quot;Pb : Product Backlog &quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Pb : Product Backlog 
&lt;/b&gt;&lt;br&gt;
The agile product backlog in Scrum is a prioritized features list, containing short descriptions of all functionality desired in the product. When applying Scrum, it&apos;s not necessary to start a project with a lengthy, upfront effort to document all requirements. Typically, a Scrum team and its product owner begin by writing down everything they can think of for agile backlog prioritization. This agile product backlog is almost always more than enough for a first sprint. The Scrum product backlog is then allowed to grow and change as more is learned about the product and its customers.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Sg&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sg.png&quot; alt=&quot;Sg&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Pm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pm.png&quot; alt=&quot;Pm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Sd&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sd.png&quot; 
alt=&quot;Sd : Sprint Demo&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Sd : Sprint Demo
&lt;/b&gt;&lt;br&gt;
In Scrum, each sprint is required to deliver a potentially shippable product increment. This means that at the end of each sprint, the team has produced a coded, tested and usable piece of software.
&lt;br&gt;
So at the end of each sprint, a sprint review meeting is held. During this meeting, the Scrum team shows what they accomplished during the sprint. Typically this takes the form of a demo of the new features.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Sp&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sp.png&quot; alt=&quot;Sp&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Po&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Po.png&quot; 
alt=&quot;Po : Product Owner&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Po : Product Owner
&lt;/b&gt;&lt;br&gt;
The Scrum product owner is typically a project&apos;s key stakeholder. Part of the product owner responsibilities is to have a vision of what he or she wishes to build, and convey that vision to the scrum team. This is key to successfully starting any agile software development project. The agile product owner does this in part through the product backlog, which is a prioritized features list for the product.
&lt;br&gt;
The product owner is commonly a lead user of the system or someone from marketing, product management or anyone with a solid understanding of users, the market place, the competition and of future trends for the domain or type of system being developed. 
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Oc&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Oc.png&quot; alt=&quot;Oc&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Ds&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ds.png&quot; 
alt=&quot;Ds : Daily Scrum&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Ds : Daily Scrum
&lt;/b&gt;&lt;br&gt;
In Scrum, on each day of a sprint, the team holds a daily scrum meeting called the &quot;daily scrum.&quot; Meetings are typically held in the same location and at the same time each day. Ideally, a daily scrum meeting is held in the morning, as it helps set the context for the coming day&apos;s work. These scrum meetings are strictly time-boxed to 15 minutes. This keeps the discussion brisk but relevant.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Sm&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sm.png&quot; 
alt=&quot;Sm : Scrum Master&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Sm : Scrum Master
&lt;/b&gt;&lt;br&gt;
What is a Scrum Master? The ScrumMaster is responsible for making sure a Scrum team lives by the values and practices of Scrum. The ScrumMaster is often considered a coach for the team, helping the team do the best work it possibly can. The ScrumMaster can also be thought of as a process owner for the team, creating a balance with the project&apos;s key stakeholder, who is referred to as the product owner.
&lt;br&gt;
The ScrumMaster does anything possible to help the team perform at their highest level. This involves removing any impediments to progress, facilitating meetings, and doing things like working with the product owner to make sure the product backlog is in good shape and ready for the next sprint. The ScrumMaster role is commonly filled by a former project manager or a technical team leader but can be anyone.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Do&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Do.png&quot; 
alt=&quot;Do: Definition of Done&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Do: Definition of Done
&lt;/b&gt;&lt;br&gt;
Definition of Done is a simple list of activities (writing code, coding comments, unit testing, integration testing, release notes, design documents, etc.) that add verifiable/demonstrable value to the product. Focusing on value-added steps allows the team to focus on what must be completed in order to build software while eliminating wasteful activities that only complicate software development efforts.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Cs&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cs.png&quot; alt=&quot;Cs&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Cr&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cr.png&quot; alt=&quot;Cr&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Td&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Td.png&quot; alt=&quot;Td&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt; 
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Pp&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pp.png&quot; 
alt=&quot;Pp : Planning Poker&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Pp : Planning Poker
&lt;/b&gt;&lt;br&gt;
Planning Poker is an agile estimating and planning technique that is consensus based. To start a poker planning session, the product owner or customer reads an agile user story or describes a feature to the estimators. 
&lt;br&gt;
Each estimator is holding a deck of Planning Poker cards with values like 0, 1, 2, 3, 5, 8, 13, 20, 40 and 100, which is the sequence we recommend. The values represent the number of story points, ideal days, or other units in which the team estimates.
&lt;br&gt;
The estimators discuss the feature, asking questions of the product owner as needed. When the feature has been fully discussed, each estimator privately selects one card to represent his or her estimate. All cards are then revealed at the same time.
&lt;br&gt;
If all estimators selected the same value, that becomes the estimate. If not, the estimators discuss their estimates. The high and low estimators should especially share their reasons. After further discussion, each estimator reselects an estimate card, and all cards are again revealed at the same time.
&lt;br&gt;
The poker planning process is repeated until consensus is achieved or until the estimators decide that agile estimating and planning of a particular item needs to be deferred until additional information can be acquired.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Es&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Es.png&quot; alt=&quot;Es&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Es&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Es.png&quot; 
alt=&quot;Es : Estimations in Story Points&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Es : Estimations in Story Points
&lt;/b&gt;&lt;br&gt;
Story points are a unit of measure for expressing an estimate of the overall effort that will be required to fully implement a product backlog item or any other piece of work.
&lt;br&gt;
When we estimate with story points, we assign a point value to each item. The raw values we assign are unimportant. What matters are the relative values. A story that is assigned a 2 should be twice as much as a story that is assigned a 1. It should also be two-thirds of a story that is estimated as 3 story points.
&lt;br&gt;
Instead of assigning 1, 2 and 3, that team could instead have assigned 100, 200 and 300. Or 1 million, 2 million and 3 million. It is the ratios that matter, not the actual numbers.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Tv&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Tv.png&quot; 
alt=&quot;Tv : Team Velocity&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Tv : Team Velocity
&lt;/b&gt;&lt;br&gt;
Velocity is simply a metric based on the completed items in a sprint by a single team. The metric is completely subjective to that specific team, and should never be extrapolated for any other comparison.
&lt;br&gt;
Velocity is a reflective metric gathered from the sprint throughput of a stable team. Usually, a velocity metric is not considered valid until several sprints have been completed.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Es&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Es.png&quot; alt=&quot;Es&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Sp&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sp.png&quot; alt=&quot;Sp&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#So&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/So.png&quot; alt=&quot;So&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Su&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Su.png&quot; alt=&quot;Su&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;Product Development &lt;/h2&gt;


&lt;a name=&quot;Us&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Us.png&quot; 
alt=&quot;Us : User Stories&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Us : User Stories
&lt;/b&gt;&lt;br&gt;
In software development and product management, a user story is an informal, natural language description of one or more features of a software system. User stories are often written from the perspective of an end user or user of a system. They are often recorded on index cards, on Post-it notes, or in project management software. Depending on the project, user stories may be written by various stakeholders including clients, users, managers or development team members.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Oc&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Oc.png&quot; alt=&quot;Oc&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Po&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Po.png&quot; alt=&quot;Po&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Sg&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sg.png&quot; 
alt=&quot;Sg : Story Mapping&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Sg : Story Mapping
&lt;/b&gt;&lt;br&gt;
Story mapping consists of ordering user stories along two independent dimensions. The &quot;map&quot; arranges user activities along the horizontal axis in rough order of priority (or &quot;the order in which you would describe activities to explain the behaviour of the system&quot;). Down the vertical axis, it represents increasing sophistication of the implementation.
&lt;br&gt;
Given a story map so arranged, the first horizontal row represents a &quot;walking skeleton&quot;, a barebone but usable version of the product. Working through successive rows fleshes out the product with additional functionality.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Oc&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Oc.png&quot; alt=&quot;Oc&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Po&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Po.png&quot; alt=&quot;Po&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Us&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Us.png&quot; alt=&quot;Us&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Pv&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pv.png&quot; alt=&quot;Pv&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Pm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pm.png&quot; alt=&quot;Pm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Cc&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cc.png&quot; 
alt=&quot;Cc : 3 C&apos;s - Card, conversation, confirmation&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Cc : 3 C&apos;s - Card, conversation, confirmation
&lt;/b&gt;&lt;br&gt;
&quot;Card, Conversation, Confirmation&quot;; this formula (from Ron Jeffries) captures the components of a User Story:
&lt;br&gt;
a &lt;b&gt;&quot;Card&quot;&lt;/b&gt; (or often a Post-It note), a physical token giving tangible and durable form to what would otherwise only be an abstraction;
&lt;br&gt;
a &lt;b&gt;&quot;conversation&quot;&lt;/b&gt; taking place at different time and places during a project between the various people concerned by a given feature of a software product: customers, users, developers, testers; this conversation is largely verbal but most often supplemented by documentation;
&lt;br&gt;
the &lt;b&gt;&quot;confirmation&quot;&lt;/b&gt;, finally, the more formal the better, that the objectives the conversation revolved around have been reached.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Us&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Us.png&quot; alt=&quot;Us&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Pv&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pv.png&quot; 
alt=&quot;Pv : Product Vision&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Pv : Product Vision (elevator Pitch)
&lt;/b&gt;&lt;br&gt;
Every Scrum project needs a product vision that acts as the project&apos;s true north, sets the direction and guides the Scrum team. It is the overarching goal everyone must share – Product Owner, ScrumMaster, team, management, customers and other stakeholders. As Ken Schwaber puts it: &quot;The minimum plan necessary to start a Scrum project consists of a vision and a Product Backlog. The vision describes why the project is being undertaken and what the desired end state is.&quot;
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Pm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pm.png&quot; alt=&quot;Pm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Iv&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Iv.png&quot; 
alt=&quot;Iv : INVEST&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Iv : INVEST
&lt;/b&gt;&lt;br&gt;
The INVEST mnemonic for agile software projects was created by Bill Wake as a reminder of the characteristics of a good quality User Story:
&lt;br&gt;
&lt;b&gt;Independent&lt;/b&gt;: The User Story should be self-contained, in a way that there is no inherent dependency on another PBI;
&lt;br&gt;
&lt;b&gt;Negotiable&lt;/b&gt;: User Stories are not explicit contracts and should leave space for discussion;
&lt;br&gt;
&lt;b&gt;Valuable&lt;/b&gt;: A User Story must deliver value to the stakeholders;
&lt;br&gt;
&lt;b&gt;Estimatable&lt;/b&gt;: You must always be able to estimate the size of a User Story;
&lt;br&gt;
&lt;b&gt;Small&lt;/b&gt;: User Storys should not be so big as to become impossible to plan/task/prioritize with a certain level of accuracy;
&lt;br&gt;
&lt;b&gt;Testable&lt;/b&gt;The User Story or its related description must provide the necessary information to make test development possible.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Us&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Us.png&quot; alt=&quot;Us&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Oc&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Oc.png&quot; alt=&quot;Oc&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Po&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Po.png&quot; alt=&quot;Po&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;DevOps&lt;/h2&gt;


&lt;a name=&quot;Ff&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ff.png&quot; 
alt=&quot;Ff : Feature Flipping&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Ff : Feature Flipping
&lt;/b&gt;&lt;br&gt;
Feature flipping is a technique in software development that attempts to provide an alternative to maintaining multiple source-code branches (known as feature branches), such that the feature can be tested, even before it is completed and ready for release. Feature flipping is used to hide, enable or disable the features, during run time. For example, during the development process, the developer can enable the feature for testing and disable it for remaining users
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Cm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cm.png&quot; alt=&quot;Cm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Cd&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cd.png&quot; 
alt=&quot;Cd : Continuous Delivery&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Cd : Continuous Delivery
&lt;/b&gt;&lt;br&gt;
Continuous delivery (CD) is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be reliably released at any time. It aims at building, testing, and releasing software faster and more frequently. The approach helps reduce the cost, time, and risk of delivering changes by allowing for more incremental updates to applications in production. A straightforward and repeatable deployment process is important for continuous delivery.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Ci&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ci.png&quot; alt=&quot;Ci&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Td&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Td.png&quot; alt=&quot;Td&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Ap&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ap.png&quot; alt=&quot;Ap&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#In&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/In.png&quot; alt=&quot;In&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Sr&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sr.png&quot; alt=&quot;Sr&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Ic&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ic.png&quot; alt=&quot;Ic&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Zd&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Zd.png&quot; alt=&quot;Zd&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Vc&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Vc.png&quot; alt=&quot;Vc&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Bp&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Bp.png&quot; alt=&quot;Bp&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Ar&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ar.png&quot; alt=&quot;Ar&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Ap&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ap.png&quot; 
alt=&quot;Ap : Automated Provisioning&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Ap : Automated Provisioning
&lt;/b&gt;&lt;br&gt;
(Infrastructure as Code) Server provisioning is a set of actions to prepare a server with appropriate systems, data and software, and make it ready for network operation. Typical tasks when provisioning a server are: select a server from a pool of available servers, load the appropriate software (operating system, device drivers, middleware, and applications), appropriately customize and configure the system and the software to create or change a boot image for this server, and then change its parameters, such as IP address, IP Gateway to find associated network and storage resources (sometimes separated as resource provisioning) to audit the system
&lt;br&gt;
With DevOps and Automated Provisioning, this whole configuration pipeline should be completely automated and executable in one-click, either automatically or on-demand.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Ic&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ic.png&quot; alt=&quot;Ic&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;,
&lt;a href=&quot;#Cm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cm.png&quot; alt=&quot;Cm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;,
&lt;a href=&quot;#Vc&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Vc.png&quot; alt=&quot;Vc&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Ic&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ic.png&quot;
alt=&quot;Ic : Infrastructure Continuous Integration&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Ic : Infrastructure Continuous Integration
&lt;/b&gt;&lt;br&gt;
(Infrastructure as Code) Infrastructure Continuous Integration consists in leveraging Continuous Integration techniques to Infrastructure components.
&lt;br&gt;
The continuous integration system is necessarily complex, spanning the development, test and staging environments. The continuous integration build should continuously build and test the provisioning, configuring and maintaining of the various infrastructure components.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Ci&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ci.png&quot; alt=&quot;Ci&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Cm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cm.png&quot; alt=&quot;Cm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Ap&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ap.png&quot; alt=&quot;Ap&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Zd&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Zd.png&quot; 
alt=&quot;Zd : Zero Downtime Deployments&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Zd : Zero Downtime Deployments
&lt;/b&gt;&lt;br&gt;
A Zero Downtime Deployment consists in redeploying (typically for a software upgrade) a production system without any downtime appearing to end users. To achieve such lofty goals, redundancy becomes a critical requirement at every level of your infrastructure. There are various techniques involved such a canari release or blue-green deployments.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Cm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cm.png&quot; alt=&quot;Cm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Cm&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cm.png&quot; 
alt=&quot;Cm : Configuration Management&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Cm : Configuration Management
&lt;/b&gt;&lt;br&gt;
Configuration management is a class of tool supporting the automation of the configuration of a system, platform or software. It typically consists in &lt;i&gt;define-with-code&lt;/i&gt; the various config elements that prepare a provisioned compute resource (like a server or AWS Ec2 instance) for service (installing software, setting up users, configuring services, placing files with template-defined variables, defining external config resources like DNS records in a relevant zone).
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Vc&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Vc.png&quot; 
alt=&quot;Vc : Virtualization and Containers&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Vc : Virtualization and Containers
&lt;/b&gt;&lt;br&gt;
Hardware virtualization or platform virtualization refers to the creation of a virtual machine that acts like a real computer with an operating system. Software executed on these virtual machines is separated from the underlying hardware resources.
&lt;br&gt;
Containerization - also called container-based virtualization and application containerization - is an OS-level virtualization method for deploying and running distributed applications without launching an entire VM for each application. Instead, multiple isolated systems, called containers, are run on a single control host and access a single kernel.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Bp&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Bp.png&quot; 
alt=&quot;Bp : Build Pipelines&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Bp : Build Pipelines
&lt;/b&gt;&lt;br&gt;
Build pipelines are integrated views of downstream and upstream build jobs on a build server. Build pipelines are requires to automated all the various tasks towards continuous delivery such as : provisionning of the environment, build of the various software (with compilation, tests, packaging, etc.), deployment of the software components, applying configuration and testing the deployed platform.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Ic&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ic.png&quot; alt=&quot;Ic&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Ci&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ci.png&quot; alt=&quot;Ci&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Ar&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ar.png&quot; 
alt=&quot;Ar : Automated Releases&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Ar : Automated Releases
&lt;/b&gt;&lt;br&gt;
Release Automation consists in automating all the various steps required to release a new version of a software: building, testing, tagging, branching and deploying the binaries to a Binary management tools.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Bp&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Bp.png&quot; alt=&quot;Bp&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Bm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Bm.png&quot; alt=&quot;Bm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;St&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/St.png&quot; 
alt=&quot;St : Share the tools&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
St : Share the tools
&lt;/b&gt;&lt;br&gt;
Share the tools is a DevOps principles aimed at leveraging both Dev and Ops tools and practices to the other side of the wall. Developers should leverage their automation and building tool to Infrastructure Automation, Provisionning and Testing. Ops should share the production monitoring concerns with developers.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Os&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Os.png&quot; 
alt=&quot;Os : Operators are stakeholders&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Os : Operators are stakeholders
&lt;/b&gt;&lt;br&gt;
Operators as stakeholders is a DevOps principle stating that Operators should be considered the other users of the platform. They should be fully integrated in the Software Development Process. 
&lt;br&gt;
At specification time, operators should give their non-functional requirements just as business users give their functional requirement. Such non-functional requirements should be handled with same important and priority by the development team. 
&lt;br&gt;
At implementation time, operators should provide feedback and non-functional tests specifications continuously just as business users provides feedback on functional features. 
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Pm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pm.png&quot; alt=&quot;Pm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Or&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Or.png&quot; 
alt=&quot;Or : Operators in Rituals&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Or : Operators in Rituals
&lt;/b&gt;&lt;br&gt;
Operators in Rituals is a DevOps principle stating that operators should be integrated in the Development Team Rituals such as the Sprint Planning and Sprint Retrospective and represent non-functional constraints during these rituals just as the Product Owner represents the functional interests.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Sl&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sl.png&quot; alt=&quot;Sl&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#So&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/So.png&quot; alt=&quot;So&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Ds&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ds.png&quot; alt=&quot;Ds&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Cd&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cd.png&quot; alt=&quot;Cd&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Bm&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Bm.png&quot; 
alt=&quot;Bm : Binaries Management&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Bm : Binaries Management
&lt;/b&gt;&lt;br&gt;
A binary repository manager is a software tool designed to optimize the download and storage of binary files used and produced in software development. It centralizes the management of all the binary artifacts generated and used by the organization to overcome the complexity arising from the diversity of binary artifact types, their position in the overall workflow and the dependencies between them.
&lt;br&gt;
A binary repository is a software repository for packages, artifacts and their corresponding metadata. It can be used to store binary files produced by an organization itself, such as product releases and nightly product builds, or for third party binaries which must be treated differently for both technical and legal reasons.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;Lean Startup&lt;/h2&gt;


&lt;a name=&quot;Fl&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Fl.png&quot; 
alt=&quot;Fl : Feedback Loop&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Fl : Feedback Loop
&lt;/b&gt;&lt;br&gt;
The &lt;i&gt;Build-Measure-Learn&lt;/i&gt; feedback loop is one of the central principles of Lean Startup Method. 
&lt;br&gt;
A startup is to find a successful revenue model that can be developed with further investment. Build-Measure-Learn is a framework for establishing – and continuously improving – the effectiveness of new products, services and ideas quickly and cost-effectively.
&lt;br&gt;
In practice, the model involves a cycle of creating and testing hypotheses by building something small for potential customers to try, measuring their reactions, and learning from the results.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Sd&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Sd.png&quot; alt=&quot;Sd&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Cd&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Cd.png&quot; alt=&quot;Cd&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Oc&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Oc.png&quot; alt=&quot;Oc&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Pm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pm.png&quot; alt=&quot;Pm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Ft&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ft.png&quot; 
alt=&quot;Ft : feature Teams&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Ft : feature Teams
&lt;/b&gt;&lt;br&gt;
A &lt;i&gt;feature team&lt;/i&gt; is a long-lived, cross-functional, cross-component team that completes many end-to-end customer features—one by one. It is opposed to the traditional approach of &lt;i&gt;Component Team&lt;/i&gt; where a team is specialized on an individual software components and maintains it over several projects at the same time.
&lt;br&gt;
The Feature team approach seeks to avoid the bottlenecks usually appearing with Component Teams.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Fa&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Fa.png&quot; 
alt=&quot;Fa : Fail Fast&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Fa : Fail Fast
&lt;/b&gt;&lt;br&gt;
Fail fast means getting out of planning mode and into testing mode, eventually for every critical component of your model of change. Customer development is the process that embodies this principle and helps you determine which hypotheses to start with and which are the most critical for your new idea.
&lt;br&gt;
An important goal of the philosophy is to cut losses when testing reveals something isn&apos;t working and quickly try something else, a concept known as pivoting.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Pm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pm.png&quot; alt=&quot;Pm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Mv&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Mv.png&quot; 
alt=&quot;Mv : MVP&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Mv : MVP
&lt;/b&gt;&lt;br&gt;
In product development, the minimum viable product (MVP) is a product with just enough features to satisfy early customers, and to provide feedback for future development
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Pm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pm.png&quot; alt=&quot;Pm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Gb&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Gb.png&quot; 
alt=&quot;Gb : Get Out of the building&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Gb : Get Out of the building
&lt;/b&gt;&lt;br&gt;
If you are pre-Product/Market Fit and you aren&apos;t actually &quot;Getting out of the Building&quot; (actually talking to your customers), you aren&apos;t doing Customer Development, and your startup isn&apos;t a Lean Startup.
&lt;br&gt;
Again:  If you aren&apos;t actually talking to your customers, you aren&apos;t doing Customer Development.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;

&lt;a name=&quot;Pt&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pt.png&quot; 
alt=&quot;Pt : Pizza Teams&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Pt : Pizza Teams
&lt;/b&gt;&lt;br&gt;
The idea of a &quot;two pizza team&quot; was coined by Jeff Bezo, founder of Amazon.com. If you can&apos;t feed a team with two pizzas, it&apos;s too large. That limits a task force to five to seven people, depending on their appetites.&quot;
&lt;br&gt;
The underlying idea is that as a team&apos;s size grows, the amount of one-on-one communication channels tend to explode. 
&lt;br&gt;
Beyond ten, communication loses efficiency, cohesion diminishes, parasitism behaviors and power struggles appear, and the performance of the team decreases very rapidly with the number of members.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;As&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/As.png&quot; 
alt=&quot;As : Actionable Metrics&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
As : Actionable Metrics
&lt;/b&gt;&lt;br&gt;
The only metrics that entrepreneurs should invest energy in collecting are those that help them make decisions. Actionable Metrics are opposed to Vanity Metrics.
&lt;br&gt;
This is a precision of another fundamental Lean Startup practice which is &quot;Obsession of Measure&quot; stating that everything should be measured and no decision should be taken in the company if it is not supported by a Key Process Indicator or a Key Risk Indicator.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Pm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pm.png&quot; alt=&quot;Pm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Bb&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Bb.png&quot; 
alt=&quot;Bb : Build vs. Buy&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Bb : Build vs. Buy
&lt;/b&gt;&lt;br&gt;
This is a fundamental principle of the Lean Startup and the web giants : favor as much as possible building your own software, your own feature instead of buying a third party software or library.
&lt;br&gt;
When initiating a startup, having to pay fees to third party corporations before reaching a sustainable growth is suicidal.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Pm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pm.png&quot; alt=&quot;Pm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Ab&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ab.png&quot; 
alt=&quot;Ab : A/B Testing&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Ab : A/B Testing
&lt;/b&gt;&lt;br&gt;
In marketing and business intelligence, A/B testing is a term for a controlled experiment with two variants, A and B. It can be considered as a form of statistical hypothesis testing with two variants leading to the technical term, two-sample hypothesis testing, used in the field of statistics
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Pm&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pm.png&quot; alt=&quot;Pm&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;, 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;Kanban&lt;/h2&gt;



&lt;a name=&quot;Ko&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Ko.png&quot; 
alt=&quot;Ko : Kanban Board&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Ko : Kanban Board
&lt;/b&gt;&lt;br&gt;
A Kanban board is a work and workflow visualization tool that enables you to optimize the flow of your work. Physical Kanban boards typically use sticky notes on a whiteboard to communicate status, progress, and issues.
&lt;br&gt;
An agile corporation should use a KanBan board to monitor all its processes. 
&lt;br&gt;
A development team will typically use a Kanban board to monitor the Sprint backlog completion during a sprint.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;Kaizen &lt;/h2&gt;


&lt;a name=&quot;Kb&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Kb.png&quot; 
alt=&quot;Kb : Kaizen Burst&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Kb : Kaizen Burst
&lt;/b&gt;&lt;br&gt;
The Kaizen burst is a specific Kaizen process integrated the the development rituals. In Agile Software Development, it is really integrated in the Sprint Retrospective. This idea is to identify in a visual way (with a post-it on a board for instance) the weaknesses or problems in the development practices or processes. These boxes are called Kaizen burst.
&lt;br&gt;
Theses boxes are commented as actions are taken towards improvement and eventually removed when the weakness has been addressed or the problem solved.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#So&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/So.png&quot; alt=&quot;So&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Wh&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Wh.png&quot; 
alt=&quot;Wh : 5 Why&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Wh : 5 Why
&lt;/b&gt;&lt;br&gt;
5 Whys is an iterative interrogative technique used to explore the cause-and-effect relationships underlying a particular problem.
&lt;br&gt;
The primary goal of the technique is to determine the root cause of a defect or problem by repeating the question &quot;Why?&quot; Each answer forms the basis of the next question. The &quot;5&quot; in the name derives from an anecdotal observation on the number of iterations needed to resolve the problem.
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#So&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/So.png&quot; alt=&quot;So&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;FDD (Feature Driven Development)&lt;/h2&gt;


&lt;a name=&quot;Si&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Si.png&quot; 
alt=&quot;Si : SOLID principles&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Si : SOLID principles
&lt;/b&gt;&lt;br&gt;
In computer programming, the term SOLID is a mnemonic acronym for five design principles intended to make software designs more understandable, flexible and maintainable. The principles are a subset of many principles promoted by Robert C. Martin.
&lt;br&gt;
Though they apply to any object-oriented design, the SOLID principles can also form a core philosophy for methodologies such as agile development or Adaptive Software Development.
&lt;br&gt;
The 5 principles are as follows:
&lt;br&gt;
&lt;b&gt;SRP&lt;/b&gt; : Single responsibility principle - a class should have only a single responsibility (i.e. only one potential change in the software&apos;s specification should be able to affect the specification of the class)
&lt;br&gt;
&lt;b&gt;OCP&lt;/b&gt; : Open/closed principle - &quot;software entities ... should be open for extension, but closed for modification.&quot; 
&lt;br&gt;
&lt;b&gt;LSP&lt;/b&gt; : Liskov substitution principle - &quot;objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program.&quot; 
&lt;br&gt;
&lt;b&gt;ISP&lt;/b&gt; : Interface segregation principle - &quot;many client-specific interfaces are better than one general-purpose interface.&quot;
&lt;br&gt;
&lt;b&gt;DIP&lt;/b&gt; : Dependency inversion principle - one should &quot;depend upon abstractions, not concretions.&quot;
&lt;/p&gt;
&lt;p&gt;
Depends on 
&lt;a href=&quot;#Am&quot;&gt;&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; alt=&quot;Am&quot; class=&quot;pte-image-small&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;DAD&lt;/h2&gt;


&lt;a name=&quot;Pm&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Pm.png&quot; 
alt=&quot;Pm : Product Management Committee&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Pm : Product Management Committee
&lt;/b&gt;&lt;br&gt;
The Product Management Committee is both a team and a ritual that enforces a smart approach to product management.
&lt;br&gt;
Product Management consists in identifying and evolving your organization’s business vision; identifying and prioritizing potential products/solutions to support that vision; identifying, prioritizing, and allocating features to products under development; managing functional dependencies between products; and marketing those products to their potential customers.
&lt;br&gt;
The Product Management Committee is the weekly (or bi-weekly) ritual enforcing and supporting this process with the required role attending the committee. It is led by the product Owner which has more a role of facilitator and arbitrator that a formal decision role. The Product Owner represents the PMC to the development team.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;a name=&quot;Am&quot;&gt;&lt;/a&gt;
&lt;table class=&quot;pte noborder&quot;&gt;
	&lt;tr&gt;
        &lt;td&gt;
&lt;img src=&quot;https://www.niceideas.ch/agile_table/Am.png&quot; 
alt=&quot;Am : Architecture Committee&quot;
class=&quot;pte-image-big&quot; /&gt;
        &lt;/td&gt;
        &lt;td class=&quot;desc_right&quot;&gt;
&lt;p&gt;
&lt;b&gt;
Am : Architecture Committee
&lt;/b&gt;&lt;br&gt;
The Architecture Committee is responsible to analyze user stories and define Development Tasks. Every story should be specified, designed and discussed. Screen mockups if applicable should be drawn, acceptance criteria agreed, etc. 
&lt;br&gt;
Since the Architecture Committee is also responsible for estimating Stories, it&apos;s important that representatives of the Development Team, not only the Tech Leads and the Architects, but simple developers as well, take part in it.
&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;
&lt;br&gt;

&lt;p&gt;
(This article is available as a PDF document here &lt;a href=&quot;https://www.niceideas.ch/Agile_table.pdf&quot;&gt;https://www.niceideas.ch/Agile_table.pdf&lt;/a&gt; and a slideshare presentation there &lt;a href=&quot;https://www.slideshare.net/JrmeKehrli/periodic-table-of-agile-principles-and-practices&quot;&gt;https://www.slideshare.net/JrmeKehrli/periodic-table-of-agile-principles-and-practices&lt;/a&gt;)
&lt;/p&gt;


</description>          </item>
    <item>
    <guid isPermaLink="true">https://www.niceideas.ch/roller2/badtrash/entry/agile-planning-tools-and-processes</guid>
    <title>Agile Planning : tools and processes</title>
    <dc:creator>Jerome Kehrli</dc:creator>
    <link>https://www.niceideas.ch/roller2/badtrash/entry/agile-planning-tools-and-processes</link>
        <pubDate>Wed, 14 Jun 2017 14:42:48 -0400</pubDate>
    <category>Agile</category>
    <category>agile</category>
    <category>agile-planning</category>
    <category>devops</category>
    <category>lean-startup</category>
    <category>scrum</category>
    <category>visual-management</category>
    <category>xp</category>
    <atom:summary type="html">&lt;!-- Agile Planning : tools and processes --&gt;

&lt;p&gt;
All the work on Agility in the Software Engineering Business in the past 20 years, initiated by Kent Beck, Ward Cunningham and Ron Jeffries, comes from the finding that traditional engineering methodologies apply only poorly to the Software Engineering business.
&lt;/p&gt;
&lt;p&gt;
If you think about it, we are building bridges from the early stages of the Roman Empire, three thousand years ago. We are building heavy mechanical machinery for almost three hundred years. But we are really writing software for only fifty years.
&lt;br&gt;
In addition, designing a bridge or a mechanical machine is a lot more concrete than designing a Software. When an engineering team has to work on the very initial stage of the design of a bridge or mechanical machine, everyone in the team can picture the result in his mind in a few minutes and breaking it down to a set of single Components can be done almost visually in one&apos;s mind.
&lt;/p&gt;
&lt;p&gt;
A software, on the other hand, is a lot more abstract. This has the consequence that a software is &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/funny-developer-tale&quot;&gt;much harder to describe than any other engineering product which leads to many levels of misunderstanding&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The &lt;a href=&quot;https://en.wikipedia.org/wiki/Waterfall_model&quot;&gt;waterfall model&lt;/a&gt; of Project Management in Software Engineering really originates in the manufacturing and construction industries. 
&lt;br&gt;
Unfortunately, for the reasons mentionned above, despite being so widely used in the industry, it applies only pretty poorly to the Software Engineering business. &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-software-development-lessons-learned#sec11&quot;&gt;Most important problems&lt;/a&gt; it suffers from are as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Incomplete or moving specification:&lt;/b&gt; due to the abstract nature of software, it&apos;s impossible for business experts and business analysts to get it right the first time.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;The tunnel effect:&lt;/b&gt; we live in a very fast evolving world and businesses need to adapt all the time. The software delivered after 2 years of heavy development will fulfill (hardly, but let&apos;s admit it) the requirements that were true two years ago, not anymore today.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Drop of Quality to meet deadlines:&lt;/b&gt; An engineering project is always late, always. Things are just a lot worst with software.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Heightened tensions between teams:&lt;/b&gt; The misunderstanding between teams leads to tensions, and it most of the time turns pretty ugly pretty quick.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
So again, some 20 years ago, Beck, Cunningham and Jeffries started to formalize some of the practices they were successfully using to address the uncertainties, the overwhelming abstraction and the misunderstandings inherent to software development. They formalized it as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Extreme_programming&quot;&gt;eXtreme Programming&lt;/a&gt; methodology.
&lt;/p&gt;
&lt;p&gt;
A few years later, the same guys, with some other pretty well known Software Engineers, such as Alistair Cockburn and Martin Fowler, gathered together in a resort in Utah and wrote the &lt;a href=&quot;https://en.wikipedia.org/wiki/Agile_software_development#The_Agile_Manifesto&quot;&gt;Manifesto for Agile Software Development&lt;/a&gt; in which they shared the essential principles and practices they were successfully using to address problems with more traditional and heavyweight software development methodologies.
&lt;/p&gt;
&lt;p&gt;
Today, &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-landscape&quot;&gt;Agility is a lot of things&lt;/a&gt; and the set of principles of practices in the whole Agile family is very large. Unfortunately, most of them require a lot of experience to be understood and then applied successfully within an organization.
&lt;/p&gt;
&lt;p&gt;
Unfortunately, the complexity of embracing a sound Agile Software Development Methodology and the required level of maturity a team has to have to benefit from its advantages is really completely underestimated.
&lt;br&gt;
I cannot remember the number of times I heard a team pretending it was an Agile team because it was doing a Stand up in the morning and deployed Jenkins to run the unit tests at every commit. But yeah, honestly I cannot blame them. It is actually difficult to understand Agile Principles and Practices when one never suffered from the very drawbacks and problems they are addressing.
&lt;/p&gt;
&lt;p&gt;
I myself am not an agilist. Agility is not a passion, neither something that thrills me nor something that I love studying in my free time. Agility is to me simply a necessity. I discovered and applied Agile Principles and practices out of necessity and urgency, to address specific issues and problems I was facing with the way my teams were developing software.
&lt;/p&gt;
&lt;p&gt;
The latest problem I focused on was Planning. Waterfall and RUP focus a lot on planning and are often mentioned to be superior to Agile methods when it comes to forecasting and planning.
&lt;br&gt;
I believe that this is true when Agility is embraced only incompletely. As a matter of fact, I believe that Agility leads to much better and much more reliable forecasts than traditional methods mostly because:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With Agility, it becomes easy to update and adapt Planning and forecasts to always match the evolving reality and the changes in direction and priority.&lt;/li&gt;
&lt;li&gt;When embracing agility as a whole, the tools put in the hands of Managers and Executive are first much simpler and second more accurate than traditional planning tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
In this article, I intend to present the fundamentals, the roles, the processes, the rituals and the values that I believe a team would need to embrace to achieve success down the line in Agile Software Development Management - Product Management, Team Management and Project Management - with the ultimate goal of making planning and forecasting as simple and efficient as it can be.
&lt;br&gt;
All of this is a reflection of the tools, principles and practices we have embraced or are introducing in my current company.
&lt;/p&gt;</atom:summary>        <description>&lt;!-- Agile Planning : tools and processes --&gt;

&lt;p&gt;
All the work on Agility in the Software Engineering Business in the past 20 years, initiated by Kent Beck, Ward Cunningham and Ron Jeffries, comes from the finding that traditional engineering methodologies apply only poorly to the Software Engineering business.
&lt;/p&gt;
&lt;p&gt;
If you think about it, we are building bridges from the early stages of the Roman Empire, three thousand years ago. We are building heavy mechanical machinery for almost three hundred years. But we are really writing software for only fifty years.
&lt;br&gt;
In addition, designing a bridge or a mechanical machine is a lot more concrete than designing a Software. When an engineering team has to work on the very initial stage of the design of a bridge or mechanical machine, everyone in the team can picture the result in his mind in a few minutes and breaking it down to a set of single Components can be done almost visually in one&apos;s mind.
&lt;/p&gt;
&lt;p&gt;
A software, on the other hand, is a lot more abstract. This has the consequence that a software is &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/funny-developer-tale&quot;&gt;much harder to describe than any other engineering product which leads to many levels of misunderstanding&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The &lt;a href=&quot;https://en.wikipedia.org/wiki/Waterfall_model&quot;&gt;waterfall model&lt;/a&gt; of Project Management in Software Engineering really originates in the manufacturing and construction industries. 
&lt;br&gt;
Unfortunately, for the reasons mentionned above, despite being so widely used in the industry, it applies only pretty poorly to the Software Engineering business. &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-software-development-lessons-learned#sec11&quot;&gt;Most important problems&lt;/a&gt; it suffers from are as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Incomplete or moving specification:&lt;/b&gt; due to the abstract nature of software, it&apos;s impossible for business experts and business analysts to get it right the first time.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;The tunnel effect:&lt;/b&gt; we live in a very fast evolving world and businesses need to adapt all the time. The software delivered after 2 years of heavy development will fulfill (hardly, but let&apos;s admit it) the requirements that were true two years ago, not anymore today.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Drop of Quality to meet deadlines:&lt;/b&gt; An engineering project is always late, always. Things are just a lot worst with software.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Heightened tensions between teams:&lt;/b&gt; The misunderstanding between teams leads to tensions, and it most of the time turns pretty ugly pretty quick.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
So again, some 20 years ago, Beck, Cunningham and Jeffries started to formalize some of the practices they were successfully using to address the uncertainties, the overwhelming abstraction and the misunderstandings inherent to software development. They formalized it as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Extreme_programming&quot;&gt;eXtreme Programming&lt;/a&gt; methodology.
&lt;/p&gt;
&lt;p&gt;
A few years later, the same guys, with some other pretty well known Software Engineers, such as Alistair Cockburn and Martin Fowler, gathered together in a resort in Utah and wrote the &lt;a href=&quot;https://en.wikipedia.org/wiki/Agile_software_development#The_Agile_Manifesto&quot;&gt;Manifesto for Agile Software Development&lt;/a&gt; in which they shared the essential principles and practices they were successfully using to address problems with more traditional and heavyweight software development methodologies.
&lt;/p&gt;
&lt;p&gt;
Today, &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-landscape&quot;&gt;Agility is a lot of things&lt;/a&gt; and the set of principles of practices in the whole Agile family is very large. Unfortunately, most of them require a lot of experience to be understood and then applied successfully within an organization.
&lt;/p&gt;
&lt;p&gt;
Unfortunately, the complexity of embracing a sound Agile Software Development Methodology and the required level of maturity a team has to have to benefit from its advantages is really completely underestimated.
&lt;br&gt;
I cannot remember the number of times I heard a team pretending it was an Agile team because it was doing a Stand up in the morning and deployed Jenkins to run the unit tests at every commit. But yeah, honestly I cannot blame them. It is actually difficult to understand Agile Principles and Practices when one never suffered from the very drawbacks and problems they are addressing.
&lt;/p&gt;
&lt;p&gt;
I myself am not an agilist. Agility is not a passion, neither something that thrills me nor something that I love studying in my free time. Agility is to me simply a necessity. I discovered and applied Agile Principles and practices out of necessity and urgency, to address specific issues and problems I was facing with the way my teams were developing software.
&lt;/p&gt;
&lt;p&gt;
The latest problem I focused on was Planning. Waterfall and RUP focus a lot on planning and are often mentioned to be superior to Agile methods when it comes to forecasting and planning.
&lt;br&gt;
I believe that this is true when Agility is embraced only incompletely. As a matter of fact, I believe that Agility leads to much better and much more reliable forecasts than traditional methods mostly because:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With Agility, it becomes easy to update and adapt Planning and forecasts to always match the evolving reality and the changes in direction and priority.&lt;/li&gt;
&lt;li&gt;When embracing agility as a whole, the tools put in the hands of Managers and Executive are first much simpler and second more accurate than traditional planning tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
In this article, I intend to present the fundamentals, the roles, the processes, the rituals and the values that I believe a team would need to embrace to achieve success down the line in Agile Software Development Management - Product Management, Team Management and Project Management - with the ultimate goal of making planning and forecasting as simple and efficient as it can be.
&lt;br&gt;
All of this is a reflection of the tools, principles and practices we have embraced or are introducing in my current company.
&lt;/p&gt;

&lt;!-- HERE --&gt;

&lt;p&gt;
This article is available as a slideshare presentation here : &lt;a href=&quot;https://www.slideshare.net/JrmeKehrli/agility-and-planning-tools-and-processes&quot;&gt;https://www.slideshare.net/JrmeKehrli/agility-and-planning-tools-and-processes&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Also, you can read a PDF version of this article here : &lt;a href=&quot;https://www.niceideas.ch/Agile_Planning.pdf&quot;&gt;https://www.niceideas.ch/Agile_Planning.pdf&lt;/a&gt;.
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;Summary&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec1&quot;&gt;1. Introduction&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec2&quot;&gt;2. The Fundamentals&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec21&quot;&gt;2.1 eXtreme Programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec22&quot;&gt;2.2 Scrum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec23&quot;&gt;2.3 DevOps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec24&quot;&gt;2.4 Lean Startup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec25&quot;&gt;2.5 Visual Management and Kanban&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec251&quot;&gt;2.5.1 Story Map&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec252&quot;&gt;2.5.2 Product Backlog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec253&quot;&gt;2.5.3 Kanban Board&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec254&quot;&gt;2.5.4 User Stories&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec3&quot;&gt;3. Principles&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec31&quot;&gt;3.1 The Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec32&quot;&gt;3.2 The Organization&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec321&quot;&gt;3.2.1 Requires roles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec322&quot;&gt;3.2.2 Required committees and teams&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec33&quot;&gt;3.3 The Processes&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec331&quot;&gt;3.3.1 Design Process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec332&quot;&gt;3.3.2 Estimation Process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec333&quot;&gt;3.3.3 Product Kanban Board Maintenance Process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec334&quot;&gt;3.3.4 Story Map and Backlog synchronization Process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec335&quot;&gt;3.3.5 Forecasting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec336&quot;&gt;3.3.6 Development Process: Scrum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec34&quot;&gt;3.4 The Rituals&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec341&quot;&gt;3.4.1 Product Management Committee&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec342&quot;&gt;3.4.2 Architecture Committee&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec343&quot;&gt;3.4.3 Sprint Management Committee&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec344&quot;&gt;3.4.4 Development Team - Daily Scrum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec35&quot;&gt;3.5 The Values&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec4&quot;&gt;4. Overview of the whole process&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec5&quot;&gt;5. Return on Practices&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec5&quot;&gt;6. Conclusion&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;a name=&quot;sec1&quot;&gt;&lt;/a&gt;
&lt;h2&gt;1. Introduction &lt;/h2&gt;

&lt;p&gt;
As stated in my abstract above, embracing sound Agile principles and applying relevant Agile practices is all but easy. 
&lt;br&gt;
First, out of all the Agile methods available and described and the overwhelming set of practices and principles, an organization needs to understand which makes sense to it. Adopting a method, a set or principles or practices blindly, because the paper said it was good, or because the Scrum Master believes it is &lt;i&gt;state of the art&lt;/i&gt; makes only little sense.
&lt;br&gt;
The set of methods described nowadays is pretty huge and unfortunately, each and every of these practices make sense whenever a team, an organization or a whole corporation suffers from a drawback or an issue it addresses or simply benefits from its advantages.
&lt;/p&gt;
&lt;p&gt;
The whole set of Agile methods along with their principles and practices are brilliantly represented by Chris Web on the following infographic:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d028b3c0-5332-4ae7-a91a-dc21b7551299&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px;&quot; alt=&quot;The Agile Lansdcape from Deloitte&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d028b3c0-5332-4ae7-a91a-dc21b7551299&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;centered&quot;&gt;
[Click to enlarge]&lt;br&gt;
(Source : Christopher Webb - LAST Conference 2016 Agile Landscape - &lt;a href=&quot;https://www.slideshare.net/ChrisWebb6/last-conference-2016-agile-landscape-presentation-v1&quot;&gt;https://www.slideshare.net/ChrisWebb6/last-conference-2016-agile-landscape-presentation-v1&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;
Junior teams should go with a &lt;i&gt;base method&lt;/i&gt; that makes sense to it, such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Scrum_(software_development)&quot;&gt;Scrum&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Kanban_(development)&quot;&gt;Kanban&lt;/a&gt; &lt;b&gt;while remembering that none of it makes sense without a strict respect to the whole set of &lt;a href=&quot;https://en.wikipedia.org/wiki/Extreme_programming&quot;&gt;XP principles and practices&lt;/a&gt;&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
More experienced teams will likely come up with their own methodology, cleverly built from the principles and practices of several underlying methods.
&lt;/p&gt;
&lt;p&gt;
Again, in my opinion &lt;b&gt;XP is the most fundamental building block on which all the rest is built&lt;/b&gt;, not a method among others. 
&lt;br&gt;
I often read papers online presenting XP as one Agile Software Development Method among others. My point of view is very different. I strongly believe - and experience everyday - that XP proposes the fundamental principles and practices on which are built all the other methods. 
&lt;br&gt;
Without a thorough adoption of XP principles and practices, one cannot benefit from the full advantages of Agility. In addition, some principles and practices proposes by other methods such as DevOps, leverage on some XP principles and practices but never voids them.
&lt;/p&gt;
&lt;p&gt;
When explaining this, I like to recover this schema I wrote a few years ago when I was doing consulting missions around Agility and Digital Transformation:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/61280dad-cbae-4bfe-bcaa-a75389e3b1e5&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 550px; &quot; alt=&quot;Pyramid of Agile Practices&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/61280dad-cbae-4bfe-bcaa-a75389e3b1e5&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
This reads as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Without a proper understanding and adoption of eXtreme Programming values, principles and practices, moving towards &lt;i&gt;Agile Software Development&lt;/i&gt; will be difficult.&lt;/li&gt;
&lt;li&gt;Without Agility throughout the IT processes, both on the development side (Agile) and on the Production side (DevOps), embracing Lean Startup practices and raising Agility above the IT Department will be difficult.&lt;/li&gt;
&lt;li&gt;Without a sound understanding of the Lean Startup Philosophy and practices and a company-wide Agile process (such as a company wide Kanban), transforming the company to an Agile Corporation will be difficult. &lt;/li&gt;
&lt;li&gt;Finally, only Agile Corporations can really imagine successfully achieving a Digital Transformation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
But then again, referring to Chris Webb&apos;s Agile Landscape, picking up the practices that make sense and have an added value in any context is the choice of every organization. Every different mature agile organization will use a slightly different set of practices than every other.
&lt;/p&gt;
&lt;p&gt;
I will now be presenting the fundamental set of practices I deem important when it comes to successfully embracing Agile Planning and Agile Software Development.
&lt;/p&gt;


&lt;a name=&quot;sec2&quot;&gt;&lt;/a&gt;
&lt;h2&gt;2. The Fundamentals &lt;/h2&gt;

&lt;p&gt;
The set of practices I deem essential to embrace &lt;i&gt;Agile Planning&lt;/i&gt; comes from the following methods: XP, Scrum, Kanban, DevOps, Lean Startup and a lot of Visual Management tricks.
&lt;/p&gt;


&lt;a name=&quot;sec21&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.1 eXtreme Programming &lt;/h3&gt;

&lt;p&gt;
e&lt;b&gt;X&lt;/b&gt;treme &lt;b&gt;P&lt;/b&gt;rogramming (XP) is the most fundamental software development method from the Agile tree that focuses on the implementation of an application, without neglecting the project management aspect. XP is suitable for small teams with changing needs. XP pushes to extreme levels simple principles.
&lt;/p&gt;
&lt;p&gt;
The &lt;i&gt;eXtreme programming&lt;/i&gt; method was invented by Kent Beck, Ward Cunningham, Ron Jeffries and Palleja Xavier during their work on the project &lt;i&gt;C3&lt;/i&gt;. C3 was the calculation of compensation project at Chrysler. 
&lt;br&gt;
Kent Beck, project manager in March 1996, began to refine the development method used on the project. It was officially born in October 1999 with Kent Beck&apos;s &lt;i&gt;Extreme Programming Explained&lt;/i&gt; book.
&lt;/p&gt;
&lt;p&gt;
In the book Extreme Programming Explained, the method is defined as:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An attempt to reconcile the human with productivity;&lt;/li&gt;
&lt;li&gt;A mechanism to facilitate social change;&lt;/li&gt;
&lt;li&gt;A way of improvement;&lt;/li&gt;
&lt;li&gt;A style of development;&lt;/li&gt;
&lt;li&gt;A discipline in the development of computer applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Its main goal is to reduce the costs of change. In traditional methods, needs are defined and often fixed at the start of the IT project, which increases the subsequent costs of modifications. XP is committed to making the project more flexible and open to change by introducing core &lt;b&gt;values&lt;/b&gt;, &lt;b&gt;principles&lt;/b&gt; and &lt;b&gt;practices&lt;/b&gt;:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/660a5518-bd24-4f68-b50d-2efc2790f248&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;extreme Programming in a Nutshell&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/660a5518-bd24-4f68-b50d-2efc2790f248&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;

The principles of this method are not new: they have existed in the software industry for decades and in management methods for even longer. The originality of the method is to push them to the extreme:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Since the code review is a good practice, it will be done permanently (by a binomial);&lt;/li&gt;
&lt;li&gt;Since the tests are useful, they will be done systematically before each implementation;&lt;/li&gt;
&lt;li&gt;Since the design is important, it will be done throughout the project (refactoring);&lt;/li&gt;
&lt;li&gt;Since simplicity makes it possible to advance faster, we will always choose the simplest solution;&lt;/li&gt;
&lt;li&gt;Since understanding is important, we will define and evolve metaphors together;&lt;/li&gt;
&lt;li&gt;Since the integration of the modifications is crucial, we will do it several times a day;&lt;/li&gt;
&lt;li&gt;Since the needs evolve rapidly, we will make cycles of development very rapid to adapt to the change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The practices listed by the eXtreme Programming method form the fundamental Software Engineering Practices of Agility. 
&lt;br&gt;
Interestingly, one cannot pick up a subset of these practices and believe that it should work. Kent Beck uses the following schematic to illustrate how these practices work together and depend on each others:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ffb1d3a9-7fef-42f5-9a73-f51d6f97d2f8&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px; &quot; alt=&quot;XP Practices&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ffb1d3a9-7fef-42f5-9a73-f51d6f97d2f8&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
All of this makes a lot of sense if you think of it: doing refactorings without TDD would be suicidal, Continuous Integration without TDD as well, Testing without simple design is complicated, Simple Design is enforced by TDD, etc.
&lt;/p&gt;

&lt;a name=&quot;sec22&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.2 Scrum &lt;/h3&gt;

&lt;p&gt;
Scrum is a schematic organization of complex product development. It is defined by its creators as an &lt;i&gt;&quot;iterative holistic framework that focuses on common goals by delivering productive and creative products of the highest possible value&quot;&lt;/i&gt; 
&lt;/p&gt;
&lt;p&gt;
This organizational scheme is based on the division of a project into time boxes, called &lt;i&gt;&quot;sprints&quot;&lt;/i&gt;. A sprint can last between a few days and a month (with a preference for two weeks). 
&lt;br&gt;
Each sprint starts with an estimate followed by operational planning. The sprint ends with a demonstration of what has been completed.
&lt;br&gt;
Before starting a new sprint, the team makes a retrospective. This technique analyzes the progress of the completed sprint, in order to improve its practices (Continuous Improvement / Kaizen). 
&lt;br&gt;
The work flow of the development team is facilitated by its self-organization, so there should be no formal Project Manager but a Team Leader instead with a coaching role more than a management role.
&lt;/p&gt;
&lt;p&gt;
The Scrum process can be represented as follows:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/0d0237c0-20c6-47d2-8114-b85066c6e789&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px;&quot; alt=&quot;Overview of Scrum process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/0d0237c0-20c6-47d2-8114-b85066c6e789&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Some more information about scrum is available in &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-software-development-lessons-learned#sec13&quot;&gt;a previous article here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Working with Story Points&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
In waterfall, managers determine a team member&apos;s workload capacity in terms of time. Managers ask selected developers to estimate how long they anticipate certain tasks will take and then assign work based on that team member&apos;s total available time. In waterfall, tests are done after coding by specific job titles rather than written in conjunction with the code. 
&lt;br&gt;
The downsides of waterfall are well known: work is always late, there are always quality problems, some people are always waiting for other people, and there&apos;s always a last minute crunch to meet the deadline.
&lt;/p&gt;
&lt;p&gt;
Scrum teams take a radically different approach. 
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First of all, entire Scrum teams, rather than individuals, take on the work. The whole team is responsible for each Product Backlog Item. The whole team is responsible for a tested product. There&apos;s no &quot;my work&quot; vs. &quot;your work.&quot; So we focus on collective effort per Product Backlog Item rather than individual effort per task. &lt;/li&gt;
&lt;li&gt;Second, Scrum teams prefer to compare items to each other, or estimate them in relative units rather than absolute time units. &lt;b&gt;Ultimately this produces better forecasts.&lt;/b&gt; &lt;/li&gt;
&lt;li&gt;Thirdly, Scrum teams break customer-visible requirements into the smallest possible stories, reducing risk dramatically. When there&apos;s too much work for 7 people, we organize into feature teams to eliminate dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Planning poker&lt;/b&gt;, also called Scrum poker, is a consensus-based, gamified technique for estimating, mostly used to estimate effort or relative size of development goals in software development. 
&lt;br&gt;
In planning poker, members of the group make estimates by playing numbered cards face-down to the table, instead of speaking them aloud. The cards are revealed, and the estimates are then discussed. By hiding the figures in this way, the group can avoid the cognitive bias of anchoring, where the first number spoken aloud sets a precedent for subsequent estimates.
&lt;/p&gt;
&lt;p&gt;
The cards in the deck have numbers on them. A typical deck has cards showing the Fibonacci sequence including a zero: 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89; other decks use similar progressions.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/54d9699f-11cf-40ee-bc89-f7ceeab60db2&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 200px; &quot; alt=&quot;Planning Poker&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/54d9699f-11cf-40ee-bc89-f7ceeab60db2&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The reason to use planning poker is to avoid the influence of the other participants. If a number is spoken, it can sound like a suggestion and influence the other participants&apos; sizing. Planning poker should force people to think independently and propose their numbers simultaneously. This is accomplished by requiring that all team members disclose their estimates simultaneously. Individuals show their cards at once, inspiring the term &quot;&lt;i&gt;planning poker&lt;/i&gt;.&quot; 
&lt;/p&gt;
&lt;p&gt;
In Scrum these numbers are called &lt;b&gt;Story Points&lt;/b&gt; - or &lt;b&gt;SP&lt;/b&gt;.
&lt;/p&gt;


&lt;a name=&quot;sec23&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.3 DevOps &lt;/h3&gt;

&lt;p&gt;
DevOps is a methodology capturing the practices adopted from the very start by the web giants who had a unique opportunity as well as a strong requirement to invent new ways of working due to the very nature of their business: the need to evolve their systems at an unprecedented pace as well as extend them and their business sometimes on a daily basis. 
&lt;/p&gt;
&lt;p&gt;
DevOps is not a question of tools, or mastering chef or docker. DevOps is a methodology, a set of principles and practices that help both developers and operators reach their goals while maximizing value delivery to the customers or the users as well as the quality of these deliverables.
&lt;/p&gt;
&lt;p&gt;
The problem comes from the fact that developers and operators - while both required by corporations with large IT departments - have very different objectives.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/472d552f-71ea-4640-a815-026e18cd865e&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 450px; &quot; alt=&quot;Wall of Confusion&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/472d552f-71ea-4640-a815-026e18cd865e&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
DevOps consists mostly in extending agile development practices by further streamlining the movement of software change thru the build, validate, deploy and delivery stages, while empowering cross-functional teams with full ownership of software applications - from design thru production support.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/77393bca-f284-443d-a48d-b1fadbc97789&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;DevOps&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/77393bca-f284-443d-a48d-b1fadbc97789&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
DevOps encourages &lt;b&gt;communication&lt;/b&gt;, &lt;b&gt;collaboration&lt;/b&gt;, &lt;b&gt;integration&lt;/b&gt; and &lt;b&gt;automation&lt;/b&gt; among software developers and IT operators in order to improve both the speed and quality of delivering software.
&lt;/p&gt;
&lt;p&gt;
DevOps teams focus on standardizing development environments and automating delivery processes to improve delivery predictability, efficiency, security and maintainability. The DevOps ideals provide developers more control of the production environment and a better understanding of the production infrastructure. 
&lt;br&gt;
DevOps encourages empowering teams with the autonomy to build, validate, deliver and support their own applications. 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;So what are the core principles ?&lt;/b&gt;
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/f37a1f42-86dd-4fef-a13e-e6b043c9c478&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 450px; &quot; alt=&quot;DevOps principles and practices&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/f37a1f42-86dd-4fef-a13e-e6b043c9c478&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
I presented these principles and practices in details in &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/devops-explained&quot;&gt;my previous article dedicated to devops.&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
DevOps is a revolution that aims at addressing the wall of confusion between development teams and operation teams in big corporations having large IT departments where these roles are traditionally well separated and isolated.
&lt;/p&gt;

&lt;a name=&quot;sec24&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.4 Lean Startup &lt;/h3&gt;

&lt;p&gt;
Some years ago, Eric Ries, Steve Blank and others initiated &lt;i&gt;The Lean Startup&lt;/i&gt; movement. The Lean Startup is a movement, an inspiration, a set of principles and practices that any entrepreneur initiating a startup would be well advised to follow. 
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/8b002746-dd21-4668-970e-dafcaa864567&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Lean Startup Movement&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/8b002746-dd21-4668-970e-dafcaa864567&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
In my opinion, the most fundamental aspect of Lean Startup is the &lt;i&gt;Build-Measure-Learn&lt;/i&gt; loop.
&lt;br&gt;
The fundamental activity of a startup is to turn ideas into products, measure how customers respond, and then learn whether to pivot or persevere. All successful startup processes should be geared to accelerate that feedback loop.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4b4e8fe7-e841-46cc-996b-6b00df12b175&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 650px; &quot; alt=&quot;Build-Measure-Learn&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4b4e8fe7-e841-46cc-996b-6b00df12b175&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The five-part version of the Build-Measure-Learn schema helps us see that the real intent of building is to test &lt;i&gt;&quot;ideas&quot;&lt;/i&gt; - not just to build blindly without an objective. 
&lt;br&gt;
The need for &quot;data&quot; indicates that after we measure our experiments we&apos;ll use the data to further refine our learning. And the new learning will influence our next ideas. So we can see that the goal of Build-Measure-Learn isn&apos;t just to build things, the goal is to build things to validate or invalidate the initial idea.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;The four steps to the Epiphany&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Shortly put, Steve Blank proposes that companies need a &lt;b&gt;Customer Development process&lt;/b&gt; that complements, or even in large portions replaces, their &lt;i&gt;Product Development Process&lt;/i&gt;. The &lt;i&gt;Customer Development process&lt;/i&gt; goes directly to the theory of &lt;a href=&quot;https://en.wikipedia.org/wiki/Product/market_fit&quot;&gt;Product/Market Fit&lt;/a&gt;. 
&lt;br&gt;
In &quot;&lt;i&gt;The four steps to the Epiphany&lt;/i&gt;&quot;, Steve Blank provides a roadmap for how to get to Product/Market Fit.
&lt;/p&gt;
&lt;p&gt;
The four stages the &lt;i&gt;Customer Development Model&lt;/i&gt; are: customer discovery, customer validation, customer creation, and company creation.
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Customer discovery&lt;/b&gt;: understanding customer problems and needs&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Customer validation&lt;/b&gt;: developing a sales model that can be replicated&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Customer creation / Get new Customers&lt;/b&gt;: creating and driving end user demand&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Customer building / Company Creation&lt;/b&gt;: transitioning from learning to executing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
We can represent them as follows:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2f0ac2c3-13b4-4a24-a2fd-61ef32a66941&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 750px; &quot; alt=&quot;Lean Startup Practices&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2f0ac2c3-13b4-4a24-a2fd-61ef32a66941&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
I added to the schema above the most essential principles and practices introduced and discussed by &lt;i&gt;the Lean Startup&lt;/i&gt; approach.
&lt;/p&gt;
&lt;p&gt;
I discussed these principles and practices in length in &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/lean-startup-a-focus-on&quot;&gt;a previous article on this blog&lt;/a&gt;.
&lt;/p&gt;



&lt;a name=&quot;sec25&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.5 Visual Management and Kanban &lt;/h3&gt;

&lt;p&gt;
Visual Management is an English terminology that combines several &lt;i&gt;Lean management&lt;/i&gt; concepts centered on visual perception. The aim is to put the information and its context in order to make the work and the decision-making obvious.
&lt;/p&gt;
&lt;p&gt;
Visual Management is an answer to the well known credo &lt;i&gt;&quot;You can&apos;t manage what you can&apos;t see&quot;&lt;/i&gt;. It finds its root in &lt;i&gt;Obeya War Rooms&lt;/i&gt;:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/01215572-e424-4fdf-8715-5cd4af1997bf&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;Toyota Obeya war Room&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/01215572-e424-4fdf-8715-5cd4af1997bf&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source : &lt;a href=&quot;http://alexsibaja.blogspot.ch/2014/08/obeya-war-room-powerful-visual.html&quot;&gt;http://alexsibaja.blogspot.ch/2014/08/obeya-war-room-powerful-visual.html&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Obeya (from Japanese &lt;i&gt;&quot;large room&quot;&lt;/i&gt; or &lt;i&gt;&quot;war room&quot;&lt;/i&gt;) refers to a form of project management used in many Asian companies, initially and including Toyota, and is a component of &lt;i&gt;lean manufacturing&lt;/i&gt; and in particular the Toyota Production System.
&lt;br&gt;
During the product and process development, all individuals involved in managerial planning meet in a &lt;i&gt;&quot;great room&quot;&lt;/i&gt; to speed communication and decision-making. This is intended to reduce &lt;i&gt;&quot;departmental thinking&quot;&lt;/i&gt; and improve on methods like email and social networking. The Obeya can be understood as a team spirit improvement tool at an administrative level.
&lt;/p&gt;
&lt;p&gt;
Nowadays, visual management is very much linked to &lt;i&gt;Lean Management&lt;/i&gt; and Lean Startup, but IMHO it&apos;s really a field on its own. In the field of &lt;b&gt;Agile Planning&lt;/b&gt;, I believe that Visual Management with sound tools and approaches is not optional.
&lt;br&gt;
At the end of the day, as we ill see, a good Project Management tool is a tool than enables anyone in the company to understand what is achievable in a given time or what time is required to deliver a given scope within a few minutes. And &lt;b&gt;nothing competes with Visual Tools&lt;/b&gt; in this regards.
&lt;/p&gt;
&lt;p&gt;
I will introduce here the fundamental tools I believe an Agile team should consider when it comes to Visual Management:
&lt;/p&gt;


&lt;a name=&quot;sec251&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.5.1 Story Map&lt;/h4&gt;

&lt;p&gt;
The purpose of the Story Map is that arranging user stories into a helpful shape - a map - is usually deemed as most appropriate.
&lt;br&gt;
A Story Map is a visual management tool aimed at presenting the situation of the Software or the features to be implemented in a clear and graphical way. A Story Map is composed by user stories (see below). 
&lt;/p&gt;
&lt;p&gt;
A small story map may look like something like this:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d68d069a-2c6b-4771-b0d1-1f26fc3ec528&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Story map Principle&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d68d069a-2c6b-4771-b0d1-1f26fc3ec528&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
At the top of the map are &quot;big stories.&quot; We call them &lt;b&gt;themes&lt;/b&gt;. A theme is sort of a big thing that people do - something that has lots of steps, and doesn&apos;t always have a precise workflow. A theme is a big category containing actual user stories grouped in &lt;b&gt;Epics&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
Epics are big user stories such as the one mentioned in example above. They usually involve a lot of development and cannot be considered as is in an actual product backlog. For this reason, Epics are split in a sub-set of &lt;b&gt;stories&lt;/b&gt;, more precise and concrete that are candidate to be put in an actual product backlog.
&lt;/p&gt;
&lt;p&gt;
I presented more information on Story Maps in &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-software-development-lessons-learned#sec32&quot;&gt;a previous article here&lt;/a&gt;.
&lt;br&gt;
For the moment, let&apos;s just remember that there is an important notion of &lt;b&gt;priority&lt;/b&gt; on the vertical scale: the lower a story, the lesser its priority.
&lt;br&gt;
There is also a les obvious notion of priority horizontally: stories on the left should be implemented first since they have a greater value than the stories on the right, but all of that of course with respect of the more important vertical priority.
&lt;br&gt;
Long story short: the development team needs to implement all the stories of a row, from left to right, before it can consider the stories of the next row.
&lt;/p&gt;
&lt;p&gt;
An pretty good and straightforward  example of a Story Map related to an &lt;i&gt;email client application&lt;/i&gt;:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d68d069a-2c6b-4771-b0d1-1f26fc3ec528&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 750px; &quot; alt=&quot;Story map Demo&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d68d069a-2c6b-4771-b0d1-1f26fc3ec528&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
And a real world example built during an real life Workshop:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/378db356-dcaf-44fb-b495-73571ecd8865&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 750px; &quot; alt=&quot;Story map Real World&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/378db356-dcaf-44fb-b495-73571ecd8865&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Copyright OCTO Technology / &lt;i&gt;Unfortunately I haven&apos;t been able to recover the source&lt;/i&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
A story Map is usually a visual tool, laid down on the wall of a shared meeting room or even the development team open-space. Distributed teams may consider digital tools but a physical, real and visual map on a wall is way better.
&lt;/p&gt;

&lt;a name=&quot;sec252&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.5.2 Product Backlog&lt;/h4&gt;

&lt;p&gt;
The product backlog is the tool used by the Development tool to track the tasks to be implemented. These development tasks should be linked to a User Story on the Story Map. 
&lt;br&gt;
As such, the product backlog should be seen as a much more detailed and technical version of the Story Map.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/7ad71564-b3e2-4d28-b507-d2e2f8c624e8&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px; &quot; alt=&quot;Product Backlog&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/7ad71564-b3e2-4d28-b507-d2e2f8c624e8&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The product backlog shows the same releases than the Story Map. The development tasks in the current sprints should have a more detailed form than the development tasks not analyzed yet during &lt;i&gt;Sprint Planning&lt;/i&gt;.
&lt;br&gt;
In a general way, the product Backlog should be kept synchronized with the Story Map and the reverse is true as well. Every User Story on the Map is broken down in development tasks in the Product Backlog and all tasks in the backlog should be attached to a User Story on the Map.
&lt;/p&gt;
&lt;p&gt;
Their difference is as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Story Map&lt;/b&gt; : The Story Map is a management tool. It is a visual tool used by the &lt;i&gt;Product Management Team&lt;/i&gt; to drive the high level development of the product and to defined releases and priorities. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Product Backlog&lt;/b&gt; : The product Backlog is a technical project management tool, not a visual management tool. Its is usually supported by a digital tool (such as Jira or Redmine) and aims at organizing at a fine level the development team activities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Some important constraints should be noted right away:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each and every developer activity, not matter how quick and small, should be well identified by a development task in the product backlog.&lt;/li&gt;
&lt;li&gt;Each and every development task should be linked to a User Story on the Story Map. I cannot stress enough how much this is important.&lt;/li&gt;
&lt;/ul&gt;

&lt;a name=&quot;sec253&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.5.3 Kanban Board&lt;/h4&gt;

&lt;p&gt;
Kanban is model for introducing change through incremental improvements. One can apply Kanban principles to any process one is already running. 
&lt;/p&gt;
&lt;p&gt;
In Kanban, one organizes the work on a Kanban board. The board has states as columns, which every work item passes through - from left to right. One pull work items along through the [&lt;i&gt;in progress&lt;/i&gt;], [&lt;i&gt;testing&lt;/i&gt;], [&lt;i&gt;ready for release&lt;/i&gt;], and [&lt;i&gt;released&lt;/i&gt;] columns (examples). And you may have various swim lanes - horizontal &quot;&lt;i&gt;pipelines&lt;/i&gt;&quot; for different types of work. 
&lt;br&gt;
The only management criteria introduced by Kanban is the so called &quot;&lt;i&gt;Work In Progress&lt;/i&gt;&quot; or WIP. By managing WIP you can optimize flow of work items. Besides visualizing work on a Kanban board and monitoring WIP, nothing else needs to be changed to get started with Kanban.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b42428b2-749a-4efa-850f-b5736da52171&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px;&quot; alt=&quot;Kanban board&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b42428b2-749a-4efa-850f-b5736da52171&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Kanban boards can be mixed with Story Maps to follow the development of the tasks scheduled for next releases as far as their delivery on the current development version of the product.
&lt;br&gt;
In this case, the left-most column of the Kanban board becomes the Story Map containing the Stories to be developed while the right-most column of the Kanban board contains the User Stories identifying features already provided by the product.
&lt;br&gt;
I myself call such a mix of Story Map and Kanban a &lt;b&gt;Product Kanban Board&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
An real-world example of such a mix of Story Maps and Kanban boards could be as follows:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/3948a797-359c-45c7-ba70-5494574772bc&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px; &quot; alt=&quot;Kanban and Story Maps - Visual Management&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/3948a797-359c-45c7-ba70-5494574772bc&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec254&quot;&gt;&lt;/a&gt;
&lt;h4&gt;2.5.4 User Stories&lt;/h4&gt;

&lt;p&gt;
User stories are short, simple descriptions of a feature told from the perspective of the person who desires the new capability, usually a user or customer of the system. 
&lt;/p&gt;
&lt;p&gt;
They typically follow a simple template:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;i&gt;As a &amp;lt;type of user&amp;gt;, I want &amp;lt;some goal&amp;gt; so that &amp;lt;some reason&amp;gt;.&lt;/i&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
User stories are often written on sticky notes and arranged on walls or tables to facilitate planning and discussion.
&lt;br&gt;
As such, they strongly shift the focus from writing about features to discussing them. In fact, these discussions are more important than whatever text is written.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/35e0a8d6-521d-4775-818a-6df27e653f20&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 200px; &quot; alt=&quot;User Story&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/35e0a8d6-521d-4775-818a-6df27e653f20&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
It&apos;s the product owner&apos;s responsibility to make sure a product backlog of agile user stories exists, but that doesn&apos;t mean that the product owner is the one who writes them. Over the course of a good agile project, you should expect to have user story examples written by each team member.
&lt;br&gt;
Also, note that who writes a user story is far less important than who is involved in the discussions of it.
&lt;/p&gt;
&lt;p&gt;
Some example stories for different application contexts:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d40939a0-bf16-46eb-9c78-b0e922d62fd0&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Story Examples&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d40939a0-bf16-46eb-9c78-b0e922d62fd0&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
User Stories are used to track existing features as well as features to be developed on a mix of Story Map and Kanban, the &lt;b&gt;Product Kanban Board&lt;/b&gt;.
&lt;/p&gt;

&lt;a name=&quot;sec3&quot;&gt;&lt;/a&gt;
&lt;h2&gt;3. Principles &lt;/h2&gt;

&lt;p&gt;
Having covered the fundamentals, we will now go through the principles required for &lt;b&gt;Agile Planning&lt;/b&gt; and see how the principles and practices introduced in the previous section should be used to achieve &lt;i&gt;reliable forecasts and planning&lt;/i&gt; with Agile methodologies.
&lt;/p&gt;
&lt;p&gt;
We should now discover:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;The tools&lt;/b&gt;, mostly visual management tools that the organization should adopt.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The Organization&lt;/b&gt; to be put in place with required roles and committees.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The processes&lt;/b&gt; that should be respected and that will lead to accurate estimations and forecasts.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The Rituals&lt;/b&gt; supporting the processes.
&lt;li&gt;&lt;b&gt;The Values&lt;/b&gt; the team has to embrace to successfully run the processes and deploy the required practices.&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec31&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.1 The tools &lt;/h3&gt;

&lt;p&gt;
The tools that the organization should adopt are as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/7cc8dcbc-ca33-4f38-bc26-2a3100a9b5c2&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Agile Planning Tools&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/7cc8dcbc-ca33-4f38-bc26-2a3100a9b5c2&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
I believe that I introduced these tools in length in the section &lt;a href=&quot;#sec25&quot;&gt;2.5 Visual Management and Kanban&lt;/a&gt; so I won&apos;t be adding a lot. We will see in the next section related to processes how these tools are used and how they complement each other by addressing different needs.
&lt;/p&gt;


&lt;a name=&quot;sec32&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.2 The Organization &lt;/h3&gt;

&lt;p&gt;
The organization to put in place consists in identifying &lt;b&gt;roles&lt;/b&gt; as well as &lt;b&gt;committees and teams&lt;/b&gt;.
&lt;/p&gt;

&lt;a name=&quot;sec321&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.2.1 Required roles&lt;/h4&gt;

&lt;p&gt;
The required roles are as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/8554fd26-4b6d-46fc-956b-7fba19b6135f&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Required roles&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/8554fd26-4b6d-46fc-956b-7fba19b6135f&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Team Leader&lt;/b&gt; : The Team Leader animates the Team rituals (such as Sprint Planning, Sprint Retrospective, Daily scrum) and acts as a coach and a mentor to the development team. He is not a manager, he is a leader (Lead by Example, Management 3.0, etc.). He also represents the development team in other rituals (PMC). 
&lt;br&gt;
At the end of the day, the Team Leader should not be made responsible for neither the team successes nor the team failures, the whole team should be accountable for this. 
&lt;br&gt;
If the team leader is solely responsible for the Team&apos;s performance, then we will be tempted to shortcut quality or mess some rituals to speed up the pace and successfully respect some artificial deadline or else. When that is the case, the team requires a &lt;i&gt;Scrum Master&lt;/i&gt; who should guarantee the Scrum rituals and processes are well respected.
&lt;br&gt;
In my opinion it makes a lot more sense to avoid such situation by making sure everyone in the team is accountable for the team performance and also responsible for the proper respect of the defined Agile processes and rituals. In this case, the Team Leader becomes an arbitrator, a facilitator, a coach and a support, not a manager. At the end of the day, management is too important to be left to managers ;-)
&lt;/li&gt;

&lt;li&gt;
&lt;b&gt;Architect&lt;/b&gt; : The Architect (or architects) should be the most experienced developer(s), the one(s) with the biggest technical and functional knowledge. There can be several architects, a lead architect, a technical architect, etc. This doesn&apos;t really matter. 
&lt;br&gt;
The important thing is that the architect should be entitled to take architecture decision by still referring to the whole team as much as possible. The architect leads the Architecture Committee where architecture decisions are taken.
&lt;br&gt;
The architect, with the help of the tech leads, provides guidance and support to developers. he is also responsible to check the Code Quality, leading the code reviews, and ensure the sticking to Code conventions, etc.
&lt;/li&gt;

&lt;li&gt;
&lt;b&gt;Tech Leads and Developers&lt;/b&gt; : The tech leads and developers form the core of the development team, they eventually develop the software. 
&lt;br&gt;
Tech Leads are coaches and supports to developers and represent them in the Architecture Committee. 
&lt;/li&gt;

&lt;li&gt;
&lt;b&gt;Product Owner &lt;/b&gt;: The product Owner represents the stakeholders and drives priorities in good understanding with the market and customer needs. He is not a leader, he is an arbitrator and acts as the bridge between the business requirements and the development team.
&lt;br&gt;
I can only recommend the reader to watch the magnificent video &lt;a href=&quot;https://www.youtube.com/watch?v=vkYEqz_MA5Y&quot;&gt;&quot;Agile Product Ownership in a Nutshell&quot; from Henrik Kniberg&lt;/a&gt;.
&lt;/li&gt;

&lt;li&gt; 
&lt;b&gt;Business representatives &lt;/b&gt;: Business representatives  (sales, customers, etc.) have to be involved in the Product Management Committee by the product Owner whenever required.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Why bother ?&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Roles are required mostly for two reasons : &lt;b&gt;efficiency&lt;/b&gt; and &lt;b&gt;focus&lt;/b&gt;:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Efficiency&lt;/b&gt;: roles are required to avoid having the whole organization meeting all the time at every meeting for every possible concern.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Focus&lt;/b&gt;: every role owner should acts as required by his role and put himself in the right mindset for every ritual. Rituals are eventually a role playing game.
&lt;br&gt;
Roles are not functions ! We are not speaking hierarchy here, it&apos;s more a question of role play : when someone is assigned a role, his objective is to act and challenge the matters being discussed  in correspondence with his role !
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
As an important note, roles can well be shared. A same co-worker can have multiple roles if required, even though it would be better to avoid this.
&lt;/p&gt;


&lt;a name=&quot;sec322&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.2.2 Required Committees and teams&lt;/h4&gt;

&lt;p&gt;
Required committees and teams are as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/71b8bcdd-d97a-46bd-a1c9-4942874f6481&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 720px; &quot; alt=&quot;Required Committees and teams&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/71b8bcdd-d97a-46bd-a1c9-4942874f6481&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Development team&lt;/b&gt; : The development team is responsible to develop the software. It is composed by Developers, Tech Leads, Architects and the Team Leader. At the end of the day, they&apos;re all developers and even the Team Leader should be able to spend a ratio of his time developing the Software (Lead by Example). Its essential ritual is the daily scrum every day.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Product Management Committee&lt;/b&gt; : The Product Management Committee - or PMC - is composed by the Development Team Leader, The Architect(s) and The Product Owner. The Product Owner should convoke business representatives as required. The PMC is responsible for identifying the new features to be added to the product and prioritize them. It should take place every week or every two weeks at most.
&lt;br&gt;
The PMC identifies new features as User Stories and Uses the Story Map to track them and prioritize them. Priorities are redefined and adapted as Stories Estimations (in Story Points) are refined. This process is explained later. Priorities should be set in respect to &lt;b&gt;the value&lt;/b&gt; and &lt;b&gt;the cost&lt;/b&gt; (in SP) of each and every story.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Architecture Committee&lt;/b&gt; : The Architecture Committee is composed by the Team Leader, The Architect(s), The Product Owner, the Tech Leads and representatives of the Development team.
&lt;br&gt;
The Architecture Committee is responsible to analyze user stories and define Development Tasks. Every story should be specified, designed and discussed. Screen mockups if applicable should be drawn, acceptance criteria agreed, etc.
&lt;br&gt;
Since the Architecture Committee is also responsible for estimating Stories, it&apos;s important that representatives of the Development Team, not only the Tech Leads and the Architects, but simple developers as well, take part in it. Ideally, there should be a rotation and at every meeting a different couple of developers should be convoked. This is required to have everyone agreeing on the estimations. 
&lt;br&gt;
The Architecture Committee should take place every week or every two weeks at most as well and ideally not long after the PMC.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Sprint Management Committee&lt;/b&gt; : The Sprint Management Committee is basically composed by the Development Team plus the Product Owner. 
&lt;br&gt;
During Sprint Planning, the Sprint Management Committee discusses the implementation concerns of the tasks specified by the Architecture Committee and challenge the estimations if required. The Development Tasks defined by the Architecture Committee are detailed as much as possible.
&lt;br&gt;
During Sprint retrospective, the Sprint Management Committee discussed the issues and drawbacks encountered during former sprint and agrees on an action plan to address them.
&lt;/li&gt;
&lt;/ul&gt;



&lt;a name=&quot;sec33&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.3 The Processes &lt;/h3&gt;

&lt;p&gt;
I will be presenting now the various processes that are required to achieve the ultimate goal of Agile Planning : reliable forecasts and planning.
&lt;/p&gt;


&lt;a name=&quot;sec331&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.3.1 Design Process&lt;/h4&gt;

&lt;p&gt;
The &lt;i&gt;Design process&lt;/i&gt; consists in breaking a &lt;i&gt;User Story&lt;/i&gt; identified by the PMC into &lt;i&gt;Development tasks&lt;/i&gt; that developers can understand and work on.
&lt;br&gt;
It can be illustrated as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/623b344c-56ab-4842-9706-413f07534944&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Design Process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/623b344c-56ab-4842-9706-413f07534944&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;b&gt;A. Identification of User Stories&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The &lt;b&gt;PMC&lt;/b&gt; produces a &lt;b&gt;User Story&lt;/b&gt; laid down on the Story Map. 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;B. From User Stories to Development Stories&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The &lt;b&gt;Architecture Committee&lt;/b&gt; analyzes every new story and for each of them it creates a &lt;b&gt;Development Story&lt;/b&gt; on the Product Backlog.
&lt;/p&gt;
&lt;p&gt;
Such a &lt;i&gt;Development Story&lt;/i&gt; is not anymore a simple post-it in a Story Map, it is a &lt;i&gt;digital User story&lt;/i&gt; created in the backlog management tool such as Jira or Redmine. The Development Story is specified and design. It should contain:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The initial user story from the Story Map as it was expressed at that time.&lt;/li&gt;
&lt;li&gt;A complete description of the purpose and intents of the feature.&lt;/li&gt;
&lt;li&gt;A complete description of the expected behaviour from all perspectives: user, system, etc.&lt;/li&gt;
&lt;li&gt;Mock-ups of screens and front-end behaviours as well as validations to be performed on the front-end.&lt;/li&gt;
&lt;li&gt;A precise and exhaustive list and description of all business rules.&lt;/li&gt;
&lt;li&gt;A list and description of the data to be manipulated.&lt;/li&gt;
&lt;li&gt;Several examples of source data or actions and expected results.&lt;/li&gt;
&lt;li&gt;Acceptance criteria (functional and non-functional) and a complete testing procedure.&lt;/li&gt;
&lt;li&gt;The list of documents - technical and functional - that will need to be updated or adapted and how.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;C. From Development Stories to Development Tasks&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The &lt;b&gt; Architecture Committee&lt;/b&gt; also breaks the &lt;b&gt;Development Story&lt;/b&gt; down in several &lt;b&gt;Development Tasks&lt;/b&gt;.
&lt;br&gt;
Development tasks should be split by logical or functional units or layers. For instance, one task could be related to the GUI while another one could be related to the database changes, etc. But if it is possible, it is always better not to split them by layer but rather vertically by sub-feature.
&lt;br&gt;
What should never be done is splitting a Story in tasks by the type of job, for instance development, unit test, integration tests. That should never ever be done. A developer, or a couple of developers should always implement a sub-feature entirely, with all the required tests, functional tests, migration scripts, documentation updates, etc.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;D. From Development Tasks to Detailed Tasks&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The &lt;b&gt;Sprint Management Committee&lt;/b&gt;, during &lt;i&gt;Sprint Planning&lt;/i&gt; recovers all these &lt;b&gt;Development Tasks&lt;/b&gt; and analyzes them further. 
&lt;/p&gt;
&lt;p&gt;
The questions to be answered at this time are:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are all the information provided by the Architecture Committee clear enough or are some precisions required?&lt;/li&gt;
&lt;li&gt;Is there any unforeseen impact on other parts of the software?&lt;/li&gt;
&lt;li&gt;Is there any tool or specific environment setup or configuration required to implement these tasks?&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Specifically the developers that were not present at Architecture Committee when a task has been designed should challenge it and make sure they understand not only what need to be done but really also how to do it precisely.
&lt;br&gt;
At this stage, the new findings should lead to a refinement of the initial estimations agreed by the Architecture Committee.
&lt;/p&gt;
&lt;p&gt;
In addition, at this stage the Development team discovers about the secondary aspects identified by the Architecture Committee such as documentation to be updated or adapted, automated tests to be implemented or adapted, etc. and mentions in a detailed way each and every step to be done in the Detailed tasks.
&lt;/p&gt;


&lt;a name=&quot;sec332&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.3.2 Estimation Process&lt;/h4&gt;

&lt;p&gt;
What we want eventually, is a Story Map containing estimations for all the Stories that have been analyzed by the Architecture Committee.
&lt;br&gt;
The result we want to achieve here can be represented as follows:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c1d1253c-b607-48c6-8940-d8a9197f42c4&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px; &quot; alt=&quot;Story Map with estimations&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c1d1253c-b607-48c6-8940-d8a9197f42c4&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Each and every story that has been broken down by the Architecture Committee and created in the Product Backlog is clearly identified: it has an estimation expressed as a total number of Story Points. 
&lt;br&gt;
That number corresponds to the total of the estimations in SP of the individual &lt;i&gt;Development Tasks&lt;/i&gt; underneath.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;A. Initial Estimations&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
At this stage, The &lt;b&gt;Architecture Committee&lt;/b&gt; is in charge of the Initial Estimations. 
&lt;br&gt;
After a Story has been broken down in tasks, each and every of these tasks is estimated by the Committee using the &lt;i&gt;Planning Poker&lt;/i&gt; approach.
&lt;br&gt;
The sum of the estimations of every individual tasks is reported on both the Development Story (Product Backlog) and the User Story (Story Map):
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/3d966d2e-c07e-4f8a-96c0-d7215235cff0&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Initial Estimations&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/3d966d2e-c07e-4f8a-96c0-d7215235cff0&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;b&gt;B. Refined Estimations&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
When the &lt;b&gt;Sprint Management Committee&lt;/b&gt; recovers the &lt;b&gt;Development Tasks&lt;/b&gt; to refine them, there might be new impacts discovered, new unforeseen refactorings required, etc. 
&lt;/p&gt;
&lt;p&gt;
The Sprint Management Committee should challenge the initial estimations with their new findings and adapt the estimations accordingly. 
&lt;br&gt;
Again, these new &lt;i&gt;Refined Estimations&lt;/i&gt; should be reported on both the Development Story (Product Backlog) and the User Story (Story Map):
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/dc66f36c-1f9c-4975-8b08-37720b496b3d&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Refined Estimations&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/dc66f36c-1f9c-4975-8b08-37720b496b3d&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;b&gt;C. Final Estimations&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Eventually, during the sprint, it can happen that a developer discovers that a task will take a bigger time than expected, or, in the contrary, a much shorter time.
&lt;br&gt;
Reporting such changes in estimations at this very late stage is maybe not important for Scrum, since the sprint is already filled, but it&apos;s important for both the Sprint Management Committee and the Architecture Committee to be notified about them in order to improve the way they do estimations. 
&lt;br&gt;
As part of Continuous Improvement (Kaizen), the Architecture Committee needs to identify where the gap comes from and try to have more accurate estimations next time.
&lt;/p&gt;
&lt;p&gt;
So even at this stage, when a developer discovers gaps or shortcut, it&apos;s important that any impact in terms of estimation is reported as far as to the Story Map:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6159e36f-dcd8-4d03-af65-419e562badfe&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Final Estimations&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6159e36f-dcd8-4d03-af65-419e562badfe&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;b&gt;Why bother ?&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The management tool is the story map, not the product backlog. The product backlog is a technical tool to organize the development activities. It&apos;s not a management tool.
&lt;/p&gt;
&lt;p&gt;
The Product Management Committee should be able to decide about priorities using solely the Story Map. In addition, it should be possible to forecast a delivery date using solely the Story Map.
&lt;br&gt;
For this reason, the Story Map should contain as up to date as possible estimations.
&lt;/p&gt;
&lt;p&gt;
Everyone in the company should be able to take is little calculator, go in front of the story map and know precisely when a task will be delivered.
&lt;br&gt;
We&apos;ll see how soon !
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;What about updating estimations after the task has been completed and we know how much time we spent on it ?&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
One needs to understand what we&apos;re trying to achieve here.
&lt;/p&gt;
&lt;p&gt;
We&apos;re trying to continuously improve our ability to come up with accurate and reliable estimations based on the information we have. When we estimate tasks at &lt;i&gt;ARCHCOM&lt;/i&gt; or &lt;i&gt;Sprint Planning&lt;/i&gt;, we only have analysis information at our disposal, we have no clue about any post-implementation information such as the actual time that will be spent on the task.
&lt;br&gt;
As such, while it is very important to improve our ability to estimate using analysis information (as done at ARCHCOM), it makes no sense to update estimations after implementation since actual implementation time is an information we will never have before implementing the task. 
&lt;/p&gt;
&lt;p&gt;
Again, we want to improve our ability to estimate using the information we have. And actual implementation time is an information we don&apos;t have so it&apos;s useless in regards to improving the estimation process and as such doesn&apos;t trigger any estimation update.
&lt;/p&gt;
&lt;p&gt;
In addition, the estimation process is a comparison game, not an evaluation game (or less). An Estimation in SP should have no clear relationship with actual implementation time, for many reasons, among them the fact the different developers have different capacity. A 10 SP task is always a 10 SP task, for every developer. But it may well represent 4 days of work for a junior developer and 2 days of work for a senior developer. 
&lt;br&gt;
This aspect is a very important reason behind the rationality to think in terms of SP instead of Man/Days. And of course SP should be a measure of the whole team capacity, not individuals.
&lt;/p&gt;
&lt;p&gt;
This is why we don&apos;t bother updating estimations after actual implementation. Nevertheless, we should still use that knowledge to improve our estimations, but actually trying to update the estimation in SP makes no sense.
&lt;/p&gt;


&lt;a name=&quot;sec333&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.3.3 Product Kanban Board Maintenance Process&lt;/h4&gt;

&lt;p&gt;
Maintaining the &lt;i&gt;Product Kanban Board&lt;/i&gt; (Mix of Story Map and Kanban Board) as up to date as possible with latest activities of the development team as well as the latest estimations is important.
&lt;br&gt;
Again, The &lt;i&gt;Product Kanban Board&lt;/i&gt; is the only tool that should be required by the Product Management Committee to come up with estimations and forecasts.
&lt;/p&gt;
&lt;p&gt;
We will now see how this &lt;i&gt;Product Kanban Board&lt;/i&gt; should be maintained throughout the sprints and how it is used.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;A. Initial Stage: before the first sprint of the nest release&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
We start with a Board of the following shape:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a4abc1b6-d804-4a30-95ab-be9ac45ae7b2&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Product Kanban - Initial Stage&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a4abc1b6-d804-4a30-95ab-be9ac45ae7b2&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The boxes in blue indicate how a &lt;i&gt;User Story&lt;/i&gt; is moved across the board when it advances in the analysis and development process:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, when the Architecture Committee has done analyzing and breaking down the Story, the estimation it came up with is reported on the User Story in the violet pellet.&lt;/li&gt;
&lt;li&gt;Then, A Story is moved to &lt;b&gt;Implementation / Doing&lt;/b&gt; when a first of its development tasks is being implemented in the current sprint&lt;/li&gt;
&lt;li&gt;It is moved to &lt;b&gt;Implementation / Done&lt;/b&gt; when the last of its development tasks is done being implemented (meaning completely done : with automated tests, IT tests, etc. At this stage it&apos;s simply waiting the next &lt;i&gt;continuous deliver&lt;/i&gt; build to be available on Test environment for acceptance tests.&lt;/li&gt;
&lt;li&gt;When the &lt;i&gt;Continuous Delivery&lt;/i&gt; build has been executed, the Story is moved to &lt;b&gt;Testing&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;When the product Owner either tested the Story (or delegated such tests) and accepts the results, the Story is moved to &lt;b&gt;Done&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The Story Map on the left is a pretty standard Story Map, where releases are identified.
&lt;/p&gt;
&lt;p&gt;
The Story Map on the right, on the other hand, drops the notion of releases completely. It identifies the features as they are available as a whole in the current development version of the product, regardless of both past releases and releases to come.
&lt;br&gt;
A story identifying a new feature is simply added to it to capture the fact that the feature is now available on the development version.
&lt;br&gt;
On the other hand, a story identifying a modification of an existing feature should be &lt;b&gt;merged with the original story&lt;/b&gt;, potentially leading to a new story, corresponding to the new way of expressing the feature.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;B. During the first sprint&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
During the first sprint after this initial stage, the Kanban board in the middle identifies the Stories that are being worked on and their status:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4e2f2347-c769-4552-a72f-eaca4f9000c4&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Product Kanban - First Sprint&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4e2f2347-c769-4552-a72f-eaca4f9000c4&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;b&gt;C. During the second sprint&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
After first sprint, developed stories are put on the Story Map on the right and a next set of Stories are being developed:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/315440d4-522c-49ca-b048-224d13efd5fc&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Product Kanban - Next Sprint&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/315440d4-522c-49ca-b048-224d13efd5fc&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;b&gt;D. After the first release&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;

After the first release, we can see that all the tasks from the first release of the Story Map on the left have been moved to the Story Map on the right.
&lt;br&gt;
The Story Map on the left is adapted and the next releases are shifted up.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/655b8fc2-cb7d-49df-8097-cd8894671257&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Product Kanban - After first release&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/655b8fc2-cb7d-49df-8097-cd8894671257&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Notes:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Actual releases &lt;b&gt;will&lt;/b&gt; differ: we can release potentially at every end of Sprint. Releases identified on the Story Map on the left will likely be broken down in smaller releases.&lt;/li&gt;
&lt;li&gt;Again, one should embrace &lt;b&gt;Continuous Delivery&lt;/b&gt;: The development Team releases at every end of sprint. Making it a customer release is a Product Management Decision&lt;/li&gt;
&lt;li&gt;One should consider &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/devops-explained#sec35&quot;&gt;feature flipping&lt;/a&gt; in order not to compromise a potential release with a story that would not have been completely implemented in one sprint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;E. No notion of release in &lt;i&gt;Done&lt;/i&gt;&lt;/b&gt; (Right Story Map)
&lt;/p&gt;
&lt;p&gt;
The Story Map on the right shouldn&apos;t have any notion of releases. It represents the Product as is the current development version and it makes no sense anymore remembering there which task has been developed in which release.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e521062a-cf09-4d17-b44f-70fcf75957ff&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Product Kanban - No releases in done&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e521062a-cf09-4d17-b44f-70fcf75957ff&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Also, User stories on the right may need to be merged whenever they relate to the same feature.
&lt;/p&gt;


&lt;a name=&quot;sec334&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.3.4 Story Map and Backlog synchronization Process&lt;/h4&gt;

&lt;p&gt;
The priorities of the &lt;i&gt;Development Tasks&lt;/i&gt; on the &lt;i&gt;Product Backlog&lt;/i&gt; should match and follow the priorities of the &lt;i&gt;User Stories&lt;/i&gt; on the &lt;i&gt;Story Map&lt;/i&gt;. 
&lt;/p&gt;
&lt;p&gt;
The Story Map drives the priorities. The Product Management Committee uses estimations and updates provided by the Architecture Committee and the Development Team to adapt the priorities of the stories on the Story Map and move them accordingly.
&lt;br&gt;
When a story priority changes, the priorities of the corresponding Development Tasks on the Product Backlog should be changed in order to reflect the new priority of the User Story.
&lt;/p&gt;
&lt;p&gt;
The principle is as follows:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c340b3b7-042e-4dc6-a5d9-fe232b3ffbc2&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Backlog and Story Map synchronization principle&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c340b3b7-042e-4dc6-a5d9-fe232b3ffbc2&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
In terms of process, things occur this way:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The &lt;i&gt;Architecture Committee&lt;/i&gt; takes Stories created by the Product Management Committee, designs them and estimates them.&lt;/li&gt;
&lt;li&gt;The &lt;i&gt;Product Management Committee&lt;/i&gt; learns about Stories Estimations and re-prioritizes the Story Map accordingly&lt;/li&gt;
&lt;li&gt;The &lt;i&gt;Architecture Committee&lt;/i&gt; synchronizes the priorities of the corresponding Development Tasks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
This can be represented this way:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/f4d13c78-7e20-44e0-87f5-8f2c186c7b75&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Backlog and Story Map synchronization process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/f4d13c78-7e20-44e0-87f5-8f2c186c7b75&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Let&apos;s see now how all of this is used to be able to achieve its ultimate objective : reliable planning and forecasting.
&lt;/p&gt;


&lt;a name=&quot;sec335&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.3.5 Forecasting&lt;/h4&gt;

&lt;p&gt;
So ... forecasting, finally.
&lt;br&gt;
At the end of the day, pretty much everything I have presented above, all these tools, charts and processes are deployed towards this ultimate objective: doing planning and being able to produce accurate forecasts.
&lt;/p&gt;
&lt;p&gt;
If one respects well the processes presented above and use the tools the right ways, one should end up with the Story Map presented in &lt;a href=&quot;#sec332&quot;&gt;3.3.2 Estimation Process&lt;/a&gt;, hence Stories that hold the indication of a pretty accurate estimation in Story Points.
&lt;/p&gt;
&lt;p&gt;
In addition, a story map holds an important notion of priority: the development team needs to implement all the stories of a row, from left to right, before it can consider the stories of the next row.
&lt;/p&gt;
&lt;p&gt;
So how does one know when a story will be implemented by the development team? The answer is simple: when all stories of the previous rows as well as all stories on the left on the same row are implemented.
&lt;br&gt;
From there, calculating the amount of Story Points to be developed before a specific story can be implemented is straightforward:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/fa67f626-9e00-4454-86d8-ea938003c1d0&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px; &quot; alt=&quot;Forecasting&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/fa67f626-9e00-4454-86d8-ea938003c1d0&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Recovering the example introduced in &lt;a href=&quot;#sec332&quot;&gt;3.3.2 Estimation Process&lt;/a&gt;, if we want to know when the Story with the blue box around it, we have first to know how many story points have to be implemented first, 1750 SP in this example.
&lt;/p&gt;
&lt;p&gt;
Based on this, we know that this story will be &lt;b&gt;delivered once all the stories before it will be implemented plus this story as well&lt;/b&gt;, hence 1750 + 100 SP = 1850 SP.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Estimating a delivery date&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
In order to estimate a delivery date for that story, we need to know how much time is required to deliver these 1850 SP.
&lt;br&gt;
Here comes the notion of Sprint capacity, or rather Sprint velocity. Strictly speaking, Agilists speak of capacity when reasoning of man days and Sprint velocity when reasoning in Story Points.
&lt;br&gt;
I myself use Sprint capacity for both cases.
&lt;/p&gt;
&lt;p&gt;
Computing Sprint velocity requires to have all the practices described in introduction in place for several Sprints. I will come back on practices in the next chapters so I&apos;m leaving them aside for now.
&lt;br&gt;
If the Agile Team is mature in regards to its practices, it can compute the Sprint Capacity be looking at the range of Story Points achieved during 5 last sprints:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/91f84cf5-d6b9-4769-ae04-f4c739c3f3da&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;Uncertainty adressed by range of SP&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/91f84cf5-d6b9-4769-ae04-f4c739c3f3da&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
We don&apos;t use the most extreme, minimum and maximum values. Extreme values most of the time explain themselves by external factors: people get sick, leaves on holidays, tasks are sometimes finished in next sprint, etc.
&lt;br&gt;
Instead, out of five sprints, we&apos;ll use the second maximum value and the last-but-one value.
&lt;/p&gt;
&lt;p&gt;
We use this range, and not a single value of average or median, to address a fundamental aspect of software engineering: the uncertainty.
&lt;br&gt;
The range gives us a lower value and an upper value which we will use as follows.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;In case of &lt;i&gt;fixed time&lt;/i&gt;&lt;/b&gt;, when we have a fixed delivery date, the lower and upper values give us the minimum or maximum set of features we can have implemented at that date.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;In case of &lt;i&gt;fixed scope&lt;/i&gt;&lt;/b&gt;, when we have to release a version of the software with a given set of features, the lower and upper values will give us the earliest date and the latest date at which we can release.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
As a sidenote, when we count Story Points implemented in a sprint, we should focus on developer tasks, not User Stories, since User Stories are too coarse grained. 
&lt;br&gt;
A User story can well take several sprints to be completed. A developer task within one of these stories should not. Tasks should be designed in such a way that they are small enough to always fit a sprint.
&lt;/p&gt;
&lt;p&gt;
Recovering the example above, let&apos;s imagine we are want to achieve a fixed scope, we want to know, using the Story Map as it is, how much time will be required to implement these 1850 Story Points.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/433558bd-c825-492f-9cd2-c83c2fba059d&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;Burndown Forecast&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/433558bd-c825-492f-9cd2-c83c2fba059d&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;ul&gt;
&lt;li&gt;Using the lower limit of 128 SP per sprint, it would take us 15 sprints to complete the scope, hence 30 weeks or 6.7 months&lt;/li&gt;
&lt;li&gt;Using the upper limit of 138 SP per sprint, it would take us 14 sprints to complete the scope, hence 28 weeks or 6.2 months&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Based on this, the PMC or the Product Owner can communicate to the stakeholders that the feature would be release not before 6 months but before 7 months.
&lt;/p&gt;



&lt;a name=&quot;sec336&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.3.6 Development process: Scrum&lt;/h4&gt;

&lt;p&gt;
I said enough about Scrum in both &lt;a href=&quot;#sec22&quot;&gt;this article&lt;/a&gt; and &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-software-development-lessons-learned#sec13&quot;&gt;my previous article&lt;/a&gt;.
&lt;br&gt;
Let me just introduce this chart that does a great job in introducing the notion of &lt;b&gt;Product Increment&lt;/b&gt; as a shippable version of the product since we adopt Continuous Delivery:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b67a03fb-8033-4b6a-9f9f-648a6b4edd96&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px;&quot; alt=&quot;Scrum Process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b67a03fb-8033-4b6a-9f9f-648a6b4edd96&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
This allows me to present the last tool I mentioned in the introduction of this sprint, which is the &lt;b&gt;Sprint Kanban Board&lt;/b&gt;:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/66b435d4-08e1-4391-84cb-c4f7dd0b49f5&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;Sprint Kanban&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/66b435d4-08e1-4391-84cb-c4f7dd0b49f5&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The sprint Kanban board is used to track the progress of tasks within the sprint and enables to organize developer activities.
&lt;/p&gt;
&lt;p&gt;
Some people use extensively &lt;i&gt;burndown charts&lt;/i&gt; to track the proper progress of a sprint or the product backlog towards a specific release as a whole. I myself never find it so useful. I really get all I want to know about how a release or a specific sprint is doing by using the Product Backlog, the Product Kanban Board or the Sprint Kanban.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Commitment&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
A very important aspect when it comes to the Scrum sprint, which is as well an important value the team has to commit to, is the commitment of the team to close the Sprint scope at the end of the Sprint, whatever it takes.
&lt;/p&gt;
&lt;p&gt;
Postponing tasks from sprint to sprint is a nightmare to manage and ruins forecasting. The development team has to progress estimating tasks, trying to be as accurate as possible, and be realistic when planning the sprint and feeding.
&lt;br&gt;
To be honest it takes quite some sprints to find right way both for estimating tasks and feeding the backlog. But after these first initiation sprints, the development team &lt;b&gt; has to commit to the sprint scope at all cost, whatever it takes&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
The only answer when discovering at the end of the sprint that the scope won&apos;t be completed without overtime is first to work as much as is required to complete it and second to identify how to improve the estimation process and the sprint feeding process to avoid this situation in the future (Kaizen burst).
&lt;br&gt;
It&apos;s is never an acceptable answer to simply postpone some tasks to the next sprint.
&lt;/p&gt;


&lt;a name=&quot;sec34&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.4 The Rituals &lt;/h3&gt;

&lt;p&gt;
Rituals of the various teams are as follows.
&lt;br&gt;
Committees are rituals by themselves, the difference between a team and a committee is that a committee gathers solely for a specific ritual
&lt;/p&gt;



&lt;a name=&quot;sec341&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.4.1 Product Management Committee&lt;/h4&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/cbd5a9a0-6786-43d7-9731-066f834c4770&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 200px; &quot; alt=&quot;Product Management Committee&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/cbd5a9a0-6786-43d7-9731-066f834c4770&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The &lt;i&gt;Product Management Committee&lt;/i&gt; gather every X weeks. It really depends of the corporation, the size of the team, the rate at which new functional requirements appear. Every few 2 weeks should be sufficient in general, otherwise the frequency can increase as far as every week.
&lt;/p&gt;
&lt;p&gt;
The duties of the &lt;i&gt;Product Management Committee&lt;/i&gt; are as follows:
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Story Mapping&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identification of new needs and requirements (also technical and technological !)&lt;/li&gt;
&lt;li&gt;Breakdown of these requirements in User Stories&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&quot;Guessing&quot;&lt;/i&gt; of an Initial Priority of a User Story based on Value (and foreseen size)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Maintenance (update) of Priorities&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setting of Actual Priorities based on Estimations from Architecture Committee&lt;/li&gt;
&lt;li&gt;Review of priorities of Whole Story Map after update of estimations
&lt;ul&gt;
&lt;li&gt;From Sprint Management Committee&lt;/li&gt;
&lt;li&gt;From Development Team&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec342&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.4.2 Architecture Committee&lt;/h4&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/be8600bc-85ae-48d9-b6d3-a81a2d35554d&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 200px; &quot; alt=&quot;Architecture Committee&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/be8600bc-85ae-48d9-b6d3-a81a2d35554d&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The &lt;i&gt;Architecture Committee&lt;/i&gt; also gather every X weeks. It should meet at least few minutes (coffee break) but not more than one or two days after &lt;i&gt;Product Management Committee&lt;/i&gt;. 
&lt;br&gt;
The Architecture Committee recovers the last User Stories designed at PMC and synchronizes the Product Backlog with the Story Map. Stories are specified, designed and broken downs in Development Tasks.
&lt;/p&gt;
&lt;p&gt;
The duties of the &lt;i&gt;Architecture Committee&lt;/i&gt; are as follows:
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Specification and Design of User Stories&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Specification of functional and non-functional requirements&lt;/li&gt;
&lt;li&gt;Identification of business rules&lt;/li&gt;
&lt;li&gt;Identification of Acceptance criteria&lt;/li&gt;
&lt;li&gt;Design of GUI &lt;/li&gt;
&lt;li&gt;Architecture and Design of Software&lt;/li&gt;
&lt;li&gt;Identification of documents and procedures to be updated / adapted&lt;/li&gt;
&lt;li&gt;Identification of automated tests to be implemented&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Estimation of User Stories&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Breakdown in individual Development Tasks
&lt;ul&gt;
&lt;li&gt;This needs to be done sufficiently in advance&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Estimation of Development Tasks&lt;/li&gt;
&lt;li&gt;Computing of total Estimation and reporting on User Story&lt;/li&gt;
&lt;li&gt;Continuous Improvement: understanding of gaps in estimation after notification of Sprint Committee and how to improve&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Software Architecture&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identification and maintenance of Coding Standards and Architecture Standards&lt;/li&gt;
&lt;li&gt;Review of ad&apos;hoc architecture topics&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec343&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.4.3 Sprint Management Committee&lt;/h4&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/df862c29-1b79-4c8a-b253-7a900ffbda37&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 200px; &quot; alt=&quot;Sprint Mangement Committee&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/df862c29-1b79-4c8a-b253-7a900ffbda37&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The &lt;i&gt;Sprint Management Committee&lt;/i&gt; gathers at every beginning and end of sprint.
&lt;br&gt;
A sprint starts with the &lt;i&gt;Sprint Planning&lt;/i&gt; and ends with &lt;i&gt;Sprint Demo&lt;/i&gt; and &lt;i&gt;Sprint Retrospective&lt;/i&gt;:
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Sprint Planning&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discuss Development Tasks  to ensure whole team has a clear view of what needs to be done &amp;rarr; Detailed Tasks&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Definition of done&lt;/b&gt;: list exhaustively the form of automated tests to be implemented as well as the documentation to be updated and the scope of these changes.&lt;/li&gt;
&lt;li&gt;Review and challenge estimations of Detailed Tasks. Update estimation of User Story accordingly&lt;/li&gt;
&lt;li&gt;Feed the Sprint Backlog with such Detailed Tasks until Sprint Capacity is reached&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Sprint Retro&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review Tasks not completed and create task identifying GAP for next Sprint. Update estimations.&lt;/li&gt;
&lt;li&gt;Review SP achieved during sprint and review Sprint Capacity&lt;/li&gt;
&lt;li&gt;Discuss issues encountered during Sprint and identify action points. Update processes and rituals accordingly&lt;/li&gt;
&lt;li&gt;Continuous Improvement: understanding of gaps in tasks and estimations and how to improve&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Sprint Demo&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;End of Sprint / really optional with Continuous Delivery and Continuous Acceptance Tests&lt;/li&gt;
&lt;li&gt;Present sprint developments and integrate feedback. Create new tasks and update estimations.&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec344&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.4.4 Development Team - Daily Scrum&lt;/h4&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2895b34e-0cd6-4e6c-9a85-4b94723b8f60&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 160px; &quot; alt=&quot;Development Team&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2895b34e-0cd6-4e6c-9a85-4b94723b8f60&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The daily scrum happens every day, ideally early in the moment, at the time all the team is in the office.
&lt;br&gt;
The scope of the daily scrum is as follows:
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Round table - every team member presents:&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Past or current development task&lt;/li&gt;
&lt;li&gt;Status on that task and precise progress&lt;/li&gt;
&lt;li&gt;Next steps&lt;/li&gt;
&lt;li&gt;Next task if former is completed&lt;/li&gt;
&lt;li&gt;Identification of unforeseen GAPS and adaptation of estimations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Identification of challenges, issues and support needs&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scheduling of ad&apos;hoc meeting and required attendees to discuss specific issues&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec35&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.5 The Values &lt;/h3&gt;

&lt;p&gt;
&lt;b&gt;Sticking rituals, respecting principles and enforcing practices is difficult.&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It&apos;s difficult to ensure and behaves in such a way that breaking the build (failing tests) is an exception.&lt;/li&gt;
&lt;li&gt;It&apos;s difficult to respect the boyscout rule.&lt;/li&gt;
&lt;li&gt;It&apos;s a lot more difficult to design things carefully and stick to the KISS principle.&lt;/li&gt;
&lt;li&gt;It&apos;s difficult and a lot of work to keep the Story Map and Product Backlog in sync and up-to date with the reality.&lt;/li&gt;
&lt;li&gt;It&apos;s difficult to stick to the TDD approach.&lt;/li&gt;
&lt;li&gt;It&apos;s difficult not to squeeze the Kaizen phase at the end of every meeting and being objective when it comes to analyzing strengths and weaknesses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
All of this make two Agile values especially important: &lt;b&gt;Discipline&lt;/b&gt; and &lt;b&gt;courage&lt;/b&gt;. 
&lt;br&gt;
Both are utmost important and essential to address these difficulties.
&lt;/p&gt;
&lt;p&gt;
Sticking to the Scrum rituals, enforcing TDD and other XP principles and practices require courage and discipline. It also requires a lot of discipline to Maintain and synchronize the Product Backlog and the Story Map.
&lt;br&gt;
Updating the estimations of the User Stories continuously as the understanding of the work to be done progresses also takes a lot of discipline.
&lt;/p&gt;
&lt;p&gt;
Finally, discipline and courage are enforced by a strict definition of the processes and rituals and a proper maintenance of this definition as the culture and practices evolve.
&lt;br&gt;
At the end of the day, defining these committees and rituals is all about that. Why are all these committees / teams / rituals required if eventually a person can have several roles? Because they enforce discipline: they are scheduled and have precise agendas.
&lt;/p&gt;


&lt;a name=&quot;sec4&quot;&gt;&lt;/a&gt;
&lt;h2&gt;4. Overview of the whole process &lt;/h2&gt;

&lt;p&gt;
The whole process looks as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Product Management Committee (X-Weekly)
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;1&lt;/b&gt; Identification of a new User Story&lt;/li&gt;
&lt;li&gt;&lt;b&gt;2&lt;/b&gt; Initial foreseen priority (i.e. release) depending on value and initial estimation (oral)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Architecture Committee (X-Weekly)
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;3&lt;/b&gt; Design and specification by architecture committee : Story &amp;rarr; Development Story &amp;rarr; Task&lt;/li&gt;
&lt;li&gt;&lt;b&gt;4&lt;/b&gt; Estimation of individual tasks&lt;/li&gt;
&lt;li&gt;&lt;b&gt;5&lt;/b&gt; Computation of total SP and setting of size of Development Story and User Story&lt;/li&gt;
&lt;li&gt;&lt;b&gt;6&lt;/b&gt; Re-prioritization (based on new estimation)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Sprint Planning + Sprint retrospective (Sprintly)
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;7&lt;/b&gt; Review of TaskS and discussion : Task &amp;rarr; Detailed Task&lt;/li&gt;
&lt;li&gt;&lt;b&gt;8&lt;/b&gt; Adaptation of Estimation on TaskS&lt;/li&gt;
&lt;li&gt;&lt;b&gt;9&lt;/b&gt; Update of Total Size of Development Story and User Story&lt;/li&gt;
&lt;li&gt;&lt;b&gt;10&lt;/b&gt; Notification to Architecture Committee (Kaizen / Sprint retrospective)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Daily Scrum
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;11&lt;/b&gt; Identification of Gap on Task&lt;/li&gt;
&lt;li&gt;&lt;b&gt;12&lt;/b&gt; Adaptation of Estimation on Task&lt;/li&gt;
&lt;li&gt;&lt;b&gt;13&lt;/b&gt; Update of Total Size of Development Story and User Story&lt;/li&gt;
&lt;li&gt;&lt;b&gt;14&lt;/b&gt; Notification to Architecture Committee (Kaizen / Sprint retrospective)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
In a graphical way:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6e3fc346-7277-45ce-af68-bea91cba88d5&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px;&quot; alt=&quot;Overview of the whole process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6e3fc346-7277-45ce-af68-bea91cba88d5&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec5&quot;&gt;&lt;/a&gt;
&lt;h2&gt;5. Return on Practices&lt;/h2&gt;

&lt;p&gt;
As stated a lot of times in this article, all of this, reliable planning and true agility, require a strong commitment of the team to Agile practices and principles.
&lt;/p&gt;
&lt;p&gt;
One cannot apply only a small subset of the Agile Practices and believe he will achieve true agility and Reliable Agile Planning.
&lt;br&gt;
The Agile practices I listed in introduction form a package with strong dependencies between each other.
&lt;/p&gt;
&lt;p&gt;
IMHO the dependencies are as follows:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/509a7199-f9b7-41d4-8ee3-e1970fb11ece&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px; &quot; alt=&quot;Agile Planning Practices dependencies&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/509a7199-f9b7-41d4-8ee3-e1970fb11ece&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
An arrow denotes a dependency between two practices.
&lt;/p&gt;
&lt;p&gt;
Explanations of a few of these dependencies:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
You cannot imagine &lt;b&gt;reliable planning and forecasting&lt;/b&gt; if you don&apos;t provide the management with appropriate tools : &lt;b&gt;Story Map&lt;/b&gt; and &lt;b&gt;Kanban boards&lt;/b&gt;.
&lt;br&gt;
Also, it&apos;s going to be difficult without a proper technical tool for the development team: &lt;b&gt;The Product Backlog&lt;/b&gt;.
&lt;br&gt;
Finally, it obviously requires &lt;b&gt;Reliable Estimations&lt;/b&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Reliable estimations&lt;/B&gt; need to have manageable and well &lt;b&gt;planned sprints&lt;/b&gt;. 1 week sprints are too small, a lot can happen in 1 week while 3 weeks are too big in my opinion, the fluctuations are too important. I strongly believe that 2 weeks sprints is the right size when it comes to having an accurate and reliable Sprint Capacity (or Velocity) in &lt;b&gt;SP&lt;/b&gt;.
&lt;br&gt;
With 2 weeks sprints only, the development team cannot afford spending time on releasing the &lt;b&gt;Shippable Product&lt;/b&gt;, releasing should be a completely automated procedure and in this regards &lt;b&gt;Continuous Delivery&lt;/b&gt; is not optional.
&lt;/li&gt;
&lt;li&gt;
Then achieving &lt;b&gt;Continuous Delivery&lt;/b&gt; requires a lot of things and a good mastery of common XP and DevOps Practices.
&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec6&quot;&gt;&lt;/a&gt;
&lt;h2&gt;6. Conclusion&lt;/h2&gt;

&lt;p&gt;
Management needs a management tool to take enlightened decision. The product backlog should not be a management tool, it&apos;s really rather the development team&apos;s internal business. The Story Map, on the other hand, is a simple, visual and effective management tool. 
&lt;br&gt;
All the rituals and processes introduced in this article are deployed towards the same ultimate goal: &lt;b&gt;enabling the management to use the Story Map as a management tool for planning and forecasting.&lt;/b&gt; In addition, the specific form of Story Map introduced here, the &lt;b&gt;Product Kanban Board&lt;/b&gt;, becomes also a Project Management Tool aimed to tracking the progresses of the development team.
&lt;/p&gt;
&lt;p&gt;
The difficulty, the reason why it requires a strict enforcement of processes and rituals, is to synchronize the Story Map and the Product Backlog.
&lt;br&gt;
Since the development team works mostly with the Product Backlog, the later has eventually the accurate and realistic information about size and time of deployment, through the notion of Story Points. 
&lt;br&gt;
But this is in no help for the management, hence the reason why it is required to backfeed the estimations put in the Product Backlog to the Story Map.
&lt;/p&gt;
&lt;p&gt;
Eventually, if these processes and rituals are respected and well applied, anyone in the company can come in front of the &lt;i&gt;Product Kanban Board&lt;/i&gt; with a little calculator and compute the delivery date (or rather the range) for any given story.
&lt;br&gt;
Anyone can use the Story Map to compute how much work can be done for any given date, or what time is required to deliver a specific scope.
&lt;/p&gt;
&lt;p&gt;
All of this with a simple calculator and a few seconds, without Excel, without any Internet connection, without any complicated tool nor any pile of paper, just a calculator ... or a brilliant mind.
&lt;/p&gt;
&lt;p&gt;
Now having said that, I would like to conclude this article by mentioning that the processes and tools I am presenting here work for us. They may not work as is for another organization. It&apos;s up to every organization to discover and find the practices and principles that best fit its needs and individuals.
&lt;br&gt;
As an example, the association of two Story Maps, the &lt;i&gt;&quot;to do&quot;&lt;/i&gt; on the left and the &lt;i&gt;&quot;done&quot;&lt;/i&gt; on the right of a Kanban Board for the needs of both Product and Project Management is a really personal recipe. While I myself got the idea from another organization, I haven&apos;t seen that often.
&lt;br&gt;
This shows in my opinion the very best qualities of an agilist: the curiosity to discover new ways of working and the courage to try them or invent them.
&lt;/p&gt;
&lt;p&gt;
This article is available as a slideshare presentation here : &lt;a href=&quot;https://www.slideshare.net/JrmeKehrli/agility-and-planning-tools-and-processes&quot;&gt;https://www.slideshare.net/JrmeKehrli/agility-and-planning-tools-and-processes&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Also, you can read a PDF version of this article here : &lt;a href=&quot;https://www.niceideas.ch/Agile_Planning.pdf&quot;&gt;https://www.niceideas.ch/Agile_Planning.pdf&lt;/a&gt;.


&lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://www.niceideas.ch/roller2/badtrash/entry/agile-landscape</guid>
    <title>Agile Landscape from Deloitte</title>
    <dc:creator>Jerome Kehrli</dc:creator>
    <link>https://www.niceideas.ch/roller2/badtrash/entry/agile-landscape</link>
        <pubDate>Thu, 2 Mar 2017 17:51:12 -0500</pubDate>
    <category>Agile</category>
    <category>agile</category>
    <category>agile-landscape</category>
    <atom:summary type="html">&lt;!-- Agile Landscape from Deloitte --&gt;

&lt;p&gt;
I&apos;ve seen this infographic from Christopher Webb at Deloitte (at the time) recently. 
&lt;br&gt;
This is the most brilliant infographic I&apos;ve seen for years. 
&lt;/p&gt;
&lt;p&gt;
Christopher Webb presents here a pretty extended set of &lt;i&gt;Agile Practices&lt;/i&gt; associated to their respective &lt;i&gt;frameworks&lt;/i&gt;. The practices presented are a collection of all Agile practices down the line, related to engineering but also management, product identification, design, operation, etc.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d028b3c0-5332-4ae7-a91a-dc21b7551299&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px;&quot; alt=&quot;The Agile Lansdcape from Deloitte&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d028b3c0-5332-4ae7-a91a-dc21b7551299&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
[Click to enlarge]&lt;br&gt;
(Source : Christopher Webb - LAST Conference 2016 Agile Landscape - &lt;a href=&quot;https://www.slideshare.net/ChrisWebb6/last-conference-2016-agile-landscape-presentation-v1&quot;&gt;https://www.slideshare.net/ChrisWebb6/last-conference-2016-agile-landscape-presentation-v1&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
I find this infographic brilliant since its the first time I see a &quot;&lt;i&gt;one ring to rule them all&lt;/i&gt;&quot; view of what I consider should be the practices towards scaling Agility at the level of the whole IT Organization.
&lt;/p&gt;
&lt;p&gt;
Very often, when we think of Agility, we limit our consideration to solely the Software Build Process.
&lt;br&gt;
But Agility is more than that. And I believe an Agile corporation should embrace also &lt;b&gt;Agile Design&lt;/b&gt;, &lt;b&gt;Agile Operations&lt;/b&gt; and &lt;b&gt;Agile Management&lt;/b&gt;. 
&lt;br&gt;
This infographic does a great job in presenting how these frameworks enrich and complements each others towards scaling Agility at the level of the whole IT Organization.
&lt;/p&gt;
&lt;p&gt;
To be honest there are even many more frameworks that those indicated on this infographic and Chris Webb is presenting some additional - reaching 43 in total - in &lt;a href=&quot;https://www.slideshare.net/ChrisWebb6/last-conference-2016-agile-landscape-presentation-v1&quot;&gt;his presentation&lt;/a&gt;. 
&lt;br&gt;
But I believe he did a great job in presenting the most essential ones and presenting how these practices, principles and framework work together to achieve the ultimate goal of every corporation: skyrocketing employee productivity and happiness, maximizing customer satisfaction and blowing operational efficiency up.
&lt;/p&gt;
&lt;p&gt;
Now I would want to present why I think considering Agility down the line in each and every aspect around the engineering team and how these frameworks completing each other are important.
&lt;/p&gt;</atom:summary>        <description>&lt;!-- Agile Landscape from Deloitte --&gt;

&lt;p&gt;
I&apos;ve seen this infographic from Christopher Webb at Deloitte (at the time) recently. 
&lt;br&gt;
This is the most brilliant infographic I&apos;ve seen for years. 
&lt;/p&gt;
&lt;p&gt;
Christopher Webb presents here a pretty extended set of &lt;i&gt;Agile Practices&lt;/i&gt; associated to their respective &lt;i&gt;frameworks&lt;/i&gt;. The practices presented are a collection of all Agile practices down the line, related to engineering but also management, product identification, design, operation, etc.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d028b3c0-5332-4ae7-a91a-dc21b7551299&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px;&quot; alt=&quot;The Agile Lansdcape from Deloitte&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d028b3c0-5332-4ae7-a91a-dc21b7551299&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
[Click to enlarge]&lt;br&gt;
(Source : Christopher Webb - LAST Conference 2016 Agile Landscape - &lt;a href=&quot;https://www.slideshare.net/ChrisWebb6/last-conference-2016-agile-landscape-presentation-v1&quot;&gt;https://www.slideshare.net/ChrisWebb6/last-conference-2016-agile-landscape-presentation-v1&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
I find this infographic brilliant since its the first time I see a &quot;&lt;i&gt;one ring to rule them all&lt;/i&gt;&quot; view of what I consider should be the practices towards scaling Agility at the level of the whole IT Organization.
&lt;/p&gt;
&lt;p&gt;
Very often, when we think of Agility, we limit our consideration to solely the Software Build Process.
&lt;br&gt;
But Agility is more than that. And I believe an Agile corporation should embrace also &lt;b&gt;Agile Design&lt;/b&gt;, &lt;b&gt;Agile Operations&lt;/b&gt; and &lt;b&gt;Agile Management&lt;/b&gt;. 
&lt;br&gt;
This infographic does a great job in presenting how these frameworks enrich and complements each others towards scaling Agility at the level of the whole IT Organization.
&lt;/p&gt;
&lt;p&gt;
To be honest there are even many more frameworks that those indicated on this infographic and Chris Webb is presenting some additional - reaching 43 in total - in &lt;a href=&quot;https://www.slideshare.net/ChrisWebb6/last-conference-2016-agile-landscape-presentation-v1&quot;&gt;his presentation&lt;/a&gt;. 
&lt;br&gt;
But I believe he did a great job in presenting the most essential ones and presenting how these practices, principles and framework work together to achieve the ultimate goal of every corporation: skyrocketing employee productivity and happiness, maximizing customer satisfaction and blowing operational efficiency up.
&lt;/p&gt;
&lt;p&gt;
Now I would want to present why I think considering Agility down the line in each and every aspect around the engineering team and how these frameworks completing each other are important.
&lt;/p&gt;

&lt;h3&gt;1. Agile Design&lt;/h3&gt;

&lt;p&gt;
Normally I am a little sensitive with formal meaning of the word &lt;i&gt;design&lt;/i&gt; in software engineering.
&lt;/p&gt;
&lt;p&gt;
But for once I&apos;ll make an exception.
&lt;br&gt;
So for once, by &lt;i&gt;design&lt;/i&gt; here, I mean the largest possible definition of the term, encompassing as much the discovery of the key features as well as the architecture of the system to be implemented.
&lt;/p&gt;
&lt;p&gt;
Agility in identifying beforehand the product to be implemented and its key features is a must.
&lt;br&gt;
Later when the rough form of the product is identified, the process consists in having a Vision workshop to align the stakeholders on the product vision, then Story Mapping workshops, all of these emphasizing Agility, Adaptation and lightweight processes in comparison to the tons of documents produced by more traditional methods.
&lt;/p&gt;
&lt;p&gt;
This is pretty well covered in the infographic above and Design thinking covers all the practices that seem key to me such from the light &lt;i&gt;Business Model Canvas&lt;/i&gt; to &lt;i&gt;Product Vision&lt;/i&gt; definition workshops and &lt;i&gt;Story Mapping&lt;/i&gt; workshops.
&lt;/p&gt;
&lt;p&gt;
At the end of the day, Agility is mostly about the capacity to &lt;i&gt;adapt&lt;/i&gt; and &lt;i&gt;react&lt;/i&gt; to changing requirements and changing priorities. Enforcing thorough product identification and feature design phases before actually initiating the development of an &lt;b&gt;MVP&lt;/b&gt; aimed at validating (or contradicting) the hypothesis makes little sense in my opinion.
&lt;br&gt;
One important framework to consider here is the &lt;i&gt;Lean&lt;/i&gt; approach and the &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/lean-startup-a-focus-on&quot;&gt;Lean Startup Practices&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
At the end of the day, &lt;i&gt;Agile Software Development&lt;/i&gt; methodologies cannot deploy their full potential if the company itself is not Agile.
&lt;/p&gt;


&lt;h3&gt;2. Agile Development&lt;/h3&gt;

&lt;p&gt;
At the root of everything there is XP. &lt;i&gt;eXtreme Programming&lt;/i&gt; was mostly initiated by Kent Beck, strong from his experience on the C3 project. Kent Beck hardly invented a lot of things but rather took some practices more or less used previously in the industry and took them to &lt;i&gt;extreme&lt;/i&gt; levels.
&lt;/p&gt;
&lt;p&gt;
Agile Software Development is really built on top of XP genes. Today XP is considered just another Agile Software Development Framework, but I don&apos;t share that view. To me, XP and the related practices form the most fundamental core of Agile Software Development Methodologies. 
&lt;br&gt;
XP Practices take a form or another in the various Agile Frameworks such as RDD, Scrum, Kanban, Scrumban, etc. In some of them some core XP practices are not mentioned; not because they should not be applied, but really because they&apos;re nowadays considered so natural that they&apos;re assumed. Think for instance of TDD (Unit Tests first), Continuous Integration, Simple Metaphor (Meaningful Naming, Domain Driven Design, Design patterns), etc.
&lt;/p&gt;
&lt;p&gt;
I discussed in &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-software-development-lessons-learned&quot;&gt;a previous article on this this blog &lt;/a&gt; the software development methodology we are using in my current company and interestingly all of our practices are pretty well identified on the infographic above.
&lt;/p&gt;



&lt;h3&gt;3. Agile Operation&lt;/h3&gt;

&lt;p&gt;
Agile operation is really about &lt;b&gt;DevOps&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
I developed in length in a dedicated article on this very blog what DevOps is and why it&apos;s important so I let the reader refer to &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/devops-explained&quot;&gt;this article&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Let&apos;s just mention that here as well it is hard for the development team to leverage its Agile practices if the other departments of the corporation - and out of those the operation is crucial - have not embraced Agility.
&lt;/p&gt;


&lt;h3&gt;4. Agile Management&lt;/h3&gt;

&lt;p&gt;
Agile management is about Leadership and Leadership pursues the goal of growing and transforming organizations into great places to work for, where people are engaged, the work is improved and customers are simply delighted.
&lt;/p&gt;
&lt;p&gt;
Agile Management is a lot about Management 3.0. 
&lt;br&gt;
Management 1.0 was about doing the wrong thing, by treating people like cogs in a system. Management 2.0 was about doing the right think wrong, with understanding the goals and having good intentions, but using old-fashioned top-down initiatives. 
&lt;br&gt;
Management 3.0 is about doing the right thing for the team, involving everyone in improving the system and fostering innovation.
&lt;/p&gt;
&lt;p&gt;
Agile Management is about making the components of the Agile corporation collaborate together towards anticipating changes and adapt smoothly and flawlessly.
&lt;br&gt;
There are three most essential vectors:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Collective Intelligence&lt;/b&gt;: which is key to address and control the increasing complexity of organizations and businesses and based on having everyone in the company taking part in the continuous improvement processes&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Optimal use of Technology&lt;/b&gt; : Technology is an amazing vector of efficiency in regards to tools supporting the organization&lt;/li&gt;
&lt;li&gt;&lt;b&gt;A sound adoption of Continuous Improvement Processes&lt;/b&gt; : making the organization identify and build on its strength while continuously addressing its weaknesses to adapt itself continuously.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Agile Management values individual and interactions over formal processes and hierarchy. It really conists in empowering people and making the organization a place where they can develop themselves with passion and energy, leveraging their capacity for both action and innovation.
&lt;br&gt;
Now of course this needs to be driven and Agile Management encourages continuous feedback in the form, for instance, of O3s  - &lt;i&gt;One-On-One&lt;/i&gt; - on a regular basis where both the employee and the manager can provide feedback on the organization, respectively the performance of the employee.
&lt;/p&gt;
&lt;p&gt;
Managing performance in this sense is identifying the strengths of the employee, which we should leverage, and the weaknesses, which we should address and improve.
&lt;/p&gt;
&lt;p&gt;
Empowering people is a key practice since, at the end of the day, Management is too important to be left to Managers ;-)
&lt;br&gt;
Agility is about adaptation but also about efficiency and quality (think XP practices here) and Agile Management is about putting practices in place aimed at making engineers give the best they can and participate at every level in the success of the company.
&lt;/p&gt;
&lt;p&gt;
I would conclude this section by giving my favorite definition of management: 
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;i&gt;&quot;Hire great people, and then get the hell out of their way.&quot;&lt;/i&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;h3&gt;5. Conclusion&lt;/h3&gt;

&lt;p&gt;
This infographic is an awesome view of what we have achieved over the last 10 to 15 years in regards to understanding of how to design, engineer, build and manage better.
&lt;br&gt;
I believe finding better ways of working should be an everyday concern for organizations, from startups to international corporations.
&lt;/p&gt;
&lt;p&gt;
Quoting &lt;a href=&quot;http://www.ge.com/annual00/download/images/GEannual00.pdf&quot;&gt;Jack Welsh&lt;/a&gt;:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;i&gt;&quot;If the rate of change on the outside exceeds the rate of change on the inside, the end is near.&quot;&lt;/i&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
My personal pick-up is:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lean (Startup) - See &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/lean-startup-a-focus-on&quot;&gt;my article on Lean Startup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DevOps - See &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/devops-explained&quot;&gt;my article on DevOps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;XP, Scrum and Kanban (Agile Development) - See &lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/entry/agile-software-development-lessons-learned&quot;&gt;my article on agility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Management 3.0 - Empowering and energizing people, Developing competences, Aligning teams, Continuous Improvement&lt;/li&gt;
&lt;li&gt;Kaizen (of course)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
I have no experience on &lt;i&gt;Scaling Agile&lt;/i&gt; frameworks for now. It&apos;s becoming a pretty hot topic in my current company though and I&apos;ll revert with an article on this blog when I have some. 
&lt;br&gt;
My preference would go to LeSS I think, since it seems more natural to me. But that is just a pretty initial opinion, and it may change ...
&lt;/p&gt;
</description>          </item>
    <item>
    <guid isPermaLink="true">https://www.niceideas.ch/roller2/badtrash/entry/lean-startup-a-focus-on</guid>
    <title>The Lean Startup - A focus on Practices</title>
    <dc:creator>Jerome Kehrli</dc:creator>
    <link>https://www.niceideas.ch/roller2/badtrash/entry/lean-startup-a-focus-on</link>
        <pubDate>Sat, 28 Jan 2017 05:05:07 -0500</pubDate>
    <category>Agile</category>
    <category>agile</category>
    <category>lean-startup</category>
    <category>practices</category>
    <category>principles</category>
    <atom:summary type="html">&lt;!-- The Lean Startup - A focus on Practices --&gt;

&lt;p&gt;
A few years ago, I worked intensively on a pet project: AirXCell (long gone ...) 
&lt;br&gt;
What was at first some framework and tool I had to write to work on my Master Thesis dedicated to Quantitative Research in finance, became after a few months somewhat my most essential focus in life.  
&lt;br&gt;
Initially it was really intended to be only a tool providing me with a way to have a Graphical User Interface on top of all these smart calculations I was doing in R. After my master thesis, I surprised myself to continue to work on it, improving it a little here and a little there. I kept on doing that until the moment I figured I was dedicated several hours to it every day after my day job.
&lt;br&gt;
Pretty soon, I figured I was really holding an interesting software and I became convinced I could make something out of it and eventually, why not, start a company.
&lt;/p&gt;
&lt;p&gt;
And of course I did it all wrong.
&lt;/p&gt;
&lt;p&gt;
Instead of &lt;b&gt;finding out first if there was a need and a market for it&lt;/b&gt;, and then &lt;i&gt;what should I really build to answer this need&lt;/i&gt;, I spent hours every day and most of my week-ends developing it further towards what I was convinced was the minimum set of feature it should hold before I actually try to meet some potential customers to tell them about it.
&lt;br&gt;
So I did that for more than a year and a half until I came close to burn-out and send it all to hell.
&lt;/p&gt;
&lt;p&gt;
Now the project hasn&apos;t evolve for three years. The thing is that I just don&apos;t want to hear about it anymore. I burnt myself and I am just disgusted about it. Honestly it is pretty likely that at the time of reading this article, the link above is not even reachable anymore. 
&lt;br&gt;
When I think of the amount of time I &lt;strike&gt;invested&lt;/strike&gt; wasted in it, and the fact that even now, three years after, I still just don&apos;t want to hear anything about this project anymore, I feel so ashamed. Ashamed that I didn&apos;t take a leap backwards, read a few books about startup creation, and maybe, who knows, discover &lt;I&gt;The Lean Startup&lt;/i&gt; movement before.
&lt;br&gt;
Even now, I still never met any potential customer, any market representative. Even worst: I&apos;m still pretty convinced that there is a need and a market for such a tool. But I&apos;ll never know for sure.
&lt;/p&gt;
&lt;p&gt;
Such stories, and even worst, stories of startups burning millions of dollars for nothing in the end, happen every day, still today. 
&lt;/p&gt;
&lt;p&gt;
Some years ago, Eric Ries, Steve Blank and others initiated &lt;b&gt;&lt;i&gt;The Lean Startup&lt;/i&gt;&lt;/b&gt; movement. &lt;i&gt;The Lean Startup&lt;/i&gt; is a movement, an inspiration, a set of principles and practices that any entrepreneur initiating a startup would be well advised to follow.
&lt;br&gt;
Projecting myself into it, I think that if I had read Ries&apos; book before, or even better Blank&apos;s book, I would maybe own my own company today, around AirXCell or another product, instead of being disgusted and honestly not considering it for the near future.
&lt;br&gt;
In addition to giving a pretty important set of principles when it comes to creating and running a startup, &lt;i&gt;The Lean Startup&lt;/i&gt; also implies an extended set of Engineering practices, especially software engineering practices.
&lt;/p&gt;
&lt;p&gt;
This article focuses on presenting and detailing these &lt;b&gt;Software Engineering Practices from the Lean Startup Movement&lt;/b&gt; since, in the end, I believe they can benefit from any kind company, from initiating startup to well established companies with Software Development Activities.
&lt;br&gt;
By Software Engineering practices, I mean software development practices of course but not only. Engineering is also about analyzing the features to be implemented, understanding the customer need and building a successful product, not just writing code.
&lt;/p&gt;
</atom:summary>        <description>&lt;!-- The Lean Startup - A focus on Practices --&gt;

&lt;p&gt;
A few years ago, I worked intensively on a pet project : AirXCell (long gone ...)
&lt;br&gt;
What was at first some framework and tool I had to write to work on my Master Thesis dedicated to Quantitative Research in finance, became after a few months somewhat my most essential focus in life.  
&lt;br&gt;
Initially it was really intended to be only a tool providing me with a way to have a Graphical User Interface on top of all these smart calculations I was doing in R. After my master thesis, I surprised myself to continue to work on it, improving it a little here and a little there. I kept on doing that until the moment I figured I was dedicated several hours to it every day after my day job.
&lt;br&gt;
Pretty soon, I figured I was really holding an interesting software and I became convinced I could make something out of it and eventually, why not, start a company.
&lt;/p&gt;
&lt;p&gt;
And of course I did it all wrong.
&lt;/p&gt;
&lt;p&gt;
Instead of &lt;b&gt;finding out first if there was a need and a market for it&lt;/b&gt;, and then &lt;i&gt;what should I really build to answer this need&lt;/i&gt;, I spent hours every day and most of my week-ends developing it further towards what I was convinced was the minimum set of feature it should hold before I actually try to meet some potential customers to tell them about it.
&lt;br&gt;
So I did that for more than a year and a half until I came close to burn-out and send it all to hell.
&lt;/p&gt;
&lt;p&gt;
Now the project hasn&apos;t evolve for three years. The thing is that I just don&apos;t want to hear about it anymore. I burnt myself and I am just disgusted about it. Honestly it is pretty likely that at the time of reading this article, the link above is not even reachable anymore. 
&lt;br&gt;
When I think of the amount of time I &lt;strike&gt;invested&lt;/strike&gt; wasted in it, and the fact that even now, three years after, I still just don&apos;t want to hear anything about this project anymore, I feel so ashamed. Ashamed that I didn&apos;t take a leap backwards, read a few books about startup creation, and maybe, who knows, discover &lt;I&gt;The Lean Startup&lt;/i&gt; movement before.
&lt;br&gt;
Even now, I still never met any potential customer, any market representative. Even worst: I&apos;m still pretty convinced that there is a need and a market for such a tool. But I&apos;ll never know for sure.
&lt;/p&gt;
&lt;p&gt;
Such stories, and even worst, stories of startups burning millions of dollars for nothing in the end, happen every day, still today. 
&lt;/p&gt;
&lt;p&gt;
Some years ago, Eric Ries, Steve Blank and others initiated &lt;b&gt;&lt;i&gt;The Lean Startup&lt;/i&gt;&lt;/b&gt; movement. &lt;i&gt;The Lean Startup&lt;/i&gt; is a movement, an inspiration, a set of principles and practices that any entrepreneur initiating a startup would be well advised to follow.
&lt;br&gt;
Projecting myself into it, I think that if I had read Ries&apos; book before, or even better Blank&apos;s book, I would maybe own my own company today, around AirXCell or another product, instead of being disgusted and honestly not considering it for the near future.
&lt;br&gt;
In addition to giving a pretty important set of principles when it comes to creating and running a startup, &lt;i&gt;The Lean Startup&lt;/i&gt; also implies an extended set of Engineering practices, especially software engineering practices.
&lt;/p&gt;
&lt;p&gt;
This article focuses on presenting and detailing these &lt;b&gt;Software Engineering Practices from the Lean Startup Movement&lt;/b&gt; since, in the end, I believe they can benefit from any kind company, from initiating startup to well established companies with Software Development Activities.
&lt;br&gt;
By Software Engineering practices, I mean software development practices of course but not only. Engineering is also about analyzing the features to be implemented, understanding the customer need and building a successful product, not just writing code.
&lt;/p&gt;
&lt;p&gt;
Part of this article is available as a slideshare presentation here : 
&lt;a href=&quot;http://www.slideshare.net/JrmeKehrli/lean-startup-72100971&quot;&gt;http://www.slideshare.net/JrmeKehrli/lean-startup-72100971&lt;/a&gt; as well as a PDF document here : &lt;a href=&quot;https://www.niceideas.ch/lean-startup.pdf&quot;&gt;https://www.niceideas.ch/lean-startup.pdf&lt;/a&gt;.
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;Summary&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec1&quot;&gt;1. The Lean Startup&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec11&quot;&gt;1.1 Origins &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec12&quot;&gt;1.2 The movement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec13&quot;&gt;1.3 Principles &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec14&quot;&gt;1.4 The Feedback Loop &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec15&quot;&gt;1.5 Business Model Canvas and Lean Canvas &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec16&quot;&gt;1.6 Customer Development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec2&quot;&gt;2. The four steps to the Epiphany&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec21&quot;&gt;2.1 Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec22&quot;&gt;2.2 A 4 steps process&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec3&quot;&gt;3. Lean startup practices&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec31&quot;&gt;3.1 Customer Discovery&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec311&quot;&gt;3.1.1 Get out of the building&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec312&quot;&gt;3.1.2 Problem interview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec313&quot;&gt;3.1.3 Solution interview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec32&quot;&gt;3.2 Customer Validation&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec321&quot;&gt;3.2.1 MVP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec322&quot;&gt;3.2.2 Fail Fast&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec33&quot;&gt;3.3 Re-adapt the product&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec331&quot;&gt;3.3.1 Metrics Obsession&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec332&quot;&gt;3.3.2 Pivot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec34&quot;&gt;3.4 Get new customers&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec341&quot;&gt;3.4.1 Pizza Teams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec342&quot;&gt;3.4.2 Feature Teams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec343&quot;&gt;3.4.3 Build vs. Buy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec344&quot;&gt;3.4.4 A/B Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec345&quot;&gt;3.4.5 Scaling Agile&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec35&quot;&gt;3.5 Company creation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec4&quot;&gt;4. Conclusions&lt;/a&gt;&lt;/li&gt;


&lt;/ul&gt;



&lt;a name=&quot;sec1&quot;&gt;&lt;/a&gt;
&lt;h2&gt;1. The Lean Startup&lt;/h2&gt;

&lt;p&gt;
&lt;b&gt;The Lean Startup&lt;/b&gt; is today a movement, initiated and supported by some key people that I&apos;ll present below. 
&lt;br&gt;
But it&apos;s also a framework, an inspiration, an approach, a methodology with a set of fundamental principles and practices for helping entrepreneurs increase their odds of building a successful startup. 
&lt;br&gt;
Lean Startup cannot be thought as a set of tactics or steps. Don&apos;t expect any checklist (well, at least not only checklists) or any recipe to be applied blindly.
&lt;/p&gt;
&lt;p&gt;
The approach is built around two main objectives:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Teaching entrepreneurs how to drive a startup through the process of steering (&lt;i&gt;Build-Measure-Learn&lt;/i&gt; feedback loop). &lt;/li&gt;
&lt;li&gt;Enabling entrepreneurs to scale and grow the business with maximum acceleration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
&lt;b&gt;Lean Startup Practices&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The Lean Startup methodology can be divided in two sets of practices: 
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The &lt;b&gt;steering practices&lt;/b&gt; : designed to minimize the total time through the Build-Measure-Learn feedback loop and &lt;/li&gt;
&lt;li&gt;The &lt;b&gt;acceleration practices&lt;/b&gt; : which allow Lean Startups to grow without sacrificing the startup&apos;s speed and agility&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
This is developed further in &lt;a href=&quot;#sec2&quot;&gt;2. The four steps to the Epiphany&lt;/a&gt;.
&lt;/p&gt;

&lt;a name=&quot;sec11&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.1 Origins &lt;/h3&gt;

&lt;p&gt;
&lt;b&gt;The Lean Movement&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Lean_thinking&quot;&gt;Lean thinking&lt;/a&gt;&lt;/b&gt; is a &lt;b&gt;business methodology&lt;/b&gt; that aims to provide a new way to think about how to organize human activities to deliver more benefits to society and value to individuals while &lt;b&gt;eliminating waste&lt;/b&gt;.
&lt;br&gt;
Lean thinking is a &lt;b&gt;new way of thinking any activity&lt;/b&gt; and seeing the waste inadvertently generated by the way the process is organized
&lt;/p&gt;
&lt;p&gt;
The aim of lean thinking is to create a &lt;b&gt;lean enterprise&lt;/b&gt;, one that &lt;b&gt;sustains growth&lt;/b&gt; by aligning customer satisfaction with employee satisfaction, and that &lt;b&gt;offers innovative products&lt;/b&gt; or services profitably while &lt;b&gt;minimizing unnecessary over-costs&lt;/b&gt; to customers, suppliers and the environment.
&lt;/p&gt;
&lt;p&gt;
The Lean Movement finds its roots in Toyotism and values &lt;b&gt;performance&lt;/b&gt; and &lt;b&gt;continuous improvement&lt;/b&gt;. The Lean Movement really rose in the early 90&apos;s and the lean tradition has adopted a number of practices from Toyota&apos;s own learning curve. 
&lt;br&gt; Some worth to mention:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Kaizen&quot;&gt;Kaizen&lt;/a&gt;&lt;/b&gt; (Continuous Improvement) : is a strategy where employees at all levels of a company work together pro-actively to achieve regular, incremental improvements to the manufacturing process. The point of Kaizen is that improvement is a normal part of the job, not something to be done &quot;when there is time left after having done everything else&quot;, that should involve the company as a whole, from the CEO to the assembly line workers.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Kanban&quot;&gt;Kanban&lt;/a&gt;&lt;/b&gt; (Visual Billboard) : is a scheduling system and visual management tool used in &lt;i&gt;Lean Manufacturing&lt;/i&gt; to signal steps in their manufacturing process. The system&apos;s highly visual nature allows teams to communicate more easily on what work needed to be done and when. It also standardizes cues and refines processes, which helps to reduce waste and maximize value.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Plus strong emphasizes on &lt;i&gt;Autonomation&lt;/i&gt;, &lt;i&gt;Visualization&lt;/i&gt;, etc.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;The Lean Startup&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The author, I should say &lt;i&gt;initial author&lt;/i&gt;, of the Lean Startup methodology, Eric Ries, explains in his book &quot;&lt;i&gt;The Lean Startup: How Today&apos;s Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses&lt;/i&gt;&quot;, that traditional management practices and ideas are not adequate to tackle the entrepreneurial challenges of startups.
&lt;/p&gt;
&lt;p&gt;
By exploring and studying new and existing approaches, Ries found that adapting &lt;i&gt;Lean thinking&lt;/i&gt; to the context of entrepreneurship would allow to discern between &lt;i&gt;value-creating activities&lt;/i&gt; versus &lt;i&gt;waste&lt;/i&gt;. 
&lt;/p&gt;
&lt;p&gt;
Thus, Ries, decided to apply lean thinking to the process of innovation. After its initial development and some refinement, as he states, &lt;b&gt;the Lean Startup&lt;/b&gt; represents a new approach to creating continuous innovation that builds on many previous management and product development ideas, including lean manufacturing, design thinking, customer development, and agile development.
&lt;/p&gt;


&lt;a name=&quot;sec12&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.2 The movement &lt;/h3&gt;

&lt;p&gt;
I would highly recommend this enlightening article - &lt;a href=&quot;http://www.salimvirani.com/the-history-of-leanstartup-and-how-to-make-sense-of-it-all/&quot;&gt;The History Of Lean Startup&lt;/a&gt; - that does a pretty great job explaining how and why the following guys got together and initiated the &lt;i&gt;Lean Startup Movement&lt;/i&gt; (aside from a few things I do not agree with).
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/8b002746-dd21-4668-970e-dafcaa864567&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Lean Startup Movement&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/8b002746-dd21-4668-970e-dafcaa864567&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Blank, Ries, Osterwalder and Maurya are the founders or initiators of the &lt;i&gt;Lean Startup Movement&lt;/i&gt;. Eric Ries is considered as the leader of the movement, while Steve Blank considers himself as its godfather. 
&lt;br&gt;
Osterwalder and Maurya&apos;s work on business models is considered to fill a gap in Ries and Blank&apos;s work on processes, principles and practices. In Steve Blank&apos;s &quot;The four Steps the the Epiphany&quot;, the business model section is a vague single page.
&lt;br&gt;
Furtherly, Maurya&apos;s &quot;&lt;i&gt;Running Lean&lt;/i&gt;&quot; magnificently completes Blank&apos;s work on &lt;i&gt;Customer Development&lt;/i&gt;. We&apos;ll get to that.
&lt;/p&gt;


&lt;a name=&quot;sec13&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.3 Principles &lt;/h3&gt;

&lt;p&gt;
In my opinion, the most fundamental aspect of Lean Startup is the &lt;i&gt;Build-Measure-Learn&lt;/i&gt; loop, or, in the context of the &lt;i&gt;Customer Development Process&lt;/i&gt;, the  &lt;i&gt;Customer Discovery - Customer Validation - Re-adapt the product&lt;/i&gt; loop. &lt;br&gt;
The idea is to be able to loop in laboratory mode, mostly with prototypes and interviews, in an iterative research process, with as little costs as possible, about the product to be developed. A startup should spend as little investment as possible in terms of product development as long as it has no certainty in regards to the customer needs, the right product to be developed, the potential market, etc.
&lt;br&gt;
This is really key, before hiring employees and starting to develop a product, the entrepreneur should have certainty about the product to be developed and its market.
&lt;br&gt;
Premature scaling is the immediate cause of the &lt;a href=&quot;https://steveblank.com/2009/09/07/the-customer-development-manifesto-the-death-spiral-part-3/&quot;&gt;Death Spiral&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Before digging any further into this, below are the essential principles that characterize &lt;i&gt;The Lean Startup&lt;/i&gt; approach, as reported by Eric Ries&apos; book.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Entrepreneurs are everywhere&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
You don&apos;t have to work in a garage to be in a startup. The concept of entrepreneurship includes anyone who works within Eric Ries&apos; definition of a startup, which I like very much BTW.
&lt;br&gt;
His definition is as follows :
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;A startup is a human institution designed to create new products and services under conditions of extreme uncertainty.&lt;/b&gt; 
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
That means entrepreneurs are everywhere and the Lean Startup approach can work in any size company, even a very large enterprise, in any sector or industry.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Entrepreneurship is management&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
A startup is an institution, not just a product, and so it requires a new kind of management specifically geared to its context of extreme uncertainty. 
&lt;br&gt; 
In fact, Ries believes &quot;&lt;i&gt;entrepreneur&lt;/i&gt;&quot; should be considered a job title in all modern companies that depend on innovation for their future growth
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Validated learnings&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Startups exist not just to make stuff, make money, or even serve customers. They exist to learn how to build a sustainable business. This learning can be validated scientifically by running frequent experiments that allow entrepreneurs to test each element of their vision.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Innovation accounting&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
To improve entrepreneurial outcomes and hold innovators accountable, we need to focus on the boring stuff: how to measure progress, how to set up milestones, and how to prioritize work. This requires a new kind of accounting designed for startups-and the people who hold them accountable.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Build-Measure-Learn&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The fundamental activity of a startup is to turn ideas into products, measure how customers respond, and then learn whether to &lt;b&gt;pivot or persevere&lt;/b&gt;. All successful startup processes should be geared to accelerate that &lt;b&gt;feedback loop&lt;/b&gt;.
&lt;/p&gt;


&lt;a name=&quot;sec14&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.4 The Feedback Loop&lt;/h3&gt;


&lt;p&gt;
The feedback loop is represented as below.
&lt;br&gt;
The five-part version of the &lt;i&gt;Build-Measure-Learn&lt;/i&gt; schema helps us see that the real intent of building is to test &quot;&lt;i&gt;ideas&lt;/i&gt;&quot; - not just to build blindly without an objective. 
&lt;br&gt;
The need for &quot;&lt;i&gt;data&lt;/i&gt;&quot; indicates that after we measure our experiments we&apos;ll use the data to further refine our learning. And the new learning will influence our next ideas. So we can see that the goal of Build-Measure-Learn isn&apos;t just to build things, the goal is to build things to validate or invalidate the initial idea.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4b4e8fe7-e841-46cc-996b-6b00df12b175&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 650px;&quot; alt=&quot;Build-Measure-Learn&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4b4e8fe7-e841-46cc-996b-6b00df12b175&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Again, the goal of &lt;i&gt;Build-Measure-Learn&lt;/i&gt; is not to build a final product to ship or even to build a prototype of a product, but to &lt;b&gt;maximize learning&lt;/b&gt; through incremental and iterative engineering. 
&lt;br&gt;
In this case, learning can be about product features, customer needs, distribution channels, the right pricing strategy, etc.
&lt;br&gt;
The &quot;&lt;i&gt;build&lt;/i&gt;&quot; step refers to building an &lt;a href=&quot;#sec321&quot;&gt;&lt;b&gt;MVP&lt;/b&gt;&lt;/a&gt; (Minimal Viable Product). 
&lt;br&gt;
It&apos;s critical here to understand that an MVP does not mean &lt;i&gt;the product with fewer features&lt;/i&gt;. Instead, an MVP should be seen as the simplest thing that you can show to customers to get the most learning at that point in time. Early on in a startup, an MVP could well simply be a set of Powerpoint slides with some fancy animations, or whatever is sufficient to demonstrate a set of features to customers and get feedback from it. Each time one builds an MVP one should also define precisely what one wants to test/measure. 
&lt;br&gt;
Later, as more is learned, the MVP goes from low-fidelity to higher fidelity, but the goal continues to be to maximize learning not to build a beta/fully featured prototype of a product or a feature.
&lt;/p&gt;
&lt;p&gt;
In the end, the &lt;i&gt;Build-Measure-Learn&lt;/i&gt; framework lets startups be fast, agile and efficient.
&lt;/p&gt;


&lt;a name=&quot;sec15&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.5 Business Model Canvas and Lean Canvas &lt;/h3&gt;

&lt;p&gt;
Evolution on Business Models and the relative processes were surprisingly missing or poorly addressed from Ries&apos; and Blank&apos;s initial work. 
&lt;br&gt;
Fortunately, Osterwalder and Maurya caught up and filled the gap.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Business Model Canvas&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The &lt;a href=&quot;https://en.wikipedia.org/wiki/Business_Model_Canvas&quot;&gt;Business Model Canvas&lt;/a&gt; is a strategic management template invented by Alexander Osterwalder and Yves Pigneur for developing new business models or documenting existing ones. 
&lt;br&gt;
It is a visual chart with elements describing a company&apos;s value proposition, infrastructure, customers, and finances. It assists companies in aligning their activities by illustrating potential trade-offs.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Lean Canvas&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The Lean Canvas is a version of the Business Model Canvas adapted by Ash Maurya specifically for startups. The Lean Canvas focuses on addressing broad customer problems and solutions and delivering them to customer segments through a unique value proposition.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4446245e-b296-4c9f-84d0-c6a5fb1bd747&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Lean Canvas&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4446245e-b296-4c9f-84d0-c6a5fb1bd747&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
So how should one use the Lean Canvas?
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Customer Segment and Problem&lt;/b&gt;&lt;br&gt;
Both Customer Segment and Problem sections should be filled in together.
&lt;br&gt;
Fill in the list of potential &lt;i&gt;customers&lt;/i&gt; and &lt;i&gt;users&lt;/i&gt; of your product, distinguish customers (willing to pay) clearly from users, then refine each and every identified customer segment. Be careful not no try to focus on a too broad segment at first, think of facebook whose first segment was only Harvard students.
&lt;br&gt;
Fill in carefully the problem encountered by your identified customers.
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;UVP - Unique Value Proposition&lt;/b&gt;&lt;br&gt;
The UVP is the unique characteristic of your product or your service making it different from what is already available on the market an that makes it worth the consideration of your customers. Focus on the main problem you are solving and what makes your solution different.
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Solution&lt;/b&gt;&lt;br&gt;
Filling this is initially is tricky, since knowing about the solution for real requires trial and error, build-measure-learn loop, etc. In an initial stage one shouldn&apos;t try to be to precise here and keep things pretty open.
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Channels&lt;/b&gt;&lt;br&gt;
This consists in answering: how should you get in touch with your users and customers ? How do you get them to know about your product ? Indicate clearly your communication channels.
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Revenue Stream and Cost Structure&lt;/b&gt;&lt;br&gt;
Both these sections should also be filled in together.
&lt;br&gt;
At first, at the time of the initial stage of the startup, this should really be focused on the costs and revenues related to launching the MVP (how to interview 50 customers ? Whats the initial burn rate ? etc.)
&lt;br&gt;
Later this should evolve towards an initial startup structure and focus on identifying the &lt;i&gt;break-even&lt;/i&gt; point by answering the question : how many customers are required to cover my costs ?
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Key Metrics&lt;/b&gt;&lt;br&gt;
Ash Maurya refers to Dave McClure Pirate Metrics to identify the relevant KPIs to be followed :  &lt;br&gt;
Aquisition - How do user find you ?&lt;br&gt;
Activation - Do user have a great first experience ?&lt;br&gt;
Retention - Do users come back ?&lt;br&gt;
Revenue - How do you make money ?&lt;br&gt;
Referral - Do users tell others ?
&lt;/li&gt;


&lt;li&gt;&lt;b&gt;Unfair Advantage&lt;/b&gt;&lt;br&gt;
This consists in indicating the adoption barriers as well as the competitive advantages of your solution. An &lt;i&gt;unfair advantage&lt;/i&gt; is defined as something that cannot be copied easily neither bought.
&lt;/li&gt;

&lt;/ol&gt;


&lt;p&gt;
&lt;b&gt;Lean Startup : test your plan !&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Using the new &quot;Build - Measure - Learn&quot; diagram, the question then becomes, &quot;What hypotheses should I test?&quot;. This is precisely the purpose of the initial Lean Canvas,
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9400cf47-0a75-4f96-87ed-662a381ae070&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 750px; &quot; alt=&quot;Canvas Principle&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9400cf47-0a75-4f96-87ed-662a381ae070&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
And it brings us to another definition of a startup: 
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;&lt;b&gt;
A startup is a temporary organization designed to &lt;i&gt;search&lt;/i&gt; for a repeatable and scalable business model.
&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
And once these hypotheses fill the Lean Canvas (Or Business Model Canvas), the key approach is to &lt;b&gt;run experiments&lt;/b&gt;. This leads us to the next section.
&lt;/p&gt;

&lt;a name=&quot;sec16&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.6 Customer Development&lt;/h3&gt;

&lt;p&gt;
The Customer Development process is a simple methodology for taking new venture hypotheses and getting out of the building to test them. &lt;i&gt;Customer discovery&lt;/i&gt; (see below) captures the founders&apos; vision and turns it into a series of business model hypotheses. Then it develops a series of experiments to test customer reactions to those hypotheses and turn them into facts. The experiments can be a series of questions you ask customers. Though, most often an MVP to help potential customers understand your solution accompanies the questions.
&lt;/p&gt;
&lt;p&gt;
Startups are building an MVP to learn the most they can, not to get a prototype!
&lt;/p&gt;
&lt;p&gt;
The goal of designing these experiments and minimal viable products is not to get data. The data is not the endpoint. Anyone can collect data. &lt;b&gt;The goal is to get insight&lt;/b&gt;. The entire point of getting out of the building is to inform the founder&apos;s vision. 
&lt;br&gt;
The insight may come from analyzing customer answers, but it also may come from interpreting the data in a new way or completely ignoring it when realizing that the idea is related to a completely new and disruptive market that even doesn&apos;t exist yet.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Customer Development instead of Product Development&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
More startup fail from a &lt;i&gt;lack of customers&lt;/i&gt; rather than from a failure of Product Development.
&lt;/p&gt;
&lt;p&gt;
The Customer Development model delineates all the customer-related activities in the early stage of a company into their own processes and groups them into four easy-to-understand steps: &lt;i&gt;Customer Discovery&lt;/i&gt;, &lt;i&gt;Customer Validation&lt;/i&gt;, &lt;i&gt;Customer Creation&lt;/i&gt;, and &lt;i&gt;Company Building&lt;/i&gt;. 
&lt;br&gt;
These steps mesh seamlessly and support a startup&apos;s ongoing product development activities. Each step results in specific deliverables and involves specific practices.
&lt;/p&gt;
&lt;p&gt;
As its name should communicate, the Customer Development model focuses on developing customers for the product or service your startup is building. Customer Development is really about finding a market for your product. It is built upon the idea that the founder has an idea but he doesn&apos;t know if the clients he imagines will buy. He needs to check this point and it is better if he does it soon.
&lt;/p&gt;


&lt;a name=&quot;sec2&quot;&gt;&lt;/a&gt;
&lt;h2&gt;2. The four steps to the Epiphany&lt;/h2&gt;

&lt;p&gt;
Shortly put, Steve Blank proposes that companies need a &lt;b&gt;Customer Development process&lt;/b&gt; that complements, or even in large portions replaces, their &lt;i&gt;Product Development Process&lt;/i&gt;. The &lt;i&gt;Customer Development process&lt;/i&gt;  goes directly to the theory of &lt;a href=&quot;https://en.wikipedia.org/wiki/Product/market_fit&quot;&gt;Product/Market Fit&lt;/a&gt;. 
&lt;br&gt;
In &quot;&lt;i&gt;The four steps to the Epiphany&lt;/i&gt;&quot;, Steve Blank provides a roadmap for how to get to Product/Market Fit.
&lt;/p&gt;


&lt;a name=&quot;sec21&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.1 Overview&lt;/h3&gt;

&lt;p&gt;
&lt;b&gt;The Path to Disaster: The Product Development Model&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The traditional product development model has four stages: 
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;concept/seed, &lt;/li&gt;
&lt;li&gt;product development, &lt;/li&gt;
&lt;li&gt;beta test, &lt;/li&gt;
&lt;li&gt;and launch.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
That product development model, when applied to startups, suffers from a lot of flaws. They basically boil down to:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customers were nowhere in that flow chart&lt;/li&gt;
&lt;li&gt;The flow chart was strictly linear&lt;/li&gt;
&lt;li&gt;Emphasis on execution over learning&lt;/li&gt;
&lt;li&gt;Lack of meaningful milestones for sales/marketing&lt;/li&gt;
&lt;li&gt;Treating all startups alike&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
What&apos;s the alternative? Before we get to that, one final topic is the &lt;i&gt;technology life cycle adoption curve&lt;/i&gt;, i.e. adoption happens in phases of early adopters (tech enthusiasts, visionaries), mainstream (pragmatists, conservatives), and skeptics. 
&lt;br&gt;
Between each category is a &lt;i&gt;chasm&lt;/i&gt;, the largest is between the early adopters and the mainstream.
&lt;br&gt;
Crossing the chasm is a success problem. But you&apos;re not there yet, &quot;customer development&quot; lives in the realm of the early adopter.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;The Path to Epiphany: The Customer Development Model&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Most startups lack a process for discovering their markets, locating their first customers, validating their assumptions, and growing their business. 
&lt;br&gt;
The &lt;b&gt;Customer Development Model&lt;/b&gt; creates the process for these goals. 
&lt;/p&gt;


&lt;a name=&quot;sec22&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.2 A 4 steps process&lt;/h3&gt;

&lt;p&gt;
The four stages the &lt;i&gt;Customer Development Model&lt;/i&gt; are: customer discovery, customer validation, customer creation, and company creation.
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Customer discovery&lt;/b&gt;: understanding customer problems and needs&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Customer validation&lt;/b&gt;: developing a sales model that can be replicated&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Customer creation / Get new Customers&lt;/b&gt;: creating and driving end user demand&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Customer building / Company Creation&lt;/b&gt;: transitioning from learning to executing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
We can represent them as follows:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9f0c263d-9308-4431-929d-7c7111eee8bf&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 750px; &quot; alt=&quot;Customer Development&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9f0c263d-9308-4431-929d-7c7111eee8bf&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
I won&apos;t go any further in this article in describing these steps, their purpose and reasons. 
&lt;br&gt;
To be honest Blank&apos;s book is pretty heavy and not very accessible. Happily Blank&apos;s did a lot of presentations around his book that one can find on youtube or elsewhere. In addition, there are a lot of excellent summaries and text explanations available online on Blank&apos;s book and I let the reader refer to this material should he want more information.
&lt;/p&gt;
&lt;p&gt;
Instead, I want to focus in this article on the &lt;b&gt;Software Engineering Practices&lt;/b&gt; inferred from The Lean Startup approach, since, again, I believe they are very important for any kind of corporation with an important Software Development activity.
&lt;br&gt;
And yet again, Software Engineering practices go beyond solely Software Development practices, but cover every activity in the company aimed at identifying and developing the product.
&lt;/p&gt;

&lt;a name=&quot;sec3&quot;&gt;&lt;/a&gt;
&lt;h2&gt;3. Lean startup practices&lt;/h2&gt;

&lt;p&gt;
So I want to present the most essentials principles and practices introduced and discussed by &lt;i&gt;the Lean Startup&lt;/i&gt; approach.
&lt;br&gt;
These principles and practices are presented on the following schema attached to the stages of the &lt;i&gt;Customer Development&lt;/i&gt; process where I think they make more sense:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2f0ac2c3-13b4-4a24-a2fd-61ef32a66941&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 750px; &quot; alt=&quot;Lean Startup Practices&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/2f0ac2c3-13b4-4a24-a2fd-61ef32a66941&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;b&gt;Important notes&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I attached the practices to the step where I think they make more sense, where I think they bring the most added value or should be introduced. But bear in mind that such a &lt;i&gt;categorization&lt;/i&gt; is highly subjective and questionable. If you yourself believe some practices should be attached to another step, well just leave a comment and move on.&lt;/li&gt;
&lt;li&gt;Also, there are other practices of course. I mention here and will be discussing below the ones that seem the most appealing to me, myself and I. Again my selection is highly subjective and personal. If you think I am missing something important, just leave a comment and move on.
&lt;/ul&gt;

&lt;p&gt;
The rest of this paper intends to describe all these engineering - mostly software engineering - practices since, again, at the end of the day, I strongly believe that they form the most essential legacy of the Lean Startup movement and that they can benefit any kind of company, not only startups.
&lt;/p&gt;



&lt;a name=&quot;sec31&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.1 Customer Discovery&lt;/h3&gt;

&lt;p&gt;
Customer Discovery, focuses on understanding customer problems and needs. Its really about searching for the &lt;i&gt;Product-Solution Fit&lt;/i&gt;, turning the founders&apos; initial hypotheses about their market and customers into facts.
&lt;br&gt;
The Problem-Solution Fit occurs when entrepreneurs identify relevant insights that can be addressed with a suggested solution. As Osterwalder describes it, this fit happens when there is evidence that customers care about certain problems that need to be solved or needs, and, there is a value proposition designed that addresses those needs.
&lt;/p&gt;
&lt;p&gt;
In Customer Discovery the startup aims at understanding customer problems and needs and, also, to ideate potential solutions that could be valuable based on the findings. Similarly, Osterwalder calls these problems and needs as &lt;i&gt;jobs, pains and gains&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
The three practices I want to emphasize at this stage are as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6438fafe-c2e2-42f0-8d82-31183b686c4b&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 650px; &quot; alt=&quot;Customer Discovery&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6438fafe-c2e2-42f0-8d82-31183b686c4b&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec311&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.1.1 Get out of the building&lt;/h4&gt;

&lt;p&gt;
&lt;b&gt;If you&apos;re not Getting out of the Building, you&apos;re not doing Customer Development and Lean Startup.&lt;/b&gt;
&lt;br&gt;
There are no facts inside the building, only opinions.
&lt;/p&gt;
&lt;p&gt;
If you aren&apos;t actually talking to your customers, you aren&apos;t doing Customer Development. And talking here is really speaking, with your mouth. Preferably in-person, but if not, a video call would work as well, messaging or emailing doesn&apos;t.
&lt;/p&gt;
&lt;p&gt;
As Steve Blank said &quot;&lt;i&gt;One good customer development interview is better for learning about your customers / product / problem / solution / market than five surveys with 10&apos;000 statistically significant responses.&lt;/i&gt;&quot;
&lt;/p&gt;
&lt;p&gt;
The problem here is that tech people, especially software engineers, try to avoid going out of the building as much as possible. But this is so important. Engineers need to fight against their nature and get out of the building and talk to customers as much as possible; find out who they are, how they work, what they need and what your startup needs to do, to build and then sell its solution.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/81e8236c-b6f1-4eae-b7c2-97ecf5225245&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 250px; &quot; alt=&quot;Keep Calm and get out of the building&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/81e8236c-b6f1-4eae-b7c2-97ecf5225245&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
In fact, so many engineers, just as myself, spent months of working on a prototype or even a complete solution, sometimes for several years, before actually meeting a first potential customer, and discovering the hard way that all this work has been for nothing.
&lt;br&gt;
As hard as it is, Engineers should not work one one single line of code, even not one single powerpoint presentation before having met at least a twenty potential customers or representatives and conducted formal &lt;a href=&quot;#sec312&quot;&gt;Problem interviews&lt;/a&gt;.
&lt;br&gt;
After that, it&apos;s still not a question of writing lines of code, it&apos;s a question of investing a few hours - not more ! - in designing a demonstrable prototype for the next set of interviews, the &lt;a href=&quot;#sec313&quot;&gt;Solution interviews&lt;/a&gt;. That prototype doesn&apos;t need to be actually working, it should only be demonstrable. A powerpoint presentation with clickable animations works perfectly!
&lt;/p&gt;
&lt;p&gt;
Again, getting out of the building is not getting in the parking lot, it&apos;s really about getting in front of the customer. 
&lt;br&gt;
At the end of the day, it&apos;s about &lt;i&gt;Customer Discovery&lt;/i&gt;. And &lt;i&gt;Customer Discovery&lt;/i&gt; is not sales, it&apos;s a lot of listening, a lot of understanding, not a lot of talking.
&lt;/p&gt;
&lt;p&gt;
A difficulty that people always imagine is that young entrepreneurs with an idea believe that they don&apos;t know anybody, so how to figure out who to talk to ?
&lt;br&gt;
But at the time of Linkedin, facebook, twitter, it&apos;s hard to believe one cannot find a hundred of people to have a conversation with.
&lt;/p&gt;
&lt;p&gt;
And when having a conversation with one of them, whatever else one&apos;s asking (&lt;a href=&quot;#sec312&quot;&gt;3.1.2 Problem interview&lt;/a&gt;, &lt;a href=&quot;#sec313&quot;&gt;3.1.3 Solution interview&lt;/a&gt;), one should ask two very important final questions:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; 
&quot;&lt;i&gt;Who else should I be talking to ?&lt;/i&gt;&quot;
&lt;br&gt;
And because you&apos;re a pushy entrepreneur, when they give you those names, you should ask &quot;&lt;i&gt;Do you mind if I sit here while you email them introducing me ?&lt;/i&gt;&quot;
&lt;/li&gt;
&lt;li&gt;
&quot;&lt;i&gt;What should I have really asked you ?&lt;/i&gt;&quot;
&lt;br&gt;
And sometimes that gets into another half hour related to what the customer is &lt;i&gt;really&lt;/i&gt; worried about, what&apos;s really the customer&apos;s problem.
&lt;/ol&gt;


&lt;p&gt;
Customer Discovery becomes really easy once you realize you don&apos;t need to get the world&apos;s best first interview. 
&lt;br&gt;
In fact its the sum of these data points over time, it&apos;s not one&apos;s just going to be doing one and one wants to call on the highest level of the organization.
&lt;br&gt;
In fact you actually never want to call on the highest level of the organization because you&apos;re not selling yet, you don&apos;t know enough.
&lt;br&gt;
What one actually wants is to understand enough about the customers, their problems and how they&apos;re solving it today, and whether one&apos;s solution is something they would want to consider.
&lt;/p&gt;
&lt;p&gt;
A few hints in regards to how to get out of the building:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4c4c8421-b5ee-4b59-abb3-1198bdf3f9ac&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 400px;&quot; alt=&quot;Get out of the building&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/4c4c8421-b5ee-4b59-abb3-1198bdf3f9ac&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec312&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.1.2 Problem interview&lt;/h4&gt;

&lt;p&gt;
Problem Interview is Ash Maurya&apos;s term for the interview you conduct to validate whether or not you have a real problem that your target audience has.
&lt;/p&gt;
&lt;p&gt;
In the Problem Interview, you want to find out 3 things:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Problem&lt;/b&gt; - What are you solving? - How do customers rank the top 3 problems?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Existing Alternatives&lt;/b&gt; - Who is your competition? - How do customers solve these problems today?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Customer Segments&lt;/b&gt; - Who has the pain? - Is this a viable customer segment?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Talking to people is hard, and talking to people in person is even harder. The best way to do this is building a script and sticking to it. Also don&apos;t tweak your script until you&apos;ve done enough interviews so that your responses are consistent.
&lt;br&gt;
The main point is to collect the information that you will need to validate your problem, and to do it face-to-face, either in-person or by video call. It&apos;s actually important to see people and be able to study their body language as well. 
&lt;/p&gt;
&lt;p&gt;
The interview script - at least the initial you should follow until you have enough experience to build yours - is as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b54ec66a-fda7-4938-94b4-10456335746d&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Problem Interview&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b54ec66a-fda7-4938-94b4-10456335746d&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
If you have to remember just three rules for problem interviews here they are:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do not talk about your business idea or product. You are here to understand a problem, not imagine or sell a solution yet.&lt;/li&gt;
&lt;li&gt;Ask about past events and behaviours&lt;/li&gt;
&lt;li&gt;No leading question, learn from the customer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
After every interview, take a leap backwards, analyze the answers, make sure you understand everything correctly and synthesize the results.
&lt;br&gt;
After a few dozen of interviews, you should be a able to make yourself a clear understanding of the problem and initiate a few ideas regarding the solution to it.
&lt;br&gt;
Finding and validating your solution brings us to the next topic: the &lt;i&gt;Solution Interview&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
And what if a customer tells you that the issues you thought are important really aren&apos;t? Learn that you have gained important data.
&lt;/p&gt;

&lt;a name=&quot;sec313&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.1.3 Solution interview&lt;/h4&gt;

&lt;p&gt;
In the Solution Interview, you want to find out three things:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Early Adopters&lt;/b&gt; - Who has this problem? - How do we identify an early adopter?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Solution&lt;/b&gt; - How will you solve the problems? - What features do you need to build?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pricing/Revenue&lt;/b&gt; - What is the pricing model? - Will customers pay for it?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
The key point here is to understand how to come up with a solution fitting the problem, step by step getting to the right track with your prototype and also understanding what could be a pricing model.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9ef49888-50eb-4778-bc52-3f4584eeabf7&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Solution Interview&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/9ef49888-50eb-4778-bc52-3f4584eeabf7&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
A &lt;i&gt;demo&lt;/i&gt; is actually important. Many products are too hard to understand without some kind of demo. If a picture is worth a thousand words, a demonstration is probably worth a million.
&lt;/p&gt;
&lt;p&gt;
Identifying early adopters is also key.
&lt;br&gt;
Think of something: if one of the guys you meet tells you that you definitely hold something, ask him if he would want to buy it. If he says he would definitely buy it when it&apos;s ready and available, ask him if he would commit to this. If he says he commits to this, ask him if he would be ready to pay half of it now and have it when its ready, thus becoming a partner or an investor.
&lt;br&gt;
If you find ten persons committing on already paying for the solution you draw, you may not even need to search for investors, you already have them. And that is the very best proof you can find that your solution is actually something.
&lt;br&gt;
And customers or partners are actually the best possible type of investors.
&lt;/p&gt;

&lt;a name=&quot;sec32&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.2 Customer Validation&lt;/h3&gt;

&lt;p&gt;
The second step of the Customer Development model, &lt;i&gt;Customer Validation&lt;/i&gt;, focuses on developing a sales model that can be replicated. The sales model is validated by running experiments to test if customers value how the startup&apos;s products and services are responding to the customer problems and needs identified during the previous step. 
&lt;br&gt;
If customers show no interest, then the startup can &lt;a href=&quot;#sec332&quot;&gt;pivot&lt;/a&gt; to search for a better business model.
&lt;/p&gt;
&lt;p&gt;
Customer Validation needs to happen to validate if the customers really care about the products and services that could be valuable to them. This second step is hence really about &lt;i&gt;Product-Market Fit&lt;/i&gt; which occurs when there is a sales model that works, when customers think the proposed solution is valuable to them. This should be proven by evidence that customers care about the products and services that conform the value proposition.
&lt;/p&gt;
&lt;p&gt;
Blank believes that &lt;i&gt;product-market fit&lt;/i&gt; needs to happen before moving from Customer Validation to Customer Creation (or the &lt;i&gt;Search Phase&lt;/i&gt; to the &lt;i&gt;Execution Phase&lt;/i&gt;).
&lt;/p&gt;
&lt;p&gt;
The two practices I want to emphasize at this stage are as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/87f50709-5984-4ac4-adf1-afb6935c4b9d&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 650px;&quot; alt=&quot;Customer Validation&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/87f50709-5984-4ac4-adf1-afb6935c4b9d&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec321&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.2.1 MVP&lt;/h4&gt;

&lt;p&gt;
The &lt;b&gt;Minimum Viable Product&lt;/b&gt; is an engineering product with just the set of features required to gather &lt;i&gt;validated learnings&lt;/i&gt; about it - or some of its features - and its continuous development. 
&lt;br&gt;
This notion of &lt;i&gt;Minimum Feature Set&lt;/i&gt; is key in the MVP approach.
&lt;/p&gt;
&lt;p&gt;

The key idea is that it makes really no sense developing a full and finalized product without actually knowing what will be the market reception and if all of it is actually worth the development costs.
&lt;br&gt;
Gathering insights and directions from an MVP avoids investing too much in a product based on wrong assumptions. Even further, The &lt;i&gt;Lean Startup&lt;/i&gt; methodology seeks to avoid assumptions at all costs, see &lt;a href=&quot;#sec14&quot;&gt;1.4 The Feedback Loop &lt;/a&gt; and &lt;a href=&quot;#sec331&quot;&gt;3.3.1 Metrics Obsession&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
The &lt;i&gt;Minimum Viable Product&lt;/i&gt; should have just that set of initial features strictly required to have a valid product, usable for its very initial intent, and nothing more. In addition these features should be as minimalist as possible but without compromising the overall &lt;i&gt;User Experience&lt;/i&gt;. A car should move, a balloon should be round and bounce, etc.
&lt;br&gt;
when adopting an MVP approach, the MVP is typically put at disposal at first only to &lt;i&gt;early adopters&lt;/i&gt;, these customers that may be somewhat forgiving for the &quot;naked&quot; aspect of the product and more importantly that would be willing to give feedback and help steer the product development further.
&lt;/p&gt;
&lt;p&gt;
Eric Ries defines the MVP as:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;
&quot;The minimum viable product is that version of a new product a team uses to collect the maximum amount of validated learning about customers with the least effort.&quot;
&lt;/b&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The definition&apos;s use of the words &lt;i&gt;maximum&lt;/i&gt; and &lt;i&gt;minimum&lt;/i&gt; means it is really not formulaic. In practice, it requires a lot of judgement and experience to figure out, for any given context, what MVP makes sense.
&lt;/p&gt;
&lt;p&gt;
The following chart is pretty helpful in understanding why both terms &lt;i&gt;minimum&lt;/i&gt; and &lt;i&gt;viable&lt;/i&gt; are equally important and why designing an MVP is actually difficult:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/abd771cd-b5a4-4a74-91c4-03951407517f&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 320px; &quot; alt=&quot;MVP&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/abd771cd-b5a4-4a74-91c4-03951407517f&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
When applied to a new feature of any existing prodUct instead of a brand new product, the MVP approach is in my opinion somewhat different. It consists of implementing the feature itself not completely; rather, a mock-up or even some animation simulating the new feature should be provided.
&lt;br&gt;
The mock-up or links should be properly instrumented so that all user reactions are recorded and measured in order to get insights on the actual demand of the feature and the best form it should take (&lt;a href=&quot;#sec331&quot;&gt;Measure Obsession&lt;/a&gt;),
&lt;br&gt;
This is called a &lt;b&gt;deploy first, code later&lt;/b&gt; method.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.expressiveproductdesign.com/minimal-viable-product-mvp/&quot;&gt;Fred Voorhorst&apos; work&lt;/a&gt; does a pretty good job in explaining what an MVP is:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/756e983e-5fd7-4dc1-a395-f5f1a69747f8&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;MVP - How-To&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/756e983e-5fd7-4dc1-a395-f5f1a69747f8&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Fred Voorhorst - Expressive Product Design - &lt;a href=&quot;http://www.expressiveproductdesign.com/minimal-viable-product-mvp/&quot;&gt;http://www.expressiveproductdesign.com/minimal-viable-product-mvp/&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Developing an MVP is most definitely not the same as developing a sequence of elements which maybe, eventually combine into a product. A single wheel is not of much interest to a user wanting a personal transporter like a car, as illustrated by the first line.
&lt;br&gt;
Instead, developing an MVP is about developing the vision. This is not the same as developing a sequence of intermediate visions, especially not, if these are valuable products by themselves. As an example, a skateboard will likely neither interest someone in search for a car, as illustrated by the second line.
&lt;/p&gt;
&lt;p&gt;
Developing an MVP means developing a sequence of prototypes through which you explore what is key for your product idea and what can be omitted. 
&lt;/p&gt;

&lt;a name=&quot;sec322&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.2.2 Fail Fast&lt;/h4&gt;

&lt;p&gt;
The key point of the &quot;&lt;b&gt;fail fast&lt;/b&gt;&quot; principle is to quickly abandon ideas that aren&apos;t working. And the big dfficulty of course is not giving up too soon on an idea that could potentially be working. should one find the right channel, the right approach.
&lt;br&gt;
Fail fast means getting out of planning mode and into testing mode, eventually for every component, every single feature, every idea around your product or model of change. &lt;i&gt;Customer development&lt;/i&gt; is the process that embodies this principle and helps you determine which hypotheses to start with and which are the most critical for your new idea.
&lt;/p&gt;
&lt;p&gt;
It really is OK to fail if one knows the reason of the failure, and that is where most people go wrong. Once a site or a product fails then one needs to analyse why it bombed. It&apos;s only then that one can learn from it. 
&lt;br&gt;
The key aspect here is really learning. And learning comes from experimenting, &lt;b&gt;trying things, &lt;a href=&quot;#sec331&quot;&gt;measuring&lt;/a&gt; their success and &lt;a href=&quot;#sec33&quot;&gt;adapting&lt;/a&gt;&lt;/b&gt;.
&lt;br&gt;
An entrepreneur should really be a pathologist investigating a death and finding the cause of the failure. Understanding the cause of a failure can only work if the appropriate measures and metrics around the experiment are in place.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/559f0efe-95eb-4e4e-bdf1-3f6bb998932a&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 350px; &quot; alt=&quot;Success - what it really looks like&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/559f0efe-95eb-4e4e-bdf1-3f6bb998932a&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Now failing is OK as long as we learn from it and as long as we &lt;b&gt;fail as fast as possible&lt;/b&gt;. Again, the whole &lt;i&gt;lean&lt;/i&gt; idea is to avoid waste as much as possible and there&apos;s no greater waste than keeping investing on something that can ultimately not work. Failing as fast as possible, adapting the product, &lt;a href=&quot;#sec332&quot;&gt;pivoting&lt;/a&gt; the startup towards its next approach as soon as possible is key.
&lt;br&gt;
But then again, the big difficulty is not to give up too soon on something that could possible work.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;
Fail fast, &lt;br&gt;
Learn faster, &lt;br&gt;
Succeed sooner !
&lt;/b&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
So how do you know when to turn, when to drop an approach and adapt your solution ? How can you know it&apos;s not too soon?
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;#sec331&quot;&gt;Measure, measure, measure&lt;/a&gt; of course!
&lt;/p&gt;
&lt;p&gt;
The testing of new concepts, failing, and building on failures are necessary when creating a great product. 
&lt;br&gt;
The adage, &quot;&lt;i&gt;If you can&apos;t measure it, you can&apos;t manage it&lt;/i&gt;&quot; is often used in management and is very important in &lt;i&gt;The Lean Startup&lt;/i&gt; approach.  By analyzing data, results can be measured, key lessons learned, and better initiatives employed.
&lt;/p&gt;


&lt;a name=&quot;sec33&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.3 Re-adapt the product&lt;/h3&gt;

&lt;p&gt;
Customer development isn&apos;t predictable; you don&apos;t know what you&apos;re going to learn until you start. You&apos;ll need the ability to think on your feet and adapt as you uncover new information.
&lt;br&gt;
Adapting, in my opinion, is really re-adapting the product to the new situation, to the new knowledge you gained from the previous steps. And re-adapting the product, your solution, your approach is pivoting.
&lt;/p&gt;
&lt;p&gt;
But I want to emphasize here that pivoting, or re-adapting the product, should only happen with the right data, the precise insights that give a clear new direction. Metrics and insight are essential.
&lt;/p&gt;
&lt;p&gt;
The key practices here are as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e39e7b10-58dc-412f-ac22-a2580de1ec96&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 650px;&quot; alt=&quot;Readapt Product&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e39e7b10-58dc-412f-ac22-a2580de1ec96&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec331&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.3.1 Metrics Obsession&lt;/h4&gt;

&lt;p&gt;
In the &lt;i&gt;build-measure-learn&lt;/i&gt; loop, there is measure ... &lt;i&gt;The Lean Startup&lt;/i&gt; makes from measuring everything an actual obsession. And I believe that this is a damn&apos; good thing.
&lt;br&gt;
Think of it: what if you have an idea regarding a new feature or an evolution of your product and you don&apos;t already have the metrics that can help you take a sound and enlightened decision? You&apos;ll need to introduce the new measure and wait until you get the data. Waiting is not good for startups.
&lt;/p&gt;
&lt;p&gt;
This is why I like thinking of it as a &lt;b&gt;Metrics Obsession&lt;/b&gt;. Measure everything, everything you can think of!
&lt;br&gt;
And repeat a hundred times:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;
I will never ever again think that &lt;br&gt;
Instead I will &lt;i&gt;measure&lt;/i&gt; that ...
&lt;/b&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/83f8b089-da6c-4f7f-b3ee-64ca3cdd46b3&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Measure Obsession&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/83f8b089-da6c-4f7f-b3ee-64ca3cdd46b3&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Or as Edward Deming said :
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;
&quot;In god we trust, all others must bring data&quot;
&lt;/b&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Imagine you work on a webite. You should enhance your backend to measure, at least: amount of times a page has been displayed, count of users and different users dispalying the pages, amount of times a link or button has been clicked, by who it has been clicked, how much time after the containing page has been displayed, what is the user think time between 2 actions, what is the path of navigation from each and every user (actually build the graph and the counts along the branches), etc.
&lt;br&gt;
Measure everything! Don&apos;t hesitate to measure something you do not see any use for now. Sooner or later you will find a usage for that metrics, and that day, you better have it.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;How to choose good metrics ?&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Honestly there is no magic silver bullet and it can in fact be pretty difficult to pick up the right metric that would be most helpful to validate a certain hypothesis.
&lt;br&gt;
However, metrics should at all cost respect the three A&apos;s. Good metrics
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;are &lt;b&gt;actionable&lt;/b&gt;,&lt;/li&gt;
&lt;li&gt;can be &lt;b&gt;audited&lt;/b&gt;&lt;/li&gt;
&lt;li&gt; are &lt;b&gt;accessible&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
An &lt;b&gt;actionable metric&lt;/b&gt; is one that ties specific and repeatable actions to observed results. The &lt;i&gt;actionable&lt;/i&gt; property of picked up metrics is important since it prevents the entrepreuneur from distorting the reality to his own vision. We speak of &lt;i&gt;Actionable vs. Vanity&lt;/i&gt; Metrics.
&lt;br&gt;
Meaningless metrics such as &quot;How many visitors ?&quot;, &quot;How many followers ?&quot; are vanity metrics and are useless.
&lt;/p&gt;
&lt;p&gt;
Ultimately, your metrics should be useful to &lt;b&gt;measure progress against your own questions&lt;/b&gt;.
&lt;/p&gt;



&lt;a name=&quot;sec332&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.3.2 Pivot&lt;/h4&gt;

&lt;p&gt;
In the process of learning by iterations, a startup can discover through field returns with real customers that its product is either not adapted to the identified need, that it does not meet that need. 
&lt;br&gt;
However, during this learning process, the startup may have identified another need (often related to the first product) or another way to answer the original need. 
&lt;br&gt;
When the startup changes its product to meet either this new need or the former need in a different way, it is said to have performed a &lt;b&gt;Pivot&lt;/b&gt;.
&lt;br&gt;
A startup can &lt;i&gt;pivot&lt;/i&gt; several times during its existence.
&lt;/p&gt;
&lt;p&gt;
A &lt;i&gt;pivot&lt;/i&gt; is ultimately a &lt;b&gt;change in strategy&lt;/b&gt; without &lt;i&gt;a change in vision&lt;/i&gt;. 
&lt;br&gt;
It is defined as a structured course correction designed &lt;b&gt;to test a new fundamental hypothesis&lt;/b&gt; about the product, business model and engine of growth.
&lt;/p&gt;
&lt;p&gt;
The vision is important. A startup is created because the founder has a vision and the startup is really built and organized around this vision. If the feedback from the field compromises the vision, the startup doesn&apos;t need to pivot, it needs to resign, cease its activities and another startup, another organization aligned to the new vision should prehaps be created.
&lt;/p&gt;
&lt;p&gt;
There are various kind of pivots:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Zoom-In :&lt;/b&gt; a single feature becomes the whole product &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Zoom-Out :&lt;/b&gt; the whole initial product becomes a feature of a new product &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Customer segment :&lt;/b&gt; Good product, bad customer segment &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Customer need :&lt;/b&gt; Repositioning, designing a completely new product (still sticking to the vision)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Platform : &lt;/b&gt; Change from an application to a platform, or vice versa&lt;/li&gt;
&lt;li&gt;Many others ...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Pivot or Persevere&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Since entrepreneurs are typically emotionally attached to their product ideas, there is a tendency to hang in there too long. This wastes time and money. The pivot or persevere process forces a non-emotional review of the hypothesis.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/0ea0e3ba-a1ce-42cb-a805-c14c5a757537&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 360px;&quot; alt=&quot;Pivot or Persevere&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/0ea0e3ba-a1ce-42cb-a805-c14c5a757537&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Unsuprisingly, knowing when to pivot is an art, not a science. It requires to be well thought through and can be pretty complicated to manage. 
&lt;br&gt;
At the end of the day, knowing when to pivot or persevere requires experience and, more importantly, metrics: proper performance indicators giving the entrepreneur clear insights about the market reception of the product and the fitting of customer needs.
&lt;/p&gt;
&lt;p&gt;
One thing seems pretty clear though, if it becomes clear to everyone in the company that another approach would better suit the customer needs, the startup needs to pivot, and fast.
&lt;/p&gt;


&lt;a name=&quot;sec34&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.4 Get new customers&lt;/h3&gt;

&lt;p&gt;
The third step, the Customer Creation step, to &quot;&lt;i&gt;start building end user demand to scale the business&lt;/i&gt;&quot;, is the precursor to achieve &lt;i&gt;Business Model Fit&lt;/i&gt;. Therefore, the Business Model Fit stage can be understood as validating the value for the company, where as the product-market fit focuses on validating the value for the customer.
&lt;/p&gt;
&lt;p&gt;
The set of practices I deem important here are as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d4a47435-9f33-4b76-a62f-b813e4349577&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 650px; &quot; alt=&quot;Get New Customers&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d4a47435-9f33-4b76-a62f-b813e4349577&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Again, attaching some of these practices here or in the next and last step can be subjective. In my opiniom, the startup needs to embrace this Lean and Agile principles and practices before it attempts to scale its organization, hence the reason why I considere these practices at this stage.
&lt;/p&gt;


&lt;a name=&quot;sec341&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.4.1 Pizza Teams&lt;/h4&gt;

&lt;p&gt;
Jeff Bezos, Amazon&apos;s founder and CEO, always said that a team size shouldn&apos;t be larger than what two pizzas can feed, two american pizzas, not italian, needless to say.
&lt;br&gt;
This makes it 7 +/- 2 co-workers inside an Agile Team.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c7fdfc67-0145-4cea-b6a6-3af9f714e19a&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px;&quot; alt=&quot;2 Pizzas Team&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c7fdfc67-0145-4cea-b6a6-3af9f714e19a&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
More communication isn&apos;t necessarily the solution to communication problems - it&apos;s how it is carried out. Compare the interactions at a small dinner - or pizza - party with a larger gathering like a wedding. As group size grows, you simply can&apos;t have as meaningful of a conversation with every person, which is why people start clumping off into smaller clusters to chat.
&lt;br&gt;
For Bezos, small teams make it easier to communicate more effectively rather than more, to stay decentralized and moving fast, and encourage high autonomy and innovation. Here&apos;s the science behind why the two-pizza team rule works.
&lt;/p&gt;
&lt;p&gt;
As team size grows, &lt;b&gt;the amount of one-on-one communication channels tend to explode&lt;/b&gt;, following the formula to compute number of links between people which is &lt;code&gt; n ( n - 1) / 2 &lt;/code&gt;.
&lt;br&gt;
This is &lt;code&gt;O(n&lt;sup&gt;2&lt;/sup&gt;)&lt;/code&gt; (Hello Engineers) and is really a &lt;i&gt;combinatorial explosion&lt;/i&gt;.
&lt;br&gt;
If you take a basic two-pizza team size of, say, 6. That&apos;s 15 links between everyone. Double that group for a team of 12. That shoots up to 66 links.
&lt;br&gt;
The cost of coordinating, communicating, and relating with each other explodes to such a degree that it lowers individual and team productivity.
&lt;/p&gt;
&lt;p&gt;
Under five co-workers, the team becomes fragile to external events and lacks creativity. 
&lt;br&gt;
Beyond ten, communication loses efficiency, cohesion diminishes, parasitism behaviors and power struggles appear, and the performance of the team decreases very rapidly with the number of members.
&lt;/p&gt;
&lt;p&gt;
The right size for an Agile Team is 7 +/- 2 persons.
&lt;/p&gt;

&lt;a name=&quot;sec342&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.4.2 Feature Teams&lt;/h4&gt;

&lt;p&gt;
Let&apos;s first have a look at what is the other model: &lt;i&gt;Component Teams&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Component Teams&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Components Teams&lt;/i&gt; are the usual, the legacy model. In large IT oranizations, there is usually a development team dedicated to the front-end, the Graphical User Interface, another team dedicated to developing the Java (Or Cobol :-) backend, a team responsible to design and maintain the database, etc.
&lt;br&gt;
A Component Team is defined as a development Team whose primary area of concern is restricted to a specific component, or a set of components from a specific layer or tiers, of the system.
&lt;br&gt;
Prior to Agile, most large-scale systems were developed following the component team approach and the development teams were organized around components and subsystems.
&lt;/p&gt;
&lt;p&gt;
The most essential drawback of &lt;i&gt;Component Teams&lt;/i&gt; is obvious : most new features are spread among several components, creating dependencies that require cooperation between these teams. This is a continuing drag on velocity, as the individual teams spend much of their time discussing dependencies between teams and testing, assessing, fixing behaviour across components rather than delivering end user value as efficiently as possible.
&lt;br&gt;
An important direct consequence of this dependency is that any given feature can only be delivered as fast as can be delivered the component changes by the slowest (or most overloaded) component team.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Feature Teams&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
As such, in an Agile Organization, where the whole company is organized around Feature backlogs or Kanban, it makes a lot more sense to organize the various development teams in &lt;b&gt;Feature Teams&lt;/b&gt;.
&lt;br&gt;
&lt;i&gt;Feature teams&lt;/i&gt; are organized around user-centered functionality. Each and every team, is capable of delivering end-to-end user value throughout the software stack. Feature teams operate primarily with user stories, refactors and spikes. However, technical stories may also occasionally occur in their backlog.
&lt;br&gt;
A feature team is defined as a long-lived, cross-functional, cross-component team that completes many end-to-end customer features, one by one.
&lt;/p&gt;
&lt;p&gt;
More Information on Feature Teams:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.scaledagileframework.com/features-and-components/&quot;&gt; From SAFe - Scaled Agile Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://less.works/less/structure/feature-teams.html&quot;&gt;From LeSS - Large Scale Scrum framework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The difference between both models is well illustrated this way:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/cdee6c64-8084-4f23-86bd-79e30d784f0a&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;Component Team vs. Feature Teams&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/cdee6c64-8084-4f23-86bd-79e30d784f0a&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source : &lt;a href=&quot;https://less.works/less/structure/feature-teams.html&quot;&gt;https://less.works/less/structure/feature-teams.html&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
A pretty good summary of the most essential differences between both models is available on the LeSS web site:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;table class=&quot;nicewithborder&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center; background-color: #DDDDDD;&quot;&gt;component team&lt;/th&gt;
      &lt;th style=&quot;text-align: center; background-color: #DDDDDD;&quot;&gt;feature team&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;optimized for delivering the &lt;b&gt;maximum number of lines of code&lt;/b&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;optimized for delivering the &lt;b&gt;maximum customer value&lt;/b&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;focus on increased individual productivity by implementing &apos;easy&apos; lower-value features&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;focus on high-value features and system productivity (value throughput)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;responsible for only part of a customer-centric feature&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;responsible for complete customer-centric feature&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;traditional way of organizing teams - follows Conway&apos;s law&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&apos;modern&apos; way of organizing teams - avoids Conway&apos;s law&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;leads to &apos;invented&apos; work and a forever-growing organization&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;leads to customer focus, visibility, and smaller organizations&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;dependencies between teams leads to additional planning&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;b&gt;minimizes dependencies between teams to increase flexibility&lt;/b&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;focus on single specialization&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;focus on multiple specializations&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;individual/team code ownership&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;b&gt;shared product code ownership&lt;/b&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;clear individual responsibilities&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;b&gt;shared team responsibilities&lt;/b&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;results in &apos;waterfall&apos; development&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;b&gt;supports iterative development&lt;/b&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;exploits existing expertise; lower level of learning new skills&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;exploits flexibility; continuous and broad learning&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;works with sloppy engineering practices-effects are localized&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;requires skilled engineering practices-effects are broadly visible&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;contrary to belief, often leads to low-quality code in component&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;b&gt;provides a motivation to make code easy to maintain and test&lt;/b&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;seemingly easy to implement&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;seemingly difficult to implement&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;br&gt;
(Source : &lt;a href=&quot;https://less.works/less/structure/feature-teams.html&quot;&gt;https://less.works/less/structure/feature-teams.html&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The Analogy with a Star Trek team makes suprisingly and funnily a lot of sense.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c91988a2-6aa1-4beb-8bdb-f62277d0decf&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Star Trek&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c91988a2-6aa1-4beb-8bdb-f62277d0decf&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Think of a Star Trek spaceship. The crew is constituted by Commanding Officers, Medical Officers, Medical Staff, Engineering Officers, Engineering Staff, Science Officers, Scientists, etc.
&lt;br&gt;
These different functions, competencies and responsibilities are grouped together to work towards a common objective, its continuing mission: &lt;i&gt;to explore strange new worlds, to seek out new life and new civilizations, to boldly go where no one has gone before&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
Now imagine if Starfleet had instead put all the Commanding Officers in one ship, all medical staff in another ship, and so on. It would have been pretty difficult to make those ships actually do anything significant, don&apos;t you think ?
&lt;br&gt;
This is precisely the situation of &lt;i&gt;Component Teams&lt;/i&gt;.
&lt;br&gt;
Just as with a Star Trek Ship, it makes a lot more sense to put all the required competencies together in a team (or ship) and assign them a clear objective, implementing that feature throughout the technology and software stack.
&lt;/p&gt;


&lt;a name=&quot;sec343&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.4.3 Build vs. Buy&lt;/h4&gt;

&lt;p&gt;
This dilemma is as old as the world of computers: is it better to invest in developing a software that is best suited to your needs or should you rely on a software package or third party product that embed the capitalization and R&amp;D of &lt;b&gt;another&lt;/b&gt; software editor in order to - &lt;b&gt;apparently&lt;/b&gt; - speed up your time to market ?
&lt;/p&gt;
&lt;p&gt;
In order to be as efficient as possible on the build-measure-learn loop, it is essential to master your development process. For this reason, &lt;i&gt;tailor made&lt;/i&gt; solutions are better because the adoption of a third party software package often requires to invest a lot of resources not in the development of your product, but instead in the development of workarounds, hacks and patchs to correct all the points on which the software package is poorly adapted to the specific and precise behavior required by your own product feature.
&lt;/p&gt;
&lt;p&gt;
In the case of a startup, this aspect is catastrophic. Investing in the development of hacks and workarounds around a third party product, a product that one has in addition to pay for, sometimes depending on the number of machine or users, instead of developing the startup&apos;s core business, should just not happen.
&lt;/p&gt;
&lt;p&gt;
This cost aspect is particularly critical of course when scaling the solution. When one multiplies the processors and the servers, the invoice climbs very quickly and not necessarily linearly, and the costs become very visible, no matter whether it is a business software package or an infrastructure brick.
&lt;/p&gt;
&lt;p&gt;
This is precisely one of the arguments that led LinkedIn to gradually replace Oracle with a home solution: Voldemor.
&lt;/p&gt;
&lt;p&gt;
Most technologies that make the buzz today in the world of high performance architectures are the result of developments made by the Web Giants that have been released as Open Source: Cassandra, developed by Facebook, Hadoop and HBase inspired by Google and developed at Yahoo, Voldemort by LinkedIn, etc.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Open-Source software is cool&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Of course the cost problem doesn&apos;t apply to Open-Source and free to use software. In addition, instead of developing workarounds and patches around Open-Source Software, you can instead change its source, fork it and maintain your different baseline while still benefiting frome the developments made on the official baseline by merging it frequently.
&lt;/p&gt;
&lt;p&gt;
At the end of the day, integrating an Open-Source software, in contrary to Editor / Closed Source Software, is pretty closed to developing it on your own, as long as you have the competencies to maintain it on your own should you need to.
&lt;br&gt;
Open-Source software is cool, go for it!
&lt;/p&gt;


&lt;a name=&quot;sec344&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.4.4 A/B Testing&lt;/h4&gt;

&lt;p&gt;
A/B testing is a marketing technique that consists in proposing several variants of the same object that differ according to a single criterion (for example, the color of a package) in order to determine the version which lead to the best apprciation and acceptance  from consumers.
&lt;br&gt;
A / B testing is used to qualify all kinds of multivariate tests.
&lt;/p&gt;
&lt;p&gt;
An A/B test evaluates the respective performance of one or more partially or totally different versions of the same product or functionality by comparing them to the original version. The test consists in creating modified versions of the functionality by modifying as many elements as desired.
&lt;br&gt;
The idea is to split the visitors into two groups (hence the name A / B) and to present to each group a different version of the functionality or the product. Then, we should follow the path of the two groups, their appreciation of the functionality by means of ad&apos;hoc metrics, and we consider which of the two variants gives the best result with respect to a given objective.
&lt;/p&gt;
&lt;p&gt;
For instance, in order to tests if a &lt;i&gt;trial first approach&lt;/i&gt; is more appealing and leads eventually to more sales than a mandatory buying:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6899c72d-0165-4704-84ae-6ffad63f0d84&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 450px;&quot; alt=&quot;A/B Testing&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/6899c72d-0165-4704-84ae-6ffad63f0d84&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The A/B test enables to validate very quickly the idea of introducing a trial period for a feature or a product.
&lt;/p&gt;


&lt;a name=&quot;sec345&quot;&gt;&lt;/a&gt;
&lt;h4&gt;3.4.5 Scaling Agile&lt;/h4&gt;

&lt;p&gt;
Transforming a startup into a company, changing and scaling its organization is a unique, and yet challenging, opportunity to make it an agile organization keeping the &lt;i&gt;lean&lt;/i&gt; genes on which it has been built.
&lt;br&gt;
The &lt;i&gt;agile&lt;/i&gt; aspect here is essential and the approach here actually has a name: &lt;b&gt;Scaling Agile&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Scrum&lt;/i&gt; and &lt;i&gt;Kanban&lt;/i&gt; are two agile frameworks often used at the team level. Over the past decade, as they gained popularity, the industry has begun to adapt and use Agile in larger companies. Two methods (amongst others) emerged to facilitate this process: &lt;a href=&quot;http://less.works/&quot;&gt;&lt;b&gt;LeSS&lt;/b&gt;&lt;/a&gt; (Large Scale Scrum) and &lt;a href=&quot;http://www.scaledagileframework.com/&quot;&gt;&lt;b&gt;SAFe&lt;/b&gt;&lt;/a&gt; (Scaled Agile Framework). Both are excellent starting points for using Agile on a large scale within a company.
&lt;/p&gt;
&lt;p&gt;
Both approaches differ a little but also have a lot in common: they consist of scaling agility first among multiple agile team within the R&amp;D or Engineering department and then around it, by having the whole company organizing its activities in an agile way and centered on the engineering team, the product development team.
&lt;br&gt;
I won&apos;t be describing these both approaches any further here and I let the reader refere to both links above.
&lt;/p&gt;
&lt;p&gt;
I just want to emphasize how important I believe that is. Scaling Agile is key in aligning business and IT engagement models.
&lt;/p&gt;

&lt;a name=&quot;sec35&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.5 Company creation&lt;/h3&gt;

&lt;p&gt;
Company creation is the end phase, when all assumptions have been confirmed or adapted, when the product is build in an acceptable form, when the break-even pointit reached, and the startup should evolve to a corporation. When that moment is reached, startups must begin the transition from the temporary organization designed to search a business model to a structure focused on executing a validated model.
&lt;/p&gt;
&lt;p&gt;
Company creation happens at the moment the company can transition from its informal, learning and discovery-oriented Customer Development team (startup, temporary organization) into formal departments with VPs of Sales, Marketing and Business Development.
&lt;br&gt;
At that moment, these executives should focus on building mission-oriented departments that can exploit the company&apos;s early market success. 
&lt;/p&gt;
&lt;p&gt;
This is a change of bracket. We think of &lt;i&gt;Company Creation&lt;/i&gt; since it is really a question of creating a company, from what was &quot;only&quot; a startup. The temporary organization should evolve towards a sustainable and viable organization.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c2fe6011-91cb-417e-88de-2fd047fc5e3a&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Scale-Up&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c2fe6011-91cb-417e-88de-2fd047fc5e3a&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Describing anything further in regards to &lt;i&gt;Company Creation&lt;/i&gt; exceeds the scope of this article focused on &lt;i&gt;Lean Startup Practices&lt;/i&gt;.
&lt;br&gt;
I can only recommend reading Steve Blank&apos;s article on the subject (or the big chapter in the &lt;i&gt;&quot;Four Steps to the Epihpany&quot;&lt;/i&gt;):
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://steveblank.com/2010/01/14/a-startup-is-not-a-smaller-version-of-a-large-company/&quot;&gt;A Startup is Not a Smaller Version of a Large Company&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://steveblank.com/2009/12/21/the-elves-leave-middle-earth-%E2%80%93-soda%E2%80%99s-are-no-longer-free/&quot;&gt;The Elves Leave Middle Earth - Sodas Are No Longer Free&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://steveblank.com/2010/09/20/the-peter-pan-syndrome-%E2%80%93-the-startup-to-company-transition/&quot;&gt;The Peter Pan Syndrome - The Startup to Company Transition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://steveblank.com/2015/02/12/what-do-i-do-now/&quot;&gt;What Do I Do Now? The Startup Lifecycle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;a name=&quot;sec4&quot;&gt;&lt;/a&gt;
&lt;h2&gt;4. Conclusions&lt;/h2&gt;

&lt;p&gt;
The Lean Startup is not dogmatic. It is first and foremost a question of being aware that the market and the customer are not in the architecture meetings, marketing plans, sales projections or key feature discussions.
&lt;/p&gt;
&lt;p&gt;
Bearing this in mind, you will see assumptions everywhere. The key approach then consists in putting in place a discipline of validation of the hypotheses while keeping as key principle to validate the minimum of functionalities at any given time.
&lt;/p&gt;
&lt;p&gt;
Before doing any line of code, the main questions to ask revolve around the triplet : &lt;i&gt;Client / Problem / Solution&lt;/i&gt;
&lt;br&gt;
Do you really have a problem that is worth resolving? Is your solution the right one for your customer? Is he likely to buy it? For how much ? All the means are good to remove these hypotheses: interviews, market studies, models, whatever you can think of.
&lt;/p&gt;
&lt;p&gt;
The next step is to know if the model that you came up with and have been able to test on a smaller scale is really repeatable and extensible. 
&lt;br&gt;
How to put a product they have never heard of in the hands of the customers ? Will they understand it as well with its use and benefits ?
&lt;/p&gt;
&lt;p&gt;
The Lean Startup is not an approach to be reserved only to mainstream websites or fancy internet products. Innovating by validating hypotheses as quickly as possible and limiting financial investment is obviously a logic that can be transposed to any type of engineering project, even if it is internal. 
&lt;br&gt;
I am convinced that the practices and principles from &lt;b&gt;the Lean Startup&lt;/b&gt; approach should be more widely used to avoid so many projects burning so much money and effort before being simply dropped.
&lt;/p&gt;
&lt;p&gt;
Part of this article is available as a slideshare presentation here : 
&lt;a href=&quot;http://www.slideshare.net/JrmeKehrli/lean-startup-72100971&quot;&gt;http://www.slideshare.net/JrmeKehrli/lean-startup-72100971&lt;/a&gt; as well as a PDF document here : &lt;a href=&quot;https://www.niceideas.ch/lean-startup.pdf&quot;&gt;https://www.niceideas.ch/lean-startup.pdf&lt;/a&gt;.


&lt;/p&gt;
</description>          </item>
    <item>
    <guid isPermaLink="true">https://www.niceideas.ch/roller2/badtrash/entry/devops-explained</guid>
    <title>DevOps explained</title>
    <dc:creator>Jerome Kehrli</dc:creator>
    <link>https://www.niceideas.ch/roller2/badtrash/entry/devops-explained</link>
        <pubDate>Wed, 4 Jan 2017 15:56:41 -0500</pubDate>
    <category>Agile</category>
    <category>agile</category>
    <category>devops</category>
    <category>practices</category>
    <category>principles</category>
    <atom:summary type="html">&lt;!-- DevOps explained --&gt;

&lt;p&gt;
So ... I&apos;ve read a lot of things recently on DevOps, a lot of very interesting things ... and, unfortunately, some pretty stupid as well. It seems a lot of people are increasingly considering that DevOps is resumed to mastering &lt;code&gt;chef&lt;/code&gt;, &lt;code&gt;puppet&lt;/code&gt; or docker containers. This really bothers me. DevOps is so much more than any tool such as puppet or docker.
&lt;/p&gt;
&lt;p&gt;
This could even make me angry. DevOps seems to me so important. I&apos;ve spent 15 years working in the engineering business for very big institutions, mostly big financial institutions. DevOps is a very key methodology bringing principles and practices that address precisely the biggest problem, the saddest factor of failure of software development projects in such institutions : the &lt;i&gt;wall of confusion&lt;/i&gt; between developers and operators.
&lt;/p&gt;
&lt;p&gt;
Don&apos;t get me wrong, in most of these big institutions being still far from a large and sound adoption of an Agile Development Methodology beyond some XP practices, there are many other reasons explaining the failure or slippage of software development projects.
&lt;br&gt;
But the &lt;i&gt;wall of confusion&lt;/i&gt; is by far, in my opinion, the most frustrating, time consuming, and, well, quite stupid, problem they are facing.
&lt;/p&gt;
&lt;p&gt;
So yeah... Instead of getting angry I figured I&apos;d rather present here in a concrete and as precise as possible article what DevOps is and what it brings. Long story short, DevOps is not a set of tools. &lt;b&gt;DevOps is a methodology&lt;/b&gt; proposing a set of &lt;b&gt;principles and practices&lt;/b&gt;, period. The tools, or rather the toolchain - since the collection of tools supporting these practices can be quite extended - are only intended to support the practices.
&lt;br&gt;
In the end, these tools don&apos;t matter. The DevOps toolchains are today very different than they were two years ago and will be very different in two years. Again, this doesn&apos;t matter. What matters is a sound understanding of the principles and practices.
&lt;/p&gt;
&lt;p&gt;
Presenting a specific toolchain is not the scope of this article, I won&apos;t mention any. There are many articles out there focusing on DevOps toolchains. I want here to take a leap backwards and present the principles and practices, their fundamental purpose since, in the end, this is what seems most important to me. 
&lt;/p&gt;
&lt;p&gt;
DevOps is a methodology capturing the practices adopted from the very start by the web giants who had a unique opportunity as well as a strong requirement to invent new ways of working due to the very nature of their business: the need to evolve their systems at an unprecedented pace as well as extend them and their business sometimes on a daily basis.
&lt;br&gt;
While DevOps makes obviously a critical sense for startups, I believe that the big corporations with large and old-fashioned IT departments are actually the ones that can benefit the most from adopting these principles and practices. I will try to explain why and how in this article.
&lt;/p&gt;</atom:summary>        <description>&lt;!-- DevOps explained --&gt;

&lt;p&gt;
So ... I&apos;ve read a lot of things recently on DevOps, a lot of very interesting things ... and, unfortunately, some pretty stupid as well. It seems a lot of people are increasingly considering that DevOps is resumed to mastering &lt;code&gt;chef&lt;/code&gt;, &lt;code&gt;puppet&lt;/code&gt; or docker containers. This really bothers me. DevOps is so much more than any tool such as puppet or docker.
&lt;/p&gt;
&lt;p&gt;
This could even make me angry. DevOps seems to me so important. I&apos;ve spent 15 years working in the engineering business for very big institutions, mostly big financial institutions. DevOps is a very key methodology bringing principles and practices that address precisely the biggest problem, the saddest factor of failure of software development projects in such institutions : the &lt;i&gt;wall of confusion&lt;/i&gt; between developers and operators.
&lt;/p&gt;
&lt;p&gt;
Don&apos;t get me wrong, in most of these big institutions being still far from a large and sound adoption of an Agile Development Methodology beyond some XP practices, there are many other reasons explaining the failure or slippage of software development projects.
&lt;br&gt;
But the &lt;i&gt;wall of confusion&lt;/i&gt; is by far, in my opinion, the most frustrating, time consuming, and, well, quite stupid, problem they are facing.
&lt;/p&gt;
&lt;p&gt;
So yeah... Instead of getting angry I figured I&apos;d rather present here in a concrete and as precise as possible article what DevOps is and what it brings. Long story short, DevOps is not a set of tools. &lt;b&gt;DevOps is a methodology&lt;/b&gt; proposing a set of &lt;b&gt;principles and practices&lt;/b&gt;, period. The tools, or rather the toolchain - since the collection of tools supporting these practices can be quite extended - are only intended to support the practices.
&lt;br&gt;
In the end, these tools don&apos;t matter. The DevOps toolchains are today very different than they were two years ago and will be very different in two years. Again, this doesn&apos;t matter. What matters is a sound understanding of the principles and practices.
&lt;/p&gt;
&lt;p&gt;
Presenting a specific toolchain is not the scope of this article, I won&apos;t mention any. There are many articles out there focusing on DevOps toolchains. I want here to take a leap backwards and present the principles and practices, their fundamental purpose since, in the end, this is what seems most important to me. 
&lt;/p&gt;
&lt;p&gt;
DevOps is a methodology capturing the practices adopted from the very start by the web giants who had a unique opportunity as well as a strong requirement to invent new ways of working due to the very nature of their business: the need to evolve their systems at an unprecedented pace as well as extend them and their business sometimes on a daily basis.
&lt;br&gt;
While DevOps makes obviously a critical sense for startups, I believe that the big corporations with large and old-fashioned IT departments are actually the ones that can benefit the most from adopting these principles and practices. I will try to explain why and how in this article.
&lt;/p&gt;
&lt;p&gt;
(This article is available as a PDF document here &lt;a href=&quot;https://www.niceideas.ch/devops.pdf&quot;&gt;https://www.niceideas.ch/devops.pdf&lt;/a&gt; and as a slideshare presentation here 
&lt;a href=&quot;https://www.slideshare.net/JrmeKehrli/devops-explained-72664261&quot;&gt;https://www.slideshare.net/JrmeKehrli/devops-explained-72664261&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Summary&lt;/b&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec1&quot;&gt;1. Introduction&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec11&quot;&gt;1.1 The management credo &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec12&quot;&gt;1.2 a typical IT organization &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec13&quot;&gt;1.3 Ops frustration &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec14&quot;&gt;1.4 Infrastructure automation &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec15&quot;&gt;1.5 DevOps : For once, a magic silver bullet &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec2&quot;&gt;2. Infrastructure as Code&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec21&quot;&gt;2.1 Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec22&quot;&gt;2.2 DevOps Toolchains&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec22&quot;&gt;2.3 Benefits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec3&quot;&gt;3. Continuous Delivery&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec31&quot;&gt;3.1 Learn from the field&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec32&quot;&gt;3.2 Automation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec33&quot;&gt;3.3 Deploy more often&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec34&quot;&gt;3.4 Continuous Delivery requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec35&quot;&gt;3.5 Zero Downtime Deployments&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec4&quot;&gt;4. Collaboration&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec41&quot;&gt;4.1 The wall of confusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec42&quot;&gt;4.2 Software Development Process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec43&quot;&gt;4.3 Share the Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec44&quot;&gt;4.4 Work Together&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec5&quot;&gt;5. Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec1&quot;&gt;&lt;/a&gt;
&lt;h2&gt;1. Introduction&lt;/h2&gt;

&lt;p&gt;
DevOps is not a question of tools, or mastering chef or docker. DevOps is a methodology, a set of principles and practices that help both developers and operators reach their goals while maximizing value delivery to the customers or the users as well as the quality of these deliverables.
&lt;/p&gt;
&lt;p&gt;
The problem comes from the fact that developers and operators - while both required by corporations with large IT departments - have very different objectives.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b5394bf3-7943-4b74-843f-bbdc56fd3cd1&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Developers and Operators&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b5394bf3-7943-4b74-843f-bbdc56fd3cd1&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
This difference of objectives between developers and operators is called the &lt;b&gt;wall of confusion&lt;/b&gt;. We&apos;ll see later precisely what that means any why I consider this something big and bad.
&lt;/p&gt;
&lt;p&gt;
DevOps is a methodology presenting a set of principles and practices (tools are derived from these practices) aimed at having both these personas working towards an unified and common objective : &lt;b&gt;deliver as much value as possible for the company&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
And surprisingly, for once, there is a magic silver bullet for this. Very simply, the secret is to &lt;b&gt;bring agility to the production side&lt;/b&gt;! 
&lt;br&gt;
And that, precisely that and only that, is what DevOps is about !
&lt;/p&gt;
&lt;p&gt;
But there are quite a few things I need to present before we can discuss this any further.
&lt;/p&gt;


&lt;a name=&quot;sec11&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.1 The management credo &lt;/h3&gt;

&lt;p&gt;
What is the sinews of war of IT Management ? In other words, when it comes to Software Development Projects, what does management want first and foremost ? 
&lt;/p&gt;
&lt;p&gt;
Any idea ?
&lt;/p&gt;
&lt;p&gt;
Let me put you on tracks : what is utmost important when developing a startup ?
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Improve Time To Market (TTM)&lt;/b&gt; of course !
&lt;/p&gt;
&lt;p&gt;
The &lt;b&gt;Time To Market&lt;/b&gt; or TTM is the length of time it takes from a product being conceived until its being available to users or for sale to customers. TTM is important in industries where products are outmoded quickly.
&lt;br&gt;
In software engineering, where approaches, business and technologies change almost yearly, the TTM is a very important KPI (Key Performance Indicator).
&lt;br&gt;
The TTM is also very often called &lt;b&gt;Lead Time&lt;/b&gt; 
&lt;/p&gt;
&lt;p&gt;
A first problem lays in the fact (as believed by many) that TTM and product quality are opposing attributes of a development process. As we will see below, improving quality (and hence stability) is the objective of operators while reducing lead time (and hence improving TTM) is the objective of developers.
&lt;br&gt;
Let me explain this.
&lt;/p&gt;
&lt;p&gt;
An IT organization or department is often judged on these two key KPIs : the quality of the software, where the target is to have as little defects as possible, and the TTM, where the target is to be able to go from business ideas (often given by business users) to production - making the feature available to users or customers - as soon as possible.
&lt;br&gt;
The problem here is that most often these two distinct objectives are supported by two different teams : the &lt;i&gt;developers&lt;/i&gt;, building the software, and the &lt;i&gt;operators&lt;/i&gt;, running the software.
&lt;/p&gt;



&lt;a name=&quot;sec12&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.2 a typical IT organization &lt;/h3&gt;

&lt;p&gt;
A typical IT organization, in a corporation owning an important IT department, looks as follows :
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/3f858c20-5a21-4130-abe5-4af5b93b07db&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px; &quot; alt=&quot;Typical IT Organization&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/3f858c20-5a21-4130-abe5-4af5b93b07db&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Mostly for historical reasons (operators come from the hardware and telco business most often), operators are not attached to the same branch than developers. Developers belong to R&amp;D while operators most of the time belong to Infrastructure department (or dedicated operation department).
&lt;/p&gt;
&lt;p&gt;
Again, they have different objectives:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ce967df5-4dca-4f37-a480-b683bd742259&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Developers and Operators&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ce967df5-4dca-4f37-a480-b683bd742259&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
In addition, and as a sidenote, these both teams sometimes even run on different budget. The development team uses the &lt;i&gt;build&lt;/i&gt; budget while the operation team uses the &lt;i&gt;run&lt;/i&gt; budget. These different budgets and the increasing needs to control and shorten the costs of IT in corporation tend to emphasize the opposition of objectives of the different teams.
&lt;br&gt;
(In parenthesis: nowadays, with the always and everywhere interconnection of people and objects pushing the digitalization of businesses and society in general, the old Plan / Build / Run framework for IT budgeting makes IMHO really no sense anymore, but that is another story)
&lt;/p&gt;


&lt;a name=&quot;sec13&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.3 Ops frustration &lt;/h3&gt;

&lt;p&gt;
Now let&apos;s focus on operators a little and see, in average, how a typical &lt;i&gt;operation team&lt;/i&gt; spends its time:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/60b9fcce-83ef-4639-b03a-34b367088181&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 480px; &quot; alt=&quot;Operator team time stats&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/60b9fcce-83ef-4639-b03a-34b367088181&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source : Study from Deepak Patil [Microsoft Global Foundation Services] in 2006, via James Hamilton [Amazon Web Services] &lt;a href=&quot;http://mvdirona.com/jrh/TalksAndPapers/JamesHamilton_POA20090226.pdf&quot;&gt;http://mvdirona.com/jrh/TalksAndPapers/JamesHamilton_POA20090226.pdf&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
So almost 50% (47) of total time of Production Teams is dedicated to deployment related topics:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Actually doing deployment or&lt;/li&gt;
&lt;li&gt;Fixing problems related to deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
This is actually a pretty crazy KPI, one that should have been followed much sooner. The truth is, operator teams have been since their inception in the early age of Computer Engineering - 40 years ago, at the time computers were massively introduced in the industry - this kind of hackers running tons of commands manually to perform their tasks. They are used to long checklists of commands or manual processes to perform their duties.
&lt;br&gt;
Somehow, they suffer from the &quot;&lt;i&gt;We always did it like this&lt;/i&gt;&quot; syndrome and challenged very little their ways of working over these 40 years.
&lt;br&gt;
But if you think of it, this is really crazy. In average, operators spend almost 50% of their time doing deployment related tasks!
&lt;/p&gt;
&lt;p&gt;
This underlines two critical needs for evoluting these processes:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Automate the deployments to reduce the 31% time dedicated to these currently manual tasks.&lt;/li&gt;
&lt;li&gt;Industrialize them (just as software development has been industrialized, thanks to XP and Agile) to reduce the 16% related to fixing these deployment related issues.&lt;/li&gt;
&lt;/ol&gt;


&lt;a name=&quot;sec14&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.4 Infrastructure automation &lt;/h3&gt;

&lt;p&gt;
In this regards, another statistic is pretty enlightening:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
Probability of succeeding an installation expressed as a function of the number of manual operations
&lt;/div&gt;
&lt;br&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c4b31869-528a-498a-a86d-61ecb2fce5c2&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;Operator team time stats&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c4b31869-528a-498a-a86d-61ecb2fce5c2&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
This is read the following way :
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With only 5 manual commands, the probability of succeeding an installation drops to 86% already.&lt;/li&gt;
&lt;li&gt;With 55 manual commands, the probability of succeeding an installation drops to 22%.&lt;/li&gt;
&lt;li&gt;With 100 manual commands, the probability of succeeding an installation is close to 0! (2%)%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;i&gt;Succeeding the installation&lt;/i&gt; means that the software behaves in production as intended. Failing it means something will go wrong and some analysis will be required to understand what went wrong with the installation and some patches will need to be applied or some configuration corrected.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;So automating all of this and avoiding manual commands at all cost seems to be rather a good idea, doesn&apos;t it ?&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
So what&apos;s the status in this regards in the industry:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/8b821d6f-2f2d-4df7-b8d7-248958db8701&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Operator team time stats&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/8b821d6f-2f2d-4df7-b8d7-248958db8701&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source : IT Ops &amp; DevOps Productivity Report 2013 - Rebellabs - &lt;a href=&quot;http://pages.zeroturnaround.com/rs/zeroturnaround/images/it-ops-devops-productivity-report-2013%20copy.pdf&quot;&gt;http://pages.zeroturnaround.com/rs/zeroturnaround/images/it-ops-devops-productivity-report-2013%20copy.pdf&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
(To be perfectly honest, this statistic is pretty old - 2013 - I would expect a little different numbers nowadays)
&lt;/p&gt;
&lt;p&gt;
Nonetheless, this gives a pretty good idea of how much is still to be accomplished in regards to Infrastructure automation and how much DevOps principles and practices are very important.
&lt;/p&gt;
&lt;p&gt;
Again the web giants had to come up with a new approach, with new practices to address their needs of responsivness. What they started their engineering business in their early days, the practices they put in place is at the root of what is today DevOps.
&lt;/p&gt;
&lt;p&gt;
Let&apos;s look at where the web giants stand now in this regards. A few examples:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Facebook has thousands of devs and ops, hundreds of thousands of servers. In average, an operator takes care of 500 servers (think automation is optional ?). They do two deployments a day (concept of deployment ring) &lt;/li&gt;
&lt;li&gt;Flickr does 10 deployments a day&lt;/li&gt;
&lt;li&gt;Netflix designs for failure! The software is designed from the grounds up to tolerate system failures. They test it all the time in production: 65&apos;000 failure tests in production daily by killing random virtual machines ... and measuring that everything still behaves OK.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
So what is their secret ?
&lt;/p&gt;

&lt;a name=&quot;sec15&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.5 DevOps : For once, a magic silver bullet &lt;/h3&gt;

&lt;p&gt;
The secret is simply to &lt;b&gt;Extend Agility to Production&lt;/b&gt;:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/77393bca-f284-443d-a48d-b1fadbc97789&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;DevOps&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/77393bca-f284-443d-a48d-b1fadbc97789&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
DevOps consists mostly in extending agile development practices by further streamlining the movement of software change thru the build, validate, deploy and delivery stages, while empowering cross-functional teams with full ownership of software applications - from design thru production support.
&lt;/p&gt;
&lt;p&gt;
DevOps encourages &lt;b&gt;communication&lt;/b&gt;, &lt;b&gt;collaboration&lt;/b&gt;, &lt;b&gt;integration&lt;/b&gt; and &lt;b&gt;automation&lt;/b&gt; among software developers and IT operators in order to improve both the speed and quality of delivering software.
&lt;/p&gt;
&lt;p&gt;
DevOps teams focus on standardizing development environments and automating delivery processes to improve delivery predictability, efficiency, security and maintainability. The DevOps ideals provide developers more control of the production environment and a better understanding of the production infrastructure. 
&lt;br&gt;
DevOps encourages empowering teams with the autonomy to build, validate, deliver and support their own applications. 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;So what are the core principles ?&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/1524e087-8bff-44c2-a596-7f4597162a6a&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 420px; &quot; alt=&quot;DevOps Principle&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/1524e087-8bff-44c2-a596-7f4597162a6a&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
We&apos;ll now dig into these 3 essential principles.
&lt;/p&gt;


&lt;a name=&quot;sec2&quot;&gt;&lt;/a&gt;
&lt;h2&gt;2. Infrastructure as Code&lt;/h2&gt;

&lt;p&gt;
Because humans make mistakes, because the human brain is terribly bad at repetitive tasks, because humans are slow compared to a shell script, and because we are humans after all, we should consider and handle infrastructure concerns just as we handle coding concerns!
&lt;/p&gt;
&lt;p&gt;
Infrastructure as code (IaC) is the prerequisite for common DevOps practices such as version control, code review, continuous integration and automated testing. It consists in &lt;b&gt;managing&lt;/b&gt; and &lt;b&gt;provisioning&lt;/b&gt; computing infrastructure (containers, virtual machines, physical machines, software installation, etc.) and their configuration &lt;b&gt;through machine-processable definition&lt;/b&gt; files or scripts, rather than the use of interactive configuration tools and manual commands.
&lt;/p&gt;
&lt;p&gt;
I cannot stress enough how much this is a key principle of DevOps. It is really applying software development practices to servers and infrastructure. 
&lt;br&gt;
Cloud computing enables complex IT deployments modeled after traditional physical topologies. We can automate the build of complex virtual networks, storage and servers with relative ease. Every aspect of server environments, from the infrastructure down to the operating system settings, can be codified and stored in a version control repository.
&lt;/p&gt;



&lt;a name=&quot;sec21&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.1 Overview&lt;/h3&gt;

&lt;p&gt;
In a very summarized way, the levels of infrastructure and operation concerns at which automation should occur is represented on this schema:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/11e52f2c-2287-4304-b14f-67b82b5860fc&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px; &quot; alt=&quot;IaC Overview&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/11e52f2c-2287-4304-b14f-67b82b5860fc&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The tools proposed as examples on the schema above are very much oriented towards &lt;i&gt;building&lt;/i&gt; the different layers. But a devops toolchain does much more than that. 
&lt;br&gt;
I think it&apos;s time I tell a little more about the notion of DevOps Toolchains.
&lt;/p&gt;

&lt;a name=&quot;sec22&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.2 DevOps Toolchains&lt;/h3&gt;

&lt;p&gt;
Because DevOps is a cultural shift and collaboration between development, operations and testing, there is no single DevOps tool, rather, again, a set ogf them, or &lt;i&gt;DevOps toolchain&lt;/i&gt; consisting of multiple tools. Such tools fit into one or more of these categories, which is reflective of the software development and delivery process:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Code&lt;/b&gt; : Code development and review, version control tools, code merging&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Build&lt;/b&gt; : Continuous integration tools, build status&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Test&lt;/b&gt; : Test and results determine performance&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Package&lt;/b&gt; : Artifact repository, application pre-deployment staging&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Release&lt;/b&gt; : Change management, release approvals, release automation&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Configure&lt;/b&gt; : Infrastructure configuration and management, Infrastructure as Code tools&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Monitor&lt;/b&gt; : Applications performance monitoring, end user experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Though there are many tools available, certain categories of them are essential in the DevOps toolchain setup for use in an organization. 
&lt;/p&gt;
&lt;p&gt;
Tools such as Docker (containerization), Jenkins (continuous Integration), Puppet (Infrastructure building) and Vagrant (virtualization platform) among many others are often used and frequently referenced in DevOps tooling discussions as of 2016. 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Versioning, Continuous Integration and Automated testing of infrastructure components&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The ability to &lt;b&gt;version&lt;/b&gt; the infrastructure - or rather the infrastructure building scripts or configuration files - as well as the ability to &lt;b&gt;automated test&lt;/b&gt; it are very important. 
&lt;br&gt;
DevOps consists in finally adopting the same practices XP brought 30 years ago to software engineering to the production side. 
&lt;br&gt;
Even further, Infrastructure elements should be &lt;b&gt;continuously integrated&lt;/b&gt; just as software deliverables.
&lt;/p&gt;

&lt;a name=&quot;sec23&quot;&gt;&lt;/a&gt;
&lt;h3&gt;2.3 Benefits&lt;/h3&gt;

&lt;p&gt;
There are so many benefits to DevOps. A non-exhaustive list could be as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Repeatability and Reliability&lt;/b&gt; : building the production machine is now simply running that script or that puppet command. With proper usage of docker containers or vagrant virtual machines, a production machine with the Operating System layer and, of course, all the software properly installed and configured can be set up by typing one single command - &lt;b&gt;One Single Command&lt;/b&gt;. And of course this building script or mechanism is continuously integrated upon changes or when being developed, continuously and automatically tested, etc. &lt;br&gt;
Finally we can benefit on the operation side from the same practices we use with success on the software development side, thanks to XP or Agile.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Productivity&lt;/b&gt; : one click deployment, one click provisioning, one click new environment creation, etc. Again, the whole production environment is set-up using one single command or one click. Now of course that command can well run for hours, but during that time the operator can focus on more interesting things, instead of waiting for a single individual command to complete before typing the next one, and that sometimes for several days...&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Time to recovery !&lt;/b&gt; : one click recovery of the production environment, period.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Guarantee that infrastructure is homogeneous&lt;/b&gt; : completely eliminating the possibility for an operator to build an environment or install a software slightly differently every time is the only way to guarantee that the infrastructure is perfectly homogeneous and reproducible. Even further, with version control of scripts or puppet configuration files, one can rebuild the production environment precisely as it was last week, last month, or for that particular release of the software.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Make sure standards are respected&lt;/b&gt; : infrastructure standards are not even required anymore. The standard is the code.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Allow developer to do lots of tasks themselves&lt;/b&gt; : if developers become themselves suddenly able to re-create the production environment on their own infrastructure by one single click, they become able to do a lot of production related tasks by themselves as well, such as understanding production failures, providing proper configuration, implementing deployment scripts, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
These are the few benefits of IaC that I can think of by myself. I bet there are so many much more (suggestions in comments are welcome).
&lt;/p&gt;


&lt;a name=&quot;sec3&quot;&gt;&lt;/a&gt;
&lt;h2&gt;3. Continuous Delivery&lt;/h2&gt;

&lt;p&gt;
Continuous delivery is an approach in which teams produce software in short cycles, ensuring that the software can be reliably released at any time. It aims at building, testing, and releasing software faster and more frequently.
&lt;br&gt;
The approach helps reduce the cost, time, and risk of delivering changes by allowing for more incremental updates to applications in production. A straightforward and repeatable deployment process is important for continuous delivery.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Important note : Continuous Delivery &amp;#8800; Continuous Deployment&lt;/b&gt; - continuous delivery is sometimes confused with continuous deployment. Continuous deployment means that every change is automatically deployed to production. Continuous delivery means that the team ensures every change can be deployed to production but may choose not to do it, usually due to business reasons. In order to do continuous deployment one must be doing continuous delivery
&lt;/p&gt;
&lt;p&gt;
The key ideas behind continuous deliveries are:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;The more often you deploy, the more you master the deployment process and the better you automate it&lt;/b&gt;. If you have to do something 3 times a day, you &lt;b&gt;will&lt;/b&gt; make it bullet proof and reliable soon enough, when you will be fed up of fixing the same issues over and over again.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The more often you deploy, the smallest will be the changesets you deploy&lt;/b&gt; and hence the smallest will be the risk of something going wrong, or the chances of losing control over the changesets&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The more often you deploy, the best will be your TTR (Time to Repair / Resolution)&lt;/b&gt;  and hence the sooner will be the feedback you will get from your business users regarding that feature and the easier it will be to change some things here and there to make it perfectly fit their needs (TTR is very similar to TTM in this regards).&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e95d84be-e1de-4991-b4ef-5042df77a096&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 520px; &quot; alt=&quot;Small changes / More often&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e95d84be-e1de-4991-b4ef-5042df77a096&quot; /&gt;
&lt;/a&gt;
&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source : Ops Meta-Metrics: The Currency You Pay For Change - &lt;a href=&quot;http://fr.slideshare.net/jallspaw/ops-metametrics-the-currency-you-pay-for-change-4608108&quot;&gt;http://fr.slideshare.net/jallspaw/ops-metametrics-the-currency-you-pay-for-change-4608108&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
But continuous delivery is more than building a shippable, production-ready version of the product as often as possible. Continuous delivery refers to 3 key practices:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn from the fields&lt;/li&gt;
&lt;li&gt;Automation&lt;/li&gt;
&lt;li&gt;Deploy more often&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec31&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.1 Learn from the field&lt;/h3&gt;

&lt;p&gt;
Continuous Delivery is key to be able to &lt;b&gt;learn from the field&lt;/b&gt;. There is no truth in the development team, the truth lies in the head of the business users. Unfortunately, no one is able to really clearly express his mind, his will in a specification document, no matter the time he dedicates to this task. This is why Agility attempts to put the feature in the hands of the users to get their feedback as soon as possible, at all cost.
&lt;br&gt;
Doing Continuous delivery, as far as continuous deployment, and hence reducing lead time to its minimal possible value, is key to be able to learn the truth from the users, as soon as possible
&lt;/p&gt;
&lt;p&gt;
But the truth doesn&apos;t come out in the form of a formal user feedback. One should never trust its users or rely on formal feedback to learn from users. One should trust its own measures. 
&lt;br&gt;
&lt;b&gt;Measure obsession&lt;/b&gt; is a very important notion from the &lt;i&gt;Lean Startup&lt;/i&gt; movement but it&apos;s also very important in DevOps. One should measure everything! Finding the right metrics enabling the team to learn about the success or failures of an approach, about what would be better and what has the most success can be sometimes tricky. One should always take too many measures instead of missing the one that would enable the team to take an enlightened decision. 
&lt;/p&gt;
&lt;p&gt;
Don&apos;t think, know! And the only way to know is to measure, measure everything: response times, user think times, count of displays, count of API calls, click rate, etc. but not only. Find out about all the metrics that can give you additional insights about the user perception of a feature and measure them, all of them!
&lt;/p&gt;
&lt;p&gt;
This can be represented as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ddfcb1af-1554-42b1-a7a4-1801d41e3822&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 350px; &quot; alt=&quot;Move Fast&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ddfcb1af-1554-42b1-a7a4-1801d41e3822&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec32&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.2 Automation&lt;/h3&gt;

&lt;p&gt;
Automation has already been discussed above in section &lt;a href=&quot;#sec2&quot;&gt;2. Infrastructure as code&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
I just want to emphasize here that continuous delivery is impossible without a properly and 100% automation of all infrastructure provisioning and deployment related tasks.
&lt;br&gt;
This is very important, let me repeat it once more: setting up an environment and deploying a production ready version of the software should take one click, one command, it should be entirely automated. Without it, it&apos;s impossible to imagine deploying the software several times a day.
&lt;/p&gt;
&lt;p&gt;
In section &lt;a href=&quot;#sec35&quot;&gt;3.5 Zero Downtime Deployments&lt;/a&gt; below we will mention additional important techniques helping Continuous Delivery as well.
&lt;/p&gt;


&lt;a name=&quot;sec33&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.3 Deploy more often&lt;/h3&gt;

&lt;p&gt;
The DevOps credo is:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;i&gt;&quot;If it hurts, do it more often !&quot;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
This idea of doing painful things more frequently is very important in agile thinking.
&lt;br&gt;
Automated Testing, refactoring, database migration, specification with customers, planning, releasing - all sorts of activities are done as frequently as possible.
&lt;/p&gt;
&lt;p&gt;
There are three good reasons for that:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
Firstly most of these tasks become much more difficult as the amount of work to be done increases, but when broken up into smaller chunks they compose easily. 
&lt;br&gt;
Take Database migration for instance: specifying a large database migration involving multiple tables is hard and error prone. But if you take it one small change at a time, it becomes much easier to get each one correct. Furthermore you can string small migrations together easily into a sequence. Thus when one decomposes a large migration into a sequence of little ones, it all becomes much easier to handle. (As a sidenote, this is the essence of database refactoring)
&lt;/li&gt;
&lt;li&gt;
The second reason is &lt;i&gt;Feedback&lt;/i&gt;. Much of agile thinking is about setting up feedback loops so that we can learn more quickly. Feedback was already an important and explicit value of Extreme Programming. In a complex process, like software development, one has to frequently check where one stands and make course corrections. To do this, one must look for every opportunity to add feedback loops and increase the frequency with which one gets feedback so one can adjust more quickly.
&lt;/li&gt;
&lt;li&gt;
The third reason is &lt;i&gt;practice&lt;/i&gt;. With any activity, we improve as we do it more often. Practice helps to iron out the kinks in the process, and makes one more familiar with signs of something going wrong. If you reflect on what you are doing, you also come up with ways to improve your practice. 
&lt;br&gt;
With software development, there&apos;s also in addition the potential for automation. Once one has done something a few times, it&apos;s easier to see how to automate it, and more importantly one becomes more motivated to automate it. Automation is especially helpful because it can increase speed and reduce the chance for error.
&lt;/li&gt;
&lt;/ol&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/aefb0bb2-5f62-423c-a9b3-2de395e04221&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 450px; &quot; alt=&quot;Master the process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/aefb0bb2-5f62-423c-a9b3-2de395e04221&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Now one question remains : &lt;b&gt;how often to deliver with DevOps ?&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
There is no straight answer to that. It really depends on the product, the team, the market, the company, the users, the operation needs, etc. 
&lt;br&gt;
My best answer would be as follows: If you don&apos;t deliver at least every 2 weeks - or at the end of your sprint duration period - you do not even do Agile, not to speak of DevOps.
&lt;br&gt;
DevOps encourages to deliver as frequently as possible. In my understanding (please challenge that in the comments if you like), you should train your team to be able to deliver as frequently as possible. A sound approach, the one I&apos;m using with my team is to deliver twice a day on a QA environment. The delivery process is fully automated: twice a day, at noon and at midnight, the machinery starts, builds the software components, runs integration tests, builds the Virtual Machines, start them, deploys the software components, configures them, runs functional tests, etc.
&lt;/p&gt;


&lt;a name=&quot;sec34&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.4 Continuous Delivery requirements&lt;/h3&gt;

&lt;p&gt;
What does one need &lt;b&gt;before&lt;/b&gt; being able to move to Continuous Delivery?
&lt;br&gt;
My checklist, in a raw fashion :
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continuous integration of both the software components development as well as the platform provisioning and setup.&lt;/li&gt;
&lt;li&gt;TDD - Test Driven Development. This is questionable ... But in the end let&apos;s face it: TDD is really the single and only way to have an acceptable coverage of the code and branches with unit tests (and unit tests makes is so much easier to fix issues than integration or functional tests).&lt;/li&gt;
&lt;li&gt;Code reviews ! At least codereviews ... pair programming would be better of course.&lt;/li&gt;
&lt;li&gt;Continuous auditing software - such as Sonar.&lt;/li&gt;
&lt;li&gt;Functional testing automation on production-level environment&lt;/li&gt;
&lt;li&gt;Strong non-functional testing automation (performance, availability, etc.)&lt;/li&gt;
&lt;li&gt;Automated packaging and deployment, independent of target environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Plus sound software development practices when it comes to managing big features and evolutions, such as &lt;i&gt;Zero Downtime Deployments&lt;/i&gt; techniques.
&lt;/p&gt;



&lt;a name=&quot;sec35&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.5 Zero Downtime Deployments&lt;/h3&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;i&gt;&quot;Zero Downtime Deployment (ZDD) consists in deploying a new version of a system without any interruption of service.&quot;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
ZDD consists in deploying an application in such a way that one introduces a new version of an application to production without making the user see that the application went down in the meantime. From the user&apos;s and the company&apos;s point of view it&apos;s the best possible scenario of deployment since new features can be introduced and bugs can be eliminated without any outage.
&lt;/p&gt;
&lt;p&gt;
I&apos;ll mention 4 techniques:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Feature Flipping&lt;/li&gt;
&lt;li&gt;Dark launch&lt;/li&gt;
&lt;li&gt;Blue/Green Deployments&lt;/li&gt;
&lt;li&gt;Canari release&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
&lt;b&gt;Feature flipping&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Feature flipping allows to enable / disable features while the software is running. It&apos;s really straightforward to understand and put in place: simply use a configuration properly to entirely disable a feature from production and only activate it when its completely polished and working well.
&lt;/p&gt;
&lt;p&gt;
For instance to disable or activate a feature globally for a whole application:
&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; Feature.isEnabled(&apos;new_awesome_feature&apos;)
&lt;span style=&quot;color: green;&quot;&gt;    # Do something new, cool and awesome&lt;/span&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;b&gt;else&lt;/b&gt;&lt;/span&gt; 
&lt;span style=&quot;color: green;&quot;&gt;    # Do old, same as always stuff&lt;/span&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt; 
&lt;/pre&gt;

&lt;p&gt;
Or if one wants to do it on a per-user basis:
&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; Feature.isEnabled(&apos;new_awesome_feature&apos;, current_user)
&lt;span style=&quot;color: green;&quot;&gt;    # Do something new, cool and awesome&lt;/span&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;b&gt;else&lt;/b&gt;&lt;/span&gt; 
&lt;span style=&quot;color: green;&quot;&gt;    # Do old, same as always stuff&lt;/span&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt; 
&lt;/pre&gt;

&lt;p&gt;
&lt;b&gt;Dark Launch&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The idea of &lt;i&gt;Dark Launch&lt;/i&gt; is to use production to simulate load!
&lt;/p&gt;
&lt;p&gt;
It&apos;s difficult to simulate load of a software used by hundreds of millions of people in a testing environment.
&lt;br&gt;
Without realistic load tests, it&apos;s impossible to know if infrastructure will stand up to the pressure.
&lt;/p&gt;
&lt;p&gt;
Instead of simulating load, why not just deploy the feature to see what happens without disrupting usability?
&lt;br&gt;
Facebook calls this a &lt;i&gt;dark launch&lt;/i&gt; of the feature.
&lt;/p&gt;
&lt;p&gt;
Let&apos;s say you want to turn a static search field used by 500 million people into an autocomplete field so your users don&apos;t have to wait as long for the search results. You built a web service for it and want to simulate all those people typing words at once and generating multiple requests to the web service.
&lt;br&gt;
The dark launch strategy is where you would augment the existing form with a hidden background process that sends the entered search keyword to the new autocomplete service multiple times.
&lt;br&gt;
If the web service explodes unexpectedly then no harm is done; the server errors would just be ignored on the web page. But if it does explode then, great, you can tune and refine the service until it holds up.
&lt;/p&gt;
&lt;p&gt;
There you have it, a real world load test.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Blue/Green Deployments&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Blue/Green Deployments&lt;/i&gt; consists in building a second complete line of production for version N + 1. Both development and operation teams can peacefully build up version N + 1 on this second production line.
&lt;br&gt;
Whenever the version N + 1 is ready to be used, the configuration is changed on the load balancer and users are automatically and transparently redirected to the new version N + 1.
&lt;br&gt;
At this moment, the production line for version N is recovered and used to peacefully build version N + 2.
&lt;br&gt;
And so on.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/1d54c978-4e81-4746-9c3b-9f44459cb98f&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 550px; &quot; alt=&quot;Blue/Green Deployments&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/1d54c978-4e81-4746-9c3b-9f44459cb98f&quot; /&gt;
&lt;/a&gt;
&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source : Les Patterns des Géants du Web – Zero Downtime Deployment - &lt;a href=&quot;http://blog.octo.com/zero-downtime-deployment/&quot;&gt;http://blog.octo.com/zero-downtime-deployment/&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
This is quite effective and easy but the problem is that it requires to double the infrastructure, amount of servers, etc.
&lt;br&gt;
Imagine if Facebook had to maintain a complete second set of its hundreds of thousands of servers.
&lt;/p&gt;
&lt;p&gt;
So there is some room for something better.
&lt;/p&gt;
&lt;p&gt;

&lt;b&gt;Canari release&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Canari release&lt;/i&gt; is very similar in nature to &lt;i&gt;Blue/Green Deployments&lt;/i&gt; but it addresses the problem to have multiple complete production lines.
&lt;br&gt;
The idea is to switch users to the new version in an incremental fashion : as more servers are migrated from the version N line to the version N + 1 line, an equivalent proportion of users are migrated as well. 
&lt;br&gt;
This way, the load on every production line matches the amount of servers.
&lt;/p&gt;
&lt;p&gt;
At first, only a few servers are migrated to version N + 1 along with a small subset of the users. This also allows to test the new release without risking an impact on all users.
&lt;br&gt;
When all servers have eventually been migrated from line N to line N + 1, the release is finished and everything can start all over again for release N + 2.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c858f9cd-0e9a-4f9a-bbdf-6eed30713033&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 550px; &quot; alt=&quot;Canari Deployments&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c858f9cd-0e9a-4f9a-bbdf-6eed30713033&quot; /&gt;
&lt;/a&gt;
&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source : Les Patterns des Géants du Web – Zero Downtime Deployment - &lt;a href=&quot;http://blog.octo.com/zero-downtime-deployment/&quot;&gt;http://blog.octo.com/zero-downtime-deployment/&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;a name=&quot;sec4&quot;&gt;&lt;/a&gt;
&lt;h2&gt;4. Collaboration&lt;/h2&gt;

&lt;p&gt;
Agile software development has broken down some of the silos between requirements analysis, testing and development. Deployment, operations and maintenance are other activities which have suffered a similar separation from the rest of the software development process. The DevOps movement is aimed at removing these silos and encouraging collaboration between development and operations.
&lt;br&gt;
Even with the best tools, DevOps is just another buzzword if you don&apos;t have the right culture.
&lt;/p&gt;
&lt;p&gt;
The primary characteristic of DevOps culture is increased collaboration between the roles of development and operations. There are some important cultural shifts, within teams and at an organizational level, that support this collaboration.
&lt;/p&gt;
&lt;p&gt;
This addresses a very important problem that is best illustrated with the following meme:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/83cafdba-bf4a-4476-8d4a-8fd3489351c7&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px; &quot; alt=&quot;Worked in Dev / Ops problem now&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/83cafdba-bf4a-4476-8d4a-8fd3489351c7&quot; /&gt;
&lt;/a&gt;
&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Souce : DevOps Memes @ EMCworld 2015 - &lt;a href=&quot;http://fr.slideshare.net/bgracely/devops-memes-emcworld-2015&quot;&gt;http://fr.slideshare.net/bgracely/devops-memes-emcworld-2015&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Team play is so important to DevOps that one could really sum up most of the methodology&apos;s goals for improvement with two C&apos;s: collaboration and communication. While it takes more than that to truly become a DevOps workplace, any company that has committed to those two concepts is well on its way.
&lt;/p&gt;
&lt;p&gt;
But why is it so difficult ?
&lt;/p&gt;

&lt;a name=&quot;sec41&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.1 The wall of confusion&lt;/h3&gt;

&lt;p&gt;
Because of the wall of confusion :
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/472d552f-71ea-4640-a815-026e18cd865e&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 450px; &quot; alt=&quot;Wall of Confusion&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/472d552f-71ea-4640-a815-026e18cd865e&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
In a traditional development cycle, the development team kicks things off by &quot;throwing&quot; a software release &quot;over the wall&quot; to Operations.
&lt;br&gt;
Operations picks up the release artifacts and begins preparing for their deployment. Operations manually hacks the deployment scripts provided by the developers or, most of the time, maintains their own scripts.
&lt;br&gt;
They also manually edit configuration files to reflect the production environment, which is significantly different than the Development or QA environments.
&lt;br&gt;
At best they are duplicating work that was already done in previous environments, at worst they are about to introduce or uncover new bugs.
&lt;/p&gt;
&lt;p&gt;
The IT Operations team then embarks on what they understand to be the currently correct deployment process, which at this point is essentially being performed for the first time due to the script, configuration, process, and environment differences between Development and Operations. 
&lt;br&gt;
Of course, somewhere along the way a problem occurs and the developers are called in to help troubleshoot. Operations claims that Development gave them faulty code. Developers respond by pointing out that it worked just fine in their environments, so it must be the case that Operations did something wrong. 
&lt;br&gt;
Developers are having a difficult time even diagnosing the problem because the configuration, file locations, and procedure used to get into this state is different then what they expect. Time is running out on the change window and, of course, there isn&apos;t a reliable way to roll the environment back to a previously known good state. 
&lt;/p&gt;
&lt;p&gt;
So what should have been an eventless deployment ended up being an all-hands-on-deck fire drill where a lot of trial and error finally hacked the production environment into a usable state.
&lt;br&gt;
It &lt;b&gt;always&lt;/b&gt; happens this way, always.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Here comes DevOps&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
DevOps helps to enable IT alignment by aligning development and operations roles and processes in the context of shared business objectives. Both development and operations need to understand that they are part of a unified business process. DevOps thinking ensures that individual decisions and actions strive to support and improve that unified business process, regardless of organizational structure.
&lt;/p&gt;
&lt;p&gt;
Even further, as Werner Vogel, CTO of Amazon, said in 2014 : 
&lt;/p&gt;



&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;i&gt;&quot;You build it, you run it.&quot;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;



&lt;a name=&quot;sec42&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.2 Software Development Process&lt;/h3&gt;

&lt;p&gt;
Below is a simplified view of how the Agile Software Development Process usually looks like. &lt;br&gt;
Initially the business representatives work with the Product Owner and the Architecture Team to define the software, either through Story Mapping with User stories or with more complete specification. 
&lt;br&gt;
Then the development team develops the software in short development sprints, shipping a production ready version of the software to the business users at the end of every sprint in order to capture feedback and get directions as often and as much as possible.&lt;br&gt;
Finally, after every new milestone, the software is deployed for wide usage to all business lines.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/36d0151b-4431-48e6-b10b-27a6ee1bc0b3&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 750px; &quot; alt=&quot;Software Development Process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/36d0151b-4431-48e6-b10b-27a6ee1bc0b3&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The big change introduced by DevOps is the understanding that &lt;b&gt;operators are the other users of the software !&lt;/b&gt; and as such they should be fully integrated in the Software Development Process.
&lt;br&gt;
At specification time, operators should give their non-functional requirements just as business users give their functional requirement. Such non-functional requirements should be handled with same important and priority by the development team.
&lt;br&gt;
At implementation time, operators should provide feedback and non-functional tests specifications continuously just as business users provides feedback on functional features.
&lt;br&gt;
Finally, operators become users of the software just as business users.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b92539db-d476-45e4-be04-40ed46fc87dd&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 750px;&quot; alt=&quot;Software Development Process - with Ops&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b92539db-d476-45e4-be04-40ed46fc87dd&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
With DevOps, operators become fully integrated in the Software Development Process.
&lt;/p&gt;


&lt;a name=&quot;sec43&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.3 Share the Tools&lt;/h3&gt;

&lt;p&gt;
In traditional corporations, teams of operators and teams of developers use specific, dedicated and well separated set of tools. 
&lt;br&gt;
Operators usually don&apos;t want do know anything about the dev team SCM system as well as continuous integration environment. They perceive this as additional work and fear to be overwhelmed by developer requests if they put their hands on this systems as well. After all, they have well enough to do by taking care of production systems.
&lt;br&gt;
Developers, on their side, usually have no access to production system logs and monitoring tools, sometimes due to lack of will on their side, sometimes for regulation or security concerns.
&lt;/p&gt;
&lt;p&gt;
This needs to change! DevOps is here for that.
&lt;/p&gt;



&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a0429129-eba8-4a06-8ff4-bc8412dce4f8&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 550px;&quot; alt=&quot;Share the tools&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a0429129-eba8-4a06-8ff4-bc8412dce4f8&quot; /&gt;
&lt;/a&gt;&lt;br&gt;
&lt;div class=&quot;centered&quot;&gt;
(Source : Mathieu Despriee - OCTO Technology - &lt;a href=&quot;http://www.slideshare.net/OCTOTechnology/introduction-to-devops-28779951&quot;&gt;Introduction to DevOps&lt;/a&gt;)
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
One should note that this can be difficult to achieve. For instance for regulation or security reasons, logs may need to be anonymized on the fly, supervision tools need to be secured to avoid an untrained and forbidden developer to actually change something in production, etc. This may take time and cost resources. But the gain in efficiency is way greater that the required investment, and the ROI of this approach for the whole company is striking.
&lt;/p&gt;


&lt;a name=&quot;sec44&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.4 Work Together&lt;/h3&gt;

&lt;p&gt;
A fundamental philosophy of DevOps is that developers and operations staff must work closely together on a regular basis. 
&lt;br&gt;
An implication is that they must see one other as important stakeholders and actively seek to work together. 
&lt;/p&gt;
&lt;p&gt;
Inspired from the XP practice &quot;&lt;i&gt;onsite customer&lt;/i&gt;&quot;, which motivates agile developers to work closely with the business, disciplined agilists take this one step further with the practice of active stakeholder participation, which says that developers should work closely with all of their stakeholders, &lt;b&gt;including operations and support staff&lt;/b&gt;. 
&lt;br&gt;
This is a two-way street: operations and support staff must also be willing to work closely with developers.
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ca919943-79b6-49b2-84fe-e76181de9e82&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px;&quot; alt=&quot;Align Development and Operation Teams&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ca919943-79b6-49b2-84fe-e76181de9e82&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
In addition, other collaboration leads:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have operators taking part in Agile rituals (Daily scrum, sprint planning, sprint retro, etc.)&lt;/li&gt;
&lt;li&gt;Have devs taking part in production rollouts&lt;/li&gt;
&lt;li&gt;Share between Dev and Ops objectives of continuous improvement&lt;/li&gt;
&lt;/ul&gt;



&lt;a name=&quot;sec5&quot;&gt;&lt;/a&gt;
&lt;h2&gt;5. Conclusion&lt;/h2&gt;

&lt;p&gt;
DevOps is a revolution that aims at addressing the &lt;i&gt;wall of confusion&lt;/i&gt; between development teams and operation teams in big corporations having large IT departments where these roles are traditionally well separated and isolated.
&lt;/p&gt;
&lt;p&gt;
Again, I&apos;ve spent two thirds of my fifteen years career working for such big institutions, mostly financial institutions, and I have been able to witness this wall of confusion on a daily basis. Some sample things I got to hear:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&quot;&lt;i&gt;It worked fine on my Tomcat. Sorry but I know nothing about your Websphere thing. I really can&apos;t help you.&lt;/i&gt;&quot; (a dev)&lt;/li&gt;
&lt;li&gt;&quot;&lt;i&gt;No we cannot provide you with an extract of this table from the production database. It contains confidential customer-related data.&lt;/i&gt;&quot; (an ops)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
And many more examples such as those every day .... every day!
&lt;/p&gt;
&lt;p&gt;
Happily DevOps is several years old and increasingly even these very traditional corporations are moving in the right direction by adopting DevOps principles and practices. But a lot remains to be done.
&lt;/p&gt;
&lt;p&gt;
Now what about smaller corporations that don&apos;t necessarily have split functions between developers and operators?
&lt;br&gt;
Adopting DevOps principles and practices, such as deployment automation, continuous delivery and feature flipping still brings a lot. 
&lt;/p&gt;
&lt;p&gt;
I would summarize DevOps principles this way:
&lt;/p&gt;


&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/00e6d23e-d1e7-4dfb-9abd-52d8f4c5673f&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 420px; &quot; alt=&quot;DevOps Wrap Up&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/00e6d23e-d1e7-4dfb-9abd-52d8f4c5673f&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
DevOps is simply a step further towards Scaling Agility!
&lt;/p&gt;
&lt;p&gt;
(This article is available as a PDF document here &lt;a href=&quot;https://www.niceideas.ch/devops.pdf&quot;&gt;https://www.niceideas.ch/devops.pdf&lt;/a&gt; and as a slideshare presentation here 
&lt;a href=&quot;https://www.slideshare.net/JrmeKehrli/devops-explained-72664261&quot;&gt;https://www.slideshare.net/JrmeKehrli/devops-explained-72664261&lt;/a&gt;)

&lt;/p&gt;
</description>          </item>
    <item>
    <guid isPermaLink="true">https://www.niceideas.ch/roller2/badtrash/entry/agile-software-development-lessons-learned</guid>
    <title>Agile Software Development, lessons learned</title>
    <dc:creator>Jerome Kehrli</dc:creator>
    <link>https://www.niceideas.ch/roller2/badtrash/entry/agile-software-development-lessons-learned</link>
        <pubDate>Wed, 19 Oct 2016 08:51:20 -0400</pubDate>
    <category>Agile</category>
    <category>agile</category>
    <category>lessons-learned</category>
    <category>scrum</category>
    <category>software-development</category>
    <category>xp</category>
    <atom:summary type="html">&lt;p&gt;
After almost two years as Head of R&amp;D in my current company, I believe I succeeded in bringing Agility to Software Development here by mixing what I think makes most sense out of eXtreme Programing, Scrum, Kanban, DevOps practices, Lean Startup practices, etc.
&lt;br &gt;
I am strong advocate of Agility at every level and all the related practices as a whole, with a clear understanding of what can be their benefits. Leveraging on the initial practices already in place to transform the development team here into a state of the art Agile team has been - and still is - one of my most important initial objectives. 
&lt;br&gt;  
I gave myself two years initially to bring this transformation to the Software Development here. After 18 months, I believe we&apos;re almost at the end of the road and its a good time to take a step back and analyze the situation, trying to clarify what we do, how we do it, and more importantly why we do it.
&lt;/p&gt;
&lt;p&gt;
As a matter of fact, we are working in a &lt;b&gt;full Agile way&lt;/b&gt; in the Software Development Team here and we are having not only quite a great success with it but also a lot of pleasure. 
&lt;br&gt;
I want to share here our development methodology, the philosophy and concepts behind it, the practices we have put in place as well as the tools we are using in a detailed and precise way. 
&lt;br&gt;
I hope and believe our lessons learned can benefit others.
&lt;br&gt;
As a sidenote, and to be perfectly honest, while we may not be 100% already there in regards to some of the things I am presenting in this article, at least we have identified the gap and we&apos;re moving forward. At the end of the day, this is what matters the most to me.
&lt;/p&gt;
&lt;p&gt;
This article presents all the concepts and practices regarding Agile Software Development that we have put (or are putting) in place in my current company and gives our &lt;i&gt;secrete recipe&lt;/i&gt; which makes us successful, with both a great productivity / short lead time on one side and great pleasure and efficiency in our every day activities on the other side.
&lt;/p&gt;</atom:summary>        <description>&lt;!-- Agile Software Development, lessons learned --&gt;

&lt;p&gt;
After almost two years as Head of R&amp;D in my current company, I believe I succeeded in bringing Agility to Software Development here by mixing what I think makes most sense out of eXtreme Programing, Scrum, Kanban, DevOps practices, Lean Startup practices, etc.
&lt;br &gt;
I am strong advocate of Agility at every level and all the related practices as a whole, with a clear understanding of what can be their benefits. Leveraging on the initial practices already in place to transform the development team here into a state of the art Agile team has been - and still is - one of my most important initial objectives. 
&lt;br&gt;  
I gave myself two years initially to bring this transformation to the Software Development here. After 18 months, I believe we&apos;re almost at the end of the road and its a good time to take a step back and analyze the situation, trying to clarify what we do, how we do it, and more importantly why we do it.
&lt;/p&gt;
&lt;p&gt;
As a matter of fact, we are working in a &lt;b&gt;full Agile way&lt;/b&gt; in the Software Development Team here and we are having not only quite a great success with it but also a lot of pleasure. 
&lt;br&gt;
I want to share here our development methodology, the philosophy and concepts behind it, the practices we have put in place as well as the tools we are using in a detailed and precise way. 
&lt;br&gt;
I hope and believe our lessons learned can benefit others.
&lt;br&gt;
As a sidenote, and to be perfectly honest, while we may not be 100% already there in regards to some of the things I am presenting in this article, at least we have identified the gap and we&apos;re moving forward. At the end of the day, this is what matters the most to me.
&lt;/p&gt;
&lt;p&gt;
This article presents all the concepts and practices regarding Agile Software Development that we have put (or are putting) in place in my current company and gives our &lt;i&gt;secrete recipe&lt;/i&gt; which makes us successful, with both a great productivity / short lead time on one side and great pleasure and efficiency in our every day activities on the other side.
&lt;/p&gt;
&lt;p&gt;
You can read a PDF version of this article here : &lt;a href=&quot;https://www.niceideas.ch/agility.pdf&quot;&gt;https://www.niceideas.ch/agility.pdf&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Summary&lt;/b&gt;
&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec1&quot;&gt;1. Agile Software Development&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec11&quot;&gt;1.1 Why Agile anyway ?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec12&quot;&gt;1.2 Agile Development Value Proposition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec13&quot;&gt;1.3 Scrum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec14&quot;&gt;1.4 Kanban&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec15&quot;&gt;1.5 Prerequisites : XP !&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec16&quot;&gt;1.6 Benefits : DevOps, Lean Startup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec2&quot;&gt;2. Scrum roles&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec3&quot;&gt;3. From Story Maps to Product Backlog&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec31&quot;&gt;3.1 User Stories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec32&quot;&gt;3.2 Story Maps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec33&quot;&gt;3.3 From User stories to Developer Tasks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec4&quot;&gt;4. From User Stories to Releases&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec41&quot;&gt;4.1 Composing our releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec42&quot;&gt;4.2 Composing the sprint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec43&quot;&gt;4.3 Estimations in Story Points&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec5&quot;&gt;5. Introducing our sprints &lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec51&quot;&gt;5.1 Before Sprint &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec52&quot;&gt;5.2 During Sprint &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec53&quot;&gt;5.3 After Sprint &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec6&quot;&gt;6. Release Backlog and Sprint Backlog &lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#sec61&quot;&gt;6.1 Different release backlogs, long term backlog, sprint backlog ...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec62&quot;&gt;6.2 While being Agile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec63&quot;&gt;6.3 Handling customer requests and production concerns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sec64&quot;&gt;6.4 Sprint Kanban backlog management &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec7&quot;&gt;7. Conclusion&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;


&lt;a name=&quot;sec1&quot;&gt;&lt;/a&gt;
&lt;h2&gt;1. Agile Software Development&lt;/h2&gt;

&lt;p&gt;
Agile Software Development and Agile methodologies form both an approach regarding software development and a set of practices for managing and driving software development projects.
&lt;br&gt;
Initially really intended solely for Software Development projects, these methodologies can apply to a wide range of engineering fields.
&lt;/p&gt;
&lt;p&gt;
Agile Methodologies have as origin the &lt;a href=&quot;http://agilemanifesto.org/&quot;&gt;Agile Manifesto&lt;/a&gt;. Written in 2001, this manifesto first used the term of &lt;i&gt;Agile&lt;/i&gt; to qualify some methods that were used for a long time in various engineering fields.
&lt;br&gt; The Agile Manifesto has been written by seventeen experts in the software development business, mostly those already behind the e&lt;b&gt;X&lt;/b&gt;treme &lt;b&gt;P&lt;/b&gt;rogramming movement such as Kent Beck, Ward Cunningham or Martin Fowler.
&lt;/p&gt;

&lt;a name=&quot;sec11&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.1 Why Agile anyway ?&lt;/h3&gt;

&lt;p&gt;
The experts behind the &lt;i&gt;Agile Manifesto&lt;/i&gt; concluded long ago that the current &lt;i&gt;Waterfall&lt;/i&gt; methodologies such as RUP (Rational Unified Process) were not adapted anymore to today&apos;s challenges in regards to today&apos;s fast evolving organizations.
&lt;/p&gt;
&lt;p&gt;
The problems with the traditional Waterfall approach can be summarized as follows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Incomplete or moving specification&lt;/b&gt; : no matter how smart the business experts you are working with when writing specifications, no matter the time you dedicate to it, your specifications &lt;b&gt;will&lt;/b&gt; be incomplete, biased and wrong. That comes from a very simple reason : it&apos;s impossible to imagine a solution just right the first time. 
&lt;br&gt;
Business experts will change their mind once they see what comes first out of their inputs, always. 
&lt;br&gt;
They need to see a first version coming from their initial inputs and see it to actually understand, with the help of the architects, what they really need.
&lt;br&gt;
Finding the actual solution to any business requirement or problem requires iterations : a first, as simple and stupid as possible version is required to help the business understand what they really need. Then that solution needs to be refined through several additional iterations.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The tunnel effect&lt;/b&gt; : Think of a several years software development projects. Business experts spend a few months specifying everything and then wait three years before actually seeing it coming (wrong and buggy, needless to say, but that is another story). In three years, business requirements would have changed, evolved. And even if what was specified three years ago was greatly written and well thought out, now it&apos;s neither accurate nor relevant anymore. We live in a very fast evolving world.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Drop of Quality to meet deadlines&lt;/b&gt; : It&apos;s alway the same, isn&apos;t it ? When the deadline gets closer and the team needs to rush into fixing the issues that arise from the first batch of tests (always much bigger and far more numberous than expected), when the initial feedback from the stakeholders or users come and underlines how far the product is from what is required (which is not what has been specified of course), we all do the same : we drop quality, drop testing, drop design and rush into trying to make it work. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Heightened tensions between teams&lt;/b&gt; : so what do you think happens when after several months (years) of development, that first version is finally presented to the stakeholders and they realize that it&apos;s most definitely not what they need ? Everything turns ugly. The development team is angry because they implemented the specifications and yet they&apos;re told that the software is not good, the stakeholders and business analysts are angry because they do not understand why the dev team is so stuborn about specification (and ashamed those were screwed), etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
These problems most of the time lead to these consequences :
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Projects failure - slippage and inadequacy with actual needs make projet abandoned&lt;/li&gt;
&lt;li&gt;Exceed budget and deadline - sometimes up to ten times initial budget&lt;/li&gt;
&lt;li&gt;Lack of reactivity - business requirement change, project is delivered but doesn&apos;t help business in the end&lt;/li&gt;
&lt;li&gt;Software inadequacies (functionalities, quality)&lt;/li&gt;
&lt;li&gt;Teams demotivation - try to convince an engineer he has to start all over again once he is done developing something &lt;/li&gt;
&lt;li&gt;User dissatisfaction&lt;/li&gt;
&lt;/ul&gt;
  
&lt;a name=&quot;sec12&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.2 Agile Development Value Proposition&lt;/h3&gt;

&lt;p&gt;
The &lt;i&gt;Manifesto for Agile Software Development&lt;/i&gt; uncovers better ways of developing software by doing it and helping others do it.
&lt;br&gt;
It values &lt;i&gt;individuals and interactions over processes and tools&lt;/i&gt;, &lt;i&gt;working software over comprehensive documentation&lt;/i&gt;, &lt;i&gt;customer collaboration over contract negotiation&lt;/i&gt;, and &lt;i&gt;responding to change over following a plan&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Individuals and interactions over processes and tools&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
If processes and tools are seen as the way to manage product development and everything associated with it, people and the way they approach the work must conform to the processes and tools. Conformity makes it hard to accommodate new ideas, new requirements, and new thinking. Agile approaches, however, value people over process. This emphasis on individuals and teams puts the focus on people and their energy, innovation, and ability to solve problems.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Working software over comprehensive documentation&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Developers should write documentation if that&apos;s the best way to achieve the relevant goals, but that there are often better ways to achieve those goals than writing static documentation. 
&lt;br&gt;
Too much or comprehensive documentation would usually cause waste, and developers rarely trust detailed documentation because it&apos;s usually out of sync with code.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Customer collaboration over contract negotiation&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
No matter which development method is followed, every team should include a customer representative (product owner in Scrum). This person is agreed by stakeholders to act on their behalf and makes a personal commitment to being available for developers to answer questions throughout the iteration. At the end of each iteration, stakeholders and the customer representative review progress and re-evaluate priorities with a view to optimizing the return on investment (ROI) and ensuring alignment with customer needs and company goals.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Responding to change over following a plan&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Adaptive methods focus on adapting quickly to changing realities. When the needs of a project change, an adaptive team changes as well.
&lt;br&gt;
An adaptive team cannot report exactly what tasks they will do next week, but only which features they plan for next month. When asked about a release six months from now, an adaptive team might be able to report only the mission statement for the release, or a statement of expected value vs. cost.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Summary&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/47162f1c-32f8-4616-8b71-5a149e2d72af&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 550px;&quot; alt=&quot;Agile Value Proposition&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/47162f1c-32f8-4616-8b71-5a149e2d72af&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec13&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.3 Scrum&lt;/h3&gt;

&lt;p&gt;
&lt;b&gt;Scrum - A Fundamental Shift&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Scrum is a well-defined process framework for structuring your work in an &lt;i&gt;Agile&lt;/i&gt; way.
&lt;br&gt;
Scrum consists in working in iterations, build cross-functional teams, appoint a product owner and a Scrum master, as well as introducing regular meetings for iteration planning, daily status updates and sprint reviews. The benefits of the Scrum methodology are well understood: Less superfluous specifications and fewer handovers due to cross-functional teams and more flexibility in roadmap planning due to short sprints. Switching your organization to use Scrum is a fundamental shift which will shake up old habits and transform them into more effective ones.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/0d0237c0-20c6-47d2-8114-b85066c6e789&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 700px;&quot; alt=&quot;scrum process&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/0d0237c0-20c6-47d2-8114-b85066c6e789&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Scrum consists in running the development with a tempo of two to four weeks sprints. A sprint starts with a &lt;i&gt;Sprint planning meeting&lt;/i&gt; where the whole development team picks tasks from the &lt;i&gt;product backlog&lt;/i&gt; until the &lt;i&gt;sprint backlog&lt;/i&gt; is filled with enough tasks to fulfill the capacity of the team. A sprint finishes with a &lt;i&gt;Sprint retrospective meeting&lt;/i&gt; where performance is evaluated and the sprint whereabouts are discussed. 
&lt;br&gt;
Within the sprint, the development team meets everyday at the daily scrum to discuss everyone&apos;s tasks and activities.
&lt;br&gt;
At the end of the sprint, the development team delivers a production-ready software that is potentially shippable. 
&lt;/p&gt;
&lt;p&gt;
While from a sprint to another, priorities can change completely, the priorities, scope and duration of a sprint can never change !
&lt;br&gt;
This is an important aspect of the Scrum framework and ensures serenity of the team.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Scrum leverages Commitment as Change Agent&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The initial introduction of Scrum is not an end in itself. Working with Scrum, one wants to change the teams&apos; habits: Take more responsibility, raise code quality, increase speed. As the teams commit to sprint goals, they are intrinsically motivated to get better and faster in order to deliver what they promised. Scrum leverages team commitment as change agent. 
&lt;/p&gt;


&lt;a name=&quot;sec14&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.4 Kanban&lt;/h3&gt;

&lt;p&gt;
&lt;b&gt;Kanban - Incremental Improvements&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The Kanban methodology is way less structured than Scrum. It&apos;s no process framework at all, but a model for introducing change through incremental improvements. One can apply Kanban principles to any process one is already running. 
&lt;br&gt;
In Kanban, one organizes the work on a Kanban board. The board has states as columns, which every work item passes through - from left to right. One pull work items along through the [&lt;i&gt;in progress&lt;/i&gt;], [&lt;i&gt;testing&lt;/i&gt;], [&lt;i&gt;ready for release&lt;/i&gt;], and [&lt;i&gt;released&lt;/i&gt;] columns (examples). And you may have various swim lanes - horizontal &quot;&lt;i&gt;pipelines&lt;/i&gt;&quot; for different types of work. 
&lt;br&gt;
The only management criteria introduced by Kanban is the so called &quot;&lt;i&gt;Work In Progress&lt;/i&gt;&quot; or WIP. By managing WIP you can optimize flow of work items. Besides visualizing work on a Kanban board and monitoring WIP, nothing else needs to be changed to get started with Kanban.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b42428b2-749a-4efa-850f-b5736da52171&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px;&quot; alt=&quot;Kanban board&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/b42428b2-749a-4efa-850f-b5736da52171&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec15&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.5 Prerequisites : XP !&lt;/h3&gt;

&lt;p&gt;
Agile methodologies leverage eXtreme Programing practices. A sound understanding of XP practices and their rigorous application is a mandatory prerequisite of Agile methodologies.
&lt;/p&gt;
&lt;p&gt;
While some practices are applied sometimes a little differently in scrum, really all of them are important. XP Practices are really intended to be respected all together since they have interactions and one cannot benefit from the advantages of XP if one&apos;s picking up only a subset of the practices.
&lt;br&gt;
Some XP Practices should really be respected as described and advocated by XP :
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Metaphor&lt;/li&gt;
&lt;li&gt;Refactoring&lt;/li&gt;
&lt;li&gt;Simple Design&lt;/li&gt;
&lt;li&gt;TDD (Testing)&lt;/li&gt;
&lt;li&gt;Coding Standards&lt;/li&gt;
&lt;li&gt;Collective Ownership&lt;/li&gt;
&lt;li&gt;Continuous Integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
While some others take a specific form in Scrum :
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Onsite Customer &amp;#x2192; Product Owner and his everyday communications with stakeholders &lt;/li&gt;
&lt;li&gt;Sustainable Pace &amp;#x2192; Immutable and frozen Sprints&lt;/li&gt;
&lt;li&gt;Planning Game &amp;#x2192; Sprint planning&lt;/li&gt;
&lt;li&gt;Small Releases &amp;#x2192; Shippable product at the end of every sprint&lt;/li&gt;
&lt;li&gt;Whole Team &amp;#x2192; Daily Scrum&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Interactions between XP practices can be represented this way:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ffb1d3a9-7fef-42f5-9a73-f51d6f97d2f8&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px;&quot; alt=&quot;XP Practices&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/ffb1d3a9-7fef-42f5-9a73-f51d6f97d2f8&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
I didn&apos;t mention &lt;i&gt;Pair programing&lt;/i&gt; ... To be honest we do not apply it consistently in my team. While I do certainly encourage pair programing when some specific and complicated algorithm or design needs to be implemented, I do not insist on it and most of the time my developers work on their own.
&lt;br&gt;
From there, how can we ensure every single line of code is reviewed by at least a second pair of eyes ?
&lt;br &gt;
We do enforce &lt;b&gt;Code Review&lt;/b&gt; as part of our testing process. I&apos;ll get back to that.
&lt;/p&gt;


&lt;a name=&quot;sec16&quot;&gt;&lt;/a&gt;
&lt;h3&gt;1.6 Benefits : DevOps, Lean Startup&lt;/h3&gt;

&lt;p&gt;
Adoption of an &lt;i&gt;Agile Development Methodology&lt;/i&gt; is the very ground on which many other practices or principles are built, should a Tech Company or an IT Department want to move forward towards more efficiency, shorter lead times, better reactivity and controlled costs.
&lt;/p&gt;
&lt;p&gt;
To make it simple:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Without a proper understanding and adoption of eXtreme Programing values, principles and practices, moving towards &lt;i&gt;Agile Software Development&lt;/i&gt; will be difficult.&lt;/li&gt;
&lt;li&gt;Without Agility throughout the IT processes, both on the development side (Agile) and on the Production side (DevOps), trying Lean Startup practices and raising Agility above the IT Department will be difficult.&lt;/li&gt;
&lt;li&gt;Without a sound understanding of the Lean Startup Philosophy and practices and a company-wide Agile process (such as a company wide Kanban), transforming the company to an Agile Corporation will be difficult. &lt;/li&gt;
&lt;li&gt;Finally, only Agile Corporations can really imagine successfully achieving a Digital Transformation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
This can be represented as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/61280dad-cbae-4bfe-bcaa-a75389e3b1e5&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 550px;&quot; alt=&quot;Pyramid of Agile Practices&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/61280dad-cbae-4bfe-bcaa-a75389e3b1e5&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
As shown on the above pyramid, a good adoption of sound DevOps and Lean Startup practices itself is a prerequisite towards further transformations: from enterprise-scale Lean-Agile development to ultimate Digital transformation of the company.
&lt;br&gt;
Well I guess developing these concepts should be the topic of another blog post.
&lt;/p&gt;

&lt;a name=&quot;sec2&quot;&gt;&lt;/a&gt;
&lt;h2&gt;2. Scrum roles&lt;/h2&gt;

&lt;p&gt;
Arguably, a very important role involved in Scrum is the &lt;b&gt;Stakeholder&lt;/b&gt;, as the Stakeholders are the ones who have desires  and needs, and are the reason the team is developing the software in the first place. 
&lt;/p&gt;
&lt;p&gt;
While the Stakeholders are the most important source of validation for the project, the most important person on the Scrum Team is the &lt;b&gt;Product Owner&lt;/b&gt; (PO). 
&lt;br&gt;The Product Owner works with the Stakeholders, represents their interests to the team, and is the first person held accountable for the team&apos;s success. The Product Owner must find a result that will satisfy the Stakeholders&apos; needs and desires. 
&lt;/p&gt;
&lt;p&gt;
The Product Owner provides direction and goals for the team, and prioritizes what will be done. 
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/16cff6de-13e3-4f97-948f-4b8569ae0880&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 550px;&quot; alt=&quot;Scrum Roles&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/16cff6de-13e3-4f97-948f-4b8569ae0880&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
In my current company, the stakeholders are reunited in a formal &lt;b&gt;Product Management Committee&lt;/b&gt; Meeting once per month and are weighted this way:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Head of R&amp;D - myself - 30%&lt;/li&gt;
&lt;li&gt;Head of Delivery - 30%&lt;/li&gt;
&lt;li&gt;Company founders and top executives - 20%&lt;/li&gt;
&lt;li&gt;Sales representatives - 20%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
I myself, as Head of R&amp;D, ensure the role of Product Owner for what the development team is concerned with. As a matter of fact, I ensure two roles : Product Owner and Lead Architect. 
&lt;br&gt;
Regarding architecture, I rely on two technical leaders in my team who help my with this duty.
&lt;/p&gt;
&lt;p&gt;
I would strongly recommend the reader takes 10 minutes to watch this Video from Henrik Kniberg presenting pretty clearly end completely the role of Product Owner and the functions of the Scrum Team around him : &lt;a href=&quot;https://www.youtube.com/watch?v=vkYEqz_MA5Y&quot;&gt;Agile Product Ownership in a Nutshell - VOSTFR&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The &lt;b&gt;Scrum Master&lt;/b&gt; is an important role as well. The Scrum Master serves as a facilitator for both the Product Owner and the team. The Scrum Master has no authority within the team (thus couldn&apos;t also be the Product Owner!) and may never commit to work on behalf of the team. Likewise, the Scrum Master also is not a coordinator, because (by definition) self-organizing teams should co-ordinate directly with other teams, departments, and other external entities.
&lt;/p&gt;
&lt;p&gt;
The Scrum Master removes any impediments that obstruct a team&apos;s pursuit of its sprint goals. If developers don&apos;t have a good sense of what each other are doing, the Scrum Master helps them set up a physical taskboard and shows the team how to use it. If developers aren&apos;t collocated, the Scrum Master ensures that they have team room. If outsiders interrupt the team, the Scrum Master redirects them to the Product Owner.
&lt;/p&gt;
&lt;p&gt;
In my current company, the development team is a single team spread among two locations. Half of the team is in Switzerland and the other half is a near shore team. I have selected 2 persons, one in each location, to ensure the scrum master role in both locations. &lt;br&gt;
I define their duties this way : they take care of making sure the team as a whole sticks to the scrum process, raise warnings when I myself tend to compromise it, facilitate communication issues between both locations, etc.
&lt;br&gt;
Having a dedicated scrum master in both locations is utmost important since communication issues tend to be amplified by remoting.
&lt;/p&gt;

&lt;a name=&quot;sec3&quot;&gt;&lt;/a&gt;
&lt;h2&gt;3. From Story Maps to Product Backlog&lt;/h2&gt;

&lt;p&gt; 
As an Agile team and increasingly an Agile Company, we strongly emphasizes Visual Management Tools. 
&lt;/p&gt;
&lt;p&gt;
I think this is one of great strength in my current company: our understanding of &lt;i&gt;Lean management&lt;/i&gt; practices and the way we inspire our everyday rituals by the &lt;i&gt;Kaizen&lt;/i&gt; method : we try to learn and improve everyday, learn from our mistakes, leverage on our strengths. We have weekly rituals where we discuss our processes, the issues we encounter and we are agile in every way on the whole line, we adapt the way we work, communicate and collaborate continuously to what we learn.
&lt;/p&gt;
&lt;p&gt;
In my opinion, one of the most important aspects of Lean management is Visual Management. 
&lt;br&gt;
In this regards, I will focus in this article on two very important tools : &lt;b&gt;The Story Map&lt;/b&gt; and &lt;b&gt;The Kanban Board&lt;/b&gt;.
&lt;/p&gt;

&lt;a name=&quot;sec31&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.1 User Stories&lt;/h3&gt;

&lt;p&gt;
User stories are short, simple descriptions of a feature told from the perspective of the person who desires the new capability, usually a user or customer of the system. 
&lt;/p&gt;
&lt;p&gt;
They typically follow a simple template:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;i&gt;As a &amp;lt;type of user&amp;gt;, I want &amp;lt;some goal&amp;gt; so that &amp;lt;some reason&amp;gt;.&lt;/i&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
User stories are often written on sticky notes and arranged on walls or tables to facilitate planning and discussion.
&lt;br&gt;
As such, they strongly shift the focus from writing about features to discussing them. In fact, these discussions are more important than whatever text is written.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/35e0a8d6-521d-4775-818a-6df27e653f20&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 200px;&quot; alt=&quot;User Story&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/35e0a8d6-521d-4775-818a-6df27e653f20&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
It&apos;s the product owner&apos;s responsibility to make sure a product backlog of agile user stories exists, but that doesn&apos;t mean that the product owner is the one who writes them. Over the course of a good agile project, you should expect to have user story examples written by each team member.
&lt;br&gt;
Also, note that who writes a user story is far less important than who is involved in the discussions of it.
&lt;/p&gt;
&lt;p&gt;
Some example stories for different application contexts:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d40939a0-bf16-46eb-9c78-b0e922d62fd0&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px;&quot; alt=&quot;Story Examples&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/d40939a0-bf16-46eb-9c78-b0e922d62fd0&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Agile projects, especially Scrum ones, use a product backlog, which is a prioritized list of the functionality to be developed in a product or service. Although product backlog items can be whatever the team desires, user stories have emerged as the best and most popular form of product backlog items.
&lt;/p&gt;

&lt;a name=&quot;sec32&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.2 Story Maps&lt;/h3&gt;

&lt;p&gt;
User stories, when converted as Developer tasks in the product backlog, should be very finely defined and well documented. 
&lt;br&gt;
But at the time of designing a product or an evolution, brainstorming around the functionalities requires some abstraction and to remain at a very high functional level. 
&lt;br&gt;
It makes no sense at this initial stage to design fine and well documented tasks. One should rather focus on identifying high level user stories covering each and every expected functionality of the new software or evolution.
&lt;/p&gt;
&lt;p&gt;
This is the purpose of the &lt;b&gt;Story Mapping&lt;/b&gt; workshop. This is typically a few days workshop organized as max 4 hours sessions per day where &lt;b&gt;all the stakeholders&lt;/b&gt; (this is important) take the time to sit in a room together and define the product with the help of User Stories.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Product Vision&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
But everything should really start by the definition of &lt;b&gt;Product Vision&lt;/b&gt;. The first session of a set of Story Mapping workshops should be the &lt;i&gt;Vision Workshop&lt;/i&gt; where everyone first agrees on a common 2 to 3 years vision of the &lt;i&gt;Experience&lt;/i&gt; Users will have with the Product (or evolution, new feature, whatever).
&lt;br&gt;
Defining and agreeing on a vision is important since the vision:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;drives product decision - The vision should be complete and clear enough to act as a reference one should be able to turn to in case of doubts regarding where to move the product forward.&lt;/li&gt;
&lt;li&gt;provides a destination for the team to stay on course&lt;/li&gt;
&lt;li&gt;gets the entire team on the same page&lt;/li&gt;
&lt;li&gt;&lt;i&gt;inspires and motivates&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;aligns roadmap and sprint investments with user needs and business goals&lt;/li&gt;
&lt;li&gt;importantly : enables the product team to say &quot;NO!&quot; to features that don&apos;t align with the vision.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The result of the product vision workshop should fit on a one page vision map, such as for instance:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/44ca80e5-977b-4be8-9b2b-1a2d2d991069&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 600px;&quot; alt=&quot;Product Vision&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/44ca80e5-977b-4be8-9b2b-1a2d2d991069&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
&lt;b&gt;Story Map&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
With this first step achieved, and a proper vision define, the real job, defining User Stories and laying them down on the &lt;b&gt;Story Map&lt;/b&gt; can start. This is usually done in a few session of 4 hours max.
&lt;br&gt;
The purpose of the Story Map is that arranging user stories into a helpful shape - a map - is usually deemed as most appropriate.
&lt;/p&gt;
&lt;p&gt;
A small story map might look something like this:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/021871cc-36b6-47b2-ad07-d0f590fcc6c4&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 900px;&quot; alt=&quot;Story map&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/021871cc-36b6-47b2-ad07-d0f590fcc6c4&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
At the top of the map are &quot;big stories.&quot; We call them &lt;b&gt;themes&lt;/b&gt;. A theme is sort of a big thing that people do - something that has lots of steps, and doesn&apos;t always have a precise workflow. A theme is a big category containing actual user stories grouped in &lt;b&gt;Epics&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
Epics are big user stories such as the one mentioned in example above. They usually involve a lot of development and cannot be considered as is in an actual product backlog. For this reason, Epics are split in a sub-set of &lt;b&gt;stories&lt;/b&gt;, more precise and concrete that are candidate to be put in an actual product backlog.
&lt;/p&gt;
&lt;p&gt;
The big things on the top of the story map look a little like vertebrae. And the cards hanging down look a little like ribs. Those big things on the top are often the essential capabilities the system needs to have. 
&lt;br&gt;
We refer to them as the &quot;&lt;b&gt;backbone&lt;/b&gt;&quot; of the software. 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;The Walking Skeleton&lt;/b&gt; is composed by the epics of the software. The Walking skeleton is a refinement of the backbone, composed by epics taking the form of user stories, in different with themes that are rather very high level titles or sometimes even simple words.
&lt;/p&gt;
&lt;p&gt;
When it comes time to prioritize stories, we don&apos;t prioritize the backbone or the walking skeleton. We do prioritize the ribs - the stories hanging down from the backbone. We place them high to indicate they&apos;re absolutely necessary, lower to indicate they&apos;re less necessary. 
&lt;br&gt;
By doing this, we find that all the stories placed high on the story map describe the smallest possible system you could build that would give you end to end functionality. This is what &lt;i&gt;Lean Startup&lt;/i&gt; calls the &lt;b&gt;Minimum Viable Product&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
A &lt;i&gt;Minimum Viable Product&lt;/i&gt; has just those core features sufficient to deploy the product, and no more. Developers typically deploy the product to a subset of possible customers—such as early adopters thought to be more forgiving, more likely to give feedback, and able to grasp a product vision from an early prototype or marketing information. 
&lt;br&gt;
This strategy targets avoiding building products that customers do not want and seeks to maximize information about the customer per dollar spent. &lt;b&gt;The Minimum Viable Product is that version of a new product a team uses to collect the maximum amount of validated learning about customers with the least effort.&lt;/b&gt;
&lt;/p&gt;

&lt;a name=&quot;sec33&quot;&gt;&lt;/a&gt;
&lt;h3&gt;3.3 From User stories to Developer Tasks&lt;/h3&gt;

&lt;p&gt;
While a product backlog can be thought of as a replacement for the requirements document of a traditional project, it is important to remember that the written part of an agile user story (&quot;As a user, I want ...&quot;) is incomplete until the discussions about that story occur.
&lt;/p&gt;
&lt;p&gt;
It&apos;s often best to think of the written part as a pointer to the real requirement. User stories could point to a diagram depicting a workflow, a spreadsheet showing how to perform a calculation, or any other artifact the product owner or team desires.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a5c3bffb-5e02-44ba-92a2-336579ffa72a&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 800px;&quot; alt=&quot;Story specification&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/a5c3bffb-5e02-44ba-92a2-336579ffa72a&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The simplest way to state this is as follows: 
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;div class=&quot;centered&quot;&gt;
&lt;b&gt;
User Stories are what users do to reach their goals. 
&lt;br&gt;
Developer tasks are what developers do to implement user stories.
&lt;/b&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Transforming a &lt;i&gt;User Story&lt;/i&gt; to &lt;i&gt;Story with Specification&lt;/i&gt; has to be done by the Product Owner and the Technical Architect of the platform (so two times myself in our case). The Product Owner may need to get in touch with the stakeholders to get some precisions in case there are doubts in regards to the &lt;i&gt;User Experience&lt;/i&gt; to be presented to the end users.
&lt;/p&gt;
&lt;p&gt;
The Story with specification should contain, at least, in a non-exhaustive way :
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The initial user story and all that was expressed at that time&lt;/li&gt;
&lt;li&gt;A complete description of the purpose of the feature&lt;/li&gt;
&lt;li&gt;A complete description of the expected behaviour from all perspectives : user, system, etc.&lt;/li&gt;
&lt;li&gt;Mock-ups of screens and front-end behaviours as well as validations to be performed on the front-end&lt;/li&gt;
&lt;li&gt;A list and description of all business rules&lt;/li&gt;
&lt;li&gt;A list and description of the data to be manipulated&lt;/li&gt;
&lt;li&gt;Several examples of source data or actions and expected results&lt;/li&gt;
&lt;li&gt;A complete testing procedure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Then, the &lt;i&gt;Story with specification&lt;/i&gt; is decomposed in &lt;i&gt;Developer Tasks&lt;/i&gt; either in advance by the Architect of the platform (well myself again) or at the latest by the whole team during the &lt;i&gt;Sprint Planing&lt;/i&gt; meeting.
&lt;/p&gt;

&lt;a name=&quot;sec4&quot;&gt;&lt;/a&gt;
&lt;h2&gt;4. From User Stories to Releases&lt;/h2&gt;

&lt;p&gt; 
We find a story map hung as an information radiator becomes a constant point of discussion about the product we&apos;re building. When the project is running, it becomes our sprint or iteration planning board. We identify or mark off stories to build in the next iteration directly on the map. During the iteration we&apos;ll place just the stories we&apos;re working on into a task wall to managing their development - but the story map lives on the planning wall reminding us what the big picture is, and how far we&apos;ve come.
&lt;/p&gt;
&lt;p&gt;
When we&apos;re building software incrementally, story by story, we&apos;ll choose them from the story map left to right, and top to bottom. We&apos;ll slowly move across the backbone, and down through the priorities of each rib. We&apos;re slowly building up the system not a feature at a time, but rather by building up all major features a little at a time. That way we never release a car without brakes.
&lt;/p&gt;


&lt;a name=&quot;sec41&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.1 Composing our releases&lt;/h3&gt;

&lt;p&gt;
With the help of the story map and a clear classification of our User Stories in terms of importance and priority. We try to plan for our releases, grouping together features that require to be delivered consistently. 
&lt;br&gt;
Grouping these feature together is usually done in a another workshop that we call the &lt;b&gt;roadmap workshop&lt;/b&gt;. When we have identified a set of stories that definitely belong together, we group them horizontally so that we can identify releases by horizontal boxes, for instance as follows:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/caed0173-4a1e-45ab-b5b4-ff665144a97d&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 750px;&quot; alt=&quot;Planing releases&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/caed0173-4a1e-45ab-b5b4-ff665144a97d&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Among these releases, the &lt;i&gt;Minimum Viable Product&lt;/i&gt; release is the most important one. A great care should be taken when composing this release to respect the definition of the &lt;i&gt;Minium Viable Product&lt;/i&gt; indicated above.
&lt;/p&gt;
&lt;p&gt;
One should note, we really use the story map releases as initial plan. In practice, real releases differ a lot from our plans, always. We more or less release when some features we were working on become urgently required for a customer. 
&lt;br&gt;
Long story short, the release we plan initially give us a long term vision, a direction. But reality differ a lot and we do usually many more releases that what we planned initially.
&lt;/p&gt;
&lt;p&gt;
Once we know what our release will be composed for, we&apos;re left with composing our sprints. 
&lt;/p&gt;
&lt;p&gt;
Then, we release either because we have reached what we initially intended to be part of the release, but that never happens in practice. In reality, we release more often, simply when a set of features implemented in a sprint are required by a customer. &lt;br&gt;
Since every sprint finishes with a shippable, production-ready product, this is perfectly fine. We&apos;ll get back to this at the end of this paper.
&lt;/p&gt;


&lt;a name=&quot;sec42&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.2 Composing the sprint&lt;/h3&gt;

&lt;p&gt;
The priorities coming from the release planning on the story map of its vertical scale are too coarse-grained to be used to prioritize tasks when composing the next sprint. We need a better way to fine tune the task priorities when stories are split to tasks in the product backlog. 
&lt;br&gt;
Since we are using redmine to manage our tasks and sprints - along with some redmine plugins for Agile projects - we make use of the redmine notion of &lt;b&gt;priority&lt;/b&gt; for this concerns. When a task coming from a story is put in the backlog, it inherits from the priority of the user story induced by the position of the story on the Story Map. This is a notion of &lt;i&gt;initial priority&lt;/i&gt;.
&lt;br&gt;
Later, as Product Owner, when I have all my tasks for a given release in the backlog, I change priorities for much finer notions by still respecting the workflow induced by the Story Map.
&lt;/p&gt;
&lt;p&gt;
In addition, we use task priorities in a somewhat specific way for Internal R&amp;D Organization to have a way to select task when composing our sprints.
&lt;br&gt;
We classify priorities depending on the moment of the release development when we want to implement them - high priority tasks are implemented first - Normal tasks are implemented last, etc. This is a principle. The &lt;i&gt;Urgent&lt;/i&gt; priority is reserved for R&amp;D for a specific purpose:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Urgent&lt;/b&gt; tasks are the candidates to be picked up in the next sprint, and only them&lt;/li&gt;
&lt;li&gt;Whenever we are out of Urgent tasks, an election process is run and tasks in High priority are elected to Urgent. This way they become candidate that can be picked up in next sprint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Backlog priorities between [&lt;b&gt;high&lt;/b&gt;, &lt;b&gt;normal&lt;/b&gt;, &lt;b&gt;low&lt;/b&gt;, &lt;b&gt;unprioritized&lt;/b&gt;] are set in good understanding with PMC (Product Management Committee)&lt;br&gt;
[&lt;b&gt;urgent&lt;/b&gt;] priority is reserved for R&amp;D only to define candidates to be taken in the next sprint.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/dd25f420-b8be-4d50-9414-bd094410aab7&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 450px;&quot; alt=&quot;Tasks Priorities&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/dd25f420-b8be-4d50-9414-bd094410aab7&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The process is iterative : when we are out of &lt;i&gt;Urgent&lt;/i&gt; tasks, we re-prioritize the backlog again and elect some new &lt;i&gt;urgent&lt;/i&gt; tasks from the &lt;i&gt;high&lt;/i&gt; tasks or even lower priorities. We keep doing that over and over again until we have no more tasks of lesser priorities and the set of urgent tasks can be finished in 1 or 2 sprints.
&lt;/p&gt;


&lt;a name=&quot;sec43&quot;&gt;&lt;/a&gt;
&lt;h3&gt;4.3 Estimations in Story Points&lt;/h3&gt;

&lt;p&gt;
In waterfall, managers determine a team member&apos;s workload capacity in terms of time. Managers ask selected developers to estimate how long they anticipate certain tasks will take and then assign work based on that team member&apos;s total available time. In waterfall, tests are done after coding by specific job titles rather than written in conjunction with the code. 
&lt;br&gt;
The downsides of waterfall are well known: work is always late, there are always quality problems, some people are always waiting for other people, and there&apos;s always a last minute crunch to meet the deadline.
&lt;/p&gt;
&lt;p&gt;
Scrum teams take a radically different approach. 
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First of all, entire Scrum teams, rather than individuals, take on the work. The whole team is responsible for each Product Backlog Item. The whole team is responsible for a tested product. There&apos;s no &quot;my work&quot; vs. &quot;your work.&quot; So we focus on collective effort per Product Backlog Item rather than individual effort per task. &lt;/li&gt;
&lt;li&gt;Second, Scrum teams prefer to compare items to each other, or estimate them in relative units rather than absolute time units. &lt;b&gt;Ultimately this produces better forecasts.&lt;/b&gt; &lt;/li&gt;
&lt;li&gt;Thirdly, Scrum teams break customer-visible requirements into the smallest possible stories, reducing risk dramatically. When there&apos;s too much work for 7 people, we organize into feature teams to eliminate dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Planning Poker&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Planning poker&lt;/b&gt;, also called Scrum poker, is a consensus-based, gamified technique for estimating, mostly used to estimate effort or relative size of development goals in software development. 
&lt;br&gt;
In planning poker, members of the group make estimates by playing numbered cards face-down to the table, instead of speaking them aloud. The cards are revealed, and the estimates are then discussed. By hiding the figures in this way, the group can avoid the cognitive bias of anchoring, where the first number spoken aloud sets a precedent for subsequent estimates.
&lt;/p&gt;
&lt;p&gt;
The cards in the deck have numbers on them. A typical deck has cards showing the Fibonacci sequence including a zero: 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89; other decks use similar progressions.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/54d9699f-11cf-40ee-bc89-f7ceeab60db2&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 200px;&quot; alt=&quot;Planning Poker&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/54d9699f-11cf-40ee-bc89-f7ceeab60db2&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
The reason to use planning poker is to avoid the influence of the other participants. If a number is spoken, it can sound like a suggestion and influence the other participants&apos; sizing. Planning poker should force people to think independently and propose their numbers simultaneously. This is accomplished by requiring that all team members disclose their estimates simultaneously. Individuals show their cards at once, inspiring the term &quot;&lt;i&gt;planning poker&lt;/i&gt;.&quot; 
&lt;/p&gt;
&lt;p&gt;
In Scrum these numbers are called &lt;b&gt;Story Points&lt;/b&gt; - or &lt;b&gt;SP&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;What does the process of estimation look like?&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The actual estimations in SP, those on which the development team as whole commits and agrees are set during the &lt;i&gt;Sprint Planing&lt;/i&gt; meeting, all together. This is the only way. No one single person can decide of the estimation in SP of any given task.
&lt;br&gt;
However, a way to estimate the whole workload of a release backlog or even a long-term backlog is required. 
&lt;/p&gt;
&lt;p&gt;
This is the reason why, the Product Owner and The Architect meet once in a while - not in our case since I ensure both roles - to provide an &lt;b&gt;initial estimation&lt;/b&gt; in SP on all the tasks and stories (or even epics) in the release and long term backlogs. &lt;br&gt;
These are initial estimations having as only purpose the need to estimate workloads of future releases. before the sprint planning meeting occurs, these initial estimations are removed in order not to influence the development team who will have to provide the real estimations.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Filling the sprint&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
During the &lt;b&gt;Sprint Planing&lt;/b&gt; meeting, we take the &lt;i&gt;developer tasks&lt;/i&gt; with the highest priority from the next release backlog and put them in the sprint backlog (these different backlogs are introduced below). &lt;br&gt;
The whole team gathers in a room and takes all tasks sorted by priority, evaluates them - gives them an estimation in SP - discusses all their aspects, makes sure they&apos;re crystal clear to everyone and finally moves them to the sprint backlog.
&lt;/p&gt;
&lt;p&gt;
The question is : when should we stop? When do we have enough tasks in the sprint backlog to form the next sprint?
&lt;/p&gt;
&lt;p&gt;
And the answer is simple : we stop when the set of tasks in the sprint backlog have a sum of SP that match the &lt;b&gt;Team Capacity&lt;/b&gt;, also expressed in SP.
&lt;/p&gt;
&lt;p&gt;
The &lt;i&gt;Team Capacity&lt;/i&gt; is computed by taking the average sum of SP implemented in a set of first sprints, when the team is constituted or when new engineers join it. It takes a few sprints to be able to compute a relevant average. As a sidenote, funnily enough, in my current company, the &lt;i&gt;capacity&lt;/i&gt; of the development team is precisely (i mean precisely !) in its current form.
&lt;br&gt;
During these first sprints, when the team capacity is unknown, I believe the simplest way is to start with an empty sprint backlog and simply let developers take tasks from the release backlog, moving every task to the sprint backlog before working on them. But others have other ideas ...
&lt;/p&gt;


&lt;a name=&quot;sec5&quot;&gt;&lt;/a&gt;
&lt;h2&gt;5. Introducing our sprints &lt;/h2&gt;


&lt;p&gt;
We run sprints of two weeks in my current company. Two weeks is really what works the best in our setup. One week would obviously be too short and three weeks would make it impossible to close all the tasks in one single &lt;i&gt;Testing Friday&lt;/i&gt; (see below).
&lt;br&gt;
In addition, in a continuous delivery approach (or I should rather say, as close to Continuous Delivery as we can get), more than two weeks between deliveries would be too much.
&lt;/p&gt;
&lt;p&gt;
We do not necessarily stick 100% to the scrum process in the sense that we accept urgent tasks in the sprint even after it has been started. The only reason for that is urgent fixes required in production cannot wait more than a few hours. Urgent production issues are the single and only reason we accept to change a little the scope of our sprints even after they have started. 
&lt;br&gt;
This requires some arbitration : a production issue at a customer needs to be qualified as urgent to make it to the current sprint, otherwise it goes in the next sprint.
&lt;/p&gt;
&lt;p&gt;
We have formal rituals at the beginning of the sprint and at the end of the sprint.
&lt;/p&gt;

&lt;a name=&quot;sec51&quot;&gt;&lt;/a&gt;
&lt;h3&gt;5.1 Before Sprint &lt;/h3&gt;

&lt;p&gt;
Before the sprint, The Head of R&amp;D, a.k.a myself, estimates new tasks by himself. These are so called &lt;i&gt;initial estimations&lt;/i&gt; as indicated above.
&lt;br&gt;
In addition, the monday of a new sprint I take care of all the technical concerns around the sprint (sprint creation on redmine, closing tasks, closing former sprint, etc.).
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Sprint Planning Meeting&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
During the Sprint Planning meeting :
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We re-estimate the tasks and come up with &lt;b&gt;actual estimations&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;We feed the sprint backlog with urgent tasks that have an estimation set in terms of SP. Only these tasks are valid candidates to be put in the sprint backlog.&lt;/li&gt;
&lt;li&gt;We feed the backlog in order to have a total amount of SP corresponding to our average capacity&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec52&quot;&gt;&lt;/a&gt;
&lt;h3&gt;5.2 During Sprint &lt;/h3&gt;

&lt;p&gt;
Every developer is free to pick up any task he wants from the Sprint backlog when he is done with his former task. I myself try to intervene as little as possible in regards to who works on what. This works only if developers are responsible and autonomous. Another team may require more involvement from the team leader in regards to tasks assignment.
&lt;/p&gt;
&lt;p&gt;
Again, we try as much as possible to avoid changing the sprint scope during the sprint. However this might happen. In this case, whenever we have to add some very urgent tasks in the backlog during the sprint to work on it automatically, we respect the following principle :
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; We first estimate this task all together after daily scrum&lt;/li&gt;
&lt;li&gt; We put the task in the backlog and remove as many other tasks it is required to remove to leave the total amount in terms of SP of the sprint unchanged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Should it happen that a developer himself takes a task from the release backlog and puts it in the sprint, he needs to remove the initial estimations put by head of R&amp;D on tasks in release backlog so that we remember estimating it at next daily sprint.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;At the end of the sprint : Testing Friday&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Every last Friday of each sprint is &lt;b&gt;Testing Friday&lt;/b&gt;. 
&lt;br&gt;
At testing Friday, every developer at R&amp;D turns into a tester. Everyone in R&amp;D tests former sprint(s) tasks and closed the subtasks. Tasks themselves are closed by Product Owner, a.k.a Head of R&amp;D, a.k.a Myself (or delegate), not by R&amp;D engineers directly.
&lt;/p&gt;
&lt;p&gt;
Having developers turning into testers that day and testing each other tasks themselves, as opposed to having a dedicated team of testers, actually has a purpose.
&lt;br&gt;
I cannot stress enough how much I believe this is important. Having developers tuning to testers a day per sprint and testing each-other&apos;s tasks really helps them get a sense of responsibility. Being pissed off when write didn&apos;t test his task before moving it to &lt;i&gt;Done&lt;/i&gt; (or &lt;i&gt;Testing Ready&lt;/i&gt; in our case) makes one test thoroughly his own tasks before passing them forward. Struggling to understand how to test something makes one document in details the test procedure on his own tasks. Etc.
&lt;/p&gt;
&lt;p&gt;
Testing a task means :
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Running the documented testing procedure and ensuring everything works as expected&lt;/li&gt;
&lt;li&gt;Reading the code and ensuring it matches the code and quality standards&lt;/li&gt;
&lt;li&gt;Testing the feature in other than expected conditions&lt;/li&gt;
&lt;li&gt;Assessing non-functional behaviours such as performance and robustness&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec53&quot;&gt;&lt;/a&gt;
&lt;h3&gt;5.3 After Sprint &lt;/h3&gt;

&lt;p&gt;
After the sprint, we have two important sprint rituals : The &lt;b&gt;Sprint retrospective&lt;/b&gt; meeting and the &lt;b&gt;Sprint Demo&lt;/b&gt; Meeting.
&lt;/p&gt;
&lt;p&gt;
In addition, we take care of releasing the Demo VM of our platform. The Demo VM is a virtual appliance that integrates each and every individual software component of our platform and configures them with some default configuration plus feeds them with test data. 
&lt;br&gt;
The Demo VM building scripts leave us with a Demo platform ready to be used, just as if it was integrated at a customer by our teams of consultants.
&lt;br&gt;
The Demo VM building is completely automated and its a step towards &lt;b&gt;continuous delivery&lt;/b&gt; for us in the form of a &lt;b&gt;continuous deployment&lt;/b&gt;. At the end of every successful integration build, it is automagically built and deployed on a test virtual server, enabling immediate feedback form our stakeholders.
&lt;br&gt;
At the end of a sprint, we release the latest built Demo VM for wide usage by our sales representatives, consultants, etc.
&lt;/p&gt;
&lt;p&gt;
At the end of the sprint, we also take great care of ensuring before building the last Demo VM that all tests are passing:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unit tests (Commit Build)&lt;/li&gt;
&lt;li&gt;Integration tests (Nightly build)&lt;/li&gt;
&lt;li&gt;End-to-end UI tests (Selenium tests on Demo VM building)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The closer we get to the end of the sprint, the more carefully we monitor these builds to ensure we don&apos;t have any issue building the Demo VM at the end of the sprint.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Sprint retrospective meeting&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
We mostly do these things during the &lt;i&gt;Sprint Retrospective&lt;/i&gt;:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We review the few tasks that may not have been completely implemented and that need to be partially postponed to the next sprint&lt;/li&gt;
&lt;li&gt;We compute the amount of SP done&lt;/li&gt;
&lt;li&gt;We discuss issues and things to be changed and create tasks for them (refactorings, new unit / integration tests to be written, etc.)&lt;/li&gt;
&lt;li&gt;We discuss about issues encountered in the way the sprint was managed and search for opportunities to improve&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Sprint Demo Meeting&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
We mostly do 2 things during the &lt;i&gt;Sprint Demo&lt;/i&gt;:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We demonstrate new functionalities to our internal user representatives&lt;/li&gt;
&lt;li&gt;We take minutes of the meeting in the form of new tasks added to the backlog or updates to existing tasks&lt;/li&gt;
&lt;/ul&gt;


&lt;a name=&quot;sec6&quot;&gt;&lt;/a&gt;
&lt;h2&gt;6. Release Backlog and Sprint Backlog &lt;/h2&gt;

&lt;p&gt;
Using redmine, we attach our tasks to releases. We define as many releases as we have planned on our roadmap. Redmine then presents us the tasks grouped by releases first, and then all tasks that have no releases defined, we call this last backlog the long term backlog.
&lt;br&gt;
In addition, tasks attached to a version - which we use to identify sprints - are also displayed in a specific backlog.
&lt;br&gt;
In the end, it&apos;s really as if redmine presents us with different backlogs.
&lt;/p&gt;

&lt;a name=&quot;sec61&quot;&gt;&lt;/a&gt;
&lt;h3&gt;6.1 Different release backlogs, long term backlog, sprint backlog ...&lt;/h3&gt;

&lt;p&gt;
We use all this different backlogs as follows.
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/81bcd207-cfe0-4b15-a9e2-e3f79f889f4b&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 500px;&quot; alt=&quot;Different Backlogs&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/81bcd207-cfe0-4b15-a9e2-e3f79f889f4b&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;
&lt;b&gt;Sprint Backlog&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The &lt;b&gt;sprint backlog&lt;/b&gt; identifies the tasks the development team are going to work on / are working on in the current (or past) sprints. The sprint backlog is &quot;&lt;i&gt;locked&lt;/i&gt;&quot; at the end of the sprint and  &quot;&lt;i&gt;closed&lt;/i&gt;&quot; whenever each and every of its tasks are closed.
&lt;/p&gt;
&lt;p&gt;
The Sprint backlog is the &lt;b&gt;Immediate-term backlog&lt;/b&gt;, i.e. things we&apos;ll close in the 2 coming weeks.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Release backlogs&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
We have as many &lt;b&gt;release backlogs&lt;/b&gt; as released planned. All the tasks that are not assigned to a specific planned release are part of the &lt;b&gt;Long Term backlog&lt;/b&gt;. Such tasks are typically assigned a release when the former releases are done and closed and we plan the next releases.
&lt;/p&gt;
&lt;p&gt;
The release backlogs are the &lt;b&gt;Short-term backlogs&lt;/b&gt;, i.e things we&apos;ll close in the coming months.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Long-term backlog&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The long term backlog is composed by tasks of a lesser priority. Those that make sense and we definitely believe we should work on them, those that corresponds to stories of the StoryMap or elements of the Roadmap, but that are not planned for any nearby delivery or for which we haven&apos;t identified any customer requirement so far.
&lt;/p&gt;

&lt;a name=&quot;sec62&quot;&gt;&lt;/a&gt;
&lt;h3&gt;6.2 While being Agile&lt;/h3&gt;

&lt;p&gt;
Now all of the above form a plan, gives us an objective and a direction. Having a plan, keeping a direction is important. It enables the whole company to agree and commit on a vision and business directions.
&lt;/p&gt;
&lt;p&gt;
Yet we are agile, we stick to our vision, but we adapt the plan continuously. The composition of our releases, our ideas, the priorities of the tasks and the way we intend to group them in releases change all the time, almost every week to be honest.
&lt;/p&gt;
&lt;p&gt;
We already know what we are going to release and when we will release it for the coming 18 months. But in one year, it is absolutely certain that we will have done it completely differently.
&lt;br&gt;
Because we adapt to market events and feedback and to customer requirements.
&lt;/p&gt;
&lt;p&gt;
At the end of the day this is no big deal and has really only little importance. &lt;b&gt;We are Agile&lt;/b&gt;, meaning &lt;b&gt;every sprint is closed by a production ready and shippable version of our platform&lt;/b&gt;. 
&lt;br&gt;
Taking the decision to assign a version number to these releases and roll them out in production at some customer is a Product Management Decision, it&apos;s almost not anymore a development concern.
&lt;/p&gt;
&lt;p&gt;
At the end of the day, we have really only one single constraint to make it possible : split big refactorings (technical epics) or large business epics in smaller tasks that have to fit in a single sprint, whatever happens.
&lt;br&gt;
These tasks have to be completed by the end of the sprint, meaning being properly closed, tested and 100% working.
&lt;/p&gt;
&lt;p&gt;
For instance:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Imagine we have to realize an important refactoring that would need weeks of development to be completed. That refactoring is split in small tasks such as [1. Put in place the framework], [2. Implement it in this package], [3. Implement it in this other package, etc]. &lt;br&gt;
At the end of one sprint, it may well happen that the refactoring is only partially realized. In this case we make it so that the platform works perfectly even if half of the code is running on the former approach and only the other half ot it has been migrated to the new way.
&lt;/li&gt;
&lt;li&gt;As another example, imagine a brand new feature requires several dozens of new screens which would take weeks to implement. Thanks to &lt;b&gt;Feature Flipping&lt;/b&gt;, we simply disable this feature in production while it is still in development. The day we finally finish to implement it in a sprint, that end-of-sprint release will finally have the feature enabled and make it available to our customer.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Long story short, we make it so that partially implemented features are either working 100% from a functional perspective or properly hidden, in order not to compromise User Experience on the platform
&lt;/p&gt;
&lt;p&gt;
Again, all of that is possible because we have embraced eXtreme programing, Agile as well as some DevOps and Lean Startup practices as our core set of practices. 
&lt;/p&gt;

&lt;a name=&quot;#sec63&quot;&gt;&lt;/a&gt;
&lt;h3&gt;6.3 Handling customer requests and production concerns&lt;/h3&gt;

&lt;p&gt;
Now all the above works great on the paper or when we develop a brand new product, a completely new feature or technological evolution.
&lt;br&gt;
But it doesn&apos;t handle urgent customer requests or production concerns such as bug fixes or other urgent and new requirements coming from our consultants or customers. 
&lt;/p&gt;
&lt;p&gt;
We have a special way of handling such new features or bug fixes which takes the form of a special tracker named &lt;b&gt;wish&lt;/b&gt;. 
&lt;br&gt;
These wishes are put in a special backlog, the wish backlog which is reviewed every month by the Head of R&amp;D (myself) and the Head of Delivery. Together, we discuss these &lt;i&gt;wishes&lt;/i&gt; define priorities and transform them into actual development tasks put in one of the backlog above, sometimes as close as the next &lt;i&gt;Sprint backlog&lt;/i&gt;.
&lt;/p&gt;


&lt;a name=&quot;sec64&quot;&gt;&lt;/a&gt;
&lt;h3&gt;6.4 Sprint Kanban backlog management &lt;/h3&gt;

&lt;p&gt;
While the &lt;b&gt;Burndown chart&lt;/b&gt; is interesting to track the performance in comparison to theory as well as delays or advance, I don&apos;t find it so useful in the end and really seldomly use it.
&lt;br&gt;
I mean, it&apos;s interesting to have a clear visual indication of how the sprint is going and where we stand in comparison with expected status of course, but it&apos;s too general. While I can look at it once in a while to confirm a feeling of being late or in advance I might have, it&apos;s really not the tool I&apos;m using.
&lt;/p&gt;
&lt;p&gt;
As a manager with a good understanding of what we need to do in every sprint as well as the dependencies between tasks and the overall context of the sprint whereabouts, I need a tool providing me a fleeting glimpse on every task&apos;s status and the overall situation of the Sprint.
&lt;br&gt;
In this regards, a Kanban board is to me the &quot;&lt;i&gt;one ring to rule them all&lt;/i&gt;&quot; tool.
&lt;/p&gt;
&lt;p&gt;
We use redmine and the Agile plugin of redmine to manage our &lt;b&gt;Kanban boards&lt;/b&gt;. That plugin works is a pretty specific way : the Kanban board shows tasks (and other items) on the left and sub-tasks (in the redmine terminology) are the elements passed between states. This is illustrated in the example below.
&lt;br&gt;
In our case, we manage &lt;i&gt;stories&lt;/i&gt; and &lt;i&gt;tasks&lt;/i&gt; in the backlog. &lt;b&gt;As task never ever has any subtask other than one entitled &lt;i&gt;&quot;Implementation of #1234&quot;&lt;/i&gt;&lt;/b&gt; where 1234 is the ID of the parent task it belongs to.
&lt;br&gt;
That only &quot;&lt;i&gt;Implementation&lt;/i&gt;&quot; subtask is the visual artifice we use to track the status of our tasks on the Kanban board:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e3828fb7-4d55-423f-b7b7-9379379d2524&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 720px;&quot; alt=&quot;Kanban Board&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/e3828fb7-4d55-423f-b7b7-9379379d2524&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;
Tasks have a &lt;i&gt;release&lt;/i&gt; assigned when they are in release backlogs (not those in long-term backlog). When a task is picked up during &lt;i&gt;Sprint planning meeting&lt;/i&gt;, it gets in addition a &lt;i&gt;Target Version&lt;/i&gt; assigned. We use redmine&apos;s notion of &lt;i&gt;Target version&lt;/i&gt; to materialize our sprints.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Tasks assignment&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
A task is always assigned to the developer who did most work on it. It then stays assigned to that developer forever. Should another developer take the task on, and both agree that that second developer ended up doing more work, he can assign the task to himself.
&lt;/p&gt;
&lt;p&gt;
The subtasks (Implementation of ...) can be assigned to different developers when it is passed from a developer to another one. 
&lt;br&gt;
A In this case, the assignee of the main task (the parent) remains the developer who did most work on it.
&lt;br&gt; 
In addition, when a tester takes a subtask from &quot;&lt;b&gt;Testing Ready&lt;/b&gt;&quot; and puts in in &quot;&lt;b&gt;Testing&lt;/b&gt;&quot;, he needs to assign the subtask to himself.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Tasks Status&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The rules are simple:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; The main task can only have 2 states : &quot;&lt;b&gt;New&lt;/b&gt;&quot; and &quot;&lt;b&gt;Closed&lt;/b&gt;&quot;.
    &lt;ul&gt;
    &lt;li&gt; We never move the mast tasks from &quot;&lt;b&gt;New&lt;/b&gt;&quot; to &quot;&lt;b&gt;Implementation&lt;/b&gt;&quot;, &quot;&lt;b&gt;Implementation&lt;/b&gt;&quot; to &quot;&lt;b&gt;Testing Ready&lt;/b&gt;&quot;, etc. We never touch the main task. &lt;/li&gt;
    &lt;li&gt;Only Head of R&amp;D (myself) closes main tasks. &quot;&lt;i&gt;Implementation&lt;/i&gt;&quot; subtasks are however closed by the tester. &lt;/li&gt;
    &lt;li&gt;Main tasks are assigned as explained above to the main developer working on the topic&lt;/li&gt;
    &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; The subtask &quot;&lt;i&gt;Implementation&lt;/i&gt;&quot; is used to actually track the status
    &lt;ul&gt;
    &lt;li&gt;The subtask is moved in the different status according the to state of the job. It can also be re-assigned.&lt;/li&gt;
    &lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
We use following statuses and rules:
&lt;/p&gt;

&lt;div class=&quot;centering&quot;&gt;
&lt;a href=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c40ac028-d351-4503-9c08-b59608b8bf05&quot;&gt;
&lt;img class=&quot;centered&quot; style=&quot;width: 720px;&quot; alt=&quot;Kanban States&quot; src=&quot;https://www.niceideas.ch/roller2/badtrash/mediaresource/c40ac028-d351-4503-9c08-b59608b8bf05&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;a name=&quot;sec7&quot;&gt;&lt;/a&gt;
&lt;h2&gt;7. Conclusion&lt;/h2&gt;

&lt;p&gt;
Adopting the set of practices described in this article really helped us not only to adopt agility within the development team but also in all activities surrounding it. The whole company got used to our ways and takes part in the process either by taking an active part in the &lt;b&gt;Product Management Committee&lt;/b&gt; to help define the user stories or simply by downloading the latest Demo VM at the end of every sprint.
&lt;/p&gt;
&lt;p&gt;
In addition, as stated above, adopting Agile principles and practices are a ground requirement towards adopting some DevOps or Lean Startup practices that really help not only the efficiency of the development team but really the company as a whole by improving quality of the software and simply all our interactions with the other teams or even the customers. In addition, they have been key to make us shorten the lead time from ideas to production rollout of new features and our responsivity as a whole company.
&lt;/p&gt;
&lt;p&gt;
While I can imagine that there can be situations where a standard waterfall approach may make more sense, I haven&apos;t encountered any in my career. Project size is not an argument there since Agility can be transposed to multiple team projects up to several dozens of thousands of man days projects. This is called &lt;b&gt;Scaling Agile&lt;/b&gt; with dedicated framework such as &lt;a href=&quot;http://www.scaledagileframework.com/&quot;&gt;SAFe - Scaled Agile Framework&lt;/a&gt;. I hope I&apos;ll have some experience to share in this regards in another life.
&lt;/p&gt;
&lt;p&gt;
You can read a PDF version of this article here : &lt;a href=&quot;https://www.niceideas.ch/agility.pdf&quot;&gt;https://www.niceideas.ch/agility.pdf&lt;/a&gt;.
&lt;/p&gt;
</description>          </item>
  </channel>
</rss>