{"id":850,"date":"2015-04-17T12:58:09","date_gmt":"2015-04-17T11:58:09","guid":{"rendered":"http:\/\/benjiweber.co.uk\/blog\/?p=850"},"modified":"2015-04-29T14:43:35","modified_gmt":"2015-04-29T13:43:35","slug":"modern-extreme-programming","status":"publish","type":"post","link":"https:\/\/benjiweber.co.uk\/blog\/2015\/04\/17\/modern-extreme-programming\/","title":{"rendered":"Modern Extreme Programming"},"content":{"rendered":"<p class=\"lead\">There was a recent discussion on the Extreme Programming mailing list kicked off by Ron Jeffries saying <a href=\"http:\/\/ronjeffries.com\/articles\/2015-03-21-xp-revived\/\">he wants his XP back<\/a>. <\/p>\n<p>The implication being that Extreme Programming is no longer practised, and that most <em>&#8220;Agile&#8221;<\/em> organisations are actually practising <a href=\"http:\/\/martinfowler.com\/bliki\/FlaccidScrum.html\">Flaccid Scrum<\/a> &#8211; some agile process but little of the technical practices from Extreme Programming.<\/p>\n<p><em>Update: Ron clarifies in the comments that we agree that extreme programming is still practised, but it would be good if it were practised by more teams. <\/em><\/p>\n<p><del datetime=\"2015-04-27T15:19:33+00:00\">I disagree with this premise.<\/del> Extreme Programming is alive and well, at least here in London. We have <a href=\"http:\/\/www.meetup.com\/Extreme-Programmers-London\/\">XProlo<\/a>, eXtreme Tuesday Club, <a href=\"https:\/\/xpday.wordpress.com\/\">XPDay<\/a> and many other communities dedicated to XP practices under other names like <a href=\"http:\/\/www.meetup.com\/London-Continuous-Delivery\/\">Continuous Delivery<\/a> and <a href=\"http:\/\/www.meetup.com\/london-software-craftsmanship\/\">Software Craftsmanship<\/a>. There are enough organisations practising Extreme Programming for us to organise regular developer exchanges to cross-pollenate ideas. Extreme programming skills such as Test-driven development and continuous-integration are highly in demand skills in <a href=\"http:\/\/www.indeed.co.uk\/jobs?q=tdd&#038;l=London\">Job Descriptions<\/a>, even if there is much confusion about what these things actually entail.<\/p>\n<p>When I say that Extreme Programming is alive and well, I do not mean we are working in exactly the same way as described in Kent Beck\u2019s <a href=\"http:\/\/www.amazon.co.uk\/Extreme-Programming-Explained-Embrace-Change\/dp\/0321278658\">Extreme Programming Explained<\/a> book. Rather, we still have the same values, and have continued to evolve our technical and team practices. Kent Beck says <\/p>\n<p><em>&#8220;my goal in laying out the project style was to take everything I know to be valuable about software engineering and turn the dials to 10.&#8221;<\/em><\/p>\n<p>Well now we have turned the dials <a href=\"http:\/\/www.oxforddictionaries.com\/definition\/english\/up-to-eleven\">up to eleven.<\/a> What does modern Extreme Programming look like?<\/p>\n<h2>Turning the dials up to 11<\/h2>\n<p>Here are some of the ways we are now more extreme than outlined in Extreme Programming explained.<\/p>\n<p><img src=\"http:\/\/benjiweber.co.uk\/eleven.png\"\/><\/p>\n<h3>Pair Programming becomes Mob Programming<\/h3>\n<p><em>Update: Apparently XP Teams are so aligned that <a href=\"http:\/\/rachelcdavies.github.io\/\">Rachel has written a similar blog post<\/a>, covering this in more detail.<\/a><\/em><\/p>\n<p>XP Explained says &#8220;Write all production programs with two people sitting at one machine&#8221;. We\u2019ve turned this to eleven by choosing how many people are appropriate for a task. We treat a pair as a minimum for production code, but often choose to work <a href=\"http:\/\/benjiweber.co.uk\/blog\/2014\/11\/30\/the-unruly-mob\/\">with the whole team around a single workstation.<\/a><\/p>\n<p><img width=\"800\" src=\"http:\/\/benjiweber.co.uk\/talks\/xprolomob\/mob21.jpg\"\/><\/p>\n<p>Mobbing is great when the whole team needs to know how something will work, when you need to brainstorm and clarify ideas and refinements as you build. It also reduces the impact of interruptions as team-members can peel in and out of the mob as they like with minimal disruption, while a pair might be completely derailed by an interruption.<\/p>\n<p>When pair programming it\u2019s encouraged to rotate partners regularly to ensure knowledge gets shared around the team and keep things fresh. Mobbing obviates the need to rotate for knowledge sharing , and takes away the problem of fragmented knowledge that is sometimes a result of pair rotation.<\/p>\n<h3>Continuous Integration becomes Continuous Deployment<\/h3>\n<p>In Extreme Programming explained Kent Beck explains that <em>&#8220;XP shortens the release cycle&#8221;<\/em>, but still talks about planning <em>&#8220;releases once a Quarter&#8221;<\/em>. It suggests we should have a ten-minute build, integrate with the rest of the team after no more than a couple of hours, and do Daily Deployments.<\/p>\n<p>We can take these practises to more of an extreme. <\/p>\n<p>Deploy to production after no more than a couple of hours<br \/>\nNot just build but deploy to production in under ten minutes<br \/>\nAllow the business to choose to release whenever they wish because we decouple deployment from release<\/p>\n<p>Each of these vertical blue lines is our team deploying a service to production during an afternoon.<\/p>\n<p><img src=\"http:\/\/benjiweber.co.uk\/talks\/testing-in-production\/testinginproduction\/deployments.jpg\"\/><\/p>\n<p>I think of Continuous Deployment as full Continuous Integration. Not only are we integrating our changes with the rest of the team, but the rest of the world in our production environment. We reduce the release deployment pain to zero because we&#8217;re doing it all the time, and we get feedback from our production monitoring, our customers and our users.<\/p>\n<p>David Farley recently said <em>&#8220;Reduce cycle time and the rest falls out&#8221;<\/em> at <a href=\"http:\/\/pipelineconf.info\/\">Pipeline 2015<\/a>. When turning up the dial on release frequency we find we need to turn other dials too.<\/p>\n<h3>Collective Code-Ownership becomes Collective Product-Ownership<\/h3>\n<p>XP Explained suggests that <em>&#8220;Anyone on the team can improve any part of the system at any time&#8221;<\/em> but mostly discusses the idea of shared code &#8211; anyone is free to modify any part of the codebase that team owns. However, it also suggests that we need real customer involvement in the team. <\/p>\n<p>We wish to move fast for two reasons.<\/p>\n<ol>\n<li>To generate value as rapidly as possible<\/li>\n<li>To get feedback as frequently as possible to ensure the above<\/li>\n<\/ol>\n<p>Continuous Deployment helps us move fast and get valuable feedback frequently, but the freedom to deploy-continually is only practicable if our teams also have a collective responsibility for maintaining our systems in production.  To make sensible decisions about what to build and release we need to also have the responsibility of being woken up when it goes wrong at 2am.<\/p>\n<p>Continuous deployment and collective ownership of infrastructure operations means we can move fast, but then the bottleneck becomes the customer. We can learn whether our changes are having the desired effect rapidly, but the value of the feedback is not fully realised if we cannot act upon the feedback to change direction until a scheduled customer interaction such as a prioritisation meeting.<\/p>\n<p>Hence we extend collective ownership to all aspects of product development. <\/p>\n<ol>\n<li>Product planning<\/li>\n<li>Coding<\/li>\n<li>Keeping it running in production<\/li>\n<\/ol>\n<p>Everyone on the team should be not only be free, but encouraged to <\/p>\n<ul>\n<li>Change any part of the codebase<\/li>\n<li>Change any part of our production infrastructure<\/li>\n<li>Discuss product direction with business decision makers.<\/li>\n<\/ul>\n<h3>Products not Projects <\/h3>\n<p>Collective product ownership implies some more things. Instead of giving teams a project to build a product or some major set of features over a time period, the team is given ownership of one or more Products and tasked with adding value to that product. This approach allows for full collective product ownership, close collaboration with customers, and fully embracing change as we learn which features turn out to be valuable and which do not.<\/p>\n<p>This approach is more similar to the military idea of <a href=\"http:\/\/en.wikipedia.org\/wiki\/Intent_%28military%29#Commander.27s_intent\">Commander\u2019s Intent<\/a>. The team is aware of the high level business goals, but it is up to the team, with embedded customer to develop their own plans to transform that thought into action.<\/p>\n<h3>Hypotheses as well as Stories<\/h3>\n<p>User stories are placeholders for conversation and delivery of small units of customer-visible functionality. These are useful, but often we make decisions about which features to prioritise based on many assumptions. If we can identify these assumptions we can construct tests to confirm whether they are accurate and reduce the risk of spending time implementing the feature.<\/p>\n<p>When working in close collaboration with customers to test assumptions and collectively decide what to do there\u2019s also less need for estimation of the cost of stories, and there\u2019s certainly less need to maintain long backlogs of stories that we plan to do in the future. We can focus on what we need to learn and build in the immediate future.<\/p>\n<h3>Test-First Programming becomes Monitoring-First Programming<\/h3>\n<p>Or TDD becomes MDD. When we collectively own the whole product lifecycle we can write our automated production monitoring checks first, and see them fail before we start implementing our features.<\/p>\n<p>This forces us to make sure that features can be easily monitored, and helps us avoid scope creep, just like TDD, while ensuring we have good production monitoring coverage.<\/p>\n<p>It also helps us have trust in our production systems and the courage to make frequent changes to our production system.s<\/p>\n<p>Just like with TDD, MDD gives us <a href=\"benjiweber.co.uk\/blog\/2015\/03\/02\/monitoring-check-smells\/\">feedback about the design of our systems<\/a>, which we can use to improve our designs. It also gives us a rhythm for doing so.<\/p>\n<h3>Continuous Learning<\/h3>\n<p>Nearly all of the above are designed to maximise learning, whether it is from our peers during development, our production environment when we integrate our changes, our users when we release changes, or our customers when we test hypotheses.<\/p>\n<p>But it\u2019s also important to have space for individual learning, it helps retain people and benefits the team. <\/p>\n<p>Extreme Programming practices have changed in the last 15 years because we are continually learning. Some of the ways to provide space for learning include<\/p>\n<ul>\n<li>Gold cards\/20% time &#8211; provide dedicated and regular time for individuals in the team to do work of their own choosing. Providing opportunity for bottom-up innovation.<\/li>\n<li>Dev-exchanges &#8211; regularly swap developers with other organisations to allow for sharing of ideas between organisations<br \/>\nMeetups and Conferences &#8211; Encouraging each other to attend and speak at conferences and local meetups helps accelerate learning from other organisations.<\/li>\n<li>Team-Rotations &#8211; Regularly swapping people between teams inside the organisation helps spread internal ideas around. <\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>There was a recent discussion on the Extreme Programming mailing list kicked off by Ron Jeffries saying he wants his XP back. The implication being that Extreme Programming is no longer practised, and that most &#8220;Agile&#8221; organisations are actually practising Flaccid Scrum &#8211; some agile process but little of the technical practices from Extreme Programming&#8230;.  <a href=\"https:\/\/benjiweber.co.uk\/blog\/2015\/04\/17\/modern-extreme-programming\/\" class=\"more-link\" title=\"Read Modern Extreme Programming\">Read more &raquo;<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[21,17],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v14.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/benjiweber.co.uk\/blog\/2015\/04\/17\/modern-extreme-programming\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Modern Extreme Programming - Benji&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"There was a recent discussion on the Extreme Programming mailing list kicked off by Ron Jeffries saying he wants his XP back. The implication being that Extreme Programming is no longer practised, and that most &#8220;Agile&#8221; organisations are actually practising Flaccid Scrum &#8211; some agile process but little of the technical practices from Extreme Programming.... Read more &raquo;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/benjiweber.co.uk\/blog\/2015\/04\/17\/modern-extreme-programming\/\" \/>\n<meta property=\"og:site_name\" content=\"Benji&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-04-17T11:58:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-04-29T13:43:35+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/benjiweber.co.uk\/eleven.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/benjiweber.co.uk\/blog\/#website\",\"url\":\"https:\/\/benjiweber.co.uk\/blog\/\",\"name\":\"Benji&#039;s Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/benjiweber.co.uk\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/benjiweber.co.uk\/blog\/2015\/04\/17\/modern-extreme-programming\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"http:\/\/benjiweber.co.uk\/eleven.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/benjiweber.co.uk\/blog\/2015\/04\/17\/modern-extreme-programming\/#webpage\",\"url\":\"https:\/\/benjiweber.co.uk\/blog\/2015\/04\/17\/modern-extreme-programming\/\",\"name\":\"Modern Extreme Programming - Benji&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\/\/benjiweber.co.uk\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/benjiweber.co.uk\/blog\/2015\/04\/17\/modern-extreme-programming\/#primaryimage\"},\"datePublished\":\"2015-04-17T11:58:09+00:00\",\"dateModified\":\"2015-04-29T13:43:35+00:00\",\"author\":{\"@id\":\"https:\/\/benjiweber.co.uk\/blog\/#\/schema\/person\/45ecb36b51f4ce99e6929d2d31ca5c09\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/benjiweber.co.uk\/blog\/2015\/04\/17\/modern-extreme-programming\/\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/benjiweber.co.uk\/blog\/#\/schema\/person\/45ecb36b51f4ce99e6929d2d31ca5c09\",\"name\":\"benji\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/benjiweber.co.uk\/blog\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/05fb47b31a0b329e1b790074a9b624ef?s=96&d=mm&r=g\",\"caption\":\"benji\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","amp_enabled":true,"_links":{"self":[{"href":"https:\/\/benjiweber.co.uk\/blog\/wp-json\/wp\/v2\/posts\/850"}],"collection":[{"href":"https:\/\/benjiweber.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/benjiweber.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/benjiweber.co.uk\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/benjiweber.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=850"}],"version-history":[{"count":16,"href":"https:\/\/benjiweber.co.uk\/blog\/wp-json\/wp\/v2\/posts\/850\/revisions"}],"predecessor-version":[{"id":868,"href":"https:\/\/benjiweber.co.uk\/blog\/wp-json\/wp\/v2\/posts\/850\/revisions\/868"}],"wp:attachment":[{"href":"https:\/\/benjiweber.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=850"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/benjiweber.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=850"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/benjiweber.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=850"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}