<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <link href="http://martinfowler.com/feed.atom" rel="self"/>
  <link href="http://martinfowler.com"/>
  <id>http://martinfowler.com/feed.atom</id>
  <title>Martin Fowler</title>
  <subtitle>Master feed of news and updates from martinfowler.com</subtitle>
  <author>
    <name>Martin Fowler</name>
    <email>fowler@acm.org</email>
    <uri>http://martinfowler.com</uri>
  </author>
  <updated>2013-05-22T16:35:00-04:00</updated>
<entry>
    <title>May 2013 edition of ThoughtWorks Technology Radar</title>
    <link href="http://www.thoughtworks.com/radar"/>
    <updated>2013-05-22T16:35:00-04:00</updated>
    <id>tag:martinfowler.com,2013-05-22:May-2013-edition-of-ThoughtWorks-Technology-Radar</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/snips/radar-0513.png' width = '75' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;The &lt;a href='http://martinfowler.com/articles/radar-faq.html#tab'&gt;ThoughtWorks Technology Advisory Board (TAB)&lt;/a&gt; has released the latest edition of our &lt;a href='http://www.thoughtworks.com/radar'&gt;technology radar&lt;/a&gt;. This is where we highlight some of the technologies that are currently attracting our attention and that we feel are worth you taking a look at. In this edition our themes include my long term interest in breaking down boundaries between people and groups, lightweight option for analytics, infrastructure as code, and applying the practices that have worked well for us in development to places that are missing them.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 46</title>
    <link href="http://martinfowler.com/photos/46.html"/>
    <updated>2013-05-21T09:34:00-04:00</updated>
    <id>tag:martinfowler.com,2013-05-21:photostream-46</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/46.html'&gt;&lt;img src = 'http://martinfowler.com/photos/46.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Longwood Gardens, PA&lt;/p&gt;
</content>
  </entry><entry>
    <title>Expansion to DIP in the Wild</title>
    <link href="http://martinfowler.com/articles/dipInTheWild.html"/>
    <updated>2013-05-21T08:50:00-04:00</updated>
    <id>tag:martinfowler.com,2013-05-21:Expansion-to-DIP-in-the-Wild</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/articles/DipInTheWild/images/BrettSchuchert.jpg' width = '75' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;&lt;a href='http://schuchert.wikispaces.com/'&gt;Brett&amp;#8217;s&lt;/a&gt; article on the Dependency Inversion Principle (DIP) and how it works in practice has been a popular read on this site (over 24,000 views since it was published at the beginning of the month). Brett has now expanded the article with two more examples from his delivery experience: questioning requirements and handling time.&lt;/p&gt;</content>
  </entry><entry>
    <title>How do you estimate on an Agile project?</title>
    <link href="http://www.thoughtworks-studios.com/sites/default/files/resource/twebook-perspectives-estimation_1.pdf"/>
    <updated>2013-05-03T13:36:00-04:00</updated>
    <id>tag:martinfowler.com,2013-05-03:How-do-you-estimate-on-an-Agile-project-</id>
    <category term=""/>
    <content type="html">&lt;p&gt;If you&amp;#8217;re interested in techniques for estimation, you should take a look at this pdf ebook. It contains half-a-dozen essays on estimating in agile projects, drawn from our experiences with a wide range of clients. We explain approaches based on story points and on story counting, which should give you a good overview for you to explore an approach that will work for you.&lt;/p&gt;</content>
  </entry><entry>
    <title>DIP in the Wild</title>
    <link href="http://martinfowler.com/articles/dipInTheWild.html"/>
    <updated>2013-05-01T12:13:00-04:00</updated>
    <id>tag:martinfowler.com,2013-05-01:DIP-in-the-Wild</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/articles/DipInTheWild/images/BrettSchuchert.jpg' width = '75' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;The Dependency Inversion Principle (DIP) was coined by (Uncle) Bob Martin several years ago. It&amp;#8217;s a useful principle to help organize the dependencies in your system. Here &lt;a href='http://schuchert.wikispaces.com/'&gt;Brett Schuchert&lt;/a&gt; shows &lt;a href='http://martinfowler.com/articles/dipInTheWild.html'&gt;how this principle works in practice&lt;/a&gt; to simplify designs with a couple of real world examples from his recent ThoughtWorks projects.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 45</title>
    <link href="http://martinfowler.com/photos/45.html"/>
    <updated>2013-04-24T19:18:00-04:00</updated>
    <id>tag:martinfowler.com,2013-04-24:photostream-45</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/45.html'&gt;&lt;img src = 'http://martinfowler.com/photos/45.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Segovia, Spain&lt;/p&gt;
</content>
  </entry><entry>
    <title>Bliki: StoryTest</title>
    <link href="http://martinfowler.com/bliki/StoryTest.html"/>
    <updated>2013-04-24T10:34:00-04:00</updated>
    <id>http://martinfowler.com/bliki/StoryTest.html</id>
    <category term="bliki"/>
    <content type="html">
&lt;p&gt;Story tests are &lt;a href="http://martinfowler.com/bliki/BusinessFacingTest.html"&gt;BusinessFacingTests&lt;/a&gt; used to describe and verify
  the software delivered as part of a &lt;a href="http://martinfowler.com/bliki/UserStory.html"&gt;UserStory&lt;/a&gt;. When a story is
  elaborated the team creates several story tests that act as
  acceptance criteria for the story. The story tests can be combined
  into a regression suite for the software and provide traceability
  from the requirements (user stories) to tests and (through execution)
  to the behavior of the system. Story tests are usually &lt;a href="http://martinfowler.com/bliki/BroadStackTest.html"&gt;BroadStackTests&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;User stories are popular because they offer a simple
  workflow, each story adds new tests to the story test suite.
  However story tests often lead to problems. Regularly adding story
  tests leads to a large body of tests, often with significant
  duplication between them. When behavior needs to change in later
  iterations of the project, duplication in tests can take a painful amount
  of time to update. Furthermore broad-stack story tests take a long
  time to execute, which is why having a lot of them violates the
  &lt;a href="http://martinfowler.com/bliki/TestPyramid.html"&gt;TestPyramid&lt;/a&gt;. As a result many people recommend using just
  a few &lt;a href="http://martinfowler.com/bliki/UserJourneyTest.html"&gt;UserJourneyTests&lt;/a&gt; together with business-facing
  &lt;a href="http://martinfowler.com/bliki/ComponentTest.html"&gt;ComponentTests&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry><entry>
    <title>Bliki: UserJourneyTest</title>
    <link href="http://martinfowler.com/bliki/UserJourneyTest.html"/>
    <updated>2013-04-24T10:34:00-04:00</updated>
    <id>http://martinfowler.com/bliki/UserJourneyTest.html</id>
    <category term="bliki"/>
    <content type="html">
&lt;p&gt;User-journey tests are a form of &lt;a href="http://martinfowler.com/bliki/BusinessFacingTest.html"&gt;BusinessFacingTest&lt;/a&gt;, designed
  to simulate a typical user's "journey" through the system. Such a
  test will typically cover a user's entire interaction the system in
  order to achieve some goal. They act as one path in a use case.&lt;/p&gt;

&lt;p&gt; They are usually &lt;a href="http://martinfowler.com/bliki/BroadStackTest.html"&gt;BroadStackTests&lt;/a&gt; and as such, are
  usually slow to execute and prone to being brittle. Consequently
  suites of user journey tests usually aren't built to be
  comprehensive tests of a system's behavior. Usually you will have
  only a few user journey tests to exercise the integration of the
  system as a whole - probably only one path for each use case
  (usually the happy path). Verification of all the variations in
  behavior is left to tests done in different styles, usually with
  more focused coverage.&lt;/p&gt;

&lt;p&gt;In contrast to &lt;a href="http://martinfowler.com/bliki/StoryTest.html"&gt;StoryTests&lt;/a&gt;, user journey tests are not tied to
  user stories. When you play a story you look at the existing user
  journey tests and modify them to support any change in behavior
  implied by the user story, only rarely does a user story lead to an
  entirely new user journey test.&lt;/p&gt;
</content>
  </entry><entry>
    <title>Bliki: BusinessFacingTest</title>
    <link href="http://martinfowler.com/bliki/BusinessFacingTest.html"/>
    <updated>2013-04-24T10:32:00-04:00</updated>
    <id>http://martinfowler.com/bliki/BusinessFacingTest.html</id>
    <category term="bliki"/>
    <content type="html">
&lt;p&gt;A business-facing test is a test that's intended to be used as an
  aid to communicating with the non-programming members of a
  development team such as customers, users, business analysts and the
  like. When automated, they describe the system in domain-oriented terms,
  ignoring the component architecture of the system itself.
  Business-facing tests are often used as acceptance criteria, having
  such tests pass indicates the system provides the functionality that
  the customer expects.&lt;/p&gt;

&lt;p&gt;Automated business-facing tests are often represented in some form of
  &lt;a href="http://martinfowler.com/bliki/DomainSpecificLanguage.html"&gt;DomainSpecificLanguage&lt;/a&gt;, since this helps communication
  with non-programmers and also helps give programmers a mechanism
  that helps them step back from the details of the code. Tools like
  &lt;a href="http://cukes.info"&gt;Cucumber&lt;/a&gt; and &lt;a href="http://www.thoughtworks-studios.com/twist-agile-testing"&gt;Twist&lt;/a&gt; help design such DSLs and provide mechanisms to
  bind them to the system under test.&lt;/p&gt;

&lt;p&gt;Business-facing tests are commonly implemented as
  &lt;a href="http://martinfowler.com/bliki/BroadStackTest.html"&gt;BroadStackTests&lt;/a&gt; since their user-oriented expression
  suggests treating the system under test as a black box. However
  there are significant advantages to implementing business-facing
  tests as &lt;a href="http://martinfowler.com/bliki/ComponentTest.html"&gt;ComponentTests&lt;/a&gt; since this often results in
  easier maintenance and faster execution.&lt;/p&gt;

&lt;p&gt;I'm a big fan of automated testing, but it's important to recognize
  that manual tests play a significant role in business-facing
  testing. Techniques such as exploratory testing and usability
  testing are inherently manual activities and are essential parts of
  a well-balanced test portfolio.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://martinfowler.com/bliki/StoryTest.html"&gt;StoryTests&lt;/a&gt; and &lt;a href="http://martinfowler.com/bliki/UserJourneyTest.html"&gt;UserJourneyTests&lt;/a&gt; are two
  common forms of business-facing test. The term business-facing test
  comes from &lt;a href="http://www.exampler.com/old-blog/2003/08/21/#agile-testing-project-1"&gt;Brian
  Marick's test quadrant&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry><entry>
    <title>The Architecture of Gap Inc's SCMS-PO</title>
    <link href="http://martinfowler.com/articles/gap-scms-po"/>
    <updated>2013-04-23T11:24:00-04:00</updated>
    <id>tag:martinfowler.com,2013-04-23:The-Architecture-of-Gap-Inc-s-SCMS-PO</id>
    <category term=""/>
    <content type="html">&lt;p&gt;I&amp;#8217;m hoping to spend more time writing about &lt;a href='/bliki/ExpositionalArchitecture.html'&gt;expositional architectures&lt;/a&gt;, systems that show interesting characteristics that will act as seeds for ideas for other software systems. To make a start I&amp;#8217;ve written an infodeck describing the &lt;a href='/articles/gap-scms-po'&gt;SCMS-PO system of Gap Inc&lt;/a&gt;. It&amp;#8217;s a system for managing purchase orders with a rich javascript client talking to a java server system using a resource API. Interesting features include using knockout.js form of the Presentation Model pattern, a javascript validator running on both client and server, encapsulating data access with repositories, using MongoDB as an application database, and the testing portfolio.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 44</title>
    <link href="http://martinfowler.com/photos/44.html"/>
    <updated>2013-04-22T10:54:00-04:00</updated>
    <id>tag:martinfowler.com,2013-04-22:photostream-44</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/44.html'&gt;&lt;img src = 'http://martinfowler.com/photos/44.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Himeji, Japan&lt;/p&gt;
</content>
  </entry><entry>
    <title>Bliki: UserStory</title>
    <link href="http://martinfowler.com/bliki/UserStory.html"/>
    <updated>2013-04-22T10:42:00-04:00</updated>
    <id>http://martinfowler.com/bliki/UserStory.html</id>
    <category term="bliki"/>
    <content type="html">
&lt;p&gt;User Stories are chunks of desired behavior of a software system.
  They are widely used in agile software approaches to divide up a
  large amount of functionality into smaller pieces for planning
  purposes. You also hear the same concept referred to as a
  &lt;b&gt;feature&lt;/b&gt;, but the term "story" or "user story" has
  become prevalent in agile circles these days.&lt;/p&gt;

&lt;p&gt;Kent Beck first introduced the term as part of Extreme
  Programming to encourage a more informal and conversational style of
  requirements elicitation than long written specifications. The
  essence of a story can be written on a single note card (Kent and I
  prefer 3" by 5"). Stories are deliberately not fleshed out in detail
  until they are ready to be developed, you only need enough
  understanding to allow prioritization with other stories.&lt;/p&gt;

&lt;p&gt;Bill Wake came up with the &lt;a href="http://xp123.com/articles/invest-in-good-stories-and-smart-tasks/"&gt;INVEST mnemonic&lt;/a&gt; to describe the
  characteristics of good stories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Independent&lt;/b&gt;: the stories can be delivered in any order&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Negotiable&lt;/b&gt;: the details of what's in the story are co-created
    by the programmers and customer during development.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Valuable&lt;/b&gt;: the functionality is seen as valuable by the
    customers or users of the software.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Estimable&lt;/b&gt;: the programmers can come up with a reasonable
    estimate for building the story&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Small&lt;/b&gt;: stories should be built in a small amount of time,
    usually a matter of person-days. Certainly you should be able to
    build several stories within one iteration.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Testable&lt;/b&gt;: you should be able to write tests to verify the
    software for this story works correctly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A common way to formulate stories is the "As a &#x2026; I want &#x2026; So
  that &#x2026;" form. The "As a" clause refers to who wants the story, "I want"
  describes what the functionality is, "so that" describes why they
  want this functionality. The "so that" part provides important
  context to understand to help get from what the customer think they
  want to providing what they actually need.&lt;/p&gt;

&lt;p&gt;Mike Cohn wrote what is &lt;a href="http://www.amazon.com/gp/product/0321205685?ie=UTF8&amp;amp;tag=martinfowlerc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321205685"&gt;now the standard
  book on writing user stories&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=martinfowlerc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321601912" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"/&gt;. To understand the roots of user
  stories in XP consider the &lt;a href="http://www.amazon.com/gp/product/0321278658?ie=UTF8&amp;amp;tag=martinfowlerc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321278658"&gt;white
  book&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=martinfowlerc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321601912" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"/&gt;, or the &lt;a href="/books/pxp.html"&gt;tasteful green
  book&lt;/a&gt;. In an earlier bliki entry I discuss why &lt;a href="http://martinfowler.com/bliki/UseCasesAndStories.html"&gt;UseCasesAndStories&lt;/a&gt; are different.&lt;/p&gt;
</content>
  </entry><entry>
    <title>Bliki: ComponentTest</title>
    <link href="http://martinfowler.com/bliki/ComponentTest.html"/>
    <updated>2013-04-22T10:41:00-04:00</updated>
    <id>http://martinfowler.com/bliki/ComponentTest.html</id>
    <category term="bliki"/>
    <content type="html">
&lt;p&gt;A component test is a test that limits the scope of the exercised
  software to a portion of the system under test. It is in contrast to
  a &lt;a href="http://martinfowler.com/bliki/BroadStackTest.html"&gt;BroadStackTest&lt;/a&gt; that's intended to exercise as much of the system
  as is reasonable.&lt;/p&gt;

&lt;p&gt;The difference between broad-stack and component tests is one of
  degree rather than an absolute difference. Component tests can be as
  large or small as you define your components. The essence of the
  difference is that component tests deliberately neglect parts of the
  system outside the scope of the test. This is usually done by
  manipulating the system through internal code interfaces, using
  tools like &lt;a href="/bliki/Xunit.html"&gt;xunit&lt;/a&gt; testing tools, and by using &lt;a href="http://martinfowler.com/bliki/TestDouble.html"&gt;TestDoubles&lt;/a&gt;
  to isolate the code under test from other components.&lt;/p&gt;

&lt;p&gt;Component tests are usually easier to write and maintain than
  broad-stack tests. They are also faster to run, since they only hit
  part of the code base. In theory a system with excellent component
  test coverage should be free of bugs, but in practice bugs like to
  lurk in the interactions between components. Therefore it's good to
  use the &lt;a href="http://martinfowler.com/bliki/TestPyramid.html"&gt;TestPyramid&lt;/a&gt; and combine a large quantity of
  component tests with a smaller amount of broad-stack tests.&lt;/p&gt;
</content>
  </entry><entry>
    <title>Bliki: BroadStackTest</title>
    <link href="http://martinfowler.com/bliki/BroadStackTest.html"/>
    <updated>2013-04-22T10:40:00-04:00</updated>
    <id>http://martinfowler.com/bliki/BroadStackTest.html</id>
    <category term="bliki"/>
    <content type="html">
&lt;p&gt;A broad-stack test is a test that exercises most of the parts of a
  large application. It's often referred to as an &lt;b&gt;end-to-end test&lt;/b&gt; or
  &lt;b&gt;full-stack test&lt;/b&gt;. It
  lies in contrast to a &lt;a href="http://martinfowler.com/bliki/ComponentTest.html"&gt;ComponentTest&lt;/a&gt;, which only exercises
  a well-defined part of a system.&lt;/p&gt;

&lt;p&gt;The difference between a broad-stack test and a component test is
  a continuum rather than a clear line. One area where bits can be missing from the
  fullness of the stack is how the test manipulates the application.
  Broad-stack tests often manipulate the application through a UI, such
  as testing web applications with tools like Selenium and Sahi.
  However a &lt;a href="http://martinfowler.com/bliki/SubcutaneousTest.html"&gt;SubcutaneousTest&lt;/a&gt; can also be a broad-stack test
  if it continues to exercise most of the rest of the software. To
  further limit the scope, a test that exercises an application
  through a service interface can also be considered to be broad-stack
  test of the the server.&lt;/p&gt;

&lt;p&gt;The other area where these tests don't cover the full breadth of
  the stack lies in connection to remote systems. Many people,
  including myself, think that tests that call remote systems are
  unnecessarily slow and brittle. It is usually better to use
  &lt;a href="http://martinfowler.com/bliki/TestDouble.html"&gt;TestDoubles&lt;/a&gt; for these remote systems and check the
  doubles with &lt;a href="http://martinfowler.com/bliki/IntegrationContractTest.html"&gt;IntegrationContractTests&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Broad-stack tests have the advantage of exercising the application
  with all its parts connected together and thus can find bugs in the
  interaction between components in the way that component tests
  cannot. However broad-stack tests also tend to harder to maintain and
  slower to run than component tests. As a result the &lt;a href="http://martinfowler.com/bliki/TestPyramid.html"&gt;TestPyramid&lt;/a&gt;
  suggests using fewer broad-stack tests.&lt;/p&gt;
</content>
  </entry><entry>
    <title>Bliki: JavascriptPromise</title>
    <link href="http://martinfowler.com/bliki/JavascriptPromise.html"/>
    <updated>2013-04-22T10:39:00-04:00</updated>
    <id>http://martinfowler.com/bliki/JavascriptPromise.html</id>
    <category term="bliki"/>
    <content type="html">
&lt;p&gt;In Javascript, promises are objects which represent the pending result of
  an asynchronous operation. You can use these to schedule further
  activity after the asynchronous operation has completed by supplying
  a callback.&lt;/p&gt;

&lt;pre&gt;
    aPromise = someAsyncOperation();
    aPromise.done(function() {
      // runs if all went well
    });
    aPromise.fail(function() {
      // runs if something went wrong
    });
    aPromise.always(function() {
      // runs either way
    }); &lt;/pre&gt;

&lt;p&gt;As well as providing a clear interface to schedule activity
    with asynchronous tasks, they also compose. &lt;/p&gt;

&lt;pre&gt;
      composedPromise = $.when(anAsyncFunction(), anotherAsyncFunction());
    &lt;/pre&gt;

&lt;p&gt;In this form (using jQuery promises) the composed promise will
    run its done handlers when all the passed promises succeed and its
    fail handlers if any of them fail.&lt;/p&gt;

&lt;p&gt;There are various forms of promises in javascript, annoyingly
    they have subtly different APIs and vocabularies. Probably the
    most used is &lt;a href="http://api.jquery.com/category/deferred-object/"&gt;jQuery's
    Deferred Object&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You also hear these concepts described as &lt;b&gt;futures&lt;/b&gt; and
    &lt;b&gt;deferreds&lt;/b&gt;. These concepts appear in many languages,
    not just javascript,  often with concurrency in mind as much as
    asynchrony.&lt;/p&gt;

&lt;p&gt;For more information I suggest getting a copy of Trevor
    Burnham's &lt;a href="http://pragprog.com/book/tbajs/async-javascript"&gt;Async JavaScript&lt;/a&gt;. If you
    want a web article, I found Burnham has a &lt;a href="http://net.tutsplus.com/tutorials/javascript-ajax/wrangle-async-tasks-with-jquery-promises/"&gt;short
    but useful article&lt;/a&gt; summarizing them. &lt;/p&gt;
</content>
  </entry><entry>
    <title>A short statement on the Adria Richards / Pycon incident</title>
    <link href="http://martinfowler.com/snips/201304150952.html"/>
    <updated>2013-04-15T09:52:00-04:00</updated>
    <id>tag:martinfowler.com,2013-04-15:A-short-statement-on-the-Adria-Richards---Pycon-incident</id>
    <category term=""/>
    <content type="html">&lt;p&gt;A few weeks ago I watched in depressed fascination at the internet explosion about Adria Richards and her reaction to offensive comments made in the audience of the Pycon conference. (If you would like more information on this incident I would suggest starting with the &lt;a href='http://www.guardian.co.uk/commentisfree/2013/mar/26/adria-richards-gets-rape-threats-for-speaking-out-about-workplace-sexism'&gt;Guardian article&lt;/a&gt;. ) Although I did contemplate writing something about it, I felt that I didn&amp;#8217;t have anything new or constructive to say. I don&amp;#8217;t really have anything terribly enlightening to say now, but I do feel the need to state my opinions.&lt;/p&gt;

&lt;p&gt;For me, the supreme issue here is the appalling internet attacks on Ms Richards, which included a barrage of viciousness that included rape threats, death threats, publishing her private information, and a DDOS attack on her employer. In the discussion over these events, many people have spent energy discussing such things as whether the jokes that triggered all this were truly offensive, and whether Ms Richards&amp;#8217;s reaction was appropriate. Even if we were to accept that her action, a tweet including a photograph of the jokers, was an overreaction which violated reasonable etiquette - any wrong that she had done is insignificant compared to the wrong heaped upon her by those attacks.&lt;/p&gt;

&lt;p&gt;I have long despaired of the &lt;a href='/bliki/NetNastiness.html'&gt;net nastiness&lt;/a&gt; that hangs over our profession and how its alienating atmosphere contributes to our &lt;a href='/bliki/DiversityImbalance.html'&gt;diversity imbalance&lt;/a&gt;. This incident sadly makes clear the misogynistic streak in the tech world and further deters women from speaking out against it. I have no solutions to offer, but will continue to listen to historically disadvantaged groups and hope to be able to support those trying to correct these problems. I know that many of my colleagues at ThoughtWorks are also eager to see this disease eradicated and for our profession to actually approach being the meritocracy it likes to think it is.&lt;/p&gt;

&lt;p&gt;I would also like to state a loud &amp;#8220;+1&amp;#8221; to Alexis Ohanian for &lt;a href='http://alexisohanian.com/dear-fellow-geeks-what-the-fuck'&gt;eloquently expressing much of my feelings&lt;/a&gt;.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 43</title>
    <link href="http://martinfowler.com/photos/43.html"/>
    <updated>2013-03-25T10:59:00-04:00</updated>
    <id>tag:martinfowler.com,2013-03-25:photostream-43</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/43.html'&gt;&lt;img src = 'http://martinfowler.com/photos/43.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Martindale, Cumbria, England&lt;/p&gt;
</content>
  </entry><entry>
    <title>Ruby Rogues Podcast on P of EAA</title>
    <link href="http://rubyrogues.com/097-rr-book-club-patterns-of-enterprise-architecture-with-martin-fowler/"/>
    <updated>2013-03-25T08:32:00-04:00</updated>
    <id>tag:martinfowler.com,2013-03-25:Ruby-Rogues-Podcast-on-P-of-EAA</id>
    <category term=""/>
    <content type="html">&lt;p&gt;The Ruby Rogues are a popular podcast where a regular panel discusses topics in the Ruby programming community. They have a regular book club and recently selected &lt;a href='http://martinfowler.com/books/eaa.html'&gt;P of EAA&lt;/a&gt; as their featured book. Consequently they asked me to appear as a guest on their show to discuss the book and the patterns that it describes, in particular the interesting relationship between these patterns and the Rails framework.&lt;/p&gt;</content>
  </entry><entry>
    <title>Retreaded: TypeInstanceHomonym</title>
    <link href="http://martinfowler.com/bliki/TypeInstanceHomonym.html"/>
    <updated>2013-03-19T09:25:00-04:00</updated>
    <id>tag:martinfowler.com,2013-03-19:Retreaded--TypeInstanceHomonym</id>
    <category term=""/>
    <content type="html">
&lt;p class = 'original'&gt;&lt;a href = 'http://martinfowler.com/bliki/Retread.html'&gt;Retread&lt;/a&gt; of post orginally made on 11 Jan 2007&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"'War and Peace' is a wonderful book.&lt;/p&gt;

&lt;p&gt;"Let me see... pity this book has such a tattered cover"&lt;/p&gt;

&lt;p class="quote-attribution"/&gt;
&lt;/blockquote&gt;

&lt;p&gt;Two sentences, each uses the word 'book'. We glance over
combinations like this
every day without remarking that the word 'book' means something
completely different in each of those sentences.&lt;/p&gt;

&lt;p&gt;In the first sentence 'book' refers to a literary work, one
that's been with us for over a hundred years. In the second sentence
'book' now refers to a physical object that's probably been around for
a lot less. I can easily destroy the latter in my fire, but the former
isn't touched by my flames and will doubtless last longer than I will.
I can put the former on my hard disk with many siblings that
collectively weigh less than the latter.&lt;/p&gt;

&lt;p&gt;This particular ambiguity is startlingly common in natural
language. Think about words like 'car', 'oak', and 'programmer'.
Trying to straighten this out can easily lead you into the darker
corners of semantics in philosophy. For the moment, I'll just explain
how I think about this.&lt;/p&gt;

&lt;p&gt;The word 'book' is a term that can refer to multiple
	concepts. The two sentences above illustrate two concepts that
	'book' refers to: the literary work and the physical copy. Since
	most of my readers are programmers I'll use a programming analogy
	and say that there are two distinct classes both of which are called
	'book'. We can disambiguate them by referring to them as the classes
	LiteraryWork and PhysicalCopy. When in the first sentence I
	say that 'War and Peace' is a book, I'm saying that 'War and Peace'
	is an instance of the class LiteraryWork. The second sentence refers
	to the properties of an instance of PhysicalCopy.&lt;/p&gt;

&lt;p&gt;These two concepts are not independent. Unlike a homonym like
right and right (the opposites of left and wrong), these two concepts
have a close relationship &lt;a href="#footnote-polysemy"&gt;[1]&lt;/a&gt;. A book [PhysicalCopy] carries on it a
rendering of the book [LiteraryWork]. So I might say that my War and
Peace has a tattered cover. Similarly my Subaru Legacy [instance of
physical car] has a relationship with Subaru Legacy [instance of car
model]. Indeed we might say that the type of my car is Subaru Legacy
[car model]. This kind of relationship is very common and is familiar to people
who do any kind of object or data modeling. You often see similar
structures involving things like Product and Product Type. I wouldn't
use the terms Book and Book Type, but it's fundamentally the same relationship.
&lt;/p&gt;

&lt;p&gt;Spend time modeling, or programming, in almost any domain and you'll
reach a point where you have to take some common term in that domain
and realize it denotes two separate concepts which mean separate
classes (or tables) with different names in your code. When you get
homonyms in your domain language, it's often because the terms are
	used differently in different contexts - what Eric
	Evans calls Bounded Contexts. As Jim Odell liked to point out: "Mary
	had a little lamb" means quite different things to a veterinarian than
	to a restaurateur. The trouble with the type-instance homonym is
	that it occurs even within very tight bounded contexts.&lt;/p&gt;

&lt;p&gt;My purpose here isn't to talk much further about modeling these
	kind of situations, that's quite a topic on its own, but to reflect
	on the ambiguity that this common type of homonym causes. The
	really interesting thing about this ambiguity is how &lt;i&gt;little&lt;/i&gt; trouble
	it causes. Humans seem to have no trouble at all switching between
	the multiple concepts and only rarely getting tripped up in the
	process. What's worse, if you actively try to use different terms in
	everyday conversation, it's nearly impossible to keep it up. I
	certainly tried, both in conversation and writing and quickly
	realized it was a lost cause. Not just did I not have the discipline
	but it made me sound like someone with some obscure mental
	condition. (The type-instance case isn't the only one with this
	property, as the phrase "go through the door we painted last
	week" suggests.)&lt;/p&gt;

&lt;p&gt;There's a particularly fascinating case of this in my own
	specialty of object-oriented design. We often talk about things like
	"add a method to an object". Yet, of course, we don't add methods to
	objects, we add them to classes. At some point in your career you've
	been the pedant who's pointed that out in a meeting. You've also
	effortlessly glossed over that point in countless conversations since.&lt;/p&gt;

&lt;p&gt;So I came to the conclusion that we absolutely have to be aware
of this homonym. We need to represent the concepts separately and with
different names in our software. But we shouldn't expect to make a
distinction between them in our conversation unless we're in a context
where there is a real danger of confusion, because most of the time
our brains resolve the ambiguity automatically.&lt;/p&gt;

&lt;p&gt;So what does this mean in the context of a
	&lt;a href="http://martinfowler.com/bliki/UbiquitousLanguage.html"&gt;UbiquitousLanguage&lt;/a&gt;? Firstly we have to do the modeling
	and realize we have different concepts (aware of the homonym). We
	then come up with names for the different concepts that we'll use in
	our Ubiquitous Language and thus in the software
	representation. When coming up with these names, I like to avoid the
	bare homonym: so I wouldn't use "book" in the library context,
	preferring something like 'Literary Work' and 'Physical Copy'. These
	disambiguating terms need to be comprehensible to the domain experts,
	as with anything else in the Ubiquitous Language. Therefore the
	domain experts need to be aware of the homonym and help come up with
	the new terms. We then use the new terms whenever we need the
	precision we gain. However we should be wary of trying to completely
	exorcise the homonym. It effectively becomes a synonym for each of
	the new terms. So if a domain person says "a book has authors" we
	might say "you mean a literary work there, right?" Remember that it
	will feel unnatural to everyone to not use the homonym term, so apply
	the precision with a light touch. Fortunately awareness is 90% of
	the battle here.&lt;/p&gt;

&lt;p&gt;A further consequence of this homonym is that you should always
	have your antenna scanning for it - particularly in the early days of
	working in a new domain. Usually it occurs in terms that are
	absolutely central to that domain - as with books and
	libraries. I've liked using informal class diagrams to model a
	ubiquitous language and I've found it does a good job of rooting out
	these kinds of homonyms.&lt;/p&gt;

&lt;div class="footnote-list"&gt;
&lt;div class="footnote-list-item" id="footnote-polysemy"&gt;
&lt;p&gt;&lt;span class="num"&gt;1: &lt;/span&gt;
      Jim White emailed me to let me know that in Linguistics, the
      term "polysemy" is sometimes used to indicate to indicate a word
      that has different, but related, meanings.
    &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p class="repost"&gt;reposted on 19 Mar 2013&lt;/p&gt;
</content>
  </entry><entry>
    <title>Video of Introduction to NoSQL Talk</title>
    <link href="http://www.youtube.com/watch?v=qI_g07C_Q5I"/>
    <updated>2013-03-04T14:18:00-05:00</updated>
    <id>tag:martinfowler.com,2013-03-04:Video-of-Introduction-to-NoSQL-Talk</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/img/mf-goto-2013.png' width = '100' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;Last fall &lt;a href='http://gotocon.com/aarhus-2012'&gt;goto Aarhus&lt;/a&gt; continued its ongoing interest in new approaches to data with a track gathering together various experiences with &lt;a href='http://martinfowler.com/nosql.html'&gt;NoSQL databases&lt;/a&gt;. I was asked to kick off this track with an introductory talk for an hour giving an outline to the important issues in thinking about NoSQL. I talk about the origins of NoSQL, forms of NoSQL data models, the way many NoSQL databases consider the problem of consistency, and the importance of Polyglot Persistence. I was pretty happy with how this turned out and think it&amp;#8217;s a good way to spend an hour if you want to start a journey in understanding NoSQL.&lt;/p&gt;

&lt;p&gt;There is also a video of a &lt;a href='http://www.youtube.com/watch?v=191kCkNya5Q&amp;amp;amp;list=PLEx5khR4g7PJmH05qNUmmo8WzSSaJIzLj&amp;amp;amp;index=7'&gt;panel of NoSQL vendors&lt;/a&gt; that I participated on. This wasn&amp;#8217;t a great discussion - lots of talking past each other, but maybe worth a look for people who are already into the NoSQL world.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 42</title>
    <link href="http://martinfowler.com/photos/42.html"/>
    <updated>2013-03-02T09:58:00-05:00</updated>
    <id>tag:martinfowler.com,2013-03-02:photostream-42</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/42.html'&gt;&lt;img src = 'http://martinfowler.com/photos/42.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Vieste, Puglia, Italy&lt;/p&gt;
</content>
  </entry><entry>
    <title>Bliki: PurposeOfEstimation</title>
    <link href="http://martinfowler.com/bliki/PurposeOfEstimation.html"/>
    <updated>2013-02-27T09:56:00-05:00</updated>
    <id>http://martinfowler.com/bliki/PurposeOfEstimation.html</id>
    <category term="bliki"/>
    <content type="html">
&lt;p&gt;My first encounter with agile software development was working
  with Kent Beck at the &lt;a href="/bliki/C3.html"&gt;dawn of Extreme Programming&lt;/a&gt;. One of the things
  that impressed me about that project was the way we went about
  planning. This included an approach to estimating which was both
  lightweight yet more effective than what I'd seen before. Over a
  decade has now passed, and now there is an argument amongst
  experienced agilsts about whether estimation is worth doing at all,
  or indeed is actively harmful &lt;a href="#footnote-anti-estimation-refs"&gt;[1]&lt;/a&gt;. I think that to answer this question
  we have to look to what purpose the estimates will be used for.&lt;/p&gt;

&lt;p&gt;A common scenario runs like this: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers are asked for (or given) estimates for upcoming work.&lt;/li&gt;

&lt;p&gt;People are optimists, so these estimates tend to be too low,
    even without pressure to make them low (and there's usually at
    least some implicit pressure)&lt;/p&gt;

&lt;li&gt;These tasks and estimates are turned into release plans
    tracked with burn-down charts&lt;/li&gt;

&lt;li&gt;Time and effort goes into monitoring progress against these
    plans. Everyone is upset when actuals end up being more
    than estimates. In effort to
    increase pace with the estimates, developers are told to sacrifice
    quality, &lt;a href="http://martinfowler.com/bliki/DesignStaminaHypothesis.html"&gt;which only makes things worse&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this narrative, effort put into estimates is, at best, waste
   - since "an estimate is a guess in a clean shirt" &lt;a href="#footnote-clean-shirt"&gt;[2]&lt;/a&gt;. Usually estimates end up being actively harmful as
   they encourage &lt;a href="http://martinfowler.com/bliki/FeatureDevotion.html"&gt;FeatureDevotion&lt;/a&gt;, a nasty condition where
   people start valuing ticking off features more than tracking the real
   outcome of the project.&lt;a href="#footnote-metrics"&gt;[3]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estimates also set expectations, and since estimates are usually
   too low, they set unrealistic expectations. &lt;a href="#footnote-expectations"&gt;[4]&lt;/a&gt; Any increase in time or
   reduction in features is then seen as a loss. Due to &lt;a href="http://en.wikipedia.org/wiki/Loss_aversion"&gt;loss-aversion&lt;/a&gt;,
   these losses have a magnified effect. &lt;a href="#footnote-loss-aversion"&gt;[5]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Faced with situations like this, it's easy to see how people
   turn their angry glares towards estimation. This leads to an
   increasing notion that anyone indulging in estimating is Not a
   True Agilist. Critics of agile say this means
   that agile development is about developers going off and doing vague
   stuff with promises that it'll be done when its done and you'll like it.&lt;/p&gt;

&lt;p&gt;I don't share this view of estimation as an inherently evil
   activity. If I'm asked if estimation is a Bad Thing my answer is
   the standard consultants' answer of "it depends". Whenever someone
   answers "it depends" the follow-up question is "upon what". To
   answer that we have to ask why we are doing estimation - as I like
   to say "if it's worth doing well, it's worth asking why on earth you're doing
   it at all".&lt;/p&gt;

&lt;p&gt;For me, &lt;b&gt;estimation is valuable when it helps you make
   a significant decision&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;My first example of an estimation-informed decision is allocation
   of resources. Organizations have a mostly fixed amount of money and
   people, and usually there are too many worthwhile things to do. So
   people are faced with decisions: do we do A or B? Faced with such a
   decision it's useful to know how much effort (and cost) each will
   involve. To make sensible decisions about what to do, you need to
   have a feel for both the cost and the benefits. &lt;/p&gt;

&lt;p&gt;Another example is to help with coordination. The blue team
   wants to release a new feature to their web site, but cannot do so
   until the green team builds a new service to give them crucial
   data. If the green team estimates they will be done in two months
   and the blue team estimates that it will take them a month to build
   the feature, then the blue team knows it's not worthwhile to start
   today. They can spend at least a month working on some other
   feature that can be released earlier.&lt;/p&gt;

&lt;p&gt;So whenever you're thinking of asking for an estimate, you
   should always clarify what decision that estimate is informing. If
   you can't find one, or the decision isn't very significant, then
   that's a signal that an estimate is wasteful. When you do find a
   decision then knowing it focuses the estimate because the decision
   provides context. It should also clarify the desired precision and
   accuracy. &lt;/p&gt;

&lt;p&gt;Understanding the decision may also lead you to alternative
   actions that may not involve an estimate. Maybe task A is so much
   more important than B that you don't need an estimate to put all
   your available energies into doing it first. Perhaps there is a way
   for blue team members to work with the green team to get the
   service built more quickly.&lt;/p&gt;

&lt;p&gt;Similarly, tracking against a plan should also be driven by how
   it informs decision making. My usual comment here is that a plan
   acts as a baseline to help assess changes - if we want to add a new
   feature, how do we fit it into the &lt;a href="http://martinfowler.com/bliki/FivePoundBag.html"&gt;FivePoundBag&lt;/a&gt;?
   Estimates can help us understand these trade-offs and thus decide
   how to respond to change. On a larger scale re-estimating a whole
   release can help us understand if the project as a whole is still
   the best use of our energy. A few years ago we had a year-long project
   that was cancelled after a re-estimate a couple of months in. We
   saw that as a success because the re-estimate suggested the project
   would take much longer than we had initially expected - early
   cancellation allowed the client to move resources to a better target.&lt;/p&gt;

&lt;p&gt;But remember with tracking against plans that estimates have a
   limited shelf life. I once remember a gnarly project manager say
   that plans and estmates were like a lettuce, good for a couple of
   days, rather wilty after a week, and unrecognizable after a couple
   of months.&lt;/p&gt;

&lt;p&gt;Many teams find that estimation provides a useful forcing
   function to get team members to talk to each other. Estimation
   meetings can help get better understanding of various ways to
   implement upcoming stories, future architectural directions, and
   design problems in the code base. In this case any output
   estimation numbers may be unimportant. There are many ways such
   conversations can happen, but estimation discussions can be
   introduced if these kinds of conversations aren't happening. &lt;a href="#footnote-thrown"&gt;[6]&lt;/a&gt;
   Conversely if you're thinking of stopping estimation, you need to
   ensure that any useful conversation during estimation still
   continues elsewhere. &lt;/p&gt;

&lt;p&gt;Go to any conference with agile leanings and you'll hear talks
   of teams that work effectively without estimation. Often this works
   because they, and their customers, understand that making estimates
   isn't going to affect significant decisions. An example is a small
   team working closely with business. If the broader business is
   happy with allocating some people to that business unit, then work
   can be carried out in priority order; often this is helped by the
   team breaking down work into small enough units. &lt;a href="#footnote-small-units"&gt;[7]&lt;/a&gt; A team's level in the &lt;a href="http://martinfowler.com/articles/agileFluency.html"&gt;agile fluency
   model&lt;/a&gt; plays a big role here. As teams progress they first
   struggle with estimation, then can get quite good at it, and then
   reach a point where they often don't need it. &lt;a href="#footnote-fluency"&gt;[8]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estimation is neither good or bad. If you can work effectively
   without estimation, then go ahead and do without it. If you think
   you need some estimates, then make sure you understand their role
   in decision making. If they are going to affect significant
   decisions then go ahead and make the best estimates you can. Above
   all be wary of anyone who tells you they are always needed, or
   never needed. Any arguments about use of estimation always defer to
   the agile principle that you should decide what are the right techniques for
   your particular context.&lt;/p&gt;

&lt;p&gt;This bliki post was republished by ThoughtWorks studios in a pdf
   ebook on &lt;a href="http://www.thoughtworks-studios.com/sites/default/files/resource/twebook-perspectives-estimation_1.pdf"&gt;how
   to do estimation on agile projects&lt;/a&gt;. This ebook contains
   half-a-dozen useful essays on doing estimation with both story
   points and story counting techniques.&lt;/p&gt;

&lt;div class="footnote-list"&gt;
&lt;div class="footnote-list-item" id="footnote-anti-estimation-refs"&gt;
&lt;p&gt;&lt;span class="num"&gt;1: &lt;/span&gt;
      A recent read is &lt;a href="http://pragprog.com/magazines/2013-02/estimation-is-evil"&gt;Estimation
      is Evil&lt;/a&gt; an excellent discussion by Ron Jeffries of the
      problems that estimates can cause.
    &lt;/p&gt;
&lt;/div&gt;

&lt;div class="footnote-list-item" id="footnote-clean-shirt"&gt;
&lt;p&gt;&lt;span class="num"&gt;2: &lt;/span&gt;
      I got this analogy from Ron Jeffries, although I don't have a
      written reference for it.
    &lt;/p&gt;
&lt;/div&gt;

&lt;div class="footnote-list-item" id="footnote-metrics"&gt;
&lt;p&gt;&lt;span class="num"&gt;3: &lt;/span&gt;
      This situation is an excellent example of an &lt;a href="/articles/useOfMetrics.html"&gt;inappropriate use of metrics&lt;/a&gt;.
    &lt;/p&gt;
&lt;/div&gt;

&lt;div class="footnote-list-item" id="footnote-expectations"&gt;
&lt;h3 class="head-text"&gt;4: Estimates and expectations&lt;/h3&gt;

&lt;p&gt;I particularly liked a comment on this by my colleague Angela
      Ferguson "the way that estimates set expectations is up to us -
      &lt;i&gt;it is poor project management (whether by project managers or
      other team members)&lt;/i&gt; that results in a client who thinks
      estimates are fixed, or that raw estimates = actual
      effort/duration"&lt;/p&gt;

&lt;p&gt;"I, in fact, try to practice delivery bad news on a weekly
      basis with my key client, even when things are travelling as
      expected ... 'so we're looking quite well on track now, but if
      we had discovered something that took longer than expected, or a
      requirement had blown up to be larger than expected, or we found
      something new and very important, what do you think the best
      course of action would be?' And then you explore the options -
      cut stories, add time, add capacity, etc. This means that when
      the expected unexpected thing happens (because we know it will
      happen), the conversation doesn't seem new and scary to the
      client."&lt;/p&gt;
&lt;/div&gt;

&lt;div class="footnote-list-item" id="footnote-loss-aversion"&gt;
&lt;p&gt;&lt;span class="num"&gt;5: &lt;/span&gt;
      Very roughly people feel twice as much pain for a loss as
      pleasure for a gain.
    &lt;/p&gt;
&lt;/div&gt;

&lt;div class="footnote-list-item" id="footnote-thrown"&gt;
&lt;p&gt;&lt;span class="num"&gt;6: &lt;/span&gt;
      If you do this an approach like &lt;a href="http://martinfowler.com/bliki/ThrownEstimate.html"&gt;ThrownEstimates&lt;/a&gt; can
      help the discussion move at a good pace.
    &lt;/p&gt;
&lt;/div&gt;

&lt;div class="footnote-list-item" id="footnote-small-units"&gt;
&lt;p&gt;&lt;span class="num"&gt;7: &lt;/span&gt;
      Of course breaking work down into small units requires some
      implicit estimation, but that's really a different animal to
      the more common explicit estimation activity.
    &lt;/p&gt;
&lt;/div&gt;

&lt;div class="footnote-list-item" id="footnote-fluency"&gt;
&lt;p&gt;&lt;span class="num"&gt;8: &lt;/span&gt;
      James Shore has a recent blog post that &lt;a href="http://www.jamesshore.com/Blog/Estimation-and-Fluency.html"&gt;details his observations&lt;/a&gt;
      about how fluency influences estimation practice. I think a
      similar analysis of practices at various stages of fluency could
      be very useful.
    &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="acknowledgements"&gt;
&lt;h2&gt;Acknowledgements&lt;/h2&gt;

  I repeat myself again in thanking varous ThoughtWorkers on internal
  lists for their comments. In particuarly I'd like to call out Angela
  Ferguson, Dave Pattinson, and Pat Kua. I should also thank James Shore for responding
  so rapidly and well for my question about the links to the fluency model.
&lt;/div&gt;
</content>
  </entry><entry>
    <title>Bliki: NoDBA</title>
    <link href="http://martinfowler.com/bliki/NoDBA.html"/>
    <updated>2013-02-25T10:47:00-05:00</updated>
    <id>http://martinfowler.com/bliki/NoDBA.html</id>
    <category term="bliki"/>
    <content type="html">
&lt;p&gt;In many organizations, it's expected that any persistent data
  will be stored in relational databases that are managed by a central
  database management group. There are various reasons for such
  central control, usually centered around using &lt;a href="http://martinfowler.com/bliki/IntegrationDatabase.html"&gt;IntegrationDatabases&lt;/a&gt;.
  Central data groups worry about keeping out malformed data, queries
  that can slow down important shared resources, and consistent data
  models across the enterprise.&lt;/p&gt;

&lt;p&gt;Worthy these aims may be, but one consequence of them is
  considerable ceremony about storing data. I often hear complaints
  about change orders that take weeks to add a column to a database.
  For modern application developers, used to short-cycle evolutionary
  design, such ceremony is too slow, not to mention too annoying.&lt;/p&gt;

&lt;p&gt;So application development groups tell me of using &lt;a href="http://martinfowler.com/nosql.html"&gt;NoSQL
  databases&lt;/a&gt; to do an end-run around the DBAs. It helps that they are
  using a "mere datastore" here, not a "proper database". That way the
  DBAs can be kept out of the loop, often not told or happy to not
  care. &lt;a href="#footnote-mongo"&gt;[1]&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://martinfowler.com/bliki/images/nodba/sketch.png"/&gt;
&lt;p&gt;There's both good and bad in all this. On the good side, this
  helps break what is often a troubling bottleneck for many
  organizations' application development. The sad divide between
  application developers and database professionals causes many
  problems, and the poor take up of many &lt;a href="http://martinfowler.com/books/refactoringDatabases.html"&gt;modern&lt;/a&gt;&lt;a href="http://martinfowler.com/articles/evodb.html"&gt;development&lt;/a&gt;&lt;a href="http://www.amazon.com/gp/product/B004UAALBO?ie=UTF8&amp;amp;tag=martinfowlerc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B004UAALBO"&gt;techniques&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=martinfowlerc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321601912" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"/&gt;
  in the DBA community stifles much development. &lt;a href="http://www.enterpriseintegrationpatterns.com/SharedDataBaseIntegration.html"&gt;Shared
  databases&lt;/a&gt; are a poor integration mechanism, and NoDBA
  development leads to a useful push towards &lt;a href="http://martinfowler.com/books/sdp.html"&gt;web services&lt;/a&gt; as the
  basis for integration. &lt;a href="#footnote-legacy"&gt;[2]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the negative side, using a technology for social reasons can
  often lead to a poor use of the technology. It's not hard to imagine
  people using a NoSQL database to avoid the DBAs when a relational
  &lt;a href="http://martinfowler.com/bliki/ApplicationDatabase.html"&gt;ApplicationDatabase&lt;/a&gt; would be a better choice. Data is
  often a vital asset, and bypassing DBA groups may also mean
  bypassing operations groups that know how to keep valuable data
  backed up and secure.&lt;/p&gt;

&lt;p&gt;The real answer, of course, is engagement with data professionals
  along the lines of the devops movement. It's the barriers between
  groups that cause much of the ceremony, few data groups are
  populated by devils. We've seen success from inviting DBAs to
  stakeholder meetings where they get to engage with the broad aims of an
  application. We've also had NoSQL projects where we've reached out to the
  DBAs, helped them learn about this new technology, and got valuable
  help in supporting data needs. So although the NoDBA strategy is
  sometimes appropriate, engagement is often better.&lt;/p&gt;

&lt;div class="footnote-list"&gt;
&lt;div class="footnote-list-item" id="footnote-mongo"&gt;
&lt;p&gt;&lt;span class="num"&gt;1: &lt;/span&gt;
      It seems particularly common to use MongoDB in this context
      citing MongoDB's ease of installation, configuration, and use.
    &lt;/p&gt;
&lt;/div&gt;

&lt;div class="footnote-list-item" id="footnote-legacy"&gt;
&lt;p&gt;&lt;span class="num"&gt;2: &lt;/span&gt;
      A large part of the slow response to change requests is that
      many incumbent databases are in essence complex legacy
      applications at the centre of a large web of dependencies. These
      databases are brittle and untested  (&lt;a href="http://martinfowler.com/bliki/Detestable.html"&gt;Detestable&lt;/a&gt;), so it's no surprise that the
      DBAs who look after them are wary of making changes. Such
      systems would make even the smartest developer gun-shy of making changes.
    &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="acknowledgements"&gt;
&lt;h2&gt;Acknowledgements&lt;/h2&gt;

  As usual, I found the discussion of the draft of this article on our
  internal list very interesting. I particularly raided David
  Pattinson's contribution.
&lt;/div&gt;
</content>
  </entry><entry>
    <title>photostream 41</title>
    <link href="http://martinfowler.com/photos/41.html"/>
    <updated>2013-02-23T14:35:00-05:00</updated>
    <id>tag:martinfowler.com,2013-02-23:photostream-41</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/41.html'&gt;&lt;img src = 'http://martinfowler.com/photos/41.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;William Ricketts Sanctuary, Victoria, Australia&lt;/p&gt;
</content>
  </entry><entry>
    <title>Talks on schemalessness, consistency in NoSQL, and economics of software design</title>
    <link href="http://www.youtube.com/watch?v=8kotnF6hfd8"/>
    <updated>2013-02-20T09:53:00-05:00</updated>
    <id>tag:martinfowler.com,2013-02-20:Talks-on-schemalessness--consistency-in-NoSQL--and-economics-of-software-design</id>
    <category term=""/>
    <content type="html">&lt;p&gt;A couple of weeks ago I dodged the historic snowstorm in New England by heading over to San Francisco to talk at a ThoughtWorks event. As is my habit these days I did a &lt;a href='http://martinfowler.com/bliki/SuiteOfTalks.html'&gt;suite of talks&lt;/a&gt;, covering how and when to use schemaless data structures, why consistency in NoSQL databases is more than just ACID versus BASE, and the economic justification for well-designed software.&lt;/p&gt;</content>
  </entry><entry>
    <title>An Appropriate Use of Metrics</title>
    <link href="http://martinfowler.com/articles/useOfMetrics.html"/>
    <updated>2013-02-19T09:41:00-05:00</updated>
    <id>tag:martinfowler.com,2013-02-19:An-Appropriate-Use-of-Metrics</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Like many of us, my colleague &lt;a href='http://thekua.com/atwork'&gt;Patrick Kua&lt;/a&gt; has seen a lot of use of metrics. Management love their metrics. The thinking goes something like this, &amp;#8220;We need a number to measure how we&#x2019;re doing. Numbers focus people and help us measure success.&amp;#8221; Whilst well intentioned, management by numbers unintuitively leads to problematic behavior and ultimately detracts from broader project and organizational goals. Metrics inherently aren&#x2019;t a bad thing; just often, inappropriately used. &lt;a href='http://martinfowler.com/articles/useOfMetrics.html'&gt;This essay&lt;/a&gt; demonstrates many of the issues caused by management&#x2019;s traditional use of metrics and offers an alternative to address these dysfunctions.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 40</title>
    <link href="http://martinfowler.com/photos/40.html"/>
    <updated>2013-02-19T09:28:00-05:00</updated>
    <id>tag:martinfowler.com,2013-02-19:photostream-40</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/40.html'&gt;&lt;img src = 'http://martinfowler.com/photos/40.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Block Island, RI&lt;/p&gt;
</content>
  </entry><entry>
    <title>ThoughtWorks gets rid of sales commissions</title>
    <link href="http://martinfowler.com/articles/eliminatingSalesCommissions/"/>
    <updated>2013-02-18T10:05:00-05:00</updated>
    <id>tag:martinfowler.com,2013-02-18:ThoughtWorks-gets-rid-of-sales-commissions</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Sales commissions are almost universally used in the software business, as in all business sectors. In this short infodeck I explore why commissions are popular, the problems with them, and the thinking in ThoughtWorks that led us to getting rid of them in 2013.&lt;/p&gt;</content>
  </entry><entry>
    <title>Bliki: TransparentCompilation</title>
    <link href="http://martinfowler.com/bliki/TransparentCompilation.html"/>
    <updated>2013-02-12T09:57:00-05:00</updated>
    <id>http://martinfowler.com/bliki/TransparentCompilation.html</id>
    <category term="bliki"/>
    <content type="html">
&lt;p&gt;Increasingly web developers are using languages like &lt;a href="http://coffeescript.org"&gt;CoffeeScript&lt;/a&gt; and &lt;a href="http://sass-lang.com"&gt;SCSS&lt;/a&gt; that compile to other textual source
  languages that execute in the browser. Such source-to-source
  compilers (also called transpilers &lt;a href="#footnote-transpiler"&gt;[1]&lt;/a&gt;) are not new, &lt;a href="http://en.wikipedia.org/wiki/Cfront"&gt;Cfront&lt;/a&gt; was widely used in
  the early days of C++ to generate target C code. But for me there is
  a difference that picks out CoffeeScript and SCSS as
  &lt;i&gt;transparent&lt;/i&gt; compilers&lt;/p&gt;

&lt;p&gt;With most compilers, you don't care very much about what is
  generated downstream. As long as it follows the semantics of the
  source language it's effectively a big lump of bits. But if you're
  going to generate JavaScript for the browser, this ignorance is hard
  to live with. Debugging environments are getting pretty nifty these
  days, but they are all in terms of the HTML/CSS/JavaScript triad. So
  it's important that you understand how your input language
  translates to its executable target.&lt;/p&gt;

&lt;p&gt;This constraint has a big effect upon the source language. You
  need to ensure that the output corresponds very clearly to the
  source. When I write this CoffeeScript&lt;/p&gt;

&lt;pre&gt;$(window).on 'touchTap', (event) -&amp;gt;
  window.touchPanel.tap(event)
&lt;/pre&gt;

&lt;p&gt;I can easily recognize the resulting JavaScript in my browser debugger&lt;/p&gt;

&lt;pre&gt;  $(window).on('touchTap', function(event) {
    return window.touchPanel.tap(event);
  });
&lt;/pre&gt;

&lt;p&gt;This remains true even for more complicated bits of CoffeeScript's
 transformation, such as turning&lt;/p&gt;

&lt;pre&gt;  runSetupBuild: (slide, positionClass) -&amp;gt;
    switch positionClass
      when 'current', 'next'
        @buildsFor(slide)?.setupBuild?.forwards()
        # ...
&lt;/pre&gt;

&lt;p&gt;into&lt;/p&gt;

&lt;pre&gt;    Infodeck.prototype.runSetupBuild = function(slide, positionClass) {
      var _ref, _ref1, _ref2, _ref3;
      switch (positionClass) {
        case 'current':
        case 'next':
          return (_ref = this.buildsFor(slide)) != null ? 
               (_ref1 = _ref.setupBuild) != null ? _ref1.forwards() : void 0 
               : void 0;
        /* ... */
&lt;/pre&gt;

&lt;p&gt;There's a lot going on in that transformation - but still the
 correspondence is pretty clear. If I need to debug in that code, I
 can easily see how it matches up to the source CoffeeScript. This is
 the essence of what makes the compilation process &lt;i&gt;transparent&lt;/i&gt; - the
 intention that you will work in the output language &lt;a href="#footnote-output"&gt;[2]&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;In contrast, there are source-to-source compilers that don't
 expect you to work in the output language, or see visibility of the
 output language as an unfortunate temporary mechanism. These can
 still be useful, and you see them in the javascript world with
 languages like Dart, GWT, and ClojureScript. It's this difference in
 &lt;i&gt;intention&lt;/i&gt; which is what separates the transparent style of
 transpilation from the more common approach. &lt;a href="#footnote-sourcemaps"&gt;[3]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The fact that you have to work at keeping the compilation
 transparent puts limits on what you can do in the source
 language. You don't have the degree of freedom in your language
 constructs that you get with a more unconstrained form of
 compilation. You have to follow the basic semantics of the target
 language, and keep to much the same program structure. These
 constraints haven't been widely talked about as a feature of language
 design.&lt;/p&gt;

&lt;p&gt;CoffeeScript illustrates that despite these constraints you can
 get a considerable difference in syntax between source and target
 languages. CoffeeScript feels much more like Python in syntax than
 the C-like JavaScript. Such syntactic variation isn't always the
 case, indeed there is an important subset of transparent compilation
 languages that strive to be a superset of the target language. SCSS
 and &lt;a href="http://www.typescriptlang.org"&gt;TypeScript&lt;/a&gt; fit into
 this category - any CSS expression is valid in SCSS. Using a superset
 language makes the correspondence even clearer and I feel works well
 for CSS where CSS's syntax works well but the language misses some
 handy features.&lt;/p&gt;

&lt;p&gt;Some say there's little point in using transparent
 compilation - if you have to understand the target code for
 debugging, what's the value in using a different source? For me, the
 value lies in a couple of directions. First off it's a way of getting
 useful language features that are missing in the target language.
 SCSS gives me handy capabilities such as variables (so I can say
 &lt;code&gt;$light-purple&lt;/code&gt; instead of &lt;code&gt;#f8c8fe&lt;/code&gt; and change
 it in only one place should I want to tweak it).&lt;/p&gt;

&lt;p&gt;More drastic syntax changes, such as CoffeeScript, require
 stronger justification. One of my colleagues put it very well after finishing a
 project. He's an experienced JavaScript programmer and the project
 wrote well-disciplined JavaScript from the beginning. As a result he
 was very happy with the quality of the JavaScript codebase. However
 he still concluded that they would have been better off working in
 CoffeeScript, because it's easier to understand what is going on when
 you're reading the CoffeeScript, even when you're debugging in the
 generated JavaScript code. The transformation may not look like such
 a big deal for small fragments, such as those I show above. But it
 makes a big difference once you're up to hundreds of lines of code,
 let alone beyond.&lt;a href="#footnote-recommend"&gt;[4]&lt;/a&gt;&lt;/p&gt;

&lt;div class="footnote-list"&gt;
&lt;div class="footnote-list-item" id="footnote-transpiler"&gt;
&lt;p&gt;&lt;span class="num"&gt;1: &lt;/span&gt;
     Hunting around usage, it seem to me that the the term
     "transpiler" is used as a synonym for source-to-source compiler.
     So transpilers may or may not be transparent. I've also seen the
     term "source-to-source translation" used equivalently to
     "source-to-source compilation".
   &lt;/p&gt;
&lt;/div&gt;

&lt;div class="footnote-list-item" id="footnote-output"&gt;
&lt;p&gt;&lt;span class="num"&gt;2: &lt;/span&gt;
     Even with opaque compilation there are cases when people study
     the outputs. Occasionally there are odd behaviors or bugs that do
     require you to dig into the compiler outputs. Some programmers
     like to understand what the compiler is doing, although that's
     got less common as compilers and virtual machines get more
     sophisticated. But such activity is an exception.
   &lt;/p&gt;
&lt;/div&gt;

&lt;div class="footnote-list-item" id="footnote-sourcemaps"&gt;
&lt;p&gt;&lt;span class="num"&gt;3: &lt;/span&gt;
     It's interesting to see whether the development of &lt;a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/"&gt;sourcemaps&lt;/a&gt;
     will shift languages like coffeescript away from transparency.
   &lt;/p&gt;
&lt;/div&gt;

&lt;div class="footnote-list-item" id="footnote-recommend"&gt;
&lt;p&gt;&lt;span class="num"&gt;4: &lt;/span&gt;
     I've only done a few hundred lines of coffeescript while working
     on my infodecks, but I agree with him and will continue to use
     coffeescript for any non-trivial amounts of javascript.
   &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry><entry>
    <title>photostream 39</title>
    <link href="http://martinfowler.com/photos/39.html"/>
    <updated>2013-02-01T09:54:00-05:00</updated>
    <id>tag:martinfowler.com,2013-02-01:photostream-39</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/39.html'&gt;&lt;img src = 'http://martinfowler.com/photos/39.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Ross Island, Andaman Islands, India&lt;/p&gt;
</content>
  </entry><entry>
    <title>Infodeck on Big Data</title>
    <link href="http://martinfowler.com/articles/bigData/"/>
    <updated>2013-01-29T10:36:00-05:00</updated>
    <id>tag:martinfowler.com,2013-01-29:Infodeck-on-Big-Data</id>
    <category term=""/>
    <content type="html">&lt;p&gt;&amp;#8220;Big Data&amp;#8221; has leapt rapidly into one of the most hyped terms in our industry, yet the hype should not blind people to the fact that this is a genuinely important shift about the role of data in the world. The amount, speed, and value of data sources is rapidly increasing. Data management has to change in five broad areas: extraction of data from a wider range of sources, changes to the logistics of data management with new database and integration approaches, the use of agile principles in running analytics projects, an emphasis on techniques for data interpretation to separate signal from noise, and the importance of well-designed visualization to make that signal more comprehensible. Summing up this means we don&amp;#8217;t need big analytics projects, instead we want the new data thinking to permeate our regular work. &lt;a href='http://martinfowler.com/articles/bigData'&gt;(go to the infodeck)&lt;/a&gt;&lt;/p&gt;</content>
  </entry><entry>
    <title>Speaking in San Francisco on Feb 7th</title>
    <link href="http://www.thoughtworks.com/events/software-design-21st-century-and-big-data"/>
    <updated>2013-01-22T16:53:00-05:00</updated>
    <id>tag:martinfowler.com,2013-01-22:Speaking-in-San-Francisco-on-Feb-7th</id>
    <category term=""/>
    <content type="html">&lt;p&gt;I&amp;#8217;ll be giving a talk in San Francisco on February 7th. I don&amp;#8217;t know exactly what my topics will be, but it will be a &lt;a href='http://martinfowler.com/bliki/SuiteOfTalks.html'&gt;Suite of Talks&lt;/a&gt;. Also on the program is my colleague &lt;a href='http://theagilist.com'&gt;Ken Collier&lt;/a&gt;, who will be talking about whether Big Data is any more than a load of old hype.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 38</title>
    <link href="http://martinfowler.com/photos/38.html"/>
    <updated>2013-01-10T11:00:00-05:00</updated>
    <id>tag:martinfowler.com,2013-01-10:photostream-38</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/38.html'&gt;&lt;img src = 'http://martinfowler.com/photos/38.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Ironbridge, England&lt;/p&gt;
</content>
  </entry><entry>
    <title>Schemaless Data Structures</title>
    <link href="http://martinfowler.com/articles/schemaless/"/>
    <updated>2013-01-07T11:00:00-05:00</updated>
    <id>tag:martinfowler.com,2013-01-07:Schemaless-Data-Structures</id>
    <category term=""/>
    <content type="html">&lt;p&gt;In recent years, there&amp;#8217;s been an increasing amount of talk about the advantages of schemaless data. Being schemaless is one of the main reasons for interest in NoSQL databases. This infodeck explores the subtleties involved in schemalessness, both with respect to databases and in-memory data structures. These subtleties are present both in the meaning of schemaless and in the advantages and disadvantages of using a schemaless approach.&lt;/p&gt;</content>
  </entry><entry>
    <title>Activity Update</title>
    <link href="http://martinfowler.com/snips/201212181413.html"/>
    <updated>2012-12-18T14:13:00-05:00</updated>
    <id>tag:martinfowler.com,2012-12-18:Activity-Update</id>
    <category term=""/>
    <content type="html">&lt;p&gt;My site hasn&amp;#8217;t seen any updates for over a month, so I thought I&amp;#8217;d make a quick note of what I&amp;#8217;ve been up to. On the whole I&amp;#8217;m not someone who tries to make a regular schedule of site updates - I write as I have the time, energy, and inspiration to do so. Regular articles were important in the days of magazines, but in the online world with notifications via RSS and twitter, I don&amp;#8217;t see any reason to tie myself to a schedule.&lt;/p&gt;

&lt;p&gt;Usually when I go quiet for a few weeks, it&amp;#8217;s due to travel. When I&amp;#8217;m on the grind of speaking I&amp;#8217;m too busy, tired, and grumpy to do any writing. But that&amp;#8217;s not the reason for my recent quiet period, as I&amp;#8217;ve been happily at home. Indeed I&amp;#8217;ve been working steadily at a couple more &lt;a href='http://martinfowler.com/bliki/Infodeck.html'&gt;infodecks&lt;/a&gt;, and this involves both working on the content of the infodecks and on the toolchain to build them. I&amp;#8217;ve added more features to the toolchain in addition to what I had for the &lt;a href='http://martinfowler.com/articles/multiMobile'&gt;multi-mobile deck&lt;/a&gt;, which should provide a more dynamic experience. I&amp;#8217;ve been enjoying the mix of writing and building tools to support that writing - and I expect to be publishing these infodecks after the Christmas/New Year slowdown.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 37</title>
    <link href="http://martinfowler.com/photos/37.html"/>
    <updated>2012-11-16T09:31:00-05:00</updated>
    <id>tag:martinfowler.com,2012-11-16:photostream-37</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/37.html'&gt;&lt;img src = 'http://martinfowler.com/photos/37.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Vancouver, BC&lt;/p&gt;
</content>
  </entry><entry>
    <title>40% off Signature Series Promotion</title>
    <link href="http://martinfowler.com/snips/201211150922.html"/>
    <updated>2012-11-15T09:22:00-05:00</updated>
    <id>tag:martinfowler.com,2012-11-15:40--off-Signature-Series-Promotion</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Addison-Wesley is doing a &lt;a href='http://www.informit.com/promotions/promotion.aspx?promo=138302'&gt;promotion&lt;/a&gt; on books in their signature series. This includes all the books in &lt;a href='http://martinfowler.com/books/'&gt;my signature series&lt;/a&gt;, but also the other signers: Kent Beck and Mike Cohn. The deal is that if you buy two or more signature series books from &lt;a href='http://www.informit.com'&gt;InformIT&lt;/a&gt; you get 40% off. The offer is good for physical and electronic books and is on until the end of 2012. To get the discount, use the discount code AWSS2012 during check-out. All my books pages have links to the relevant InformIT page - they do a &lt;a href='http://martinfowler.com/books/buying.html'&gt;good arrangement for multi-format ebooks&lt;/a&gt;.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 36</title>
    <link href="http://martinfowler.com/photos/36.html"/>
    <updated>2012-11-04T10:38:00-05:00</updated>
    <id>tag:martinfowler.com,2012-11-04:photostream-36</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/36.html'&gt;&lt;img src = 'http://martinfowler.com/photos/36.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Aurora, NY, Finger Lakes&lt;/p&gt;
</content>
  </entry><entry>
    <title>New ThoughtWorks Technology Radar</title>
    <link href="http://www.thoughtworks.com/radar"/>
    <updated>2012-10-24T10:14:00-04:00</updated>
    <id>tag:martinfowler.com,2012-10-24:New-ThoughtWorks-Technology-Radar</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/snips/tw-radar.jpg' width = '68' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;The ThoughtWorks TAB has released the latest edition of our &lt;a href='http://www.thoughtworks.com/radar'&gt;technology radar&lt;/a&gt;. As usual this provides our current view on what technologies are interesting, generated by a mix of our technological curiosity and project experience. I&amp;#8217;ve also &lt;a href='http://martinfowler.com/articles/radar-faq.html'&gt;added a FAQ&lt;/a&gt; on my site to answer common questions about radar, such as who on earth the ThoughtWorks TAB is.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 35</title>
    <link href="http://martinfowler.com/photos/35.html"/>
    <updated>2012-10-19T15:01:00-04:00</updated>
    <id>tag:martinfowler.com,2012-10-19:photostream-35</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/35.html'&gt;&lt;img src = 'http://martinfowler.com/photos/35.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Chinon, France&lt;/p&gt;
</content>
  </entry><entry>
    <title>Calatrava</title>
    <link href="http://martinfowler.com/snips/201210151007.html"/>
    <updated>2012-10-15T10:07:00-04:00</updated>
    <id>tag:martinfowler.com,2012-10-15:Calatrava</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/snips/calatrava-logo.png' width = '150' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;A couple of months ago I wrote an &lt;a href='http://martinfowler.com/articles/multiMobile'&gt;infodeck about developing mobile applications for multiple devices&lt;/a&gt;. A core point of the deck is that for the best user-experience you need several native applications, but this is expensive. To reduce cost a mobile web application works on all suitable devices, but a web-app limits your user-interface. The result is an unavoidable choice between user-experience and cost.&lt;/p&gt;

&lt;p&gt;While we can&amp;#8217;t make that trade-off go away, we can turn a binary choice into a more graduated scale by developing hybrid applications that mix web and native technologies. At ThoughtWorks we&amp;#8217;ve been pursuing this path on various client projects, with some success. We&amp;#8217;ve now developed enough understanding on how to approach a hybrid application to make it worth sharing some code, so we recently released Calatrava, which is a framework to enable this web-native interoperation.&lt;/p&gt;

&lt;p&gt;Calatrava is suitable for applications with significant client-side domain logic and when the application a channel for your product rather than the product itself. It is not suitable if most of your code is UI code (such as a game) or if a web app provides a sufficiently good user-experience. Calatrava is probably most valuable when you want to pursue an incremental release strategy, such as &lt;a href='http://martinfowler.com/articles/mobileImplStrategy.html#cover-your-bases'&gt;cover-your-bases&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For more information look at the &lt;a href='http://calatrava.github.com/'&gt;calatrava home page on github&lt;/a&gt;, and the &lt;a href='http://overwatering.org/blog/2012/10/announcing-calatrava/'&gt;launch announcement by maintainer Giles Alexander&lt;/a&gt;. There&amp;#8217;s also an overview on a &lt;a href='http://martinfowler.com/articles/multiMobile/#calatrava'&gt;single infodeck slide&lt;/a&gt;.&lt;/p&gt;</content>
  </entry><entry>
    <title>Appearing on Hanselminutes with Jez</title>
    <link href="http://www.hanselminutes.com/339/continuous-delivery-with-jez-humble-and-martin-fowler"/>
    <updated>2012-10-11T08:25:00-04:00</updated>
    <id>tag:martinfowler.com,2012-10-11:Appearing-on-Hanselminutes-with-Jez</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Last week I was at the &lt;a href='http://gotocon.com/aarhus-2012/'&gt;goto conference&lt;/a&gt; in Aarhus. Also there was &lt;a href='http://www.hanselman.com/blog/'&gt;Scott Hanselman&lt;/a&gt;, and wherever Scott goes, he takes his portable recording studio and his titanium arm-twister. So before long I found myself in a quiet room with him and Jez Humble to &lt;a href='http://www.hanselminutes.com/339/continuous-delivery-with-jez-humble-and-martin-fowler'&gt;talk about Continuous Delivery&lt;/a&gt;.&lt;/p&gt;</content>
  </entry><entry>
    <title>Key Points from NoSQL Distilled</title>
    <link href="http://martinfowler.com/articles/nosqlKeyPoints.html"/>
    <updated>2012-09-12T10:22:00-04:00</updated>
    <id>tag:martinfowler.com,2012-09-12:Key-Points-from-NoSQL-Distilled</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/nosql.jpg' width = '100' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;One the aspects of our design for NoSQL Distilled is that most chapters finish with a section of key points - short bullets that summarize the content of the chapter. I&amp;#8217;ve now turned these into a web page that thus provides a summary of the key points of the book - which can act is a quick refresher for those that have the book and an indication of the content of the book for those who are contemplating buying it.&lt;/p&gt;</content>
  </entry><entry>
    <title>Modern Mocking Tools and Black Magic</title>
    <link href="http://martinfowler.com/articles/modernMockingTools.html"/>
    <updated>2012-09-10T09:15:00-04:00</updated>
    <id>tag:martinfowler.com,2012-09-10:Modern-Mocking-Tools-and-Black-Magic</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Modern mocking tools, such as JMockIt, have become extremely capable of interposing themselves into difficult places. As such they are able to deal with increasingly awkward legacy situations, allowing you to introduce seams to help get a code base under test. But in this article my colleague Brett Schuchert explores a dark side of this capability, one that casts serious concerns about using them in many situations.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 34</title>
    <link href="http://martinfowler.com/photos/34.html"/>
    <updated>2012-09-08T14:47:00-04:00</updated>
    <id>tag:martinfowler.com,2012-09-08:photostream-34</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/34.html'&gt;&lt;img src = 'http://martinfowler.com/photos/34.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Malhamdale, Yorkshire, England&lt;/p&gt;
</content>
  </entry><entry>
    <title>Proof-of-concept of using Google's BigQuery</title>
    <link href="http://martinfowler.com/articles/bigQueryPOC.html"/>
    <updated>2012-09-04T07:02:32-04:00</updated>
    <id>tag:martinfowler.com,2012-09-04:Proof-of-concept-of-using-Google-s-BigQuery</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/articles/ian-cartwright.jpg' width = '100' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;My colleague Ian Cartwright has contributed a short write-up of a week-long proof-of-concept project we did with AutoTrader to assess the viability of using Google&amp;#8217;s BigQuery technology. The software produced 7-10 second response times for a dataset of 750 million rows. The article describes what they did and summarizes the lessons they learned from the experience.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 33</title>
    <link href="http://martinfowler.com/photos/33.html"/>
    <updated>2012-08-25T09:31:00-04:00</updated>
    <id>tag:martinfowler.com,2012-08-25:photostream-33</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/33.html'&gt;&lt;img src = 'http://martinfowler.com/photos/33.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Mount Champlain, Acadia N.P., ME&lt;/p&gt;
</content>
  </entry><entry>
    <title>NoSQL Distilled ebook from InformIT</title>
    <link href="http://martinfowler.com/snips/201208241010.html"/>
    <updated>2012-08-24T10:10:00-04:00</updated>
    <id>tag:martinfowler.com,2012-08-24:NoSQL-Distilled-ebook-from-InformIT</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/nosql.jpg' width = '100' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;InformIT now has ebooks available, so this means that &lt;a href='http://martinfowler.com/books/nosql.html'&gt;NoSQL Distilled&lt;/a&gt; is now available in all ebook formats. As all the formats get complicated, I&amp;#8217;ve written a &lt;a href='http://martinfowler.com/books/buying.html'&gt;brief note on some options for buying paper and electronic books&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Some people have asked about when the paper books will reach other countries, including Amazon&amp;#8217;s non-US stores. I&amp;#8217;m afraid I have no information on that.&lt;/p&gt;</content>
  </entry><entry>
    <title>Speaking in Aarhus and Berlin</title>
    <link href="http://martinfowler.com/snips/201208221547.html"/>
    <updated>2012-08-22T15:47:00-04:00</updated>
    <id>tag:martinfowler.com,2012-08-22:Speaking-in-Aarhus-and-Berlin</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/bliki/images/goto2011/aarhus.jpg' width = '160' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;Next month I&amp;#8217;ll be spending a chunk of time in Europe. I have two talks lined up. Firstly I&amp;#8217;ll be turning up in Aarhus at &lt;a href='http://gotocon.com/aarhus-2012/'&gt;my favorite conference&lt;/a&gt; where I&amp;#8217;ll be kicking off the NoSQL track on October 3rd with &lt;a href='http://gotocon.com/aarhus-2012/presentation/Introduction%20to%20NoSQL'&gt;an introduction to NoSQL&lt;/a&gt; - roughly based on material from &lt;a href='http://martinfowler.com/books/nosql.html'&gt;NoSQL Distilled&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then, on October 4, I&amp;#8217;ll be &lt;a href='http://www.thoughtworks.com/events/martin-fowler-jez-humble-berlin'&gt;speaking in Berlin at a ThoughtWorks event&lt;/a&gt; with &lt;a href='http://continuousdelivery.com/'&gt;Jez Humble&lt;/a&gt;. For that I&amp;#8217;ll do one of my usual &lt;a href='http://martinfowler.com/bliki/SuiteOfTalks.html'&gt;Suites of Talks&lt;/a&gt;. There will be some NoSQL in the suite, but probably mixed with some other material too.&lt;/p&gt;</content>
  </entry><entry>
    <title>Best-Selling SQL book</title>
    <link href="http://martinfowler.com/snips/201208221420.html"/>
    <updated>2012-08-22T14:20:00-04:00</updated>
    <id>tag:martinfowler.com,2012-08-22:Best-Selling-SQL-book</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/snips/amazon1.png' width = '150' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;I love the irony.&lt;/p&gt;</content>
  </entry><entry>
    <title>NoSQL Guide Page</title>
    <link href="http://martinfowler.com/nosql.html"/>
    <updated>2012-08-22T10:54:00-04:00</updated>
    <id>tag:martinfowler.com,2012-08-22:NoSQL-Guide-Page</id>
    <category term=""/>
    <content type="html">&lt;p&gt;I&amp;#8217;ve added a &lt;a href='http://martinfowler.com/nosql.html'&gt;guide page on NoSQL&lt;/a&gt; to martinfowler.com. I&amp;#8217;ll use this to collect together links to material related to NoSQL, Polyglot Persistence, and other &lt;a href='http://www.infoq.com/presentations/The-Evolving-Panorama-of-Data'&gt;changes in the panorama of data&lt;/a&gt;.&lt;/p&gt;</content>
  </entry><entry>
    <title>NoSQL Distilled Available on Kindle</title>
    <link href="http://martinfowler.com/snips/201208221033.html"/>
    <updated>2012-08-22T10:33:00-04:00</updated>
    <id>tag:martinfowler.com,2012-08-22:NoSQL-Distilled-Available-on-Kindle</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/nosql.jpg' width = '100' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;Amazon now has &lt;a href='http://martinfowler.com/books/nosql.html'&gt;NoSQL Distilled&lt;/a&gt; available on Kindle, so those of you who prefer that format can now get an instant fix of our deathless prose. If you prefer an epub ebook, then InformIT will have that soon, but they are still showing pre-order. I don&amp;#8217;t know why the ebook versions have been so laggardly - but I know enough to blame computers.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 32</title>
    <link href="http://martinfowler.com/photos/32.html"/>
    <updated>2012-08-18T10:33:00-04:00</updated>
    <id>tag:martinfowler.com,2012-08-18:photostream-32</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/32.html'&gt;&lt;img src = 'http://martinfowler.com/photos/32.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Jackson Lake Lodge, Grand Tetons N.P., WY&lt;/p&gt;
</content>
  </entry><entry>
    <title>NoSQL Distilled Now Available</title>
    <link href="http://martinfowler.com/snips/201208171335.html"/>
    <updated>2012-08-17T13:35:00-04:00</updated>
    <id>tag:martinfowler.com,2012-08-17:NoSQL-Distilled-Now-Available</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/nosql.jpg' width = '100' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;It&amp;#8217;s now August 17th, and &lt;a href='http://martinfowler.com/books/nosql.html'&gt;NoSQL Distilled&lt;/a&gt; is now officially available. My copy arrived a day or two ago, and it&amp;#8217;s good to see it in paper. Amazon has it available for order for physical copy. Currently they aren&amp;#8217;t showing it as available for Kindle, but that should change in the next few days. InformIT is still showing a pre-order status, but again that should change soon.&lt;/p&gt;

&lt;p&gt;It also seems I made a mistake earlier with the page count, which actually is only 152 pages. So we only busted our budget by two pages after all.&lt;/p&gt;

&lt;p&gt;(I&amp;#8217;ve updated my &lt;a href='http://martinfowler.com/books'&gt;books pages&lt;/a&gt; to add a new page for this book.)&lt;/p&gt;</content>
  </entry><entry>
    <title>Mountain Lion and Nokogiri</title>
    <link href="http://martinfowler.com/snips/201208142012.html"/>
    <updated>2012-08-14T20:12:00-04:00</updated>
    <id>tag:martinfowler.com,2012-08-14:Mountain-Lion-and-Nokogiri</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Today was the day I attempted the upgrade to Mountain Lion. Upgrading all the way from Snow Leopard (long story). The tedious first step is making sure I have backups, usually multiple backups, in addition to the ones I keep by default. Computers hate me, so I&amp;#8217;ve learned to be paranoid.&lt;/p&gt;

&lt;p&gt;My first serious hitch was with Aperture. I&amp;#8217;d bought a download ages ago, when the route was to download a trial version and buy a product key. I still have the key, but there&amp;#8217;s no place to download the trial version from. Fortunately there was a very helpful man on Apple&amp;#8217;s telephone support who solved that one. +1 to him for being so helpful, but -2 for Apple for making it hard in the first place.&lt;/p&gt;

&lt;p&gt;My more serious trouble was with Nokogiri, ruby&amp;#8217;s XML processing library. Since almost all my website is XML transformed to HTML via Nokogiri and Ruby, this is rather crucial to me. But I had no end of trouble finding some way to get Nokogiri to install and work. Looking out on the web there are several pages of advice, with different combinations of animals to sacrifice in various orders.&lt;/p&gt;

&lt;p&gt;In the end I got it working, but not in such a way that I have a confident trail for others to follow. I installed XCode command line tools, later the full XCode itself (don&amp;#8217;t know if that was a factor). I initially used homebrew for supporting libraries but without success. I tried using rvm, but it failed (and I backed it out). In the end I installed libxml2 and libxslt using Macports and got it all working on the installed ruby 1.8.7.&lt;/p&gt;

&lt;p&gt;I can only hope that this is just early days of Mountain Lion, but the situation is really too messy. It&amp;#8217;s very troubling that the default install of ruby is still the elderly 1.8.7. I do need to share my scripts from time to time with others who are not active rubyists. It would be nice if there was a simpler installation process for them than my worry-ridden afternoon. I find myself pining for the days of the one-click windows install.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 31</title>
    <link href="http://martinfowler.com/photos/31.html"/>
    <updated>2012-08-11T11:19:00-04:00</updated>
    <id>tag:martinfowler.com,2012-08-11:photostream-31</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/31.html'&gt;&lt;img src = 'http://martinfowler.com/photos/31.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Yellowstone N.P., WY&lt;/p&gt;
</content>
  </entry><entry>
    <title>Your Path through Agile Fluency</title>
    <link href="http://martinfowler.com/articles/agileFluency.html"/>
    <updated>2012-08-09T08:58:00-04:00</updated>
    <id>tag:martinfowler.com,2012-08-09:Your-Path-through-Agile-Fluency</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/articles/images/agileFluency/path.png' width = '150' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;&lt;a href='http://futureworksconsulting.com/'&gt;Diana Larsen&lt;/a&gt; and &lt;a href='http://jamesshore.com/'&gt;James Shore&lt;/a&gt; were actively involved with agile methods before they were fashionable. They have spent many years helping organizations explore agile development and I&amp;#8217;ve always found their opinions worth listening to. When I get requests to review articles I rarely have time to read them, but a recent request by this pair piqued my interest.&lt;/p&gt;

&lt;p&gt;When I read their draft on the stages of agile fluency, I immediately offerred to publish it on my site. The article looks at how teams pass through four stages of fluency with agile methods. Each stage brings benefits, but demands investment. Not all teams should go through all the stages. The model they&amp;#8217;ve come up with is nicely simple and resonates with tales told by my colleagues. I think it provides a good framework for thinking about the style of agile development you are at and where you want to be.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 30</title>
    <link href="http://martinfowler.com/photos/30.html"/>
    <updated>2012-07-29T10:17:00-04:00</updated>
    <id>tag:martinfowler.com,2012-07-29:photostream-30</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/30.html'&gt;&lt;img src = 'http://martinfowler.com/photos/30.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Yellowstone N.P., WY&lt;/p&gt;
</content>
  </entry><entry>
    <title>Retreaded: RigorousAgile</title>
    <link href="http://martinfowler.com/bliki/RigorousAgile.html"/>
    <updated>2012-07-26T15:24:00-04:00</updated>
    <id>tag:martinfowler.com,2012-07-26:Retreaded--RigorousAgile</id>
    <category term=""/>
    <content type="html">
&lt;p class = 'original'&gt;&lt;a href = 'http://martinfowler.com/bliki/Retread.html'&gt;Retread&lt;/a&gt; of post orginally made on 29 May 2005&lt;/p&gt;

&lt;p&gt;I often run into a complaint that agile methods don't have a
	rigorous definition. The complainer may talk about how this means
	that you can't tell if a particular team is using an agile method or
	not. They may also say that this makes it hard to teach people how
	to do agile methods - what's the curriculum?&lt;/p&gt;

&lt;p&gt;To some degree I do feel the pain of this complaint - but
	I accept there is no cure. This lack of rigorousness is part of the
	defining nature of agile methods, part of its core philosophy.&lt;/p&gt;

&lt;p&gt;One of the fundamental problems of thought processes in general -
and of software development in particular - is the very varied nature
of the settings. Different kinds of systems have different kinds of
pressures and forces, which makes it very difficult to come up with a
rigorous statement of what to do that's sufficient to cover them. This
effect is compounded by the fact that software development is such a
people-oriented activity, and people are naturally &lt;a href="http://alistair.cockburn.us/Characterizing+people+as+non-linear%2c+first-order+components+in+software+development"&gt;inconsistent

and highly variable&lt;/a&gt;. The conclusion that agilists made from this
is that's its not effective to try and bind software development to a
rigorous process, because that's ignoring the essential nature of the
primary (human) components that will execute that process.&lt;/p&gt;

&lt;p&gt;(It's probably because our profession is to work with computers
	is what leads us to want to program human systems the same way that
	we program computers - despite the fact that they are so different.)&lt;/p&gt;

&lt;p&gt;The upshot of all this is that agile methods fundamentally expect
	teams to decide what process to follow and furthermore expect teams
	to actively and regularly change their process. Any attempt to
	define a rigorous process that can be tested for conformance runs
	contrary to this philosophy.&lt;/p&gt;

&lt;p&gt;I can't deny that this is frustrating. How can you do a survey on
	whether agile methods are more effective that alternatives, or
	whether Extreme Programming is more effective than Scrum, when you
	can't get a clear definition of what Scrum is in the first place? If
	a client wants a system built using Extreme Programming how can they
	tell if it's really being done?. There is a sense of "I know it when
	I see it",  but it requires an
	experienced practitioner to have that sense and even then there's
	lots of room for such practitioners to disagree.&lt;/p&gt;

&lt;p&gt;I don't have an answer to this conundrum. Indeed I don't think
	there &lt;i&gt;is&lt;/i&gt; an answer. It's a an unfortunate consequence of the
	activity itself, just as getting wet is an unavoidable consequence
	of swimming.&lt;/p&gt;

&lt;p class="repost"&gt;reposted on 26 Jul 2012&lt;/p&gt;
</content>
  </entry><entry>
    <title>NoSQL Distilled pre-order on InformIT with 35% discount</title>
    <link href="http://martinfowler.com/snips/201207261026.html"/>
    <updated>2012-07-26T10:26:00-04:00</updated>
    <id>tag:martinfowler.com,2012-07-26:NoSQL-Distilled-pre-order-on-InformIT-with-35--discount</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/nosql.jpg' width = '100' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;I&amp;#8217;ve been enjoying a brief vacation in Oregon (enjoying the excellent &lt;a href='http://www.osfashland.org/'&gt;Oregon Shakespeare Festival&lt;/a&gt; and a nice mix of hikes). So I&amp;#8217;m late in mentioning that &lt;a href='http://www.informit.com/store/product.aspx?isbn=0321826620'&gt;NoSQL Distilled is now available for pre-order on InformIT&lt;/a&gt;. Its ship date is August 17.&lt;/p&gt;

&lt;p&gt;If you pre-order you can get 35% off by entering discount code FOWLER6626 during checkout (this offer expires on August 17). InformIT is also running an offer where you get a 30 day trial to Safari Books Online if you place an order on InformIT.&lt;/p&gt;

&lt;p&gt;The book has now completed production and has gone off to the printers. As I understand it the final ebook will appear when the printed book appears on August 17. Until then Safari subscribers can still read the &lt;a href='http://my.safaribooksonline.com/9780133036138'&gt;rough cut&lt;/a&gt;, which includes the copy-edited text, but lacks the final layout and index.&lt;/p&gt;

&lt;p&gt;The final book has 172 pages, which is sadly longer than we&amp;#8217;d hoped. We hope you&amp;#8217;ll forgive us for that.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 29</title>
    <link href="http://martinfowler.com/photos/29.html"/>
    <updated>2012-07-14T12:39:00-04:00</updated>
    <id>tag:martinfowler.com,2012-07-14:photostream-29</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/29.html'&gt;&lt;img src = 'http://martinfowler.com/photos/29.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Outside Imperial Palace, Tokyo, Japan&lt;/p&gt;
</content>
  </entry><entry>
    <title>Retreaded: SemanticDiffusion</title>
    <link href="http://martinfowler.com/bliki/SemanticDiffusion.html"/>
    <updated>2012-07-11T18:48:00-04:00</updated>
    <id>tag:martinfowler.com,2012-07-11:Retreaded--SemanticDiffusion</id>
    <category term=""/>
    <content type="html">
&lt;p class = 'original'&gt;&lt;a href = 'http://martinfowler.com/bliki/Retread.html'&gt;Retread&lt;/a&gt; of post orginally made on 14 Dec 2006&lt;/p&gt;

&lt;p&gt;I have the habit of creating &lt;a href="http://martinfowler.com/bliki/Neologism.html"&gt;Neologism&lt;/a&gt;s to describe
the things I see in software development. It's a common habit amongst
writers in this field, for software development still lacks much useful
jargon. One of the problems with building a jargon is that terms
are vulnerable to losing their meaning, in a process of
semantic diffusion - to use yet another potential addition to our
jargon.&lt;/p&gt;

&lt;p&gt;Semantic diffusion occurs when you have a word that is coined a
	person or group, often with a pretty good definition, but then gets
	spread through the wider community in a way that weakens that
	definition. This weakening risks losing the definition entirely -
	and with it any usefulness to the term.&lt;/p&gt;

&lt;p&gt;I'm partly prompted to write this because I see this semantic
	diffusion happening very publicly to
	two terms at the moment: 'agile' and '&lt;a href="http://martinfowler.com/bliki/Web2.0.html"&gt;Web2.0&lt;/a&gt;'. Both were coined in the
	last few years and both come with lengthy definitions. (Agile has
	the &lt;a href="http://agilemanifesto.org/"&gt;agile manifesto&lt;/a&gt;,
	together with numerous books and &lt;a href="http://martinfowler.com/articles/newMethodology.html"&gt;articles&lt;/a&gt; by
	the authors of the manifesto. Web 2.0 has an excellent &lt;a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html"&gt;definitional
	article&lt;/a&gt; by Tim O'Reilly.) Yet both of these face a lot of corruption
	in the field. I've run into people who think agile methods mean you
	shouldn't do any planning and those who think Web 2.0 is solely
	about using AJAX. (A more personal case is &lt;a href="http://martinfowler.com/bliki/RefactoringMalapropism.html"&gt;RefactoringMalapropism&lt;/a&gt;,
	but I'll leave that aside for the moment.)&lt;/p&gt;

&lt;p&gt;Semantic diffusion is essentially a succession of Chinese
whispers where a different group of people to the originators of a
term  start talking about it without being careful about following the
original definition. These people are listened to by a further group
which then goes on to add their own distortions. After a few of these
hand-offs it's easy to lose a lot of the key meaning of the term
unless you make the point of going back to the originators. It's
ironic that it's popular terms that tend to suffer from this the most.
That's inevitable, of course, since unpopular terms have less people
to create the Chinese whisper chains.&lt;/p&gt;

&lt;p&gt;Semantic diffusion tends to coincide with hype phase of an idea.
As an idea becomes attractive, lots of people are... well... attracted. Many
of these followers talk about the term and teach about it.  If these
people aren't careful to go back to the source, the Chinese whispers
begin. Popular ideas also spread primarily though communication media
that are more likely to lead to misunderstanding - such as
writing. Many followers aren't fortunate enough to work directly with
the originators and thus learn directly from them.&lt;/p&gt;

&lt;p&gt;A related indicator to popularity is desirability. A word that
sounds good may be more likely to suffer from semantic diffusion.
'Agile' sounds like something you'd certainly want to be, the antonyms
of agile aren't at all appealing. Who would want to still be merely
1.0 of the web? Kent Beck noticed this effect and thus deliberately
picked Extreme Programming as a name because it less inherently
desirable: 'extreme' is often used as a pejorative. Using a less
desirable term may reduce semantic diffusion, but I don't think it
avoids the problem completely. After all we saw semantic diffusion
occur to 'object-oriented' which is a neutral term.&lt;/p&gt;

&lt;p&gt;Semantic diffusion is more likely to occur with things that are
	broad concepts rather than hard technologies. Ruby on Rails is
	getting a lot of hype at the moment, but since it's a concrete tool
	it's hard for its meaning to weaken. Extreme Programming's list of
	concrete practices may also reduce this problem compared to agile's
	broader list of values and principles.&lt;/p&gt;

&lt;p&gt;Semantic diffusion is a painful process to watch, particularly
	for those who find the ideas useful. At the moment I see signs of despair
	for both of these terms, some people in the agile world are talking
	of ditching the word agile.&lt;/p&gt;

&lt;p&gt;I'm more sanguine about all this, largely because I've seen it
before. There was a time when almost any software tool or method was
described as object-oriented. But now, years later, the essential
meaning of OO is reasonably well understood. I saw the same thing
happen with patterns. So terms do recover their semantic integrity and
the current diffusion doesn't inevitably mean the terms will lose
their meaning. I'm also less worried about it because I expected it,
again having gone through this process before. I think it's an
inevitable consequence of ideas becoming popular and despite its
problems, I prefer the hype to ignorance. A final comforting thought
is that once the equally inevitable backlash comes we get a refocusing
on the original meaning. As I'm writing this I'm comforted by the fact
that I can't think of a
term that lost its meaning entirely, although I'm sure it's happened.
(SOA doesn't count, as I don't think there ever was a commonly agreed
meaning for that to start with.)&lt;/p&gt;

&lt;p&gt;Whatever the eventual outcome we still have to cope with semantic
diffusion as it happens. One option is abandonment, to drop the
diffuse term and pick a new one. I don't like this option because a
new term only adds to the confusion and even if you're successful you just
end up repeating the process for the new term. So my preference is to keep
re-articulating the current terminology, pointing to those who
understand the true meaning.&lt;/p&gt;

&lt;p&gt;A further complication is that these terms also shift. I'm sure
if you asked the original seventeen authors of the agile manifesto,
they would come up with a different document today. (Let alone the
fact that that group wouldn't be the best group to speak for the
movement today.) Again it's a responsibility for those who are
identified as originators to point this out, both by talking about the
way the ideas evolve and by pointing to new people who are playing an
active role in that evolution. (I'm pleased that the original
seventeen &lt;a href="http://martinfowler.com/articles/agileStory.html"&gt;"let the ship
sail"&lt;/a&gt; to go its own way.) Let's not forget there's a tricky
balance between holding to a clear definition and dogmatism. &lt;/p&gt;

&lt;p&gt;All of this is hard work, but a good term is worth fighting for -
particularly since the only bullets you need are words.&lt;/p&gt;

&lt;p class="repost"&gt;reposted on 11 Jul 2012&lt;/p&gt;
</content>
  </entry><entry>
    <title>photostream 28</title>
    <link href="http://martinfowler.com/photos/28.html"/>
    <updated>2012-06-21T20:03:00-04:00</updated>
    <id>tag:martinfowler.com,2012-06-21:photostream-28</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/28.html'&gt;&lt;img src = 'http://martinfowler.com/photos/28.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Portland Sea Dogs, Portland, ME&lt;/p&gt;
</content>
  </entry><entry>
    <title>Infodeck on handling multiple mobile devices</title>
    <link href="http://martinfowler.com/articles/multiMobile/"/>
    <updated>2012-06-19T10:43:00-04:00</updated>
    <id>tag:martinfowler.com,2012-06-19:Infodeck-on-handling-multiple-mobile-devices</id>
    <category term=""/>
    <content type="html">&lt;p&gt;A common question for people in mobile development is to how to deal with the wide range of mobile devices available. Do we have to write native applications for every single device? Or is there a way to reuse code for similar applications. I&amp;#8217;ve written an infodeck to explore this problem and suggest how to think about dealing with it.&lt;/p&gt;</content>
  </entry><entry>
    <title>Facebook page for my tweets</title>
    <link href="http://www.facebook.com/martinFowlerThoughtWorks"/>
    <updated>2012-06-19T09:55:00-04:00</updated>
    <id>tag:martinfowler.com,2012-06-19:Facebook-page-for-my-tweets</id>
    <category term=""/>
    <content type="html">&lt;p&gt;I&amp;#8217;ve &lt;a href='https://twitter.com/#!/martinfowler'&gt;been using Twitter&lt;/a&gt; for a few years to post about what I&amp;#8217;m up to, new activity on martinfowler.com, and other interesting things I find on the internets. Facebook has a facility to feed twitter activity to a Facebook page, which is handy for people who prefer tracking my posts on Facebook rather than Twitter. So I&amp;#8217;ve set up a &lt;a href='http://www.facebook.com/martinFowlerThoughtWorks'&gt;Facebook page to channel my tweets&lt;/a&gt;. If you &amp;#8220;like&amp;#8221; that page, Facebook will add my tweets to your Facebook news feed.&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t intend to do anything more with this page than be a channel for my tweets, so this won&amp;#8217;t be anything new for people who use Twitter, but I&amp;#8217;m giving it a try to see if at least some people prefer to use Facebook.&lt;/p&gt;</content>
  </entry><entry>
    <title>SE Radio podcast with Pramod on Agile Database Development</title>
    <link href="http://www.se-radio.net/2012/06/episode-186-martin-fowler-and-pramod-sadalage-on-agile-database-development/"/>
    <updated>2012-06-06T21:05:00-04:00</updated>
    <id>tag:martinfowler.com,2012-06-06:SE-Radio-podcast-with-Pramod-on-Agile-Database-Development</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/img/pramod.jpg' width = '100' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;SE Radio has long been my favorite podcast on software development, so I&amp;#8217;m always happy to appear on it. I&amp;#8217;m extra-pleased this time, because it gives me the chance to highlight some valuable software development techniques that I feel are particularly under-used.&lt;/p&gt;

&lt;p&gt;When we first started using agile methods at the beginning of this century, one of our biggest questions was how to handle database design in an agile way. Fortunately we had Pramod Sadalage around, a DBA who was determined to find a way to incorporate databases with the agile working style. He developed a set of techniques, including regular database refactoring and scripted migrations that are version-controlled with application code. These techniques have now becomes habitual for ThoughtWorks but have not been as widely adopted in the industry as I believe they should. This podcast provides an hour or so that outlines how this all works, which I&amp;#8217;m hoping will encourage greater usage of them.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 27</title>
    <link href="http://martinfowler.com/photos/27.html"/>
    <updated>2012-06-02T11:23:00-04:00</updated>
    <id>tag:martinfowler.com,2012-06-02:photostream-27</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/27.html'&gt;&lt;img src = 'http://martinfowler.com/photos/27.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Salem, MA&lt;/p&gt;
</content>
  </entry><entry>
    <title>NoSQL Distilled Rough Cut Now Visible</title>
    <link href="http://martinfowler.com/snips/201205310945.html"/>
    <updated>2012-05-31T09:45:00-04:00</updated>
    <id>tag:martinfowler.com,2012-05-31:NoSQL-Distilled-Rough-Cut-Now-Visible</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/nosql.jpg' width = '100' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;The &lt;a href='http://my.safaribooksonline.com/9780133036138'&gt;rough cut of NoSQL Distilled is now online&lt;/a&gt;. If you have a subscription that supports rough cuts you will see the whole book, if not you&amp;#8217;ll see a preview of the book with the table of contents and the first paragraph or two from each section. Remember this is a rough cut and has not been copy edited.&lt;/p&gt;

&lt;p&gt;I was a bit hesitant to announce this, after my false sighting on Tuesday, but I&amp;#8217;ve had a few tweets now confirming that it&amp;#8217;s online.&lt;/p&gt;</content>
  </entry><entry>
    <title>NoSQL Distilled rough cut available soon on Safari</title>
    <link href="http://martinfowler.com/snips/201205291040.html"/>
    <updated>2012-05-29T10:40:00-04:00</updated>
    <id>tag:martinfowler.com,2012-05-29:NoSQL-Distilled-rough-cut-available-soon-on-Safari</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/nosql.jpg' width = '100' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;If you&amp;#8217;re a subscriber to Safari Books Online, you will soon see a copy of a &lt;a href='http://my.safaribooksonline.com/9780133036138'&gt;rough cut of NoSQL Distilled&lt;/a&gt;. This morning I said it was available, but I&amp;#8217;ve since learned that my Safari account has special privileges, so I was seeing it but others cannot. We expect it to be available in the next couple of days for everyone who has an account that includes rough cuts.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s a rough cut, so it&amp;#8217;s still early in the production process, with few copy-edits done. But it gives you an early chance to take a look at the text and to pass on comments.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.safaribooksonline.com/'&gt;Safari Books Online&lt;/a&gt; is an online library that gives access to lots of software books, including those of Pearson and O&amp;#8217;Reilly. They have various levels of subscription, only some of which include rough cuts. For example there are two levels of individual subscription: bookshelf and library. Only the (more expensive) library individual subscription gives access to rough cuts.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m sorry for any confusion I&amp;#8217;ve caused by my premature announcement.&lt;/p&gt;</content>
  </entry><entry>
    <title>Retreaded: ServiceCustodian</title>
    <link href="http://martinfowler.com/bliki/ServiceCustodian.html"/>
    <updated>2012-05-24T09:01:00-04:00</updated>
    <id>tag:martinfowler.com,2012-05-24:Retreaded--ServiceCustodian</id>
    <category term=""/>
    <content type="html">
&lt;p class = 'original'&gt;&lt;a href = 'http://martinfowler.com/bliki/Retread.html'&gt;Retread&lt;/a&gt; of post orginally made on 14 Nov 2008&lt;/p&gt;

&lt;p&gt;Let's imagine a pretty world of SOA-happiness where the computing
  needs of an enterprise are split into many small applications that
  provide services to each other to allow effective collaboration. One
  fine morning a consumer service needs some information from a supplier
  service. The twist is that although the supplier service has the
  necessary data and processing logic to get this information, it
  doesn't yet expose that information through a service interface. The
  supplier has a potential service, but it isn't actually there yet.&lt;/p&gt;

&lt;p&gt;In an ideal world the developers of the consumer service just asks
  the supplier service to develop the potential service and all is
  dandy. But life is not ideal - the sticking point here is that the
  developers of the supplier service have other things to do, usually
  things that are more important to their customer and management than
  helping out the consumer service team. &lt;/p&gt;

&lt;p&gt;Recently I was chatting with my colleague Erik D&#xF6;rnenburg and he
  told me about an approach he saw a client use to deal with
  this problem. They took a leaf out of the open source play-book and
  made all their services into internal open source systems. This
  allows consumer service developers write the service themselves.&lt;/p&gt;

&lt;p&gt;I'm sure many readers are rolling their eyes at the visions of
  chaos this would cause, but just as open source projects don't allow
  just anyone to edit anything; this client uses open-source-style control
  mechanisms. In particular each service has a couple of custodians -
  people whose responsibility it is to keep the service in a healthy
  state. In the normal course of events the consumer developer wouldn't
  actually commit changes to the supplier source tree directly,
  instead they send a patch to the custodian. Just like an open-source
  maintainer, the custodian receives the patch and reviews it to see
  if it's good enough to commit. If not there's a dialog with the
  consumer developer.&lt;/p&gt;

&lt;p&gt;As Erik knows well from &lt;a href="http://erik.doernenburg.com/open-source-projects/"&gt;his own open
  source work&lt;/a&gt;, reviewing a patch is much less effort than making
  a change yourself. So although the custodian approach doesn't
  entirely eliminate the problem of consumer developers needing to wait
  on supplier developers, it does a lot to reduce the difficulty. And
  again following the open-source model, a consumer developer can be
  made a committer once the custodians are comfortable. This
  still means that commits can get reviewed by the custodians, but avoids
  the custodians becoming a bottleneck.&lt;/p&gt;

&lt;p&gt;Related to this was their approach to a service registry. We've
  seen a lot of fancy products being sold to provide service registry
  capabilities so that people can lookup services and see how to use
  them. This client discarded them and used a
  &lt;a href="http://martinfowler.com/bliki/HumaneRegistry.html"&gt;HumaneRegistry&lt;/a&gt; instead.&lt;/p&gt;

&lt;p class="repost"&gt;reposted on 24 May 2012&lt;/p&gt;
</content>
  </entry><entry>
    <title>photostream 26</title>
    <link href="http://martinfowler.com/photos/26.html"/>
    <updated>2012-05-22T18:16:00-04:00</updated>
    <id>tag:martinfowler.com,2012-05-22:photostream-26</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/26.html'&gt;&lt;img src = 'http://martinfowler.com/photos/26.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Big Sur, CA&lt;/p&gt;
</content>
  </entry><entry>
    <title>Speaking in China</title>
    <link href="http://www.thoughtworks.com/events/software-design-21st-century-china-2012"/>
    <updated>2012-05-22T13:25:00-04:00</updated>
    <id>tag:martinfowler.com,2012-05-22:Speaking-in-China</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Here&amp;#8217;s the information on my talks in China (the page is in Chinese). I&amp;#8217;ll be giving talks in Chengdu &#x6210;&#x90FD; on the 10th and 11th, Wuhan &#x6B66;&#x6C49; on the 12th and Xi&amp;#8217;an &#x897F;&#x5B89; on the 13th.&lt;/p&gt;</content>
  </entry><entry>
    <title>Speaking in Singapore</title>
    <link href="http://www.thoughtworks.com/events/software-design-21st-century-singapore-2012"/>
    <updated>2012-05-21T16:12:00-04:00</updated>
    <id>tag:martinfowler.com,2012-05-21:Speaking-in-Singapore</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Next month (June 7) I&amp;#8217;ll be speaking at a ThoughtWorks Quarterly briefing in Singapore. I&amp;#8217;ll be doing a &lt;a href='http://martinfowler.com/bliki/SuiteOfTalks.html'&gt;suite of talks&lt;/a&gt;, one of which I expect will be NoSQL-oriented. Also on the bill is Vivek Prahlad, a long-term colleague at ThoughtWorks, who I&amp;#8217;m looking forward to catching up with. This will be the my first time in Singapore (other than the airport).&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m then going on to talks in China: Chengdu, Wuhan, and Xi&amp;#8217;an.&lt;/p&gt;</content>
  </entry><entry>
    <title>Cover for NoSQL Distilled</title>
    <link href="http://martinfowler.com/snips/201205211610.html"/>
    <updated>2012-05-21T16:10:00-04:00</updated>
    <id>tag:martinfowler.com,2012-05-21:Cover-for-NoSQL-Distilled</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/nosql.jpg' width = '100' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;Pramod and I now have a cover for our book &lt;a href='http://martinfowler.com/bliki/NosqlDistilled.html'&gt;NoSQL Distilled&lt;/a&gt;. Obsessive readers of my web site may &lt;a href='http://martinfowler.com/photos/12.html'&gt;recognize the photo&lt;/a&gt;.&lt;/p&gt;</content>
  </entry><entry>
    <title>Selecting a Mobile Implementation Strategy</title>
    <link href="http://martinfowler.com/articles/mobileImplStrategy.html"/>
    <updated>2012-05-21T09:21:00-04:00</updated>
    <id>tag:martinfowler.com,2012-05-21:Selecting-a-Mobile-Implementation-Strategy</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Over the last couple of years, we&amp;#8217;ve seen mobile development become an increasing part of our work at ThoughtWorks. One question that clients regularly have is how to make the decision about which devices to support and what proportion of effort should go to each device. In this article Giles Alexander outlines two opening gambits - laser and cover-your-bases - and how to choose between and build on these approaches.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 25</title>
    <link href="http://martinfowler.com/photos/25.html"/>
    <updated>2012-05-10T12:46:00-04:00</updated>
    <id>tag:martinfowler.com,2012-05-10:photostream-25</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/25.html'&gt;&lt;img src = 'http://martinfowler.com/photos/25.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Winterthur, DE&lt;/p&gt;
</content>
  </entry><entry>
    <title>Retreaded: StandardStoryPoints</title>
    <link href="http://martinfowler.com/bliki/StandardStoryPoints.html"/>
    <updated>2012-05-10T12:30:00-04:00</updated>
    <id>tag:martinfowler.com,2012-05-10:Retreaded--StandardStoryPoints</id>
    <category term=""/>
    <content type="html">
&lt;p class = 'original'&gt;&lt;a href = 'http://martinfowler.com/bliki/Retread.html'&gt;Retread&lt;/a&gt; of post orginally made on 06 Sep 2004&lt;/p&gt;

&lt;p&gt;I've heard a couple of questions recently about coming up with a
	standard story point mechanism for multiple teams using extreme
	programming's planning approach. The hope is have several teams all
	using equivalent story points, so that three story points of effort
	on one team is the same as on another.&lt;/p&gt;

&lt;p&gt;I think trying to come up with this at best of limited value, and
	at worst dangerous.&lt;/p&gt;

&lt;p&gt;The estimating system of extreme programming is based on
		&lt;a href="http://martinfowler.com/bliki/XpVelocity.html"&gt;XpVelocity&lt;/a&gt; and &lt;a href="http://martinfowler.com/bliki/YesterdaysWeather.html"&gt;YesterdaysWeather&lt;/a&gt;. Inherent
		in this is the idea that when you make estimates, the actual units
		you estimate aren't important - what's important is you estimate
		by rough comparative value and use &lt;a href="http://martinfowler.com/bliki/YesterdaysWeather.html"&gt;YesterdaysWeather&lt;/a&gt;
		for calibration. &lt;/p&gt;

&lt;p&gt;In this situation the story points act as an anchor for the
		feedback loop that Yesterday's Weather provides - nothing more.
		Baked into them are all sorts of assumptions about the nature of
		the team's task, the capability of the team, and whether the team
		are optimistic or pessimistic estimators. Once you try to come up
		with a standard across teams you are trying to normalize all of
		these factors. Trying to do this sounds very hard to me, and I'm
		not aware of anyone who has done this effectively. This doesn't
		mean its impossible, it just means it's hard.&lt;/p&gt;

&lt;p&gt;The dangerous aspect comes from once you have a standard unit for
	measurement across teams, someone is inevitably going to use it to
	compare the performance of teams. Even if everyone swears till they
	are blue in the face that they won't use it for cross team
	measurement, there will always be the suspicion that this will
	happen eventually. This will cause teams to distort their
	measurements so that it seems that they get more story points
	done. My fear is that this will break the feedback loop of
	yesterday's weather and knock the planning process off kilter. I'm
	always suspicious about these things because while it would be
	incredibly valuable to have a way to measure productivity I think
		the nature of software is such that we &lt;a href="http://martinfowler.com/bliki/CannotMeasureProductivity.html"&gt;CannotMeasureProductivity&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So to be worth trying, this has to yield some valuable benefits -
	but I don't see any. One reason that I've heard is to help people
	move onto teams and estimate more quickly. But you can't estimate on
	a new team until you get reasonably familiar with the problem and
	the current code base. As you do that you'll also get a feel for the
	relative sizes of story points on that team. We move people around
	between projects at ThoughtWorks and I've never heard anyone
	complain about difficulty of estimating when coming onto a new team
	due to differences in story points.&lt;/p&gt;

&lt;p class="repost"&gt;reposted on 10 May 2012&lt;/p&gt;
</content>
  </entry><entry>
    <title>photostream 24</title>
    <link href="http://martinfowler.com/photos/24.html"/>
    <updated>2012-05-05T10:04:00-04:00</updated>
    <id>tag:martinfowler.com,2012-05-05:photostream-24</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/24.html'&gt;&lt;img src = 'http://martinfowler.com/photos/24.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Boston, MA&lt;/p&gt;
</content>
  </entry><entry>
    <title>Retreaded: PublishedInterface</title>
    <link href="http://martinfowler.com/bliki/PublishedInterface.html"/>
    <updated>2012-05-03T10:18:00-04:00</updated>
    <id>tag:martinfowler.com,2012-05-03:Retreaded--PublishedInterface</id>
    <category term=""/>
    <content type="html">
&lt;p class = 'original'&gt;&lt;a href = 'http://martinfowler.com/bliki/Retread.html'&gt;Retread&lt;/a&gt; of post orginally made on 26 Dec 2003&lt;/p&gt;

&lt;p&gt;&lt;i&gt;Published Interface&lt;/i&gt; is a term I used (first in &lt;a href="http://martinfowler.com/books/refactoring.html"&gt;Refactoring&lt;/a&gt;)
to refer to a class interface that's used outside the code base that
it's defined in. As such it means more than public in Java and indeed
even more than a non-internal public in C#. In my column for IEEE
Software I argued
that &lt;a href="http://martinfowler.com/ieeeSoftware/published.pdf"&gt;the distinction between published and public is actually more
important than that between public and private.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The reason is that with a non-published interface you can change
it and update the calling code since it is all within a single code
base. Such things as renames can be done, and done easily with modern
refactoring tools. But anything published so you can't reach the
calling code needs more complicated treatment.&lt;/p&gt;

&lt;p class="repost"&gt;reposted on 03 May 2012&lt;/p&gt;
</content>
  </entry><entry>
    <title>photostream 23</title>
    <link href="http://martinfowler.com/photos/23.html"/>
    <updated>2012-04-27T21:10:00-04:00</updated>
    <id>tag:martinfowler.com,2012-04-27:photostream-23</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/23.html'&gt;&lt;img src = 'http://martinfowler.com/photos/23.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Middleton Place, Charleston, SC&lt;/p&gt;
</content>
  </entry><entry>
    <title>An English Literature Podcast</title>
    <link href="http://martinfowler.com/snips/201204261902.html"/>
    <updated>2012-04-26T19:02:00-04:00</updated>
    <id>tag:martinfowler.com,2012-04-26:An-English-Literature-Podcast</id>
    <category term=""/>
    <content type="html">&lt;p&gt;I&amp;#8217;ve added another &lt;a href='http://martinfowler.com/bliki/Podcasts.html'&gt;recommended podcast to my list&lt;/a&gt;, this one a is a treasure if you enjoy good fiction. &lt;a href='http://www.reallylikethisbook.com/'&gt;Why I Really Like This Book&lt;/a&gt; is a quirky sail through the lesser known waters of English Literature. The pilot is Kate Macdonald, who teaches English Literature but was frustrated at the limited range of books she could cover. Each podcast spends ten minutes or so exploring a single suggested book. Her first series was a random alphabetical wander, now she&amp;#8217;s taken to talking about sets of five books with a common theme. Recent sets include Five Appalling Fictional Women and Five Classic Detective Novels. If you&amp;#8217;re looking for ideas for books to curl up with, this is an excellent source of suggestions.&lt;/p&gt;</content>
  </entry><entry>
    <title>Retreaded: CustomerAffinity</title>
    <link href="http://martinfowler.com/bliki/CustomerAffinity.html"/>
    <updated>2012-04-26T09:55:00-04:00</updated>
    <id>tag:martinfowler.com,2012-04-26:Retreaded--CustomerAffinity</id>
    <category term=""/>
    <content type="html">
&lt;p class = 'original'&gt;&lt;a href = 'http://martinfowler.com/bliki/Retread.html'&gt;Retread&lt;/a&gt; of post orginally made on 28 Jul 2006&lt;/p&gt;

&lt;p&gt;When someone is looking at what makes up a top-class enterprise
	software developer, often the conversation may turn to knowledge of
	frameworks and languages, or perhaps the ability to understand
	complicated algorithms and data structures. For me, one of the most
	important traits in a programmer, or indeed in a development team,
	is something that I'll call Customer Affinity. This is the interest
	and closeness that the developers have in the business problem that
	the software is addressing, and in the people who live in that
	business world.&lt;/p&gt;

&lt;p&gt;There are many aspects to customer affinity. The first one is
	just the interest in the business, its processes and rules. I've
	always been fascinated by domains I've worked in: health care,
	derivatives, payroll, leasing - are all examples of really
	interesting domain problems with a lot of complexity that has to be
	organized and understood. For me aspects of a project such as
	object-relational mapping, remote process communication - what I
	think of as the plumbing of enterprise systems, don't have that same
	interest.&lt;/p&gt;

&lt;p&gt;It's important that a team has the plumbing working and under
control, but I believe that the more energy goes into the business
problem, the more effective at providing value a team will be. Which
is a good reason to use frameworks that solve and simplify as much of
the plumbing as possible.&lt;/p&gt;

&lt;p&gt;Another aspect of customer affinity is the ability to
	collaborate with domain experts. I don't think that detailed
	knowledge of the domain is an important thing for programmers to
	have; useful yes, but not important. What's more critical than
	knowledge is the ability to collaborate with those that have the
	knowledge.&lt;/p&gt;

&lt;p&gt;My high regard for customer affinity is one the main reasons why
	I'm such a fan of Extreme Programming and other agile methods. I
	found it very significant that when Kent Beck summarized XP to his
	agile peers at the snowbird workshop which coined 'agile', he chose
	to describe not the technical elements of XP, but his desire to
	change the nature of the customer/developer interaction.&lt;/p&gt;

&lt;p&gt;I've often heard this relationship mis-characterized. In
particular there is a belief in some quarters that the customer team
just comes up with stories which they throw at the developers. This
characterization is rather like the notion that requirements are just
lying out there to be gathered. Either way that's
not much of a collaboration. Instead developers need to work together
with domain people to
generate ideas with developers learning a lot about the business in
the process. &lt;/p&gt;

&lt;p&gt;One of Kent's suggested names for 'Agile' was
&lt;i&gt;conversational&lt;/i&gt; software development - the point being that it's
a two way communication. This isn't something like a telecoms protocol
that you can define, but the back and forth discussions about how
software can enhance the business are where the real value
lives. Much of this conversation is of half-baked ideas, some of which
grow into valuable features - often ones that aren't things that the
customer originally thought of.&lt;/p&gt;

&lt;p&gt;One of the things that frustrates me is how organizations often
	try to squelch customer affinity. It's not something people admit to
	doing, but it's a common consequence of other
	decisions. Organizational barriers can contribute to squelching -
	I've come across places where
	you have to get your manager to arrange with another manager just so
	you can have a conversation with someone on the business side. That
	hardly encourages you to get inside the workings of the business.&lt;/p&gt;

&lt;p&gt;I've often heard it said that enterprise software is boring, just
	shuffling data around, that people of talent will do "real" software
	that requires fancy algorithms, hardware hacks, or plenty of
	math. I feel that this usually  happens
	due to a lack of customer affinity. The real intellectual challenge
	of business software is figuring out what the real
	contribution of software can be to a business. You need both good
	technical and business knowledge to find that.  Working closely with
	business people to develop this knowledge, and
	&lt;a href="http://martinfowler.com/bliki/PleasingTheCustomer.html"&gt;PleasingTheCustomer&lt;/a&gt; as you do it, is  what makes
	enterprise software development fun - and motivation is the key to good
	and productive work.&lt;/p&gt;

&lt;p&gt;There are plenty of bright and capable people who want to learn
	about the businesses they write software for. Too often
	organizations make it hard for them to do so. Until that changes,
	our profession will continue to under-deliver on our potential.&lt;/p&gt;

&lt;p class="repost"&gt;reposted on 26 Apr 2012&lt;/p&gt;
</content>
  </entry><entry>
    <title>photostream 22</title>
    <link href="http://martinfowler.com/photos/22.html"/>
    <updated>2012-04-17T15:35:00-04:00</updated>
    <id>tag:martinfowler.com,2012-04-17:photostream-22</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/22.html'&gt;&lt;img src = 'http://martinfowler.com/photos/22.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;London&lt;/p&gt;
</content>
  </entry><entry>
    <title>Progress on NoSQL Distilled</title>
    <link href="http://martinfowler.com/snips/201204171042.html"/>
    <updated>2012-04-17T10:42:00-04:00</updated>
    <id>tag:martinfowler.com,2012-04-17:Progress-on-NoSQL-Distilled</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Time for a progress report on &lt;a href='http://martinfowler.com/bliki/NosqlDistilled.html'&gt;NoSQL Distilled&lt;/a&gt;. We&amp;#8217;ve done a round of technical review and are now pretty happy with the text, happy enough to move it into production.&lt;/p&gt;

&lt;p&gt;Production for a book these days is both more complicated and more responsive than it used to be. The next step on the book text is to do copy-editing and indexing. It sounds like we are going to get the &lt;a href='http://www.kirsanov.com/'&gt;same people&lt;/a&gt; I worked with on &lt;a href='http://martinfowler.com/books/dsl.html'&gt;my DSL book&lt;/a&gt;, which will be excellent news since they did a good job and were happy to work directly on the XML source in my repository. This simplifies and speeds up the whole process. They will also do the book design and convert the book in camera-ready for printing the physical books.&lt;/p&gt;

&lt;p&gt;I suspect, however, that this book will see more electronic copies than physical ones. In parallel with the copy-editing we&amp;#8217;ll be preparing the electronic copies. We intend to do a rough-cut version of the book as soon as we can. This should be available through &lt;a href='http://www.informit.com/authors/bio.aspx?a=8877bf0c-92bd-4d0d-8317-d67fe8b88eee'&gt;InformIT&lt;/a&gt;, Amazon, and &lt;a href='http://my.safaribooksonline.com'&gt;Safari&lt;/a&gt;. I&amp;#8217;ll make further announcements here as these become visible.&lt;/p&gt;</content>
  </entry><entry>
    <title>Rebecca Parsons and I speak on The Evolving Panorama of Data</title>
    <link href="http://www.infoq.com/presentations/The-Evolving-Panorama-of-Data"/>
    <updated>2012-04-16T10:57:00-04:00</updated>
    <id>tag:martinfowler.com,2012-04-16:Rebecca-Parsons-and-I-speak-on-The-Evolving-Panorama-of-Data</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Our keynote at QCon London 2012 looks at the role data is playing in our lives (and that it&amp;#8217;s doing more than just getting bigger).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How the world of data is changing: its growing, becoming more distributed and connected.&lt;/li&gt;

&lt;li&gt;The industry&amp;#8217;s response: the rise of NoSQL, the shift to service integration, the appearance of event sourcing, the impact of clouds and new analytics with a greater role for visualization.&lt;/li&gt;

&lt;li&gt;How data is being used now, with a particular emphasis from Rebecca on data in the developing world.&lt;/li&gt;

&lt;li&gt;What does all this mean to our personal responsibilities as software professionals.&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Jez Humble and I speak on Continuous Delivery at YOW</title>
    <link href="http://yow.eventer.com/events/1004/talks/1062"/>
    <updated>2012-02-14T15:46:00-05:00</updated>
    <id>tag:martinfowler.com,2012-02-14:Jez-Humble-and-I-speak-on-Continuous-Delivery-at-YOW</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/img/yow-snap.png' width = '150' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;Video of the one-hour overview presentation that Jez and I gave at YOW at the end of last year. We cover the rationale for Continuous Delivery, the deployment pipeline, continuous integration, devops, and deployment strategies. The highlight is Jez&amp;#8217;s personification of a release candidate as a hero in a greek myth.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 21</title>
    <link href="http://martinfowler.com/photos/21.html"/>
    <updated>2012-02-12T18:32:00-05:00</updated>
    <id>tag:martinfowler.com,2012-02-12:photostream-21</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/21.html'&gt;&lt;img src = 'http://martinfowler.com/photos/21.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;E&#x300;ze, France&lt;/p&gt;
</content>
  </entry><entry>
    <title>ThoughtWorks recruiting event in New York</title>
    <link href="http://www.thoughtworks.com/events/get-hired-new-york-minute"/>
    <updated>2012-02-07T15:17:00-05:00</updated>
    <id>tag:martinfowler.com,2012-02-07:ThoughtWorks-recruiting-event-in-New-York</id>
    <category term=""/>
    <content type="html">&lt;p&gt;This weekend, ThoughtWorks is hold a recruiting event in New York City. The idea is to compress the whole recruiting cycle down to a single weekend. The coding problem will be on Saturday, and those that pass that hurdle will be invited back for interviews on Sunday. The idea is that we&amp;#8217;ll get job offers to any successful candidates by Sunday evening. I&amp;#8217;ll be there for the first couple of hours on Saturday.&lt;/p&gt;</content>
  </entry><entry>
    <title>Infodeck on NoSQL and Polyglot Persistence</title>
    <link href="http://martinfowler.com/articles/nosql-intro.pdf"/>
    <updated>2012-02-07T10:26:00-05:00</updated>
    <id>tag:martinfowler.com,2012-02-07:Infodeck-on-NoSQL-and-Polyglot-Persistence</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Pramod and I have put together a short &lt;a href='http://martinfowler.com/articles/nosql-intro.pdf'&gt;infodeck&lt;/a&gt; (pdf) outlining the reasons why NoSQL databases are an important new dish on the software development menu. It&amp;#8217;s directed at non-technical managers and customers to provide an outline of why the data world has seen this new entrant and some direction as to the kinds of projects which should give them a closer look.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 20</title>
    <link href="http://martinfowler.com/photos/20.html"/>
    <updated>2012-02-04T16:54:00-05:00</updated>
    <id>tag:martinfowler.com,2012-02-04:photostream-20</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/20.html'&gt;&lt;img src = 'http://martinfowler.com/photos/20.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Stowe, VT&lt;/p&gt;
</content>
  </entry><entry>
    <title>Rebecca and I will be Keynoting at QCon London</title>
    <link href="http://martinfowler.com/snips/201201261024.html"/>
    <updated>2012-01-26T10:24:00-05:00</updated>
    <id>tag:martinfowler.com,2012-01-26:Rebecca-and-I-will-be-Keynoting-at-QCon-London</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/snips/rebecca.jpg' width = '150' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;QCon invited &lt;a href='http://www.thoughtworks.com/rebecca-parsons'&gt;Rebecca&lt;/a&gt; and I to do a &lt;a href='http://qconlondon.com/london-2012/presentation/The%20Data%20Panorama'&gt;keynote at QCon London&lt;/a&gt; (March 7). Over the last year or so we&amp;#8217;ve been seeing more and more of a change in how organizations think about data, so that seems a natural choice to talk about. Our clients are seeing larger volumes of data, that they need to analyze more quickly and more cleverly. We&amp;#8217;re seeing &lt;a href='http://martinfowler.com/bliki/NosqlDefinition.html'&gt;different technologies for data storage&lt;/a&gt; that have loosened the vice-like grip of relational databases. And we find our profession needs to start thinking about what our responsibilities are in managing all of this information.&lt;/p&gt;</content>
  </entry><entry>
    <title>Rebecca and I talk about DSLs on Software Engineering Radio</title>
    <link href="http://www.se-radio.net/2012/01/episode-182-domain-specific-languages-with-martin-fowler-and-rebecca-parsons/"/>
    <updated>2012-01-26T09:36:00-05:00</updated>
    <id>tag:martinfowler.com,2012-01-26:Rebecca-and-I-talk-about-DSLs-on-Software-Engineering-Radio</id>
    <category term=""/>
    <content type="html">&lt;p&gt;I&amp;#8217;ve long been a fan of the podcast series &lt;a href='http://www.se-radio.net/'&gt;Software Engineering Radio&lt;/a&gt;. The team there have built an excellent series of podcasts on various aspects of software development and I often listen to them while taking my afternoon walk. So I&amp;#8217;m glad to get a spot on there myself. In this episode I&amp;#8217;m on the program with Rebecca Parsons, my colleague and co-author of my &lt;a href='http://martinfowler.com/books/dsl.html'&gt;DSL book&lt;/a&gt; to talk about DSLs. We talk about what DSLs are, the differences between internal and external DSLs, and when you should (and shouldn&amp;#8217;t use DSLs). The episode is hosted by &lt;a href='http://www.voelter.de/'&gt;Markus V&#xF6;lter&lt;/a&gt;, who, of course, is a considerable expert on DSLs too - so it&amp;#8217;s really a three way conversation on the topic.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 19</title>
    <link href="http://martinfowler.com/photos/19.html"/>
    <updated>2012-01-22T19:49:00-05:00</updated>
    <id>tag:martinfowler.com,2012-01-22:photostream-19</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/19.html'&gt;&lt;img src = 'http://martinfowler.com/photos/19.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Boston, MA&lt;/p&gt;
</content>
  </entry><entry>
    <title>An open letter to Pearson opposing their support of SOPA and PIPA</title>
    <link href="http://martinfowler.com/articles/pearson-sopa.html"/>
    <updated>2012-01-12T14:04:00-05:00</updated>
    <id>tag:martinfowler.com,2012-01-12:An-open-letter-to-Pearson-opposing-their-support-of-SOPA-and-PIPA</id>
    <category term=""/>
    <content type="html">&lt;p&gt;&lt;a href='http://continuousdelivery.com/'&gt;Jez Humble&lt;/a&gt; and I have written an open letter to Pearson opposing their support of the SOPA and PIPA bills currently under consideration from the US congress.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 18</title>
    <link href="http://martinfowler.com/photos/18.html"/>
    <updated>2012-01-10T18:25:00-05:00</updated>
    <id>tag:martinfowler.com,2012-01-10:photostream-18</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/18.html'&gt;&lt;img src = 'http://martinfowler.com/photos/18.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Lindau, Germany&lt;/p&gt;
</content>
  </entry><entry>
    <title>photostream 17</title>
    <link href="http://martinfowler.com/photos/17.html"/>
    <updated>2011-11-22T17:35:00-05:00</updated>
    <id>tag:martinfowler.com,2011-11-22:photostream-17</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/17.html'&gt;&lt;img src = 'http://martinfowler.com/photos/17.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Wachusett Meadow, Princeton, MA&lt;/p&gt;
</content>
  </entry><entry>
    <title>Retreaded: SpecificationByExample</title>
    <link href="http://martinfowler.com/bliki/SpecificationByExample.html"/>
    <updated>2011-11-17T08:38:00-05:00</updated>
    <id>tag:martinfowler.com,2011-11-17:Retreaded--SpecificationByExample</id>
    <category term=""/>
    <content type="html">
&lt;p class = 'original'&gt;&lt;a href = 'http://martinfowler.com/bliki/Retread.html'&gt;Retread&lt;/a&gt; of post orginally made on 18 Mar 2004&lt;/p&gt;

&lt;p&gt;I was attending a workshop at XP/Agile Universe in 2002 when the
phrase 'Specification By Example' struck me as a way to describe one
of roles of testing in &lt;a href="http://martinfowler.com/articles/newMethodology.html#xp"&gt;XP&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;(These days it's terribly unfashionable to talk about Test Driven
Development (TDD) having anything to do with testing, but like &lt;a href="http://blogs.codehaus.org/people/tirsen/archives/000582_tdd_is_about_testing.html"&gt;Jon&lt;/a&gt; I do think that having a comprehensive automated test suite
is more valuable than the term 'side-effect' implies. Rather like if
someone offered me a million dollars to hike up a mountain. I may say
that the main purpose of the hike is the enjoyment of nature, but the
side-effect to my wallet is hardly trivial....)&lt;/p&gt;

&lt;p&gt;Specification By Example isn't the way most of us have been
brought up to think of specifications. Specifications are supposed to
be general, to cover all cases. Examples only highlight a few points,
you have to infer the generalizations yourself. This does mean that
Specification By Example can't be the only requirements technique you
use, but it doesn't mean that it can't take a leading role.&lt;/p&gt;

&lt;p&gt;So far the dominant idea with rigorous specifications, that is
those that can be clearly judged to be passed or failed, is to use pre
and post conditions. These techniques dominate in formal methods, and
also underpin &lt;a href="http://archive.eiffel.com/doc/manuals/technology/contract/"&gt;Design

by Contract&lt;/a&gt;. These techniques have their place, but they aren't
ideal. The pre-post conditions can be very easy to write in some
situations, but others can be very tricky. I've tried to use them in a
number enterprise application settings, and I've found that in many
situations it's as hard to write the pre and post conditions as it is
to write the solution. One of the great things about specification by
example is that examples are usually much easier to come up with,
particularly for the non-nerds who we write the software for. (&lt;a href="http://www.amazon.com/gp/product/0201824191?ie=UTF8&amp;amp;tag=martinfowlerc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201824191"&gt;Timothy Budd&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=martinfowlerc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321601912" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"/&gt; pointed out that while you can
show a lot of stack behavior with pre and post conditions, it's very
tricky to write pre and post conditions that show the LIFO
property.)&lt;/p&gt;

&lt;p&gt;An important property of TDD tests is that they involve a
double-check. In fact this highlights an amusing little lie of the XP
community. They make a very strong point of saying things Once and
Only Once, but in fact they always say things twice: once in the code
and once in the tests. Kent has pointed out that this double-check
principle is a vital principle, and it's certainly one that humans use
all the time. The value of the double check is very much tied into
using different methods for each side of the double check. Combining
Specification By Example with production code means that you have both
things said quite differently, which increases their ability to find
errors.&lt;/p&gt;

&lt;p&gt;The formal specification community have constantly had trouble
verifying that a design satisfies a specification, particularly in
doing this without error prone humans. For Specification By Example,
this is easy. Another case of Specification By Example being less
valuable in theory but more valuable in practice.&lt;/p&gt;

&lt;p&gt;One Design by Contract fan pointed out that if you write a
specification in terms of tests, then the supplier could satisfy the
specification by just returning hard-coded responses to the specific
test inputs. My flippant answer to this is that if you are concerned
about this then the issue of tests versus Design by Contract is the
least of your worries. But there is a serious point here. Tests are
always going to be incomplete, so they always have to be backed up
with other mechanisms. Being the twisted mind that I am, I actually
see this as a plus. Since it's clear that Specification By Example
isn't enough, it's clear that you need to do more to ensure that
everything is properly communicated. One of the most dangerous things
about a traditional requirements specification is when people think
that once they've written it they are done communicating.&lt;/p&gt;

&lt;p&gt;Specification By Example only works in the context of a working
relationship where both sides are collaborating and not fighting. The
examples trigger abstractions in the design team while keeping the
abstractions grounded. You do need more - things like regular
conversation, techniques like &lt;a href="http://www.amazon.com/gp/product/0321125215?ie=UTF8&amp;amp;tag=martinfowlerc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321125215"&gt;Domain Driven
Design&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=martinfowlerc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321601912" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"/&gt;, indeed even doses of Design by Contract. While I've
never had the opportunity to use Design by Contract fully (i.e. with
Eiffel) I regularly think about interfaces in contractual terms.
Specification By Example is a powerful tool, perhaps my most used
tool, but never my only tool.&lt;/p&gt;

&lt;p&gt;(For more thinking on Specification By Example, if not by that
name, take a look at &lt;a href="http://www.exampler.com/blog/"&gt;Brian Marick's&lt;/a&gt;
writings. Somewhere on his site there probably is one super page that
sums up his view on it. Of course finding it is less valuable than
reading all the stuff there while you're trying) &lt;/p&gt;
&lt;hr class="topSection"/&gt;
&lt;h2 id="SomeLaterComments"&gt;Some Later Comments&lt;/h2&gt;

&lt;p&gt;A couple of years after I first wrote this, there was a &lt;a href="http://beust.com/weblog/archives/000392.html"&gt;post by Cedric
	Beust&lt;/a&gt; that was critical of agile methods that
	caused a minor blog spat. There were rebuttals by &lt;a href="http://www.langrsoft.com/blog/2006/06/open-note-to-google-i-thank-google-one.html"&gt;Jeff Langr&lt;/a&gt; and &lt;a href="http://butunclebob.com/ArticleS.UncleBob.AgilePeopleStillDontGetIt"&gt;Bob
	Martin&lt;/a&gt;, and I sent this post through the feed again.  Jeff Langr
  later added a &lt;a href="http://www.langrsoft.com/blog/2006/06/are-tests-specs-ive-presented-tdd.html"&gt;nice
	example&lt;/a&gt; using using tests as specification by example for Java's
	Math.pow function.&lt;/p&gt;

&lt;p class="repost"&gt;reposted on 17 Nov 2011&lt;/p&gt;
</content>
  </entry><entry>
    <title>photostream 16</title>
    <link href="http://martinfowler.com/photos/16.html"/>
    <updated>2011-11-11T09:22:00-05:00</updated>
    <id>tag:martinfowler.com,2011-11-11:photostream-16</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/16.html'&gt;&lt;img src = 'http://martinfowler.com/photos/16.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Boston, MA&lt;/p&gt;
</content>
  </entry><entry>
    <title>New series book - Service Design Patterns</title>
    <link href="http://martinfowler.com/books/sdp.html"/>
    <updated>2011-11-10T10:38:00-05:00</updated>
    <id>tag:martinfowler.com,2011-11-10:New-series-book---Service-Design-Patterns</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/daigneau.jpg' width = '100' height = '133' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;Addison-Wesley has published a new book in my Signature Series. It&amp;#8217;s by Robert Daigneau and it&amp;#8217;s called Service Design Patterns. It&amp;#8217;s a topic that&amp;#8217;s already had too many books on it, but I added this one to the series because I think Robert has done a particularly good job of collecting together the best advice on the topic and organizing it into a useful handbook. This is the book that I think ought to become the standard book on the topic.&lt;/p&gt;</content>
  </entry><entry>
    <title>Retreaded: ContextualValidation</title>
    <link href="http://martinfowler.com/bliki/ContextualValidation.html"/>
    <updated>2011-11-03T11:00:00-04:00</updated>
    <id>tag:martinfowler.com,2011-11-03:Retreaded--ContextualValidation</id>
    <category term=""/>
    <content type="html">
&lt;p class = 'original'&gt;&lt;a href = 'http://martinfowler.com/bliki/Retread.html'&gt;Retread&lt;/a&gt; of post orginally made on 07 Dec 2005&lt;/p&gt;

&lt;p&gt;In my writing endeavors, I've long intended to write a chunk of
	material on validation. It's an area that leads to a lot of
	confusion and it would be good to get some solid description of some
	of the techniques that work well. However life is full of things to
	write about, rather more than time allows.&lt;/p&gt;

&lt;p&gt;Some recent readings made me think about saying a few
	preliminary things on the topic. One common thing I see people do
	is to develop validation routines for objects. These routines come
	in various ways, they may be in the object or external, they may
	return a boolean or throw an exception to indicate failure. But one
	thing that I think constantly trips people up is when they think
	object validity on a context independent way such as an &lt;code&gt;isValid&lt;/code&gt;
	method implies.&lt;/p&gt;

&lt;p&gt;I think it's much more useful to think of validation as something
that's bound to a context - typically an action that you want to do.
Is this order valid to be filled, is this customer valid to check in
to the hotel. So rather than have methods like &lt;code&gt;isValid&lt;/code&gt;
have methods like &lt;code&gt;isValidForCheckIn&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;One of the consequences of this is that saving an object to a
	database is itself an action. Thinking about it that way raises some
	important questions. Often when people talk about a context-free
	validity, they mean it in terms of saving to a database. But the
	various validity checks that make this up should be interrogated
	with the question "should failing this test prevent saving?"&lt;/p&gt;

&lt;p&gt;In &lt;a href="http://www.amazon.com/gp/product/1568843224?ie=UTF8&amp;amp;tag=martinfowlerc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1568843224"&gt;About Face&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=martinfowlerc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321601912" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"/&gt; Alan Cooper advocated that we shouldn't let
our ideas of valid states prevent a user from entering (and saving)
incomplete information. I was reminded by this a few days ago when
reading a draft of a book that &lt;a href="http://www.jnsk.se/weblog/rss.xml"&gt;Jimmy Nilsson&lt;/a&gt; is working
on. He stated a principle that you should always be able to save an
object, even if it has errors in it. While I'm not convinced that this
should be an absolute rule, I do think people tend to prevent saving
more than they ought. Thinking about the context for validation may
help prevent that.&lt;/p&gt;

&lt;p class="repost"&gt;reposted on 03 Nov 2011&lt;/p&gt;
</content>
  </entry><entry>
    <title>ThoughtWorks Agile East</title>
    <link href="http://www.thoughtworks.com/events/agile-east-conference-2011"/>
    <updated>2011-10-13T16:20:00-04:00</updated>
    <id>tag:martinfowler.com,2011-10-13:ThoughtWorks-Agile-East</id>
    <category term=""/>
    <content type="html">&lt;p&gt;ThoughtWorks is organizing an &lt;a href='http://www.thoughtworks.com/events/spend-day-martin-fowler-neal-ford-other-agile-thought-leaders'&gt;Agile East&lt;/a&gt; event: a one day conference that we&amp;#8217;re holding in New York (November 2) and Atlanta (November 7). I&amp;#8217;ll be speaking, doing my usual &lt;a href='http://martinfowler.com/bliki/SuiteOfTalks.html'&gt;suite of talks&lt;/a&gt;. More importantly there&amp;#8217;s an impressive line up of my colleagues - the people whose ideas I clip and package up into those talks. So this is a great opportunity to listen to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Graham and Andy talk from their experiences in the technical leadership of agile projects&lt;/li&gt;

&lt;li&gt;project management lessons from Joe Z&lt;/li&gt;

&lt;li&gt;hot devops and continuous delivery juice from Rolf and Jez&lt;/li&gt;

&lt;li&gt;Ross&amp;#8217;s advice on IT budgeting&lt;/li&gt;

&lt;li&gt;Linda&amp;#8217;s take on integrating UX with an agile project&lt;/li&gt;

&lt;li&gt;Matt on using offshore teams for agile (he played a big role in building our offshore teams)&lt;/li&gt;

&lt;li&gt;a trio of talks on the gnarly topic of organizational change from Tiffany, Greg and Manu&lt;/li&gt;

&lt;li&gt;Chad explaining how to avoid the pitfalls of automated tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and a special guest in New York who will make all our talks seem pedestrian.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 15</title>
    <link href="http://martinfowler.com/photos/15.html"/>
    <updated>2011-09-17T15:55:00-04:00</updated>
    <id>tag:martinfowler.com,2011-09-17:photostream-15</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/15.html'&gt;&lt;img src = 'http://martinfowler.com/photos/15.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Miyajima, Japan&lt;/p&gt;
</content>
  </entry><entry>
    <title>Interviewed about Agile in 2001 by Jim Highsmith</title>
    <link href="http://www.jimhighsmith.com/2011/09/14/interview-with-martin-fowler-circa-2001/"/>
    <updated>2011-09-16T08:20:00-04:00</updated>
    <id>tag:martinfowler.com,2011-09-16:Interviewed-about-Agile-in-2001-by-Jim-Highsmith</id>
    <category term=""/>
    <content type="html">&lt;p&gt;When I went to Snowbird in 2001 for the meeting that led to the &lt;a href='http://agilemanifesto.org/'&gt;Manifesto&lt;/a&gt;, Jim interviewed me for the book he was writing on &lt;a href='http://www.amazon.com/Agile-Software-Development-Ecosystems-Highsmith/dp/0201760436/'&gt;Agile Software Development Ecosystems&lt;/a&gt;. It provides a snapshot on my thinking on extreme programming and this thing that a few days later we called agile software development.&lt;/p&gt;</content>
  </entry><entry>
    <title>Retreaded: SoftwareDevelopmentAttitude</title>
    <link href="http://martinfowler.com/bliki/SoftwareDevelopmentAttitude.html"/>
    <updated>2011-09-08T10:04:00-04:00</updated>
    <id>tag:martinfowler.com,2011-09-08:Retreaded--SoftwareDevelopmentAttitude</id>
    <category term=""/>
    <content type="html">
&lt;p class = 'original'&gt;&lt;a href = 'http://martinfowler.com/bliki/Retread.html'&gt;Retread&lt;/a&gt; of post orginally made on 08 Mar 2004&lt;/p&gt;

&lt;p&gt;Many debates in software development are underpinned by whether
the speaker has a &lt;a href="http://martinfowler.com/bliki/DirectingAttitude.html"&gt;DirectingAttitude&lt;/a&gt; or an
&lt;a href="http://martinfowler.com/bliki/EnablingAttitude.html"&gt;EnablingAttitude&lt;/a&gt;. These different attitudes affect choices
over languages, designs, tools, processes, and lots more.&lt;/p&gt;

&lt;p&gt;Here's some examples of this dichotomy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A debate a while ago triggered by Joel Spolsky's post on &lt;a href="http://www.joelonsoftware.com/items/2003/10/13.html"&gt;exceptions&lt;/a&gt;.

He didn't like exceptions because they could be misused badly, leading
to confusing code (directing). Bill Caputo &lt;a href="http://www.williamcaputo.com/archives/000009.html"&gt;pointed
out&lt;/a&gt; that exceptions, when used well, make life much easier
(enabling).&lt;/li&gt;

&lt;li&gt;Some of the static/dynamic typing debate brings up these
points. Some arguments in favor of static typing talk about how they
prevent people from making certain kinds of mistake (directing) while
dynamic typers point out how static typing restricts some useful
idioms (enabling).&lt;/li&gt;

&lt;li&gt;Agile processes are &lt;a href="http://martinfowler.com/bliki/PeopleOriented.html"&gt;PeopleOriented&lt;/a&gt; (enabling),
while plan-driven methods seek to ensure that even a poor team can do
an acceptable job (directing).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't hard-wired attitudes. Often people are directing in
some cases and enabling in others. But I think there is a deep strain
running through here, often a personality issue, that runs underneath
much discussion on how we do software. (I'm very much in the enabling
category, as if you can't tell.)&lt;/p&gt;

&lt;p&gt;You might think that all restrictions on what a developer does
imply a directing attitude, but it's not that simple. As an example,
consider memory management. You can think of this as a directing
feature: programmers can't be trusted to manage memory correctly so
take away their ability to allocate memory. But I look at memory
management as an enabling technology - it takes away something I don't
&lt;i&gt;want&lt;/i&gt; to worry about, so I can concentrate better on those
things I do care about. Steve &lt;a href="http://stevef.truemesh.com/archives/000206.html"&gt;tied this thought nicely&lt;/a&gt; onto the
difference between problems and difficulties.&lt;/p&gt;

&lt;p class="repost"&gt;reposted on 08 Sep 2011&lt;/p&gt;
</content>
  </entry><entry>
    <title>photostream 14</title>
    <link href="http://martinfowler.com/photos/14.html"/>
    <updated>2011-09-07T19:01:00-04:00</updated>
    <id>tag:martinfowler.com,2011-09-07:photostream-14</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/14.html'&gt;&lt;img src = 'http://martinfowler.com/photos/14.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Gourdon, France&lt;/p&gt;
</content>
  </entry><entry>
    <title>Speaking in Frankfurt and Berlin in October</title>
    <link href="http://continuous-delivery.thoughtworks.com/events/software-design-21st-century-frankfurt-berlin-2011"/>
    <updated>2011-09-06T09:04:00-04:00</updated>
    <id>tag:martinfowler.com,2011-09-06:Speaking-in-Frankfurt-and-Berlin-in-October</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/snips/tw-de.png' width = '150' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;I&amp;#8217;ll be taking part in a couple of &lt;a href='http://continuous-delivery.thoughtworks.com/events/software-design-21st-century-frankfurt-berlin-2011'&gt;ThoughtWorks events in Germany&lt;/a&gt; during October. They are both evening events (Oct 17 Frankfurt and Oct 18 Berlin). I shall do my usual &lt;a href='http://martinfowler.com/bliki/SuiteOfTalks.html'&gt;suite of talks&lt;/a&gt; on some mix of topics. I&amp;#8217;ll be joined by two of my colleagues: Wolf Schlegel, who will be talking about continuous delivery and Erik D&#xF6;rnenburg who will be talking about using lean techniques with enterprise architecture.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 13</title>
    <link href="http://martinfowler.com/photos/13.html"/>
    <updated>2011-08-31T22:29:00-04:00</updated>
    <id>tag:martinfowler.com,2011-08-31:photostream-13</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/13.html'&gt;&lt;img src = 'http://martinfowler.com/photos/13.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Highgate, London&lt;/p&gt;
</content>
  </entry><entry>
    <title>Update of "It's Not Just Standing Up"</title>
    <link href="http://martinfowler.com/articles/itsNotJustStandingUp.html"/>
    <updated>2011-08-29T09:21:00-04:00</updated>
    <id>tag:martinfowler.com,2011-08-29:Update-of--It-s-Not-Just-Standing-Up-</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/snips/jyip.jpg' width = '100' height = '' alt = 'Jason Yip' title = 'Jason Yip'/&gt;&lt;/div&gt;&lt;p&gt;Short daily &amp;#8220;stand-up&amp;#8221; meetings are a regular feature of agile projects. Done well they allow frequent communication across the team with a high signal to noise ratio. Done badly, they can be pretty grim. For several years, this article by Jason Yip has become the definitive source of information on how to make them better. Jason has just finished a comprehensive revision of the article, so if you&amp;#8217;re looking to get the best from your stand-ups, you should take a good look at the tips in here.&lt;/p&gt;</content>
  </entry><entry>
    <title>Speaking at goto Aarhus</title>
    <link href="http://martinfowler.com/snips/201108290912.html"/>
    <updated>2011-08-29T09:12:00-04:00</updated>
    <id>tag:martinfowler.com,2011-08-29:Speaking-at-goto-Aarhus</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/snips/goto_logo.png' width = '100' height = '' alt = '' title = ''/&gt;&lt;/div&gt;&lt;p&gt;As in so many previous years, I&amp;#8217;ll be speaking at the the &lt;a href='http://gotocon.com/aarhus-2011/'&gt;goto conference&lt;/a&gt; (formerly known as JAOO) in early October. This is an excellent conference with a good range of material across both technology and process. This year I&amp;#8217;ll be participating in a pair of tutorials.&lt;/p&gt;

&lt;p&gt;On Oct 9 I&amp;#8217;ll be with Jez Humble doing our full-day tutorial on Continuous Delivery, the first time we&amp;#8217;ve brought this tutorial to Aarhus. This will cover much of the ground in Jez and Dave&amp;#8217;s award winning book including the business case for Continuous Delivery, deployment pipelines, testing strategies, version control organization, and recipes for going live. We&amp;#8217;ve had a lot of good feedback on this tutorial so far, so I&amp;#8217;m glad to finally bring this to my favorite conference.&lt;/p&gt;

&lt;p&gt;On Oct 13 I&amp;#8217;ll join Rebecca Parsons to talk about Evolutionary Architecture. Rebecca&amp;#8217;s long been our chief technical firefighter on difficult projects, which often have complicated dependencies to enterprise architecture. I&amp;#8217;ve long been urging her to talk more about her experiences and techniques for handling these issues, so it will be good to work with her on this tutorial.&lt;/p&gt;

&lt;p&gt;In between I&amp;#8217;ll be hanging around the conference catching up on all the good pickings that will be available.&lt;/p&gt;

&lt;p&gt;(If you want to register, using the discount code &amp;#8220;fowl1250&amp;#8221; will get you a worthwhile discount.)&lt;/p&gt;</content>
  </entry><entry>
    <title>Neal Ford's video workshop on agile engineering</title>
    <link href="http://martinfowler.com/snips/201108261000.html"/>
    <updated>2011-08-26T10:00:00-04:00</updated>
    <id>tag:martinfowler.com,2011-08-26:Neal-Ford-s-video-workshop-on-agile-engineering</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/snips/neal.jpg' width = '100' height = '103' alt = 'Neal Ford' title = 'Neal Ford'/&gt;&lt;/div&gt;&lt;p&gt;My colleague Neal Ford is a frequent writer and speaker who shares many of my interests and opinions (and is an excellent source of ideas for me to clip). In 2009-10 he wrote a &lt;a href='http://www.ibm.com/developerworks/java/library/j-eaed1/index.html'&gt;series of fifteen articles&lt;/a&gt; for IBM developerWorks which dug deeper into the question of evolutionary architecture and design. His topics included Test Driven Development, leveraging reusable code, refactoring towards design and Domain-Specific Languages.&lt;/p&gt;

&lt;p&gt;Now he&amp;#8217;s followed on from this and recorded a &lt;a href='http://my.safaribooksonline.com/video/-/9781449314439'&gt;video workshop on Agile Engineering Practices&lt;/a&gt; for O&amp;#8217;Reilly that&amp;#8217;s available on safari books online. These cover much of the topics that make evolutionary design possible, including Test-Driven Design, automation, and testing strategies.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 12</title>
    <link href="http://martinfowler.com/photos/12.html"/>
    <updated>2011-08-25T15:35:00-04:00</updated>
    <id>tag:martinfowler.com,2011-08-25:photostream-12</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/12.html'&gt;&lt;img src = 'http://martinfowler.com/photos/12.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Mesa Arch, Canyonlands N.P., Utah&lt;/p&gt;
</content>
  </entry><entry>
    <title>ThoughtWorks Microsite on Continuous Delivery</title>
    <link href="http://continuous-delivery.thoughtworks.com"/>
    <updated>2011-08-24T10:02:00-04:00</updated>
    <id>tag:martinfowler.com,2011-08-24:ThoughtWorks-Microsite-on-Continuous-Delivery</id>
    <category term=""/>
    <content type="html">&lt;p&gt;ThoughtWorks has launched a &lt;a href='http://continuous-delivery.thoughtworks.com/'&gt;microsite devoted to Continuous Delivery&lt;/a&gt;. At the moment you&amp;#8217;ll find some short videos from the ThoughtWorks Live event we did in May, plus links to recent writing by Jez Humble (oops, now I have to call him the &lt;a href='http://drdobbs.com/joltawards/231500080?pgno=7'&gt;award-winning&lt;/a&gt; Jez Humble). We also post details of our upcoming events in the field of Continuous Delivery and Devops.&lt;/p&gt;</content>
  </entry><entry>
    <title>Beaten Again</title>
    <link href="http://martinfowler.com/snips/201108240949.html"/>
    <updated>2011-08-24T09:49:00-04:00</updated>
    <id>tag:martinfowler.com,2011-08-24:Beaten-Again</id>
    <category term=""/>
    <content type="html">&lt;p&gt;In the software world, we have the &lt;a href='http://drdobbs.com/joltawards'&gt;Jolt awards&lt;/a&gt;. These were originally run by Software Development magazine and are now run by Dr Dobbs magazine. My books have won a couple of &amp;#8216;productivity awards&amp;#8217; - which are essentially the runner-up awards - but I&amp;#8217;ve never snagged to top award (now called the &amp;#8216;excellence award&amp;#8217;). This year my &lt;a href='\'&gt;DSL book&lt;/a&gt; was up for an award and &lt;a href='http://drdobbs.com/joltawards/231500080?pgno=2'&gt;won a &amp;#8216;finalist award&amp;#8217;&lt;/a&gt; (essentially this means I was runner-up to the runner-ups).&lt;/p&gt;

&lt;p&gt;So I failed again, but this year I would have been very annoyed if I had won. I&amp;#8217;ve argued all year that Jez and Dave&amp;#8217;s book on &lt;a href='http://martinfowler.com/books/continuousDelivery.html'&gt;Continuous Delivery&lt;/a&gt; was the most important book released this year, and so I&amp;#8217;m glad that Dr Dobbs &lt;a href='http://drdobbs.com/joltawards/231500080?pgno=7'&gt;agreed with me&lt;/a&gt; and gave them the excellence award. Congratulations to Jez and Dave in joining the long list of people who have kept me away from this award.&lt;/p&gt;

&lt;p&gt;Although I keep missing the top prize, my signature series has a very good record with these awards. The 10 books in my series so far have picked up 1 finalist, 4 productivity and 2 excellence awards. Not a bad hit rate.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 11</title>
    <link href="http://martinfowler.com/photos/11.html"/>
    <updated>2011-08-03T18:14:00-04:00</updated>
    <id>tag:martinfowler.com,2011-08-03:photostream-11</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/11.html'&gt;&lt;img src = 'http://martinfowler.com/photos/11.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Villa Rufolo, Ravello, Italy&lt;/p&gt;
</content>
  </entry><entry>
    <title>ThoughtWorks Technology Radar</title>
    <link href="http://www.thoughtworks.com/radar"/>
    <updated>2011-08-02T10:58:00-04:00</updated>
    <id>tag:martinfowler.com,2011-08-02:ThoughtWorks-Technology-Radar</id>
    <category term=""/>
    <content type="html">&lt;p&gt;We have now released the latest version of the ThoughtWorks Technology Radar. This is where a bunch of my colleagues get together and discuss the technologies that they think are worth keeping an eye on. It&amp;#8217;s not intended to be some comprehensively researched list, as it&amp;#8217;s just the aggregation of the opinions of the small group of people that create it. But since that group is an experienced group of ThoughtWorks consultants, I think it&amp;#8217;s a useful pointer to things to pay attention to in enterprise software.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 10</title>
    <link href="http://martinfowler.com/photos/10.html"/>
    <updated>2011-07-12T19:56:00-04:00</updated>
    <id>tag:martinfowler.com,2011-07-12:photostream-10</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/10.html'&gt;&lt;img src = 'http://martinfowler.com/photos/10.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Canterbury Cathedral, Canterbury, England&lt;/p&gt;
</content>
  </entry><entry>
    <title>The LMAX Architecture</title>
    <link href="http://martinfowler.com/articles/lmax.html"/>
    <updated>2011-07-12T09:43:00-04:00</updated>
    <id>tag:martinfowler.com,2011-07-12:The-LMAX-Architecture</id>
    <category term=""/>
    <content type="html">&lt;p&gt;When I was at QCon London last year, there was much buzz around a talk about a new retail trading system. The thing that got people&amp;#8217;s attention was its approach to achieving its high performance needs - reaching 6 million TPS. It does this by running all its business logic on a single JVM thread, getting high speed without all the complications of concurrent programming. This article describes the architecture they use to pull this off.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 9</title>
    <link href="http://martinfowler.com/photos/9.html"/>
    <updated>2011-07-06T18:45:00-04:00</updated>
    <id>tag:martinfowler.com,2011-07-06:photostream-9</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/9.html'&gt;&lt;img src = 'http://martinfowler.com/photos/9.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Gloucester, MA&lt;/p&gt;
</content>
  </entry><entry>
    <title>Mike Mason and I talk about Feature Branching</title>
    <link href="http://www.thoughtworks.com/perspectives/30-06-2011-continuous-delivery"/>
    <updated>2011-07-05T10:05:00-04:00</updated>
    <id>tag:martinfowler.com,2011-07-05:Mike-Mason-and-I-talk-about-Feature-Branching</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/snips/mike-and-mf.jpg' width = '159' height = '88' alt = 'Mike Mason and Martin Fowler' title = 'Mike Mason and Martin Fowler'/&gt;&lt;/div&gt;&lt;p&gt;In this video (12 minutes) &lt;a href='http://mikemason.ca/blog/'&gt;Mike Mason&lt;/a&gt; and I talk about the perils of &lt;a href='http://martinfowler.com/bliki/FeatureBranch.html'&gt;Feature Branching&lt;/a&gt; and its alternatives.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 8</title>
    <link href="http://martinfowler.com/photos/8.html"/>
    <updated>2011-06-23T19:41:00-04:00</updated>
    <id>tag:martinfowler.com,2011-06-23:photostream-8</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/8.html'&gt;&lt;img src = 'http://martinfowler.com/photos/8.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Boscastle, Cornwall&lt;/p&gt;
</content>
  </entry><entry>
    <title>Sam Newman talks about Continuous Delivery</title>
    <link href="http://www.thoughtworks.com/events/push-the-button"/>
    <updated>2011-06-21T09:37:00-04:00</updated>
    <id>tag:martinfowler.com,2011-06-21:Sam-Newman-talks-about-Continuous-Delivery</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/snips/sam-cd.jpg' width = '116' height = '116' alt = 'Sam Newman' title = 'Sam Newman'/&gt;&lt;/div&gt;&lt;p&gt;&lt;a href='http://www.samnewman.org'&gt;Sam Newman&lt;/a&gt; is one of our Principal Consultants based in London who has been heavily involved in the development of our approaches to &lt;a href='http://martinfowler.com/delivery.html'&gt;Continuous Delivery&lt;/a&gt;. Recently he gave a series of QTB (Quarterly Technology Briefing) talks and &lt;a href='http://www.thoughtworks.com/events/push-the-button'&gt;one of these was videoed&lt;/a&gt; and put on the ThoughtWorks site. It&amp;#8217;s an excellent overview of why it&amp;#8217;s important to learn how to do Continuous Delivery on the modern web, together with an overview of the practices needed to achieve it.&lt;/p&gt;
&lt;!-- 
still of Sam taken from frame 9169 of video
--&gt;</content>
  </entry><entry>
    <title>photostream 7</title>
    <link href="http://martinfowler.com/photos/7.html"/>
    <updated>2011-05-28T09:54:00-04:00</updated>
    <id>tag:martinfowler.com,2011-05-28:photostream-7</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/7.html'&gt;&lt;img src = 'http://martinfowler.com/photos/7.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Jordan Pond, Acadia N.P., ME&lt;/p&gt;
</content>
  </entry><entry>
    <title>Reference pages for DSL patterns</title>
    <link href="http://martinfowler.com/dslCatalog"/>
    <updated>2011-05-13T09:35:00-04:00</updated>
    <id>tag:martinfowler.com,2011-05-13:Reference-pages-for-DSL-patterns</id>
    <category term=""/>
    <content type="html">&lt;p&gt;I&amp;#8217;ve been very tardy in doing this, but I&amp;#8217;ve finally put up a set of reference pages for the patterns in the &lt;a href='http://martinfowler.com/books/dsl.html'&gt;DSL Book&lt;/a&gt;. There&amp;#8217;s not much on each page, just the intent, chapter reference, and sometimes some summary text. I&amp;#8217;ve primarily put these up to give them a stable URI for reference purposes. There&amp;#8217;s a chance I&amp;#8217;ll put supplemental material up there too, but I&amp;#8217;ve had that intention before without anything happening.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 6</title>
    <link href="http://martinfowler.com/photos/6.html"/>
    <updated>2011-05-12T20:41:00-04:00</updated>
    <id>tag:martinfowler.com,2011-05-12:photostream-6</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/6.html'&gt;&lt;img src = 'http://martinfowler.com/photos/6.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;St Malo, Brittany, France&lt;/p&gt;
</content>
  </entry><entry>
    <title>photostream 5</title>
    <link href="http://martinfowler.com/photos/5.html"/>
    <updated>2011-05-07T18:07:00-04:00</updated>
    <id>tag:martinfowler.com,2011-05-07:photostream-5</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/5.html'&gt;&lt;img src = 'http://martinfowler.com/photos/5.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Castle Hill, Ipswich, MA&lt;/p&gt;
</content>
  </entry><entry>
    <title>Musings on ebooks</title>
    <link href="http://martinfowler.com/articles/ebook.html"/>
    <updated>2011-05-05T09:18:00-04:00</updated>
    <id>tag:martinfowler.com,2011-05-05:Musings-on-ebooks</id>
    <category term=""/>
    <content type="html">&lt;p&gt;It&amp;#8217;s only just over a year since I got my first ebook reader. Now I only buy paper books when I really have to. I wrote my last book thinking of it primarily as a paper book, but that will be the last time, in the future electronic forms will be at the front of my mind. It&amp;#8217;s clear ebooks will change the book industry in a dramatic way, but it&amp;#8217;s not clear exactly how. Here are my current thoughts on what&amp;#8217;s happening.&lt;/p&gt;</content>
  </entry><entry>
    <title>Tutorial on Continuous Delivery at goto; Aarhus</title>
    <link href="http://martinfowler.com/snips/201105031617.html"/>
    <updated>2011-05-03T16:17:00-04:00</updated>
    <id>tag:martinfowler.com,2011-05-03:Tutorial-on-Continuous-Delivery-at-goto--Aarhus</id>
    <category term=""/>
    <content type="html">&lt;div class = 'img'&gt;&lt;img src = 'http://martinfowler.com/snips/jez.jpg' width = '116' height = '125' alt = 'Jez Humble' title = 'Jez Humble'/&gt;&lt;/div&gt;&lt;p&gt;I&amp;#8217;ll be joining my colleague Jez Humble to give another of our tutorials on Continuous Delivery at &lt;a href='http://gotocon.com/aarhus-2011/presentations/show_presentation.jsp?oid=3172'&gt;goto; Aarhus&lt;/a&gt;. This is the rebranded incarnation of JAOO - which has been my favorite conference for a long time now. This will be our first time doing the full day continuous delivery tutorial in Aarhus.&lt;/p&gt;</content>
  </entry><entry>
    <title>Reflections on 10 years since the agile manifesto at SD Times</title>
    <link href="http://www.sdtimes.com/link/35489"/>
    <updated>2011-05-03T13:05:00-04:00</updated>
    <id>tag:martinfowler.com,2011-05-03:Reflections-on-10-years-since-the-agile-manifesto-at-SD-Times</id>
    <category term=""/>
    <content type="html">&lt;p&gt;SD Times has published an interview with me on my thoughts on ten years since the Agile Manifesto. I answer questions about what brought me to the meeting, whether I think the manifesto should be changed, and what I see in the next five years of the agile movement.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 4</title>
    <link href="http://martinfowler.com/photos/4.html"/>
    <updated>2011-05-02T14:17:00-04:00</updated>
    <id>tag:martinfowler.com,2011-05-02:photostream-4</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/4.html'&gt;&lt;img src = 'http://martinfowler.com/photos/4.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Kumarakom, Kerala, India&lt;/p&gt;
</content>
  </entry><entry>
    <title>Signature Series 40% off until May 15</title>
    <link href="http://martinfowler.com/snips/201104281449.html"/>
    <updated>2011-04-28T14:49:00-04:00</updated>
    <id>tag:martinfowler.com,2011-04-28:Signature-Series-40--off-until-May-15</id>
    <category term=""/>
    <content type="html">&lt;p&gt;It&amp;#8217;s been going on for a bit, but I&amp;#8217;ve been tardy in letting people know. Addison-Wesley are currently having &lt;a href='http://www.informit.com/promotions/promotion.aspx?promo=138302'&gt;a promotion on signature series books&lt;/a&gt;. You get 40% off if you buy through informIT and buy at least two books in any of the series (ie mine, Kent&amp;#8217;s or Mike&amp;#8217;s).&lt;/p&gt;</content>
  </entry><entry>
    <title>Adding photos to my feed</title>
    <link href="http://martinfowler.com/snips/201104231610.html"/>
    <updated>2011-04-23T16:10:00-04:00</updated>
    <id>tag:martinfowler.com,2011-04-23:Adding-photos-to-my-feed</id>
    <category term=""/>
    <content type="html">&lt;p&gt;You may have noticed some photos cropping up in my news feed. Like many geeks I indulge in photography. So far this has been a harmless personal diversion, but I&amp;#8217;ve reached the point where I&amp;#8217;m feeling a desire to share some of my photos with the Internet - just in case we have a shortage. So you&amp;#8217;ll see photos appear in my photostream from time to time. I intend to post no more than one or two a week.&lt;/p&gt;</content>
  </entry><entry>
    <title>photostream 3</title>
    <link href="http://martinfowler.com/photos/3.html"/>
    <updated>2011-04-23T15:12:00-04:00</updated>
    <id>tag:martinfowler.com,2011-04-23:photostream-3</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/3.html'&gt;&lt;img src = 'http://martinfowler.com/photos/3.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Mont Saint-Michel, Normandy, France&lt;/p&gt;
</content>
  </entry><entry>
    <title>photostream 2</title>
    <link href="http://martinfowler.com/photos/2.html"/>
    <updated>2011-04-23T15:11:00-04:00</updated>
    <id>tag:martinfowler.com,2011-04-23:photostream-2</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/2.html'&gt;&lt;img src = 'http://martinfowler.com/photos/2.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Charlestown, MA&lt;/p&gt;
</content>
  </entry><entry>
    <title>photostream 1</title>
    <link href="http://martinfowler.com/photos/1.html"/>
    <updated>2011-04-23T15:10:00-04:00</updated>
    <id>tag:martinfowler.com,2011-04-23:photostream-1</id>
    <category term=""/>
    <content type="html">
&lt;p&gt;&lt;a href = 'http://martinfowler.com/photos/1.html'&gt;&lt;img src = 'http://martinfowler.com/photos/1.jpg'&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;401 Trail, Crested Butte, CO&lt;/p&gt;
</content>
  </entry><entry>
    <title>Going Beyond Curly Braces</title>
    <link href="http://martinfowler.com/snips/201104191654.html"/>
    <updated>2011-04-19T16:54:00-04:00</updated>
    <id>tag:martinfowler.com,2011-04-19:Going-Beyond-Curly-Braces</id>
    <category term=""/>
    <content type="html">&lt;p&gt;On my long flight down to Australia recently I dug into a copy of &lt;a href='http://pragprog.com/titles/btlang/seven-languages-in-seven-weeks'&gt;Seven Languages in Seven Weeks&lt;/a&gt;. I spent less than seven hours on it, but found it a worthwhile read. He takes a lightening tour through seven languages. It&amp;#8217;s not enough to go into much depth on any them, but it is enough to get a rough feel what&amp;#8217;s interesting about them. I&amp;#8217;d particularly recommend it if you are just starting to explore beyond the curly-brace languages that dominate so much of current programming.&lt;/p&gt;

&lt;p&gt;One thing I particularly appreciate about pragprog books is that you get access to electronic versions in multiple formats. This book worked very well on the Kindle, despite the small screen.&lt;/p&gt;</content>
  </entry><entry>
    <title>Article on Non-Determinism in Tests</title>
    <link href="http://martinfowler.com/articles/nonDeterminism.html"/>
    <updated>2011-04-14T09:19:00-04:00</updated>
    <id>tag:martinfowler.com,2011-04-14:Article-on-Non-Determinism-in-Tests</id>
    <category term=""/>
    <content type="html">&lt;p&gt;In conversations with project teams, I&amp;#8217;ve heard a lot about problems with flaky, unreliable tests. These non-deterministic tests are a serious problem with testing efforts. So I&amp;#8217;ve written an article that talks about how to deal with these non-determinisms, discussing how to cope with some common causes: lack of isolation, asynchronous behavior, remote services, time, and resource leaks.&lt;/p&gt;</content>
  </entry><entry>
    <title>Q&amp;A on Story Points</title>
    <link href="http://blog.anandvishwanath.in/2011/03/questioning-story-points.html"/>
    <updated>2011-03-29T08:57:00-04:00</updated>
    <id>tag:martinfowler.com,2011-03-29:Q-A-on-Story-Points</id>
    <category term=""/>
    <content type="html">&lt;p&gt;My colleague &lt;a href='http://blog.anandvishwanath.in/'&gt;Anand Vishwanath&lt;/a&gt; has put together a nice Q&amp;amp;A on the role Story Points play on a project.&lt;/p&gt;</content>
  </entry><entry>
    <title>InfoQ interviews Jez Humble and me about Continuous Delivery</title>
    <link href="http://martinfowler.com/snips/201102181539.html"/>
    <updated>2011-02-18T15:39:00-05:00</updated>
    <id>tag:martinfowler.com,2011-02-18:InfoQ-interviews-Jez-Humble-and-me-about-Continuous-Delivery</id>
    <category term=""/>
    <content type="html">&lt;p&gt;After our tutorial at QCon San Francisco last year, the InfoQ people sat us down for an &lt;a href='http://www.infoq.com/interviews/jez-humble-martin-fowler-cd'&gt;interview on Continuous Delivery&lt;/a&gt;.&lt;/p&gt;</content>
  </entry><entry>
    <title>Update on malware issue with ThoughtWorks web sites</title>
    <link href="http://martinfowler.com/snips/201102181119.html"/>
    <updated>2011-02-18T11:19:00-05:00</updated>
    <id>tag:martinfowler.com,2011-02-18:Update-on-malware-issue-with-ThoughtWorks-web-sites</id>
    <category term=""/>
    <content type="html">&lt;p&gt;I&amp;#8217;ve posted &lt;a href='../articles/malware.html'&gt;an article detailing our malware attack&lt;/a&gt;. The short form is that we believe our sites are clear, but we currently have to operate them with reduced functionality. The malware only attacks a small proportion of visitors (which is part of what makes it difficult to deal with). However if you have visited our sites since Christmas with a windows machine, you should read more.&lt;/p&gt;</content>
  </entry><entry>
    <title>Speaking at ThoughtWorks Australia QTB</title>
    <link href="http://martinfowler.com/snips/201102171401.html"/>
    <updated>2011-02-17T14:01:00-05:00</updated>
    <id>tag:martinfowler.com,2011-02-17:Speaking-at-ThoughtWorks-Australia-QTB</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Next week I&amp;#8217;m heading off to spend some time in Australia (thankfully away from all this snow-shovelling). While I&amp;#8217;m there I&amp;#8217;ll be participating in a series of &lt;a href='http://www.thoughtworks.com/events/thoughtworks-quarterly-briefing-continuous-delivery'&gt;Quarterly Technology Briefings&lt;/a&gt;. These will take the form of a panel Q&amp;amp;A on &lt;a href='http://martinfowler.com/delivery.html'&gt;Continuous Delivery&lt;/a&gt;. On the panel I shall be over-shadowed by &lt;a href='http://memeagora.blogspot.com/'&gt;Neal Ford&lt;/a&gt; and we will both be over-shadowed by &lt;a href='http://evan.bottch.com/'&gt;Evan Bottcher&lt;/a&gt;.&lt;/p&gt;</content>
  </entry><entry>
    <title>Investigating ThoughtWorks in Vancouver</title>
    <link href="http://martinfowler.com/snips/201102081553.html"/>
    <updated>2011-02-08T15:53:00-05:00</updated>
    <id>tag:martinfowler.com,2011-02-08:Investigating-ThoughtWorks-in-Vancouver</id>
    <category term=""/>
    <content type="html">&lt;p&gt;&lt;a href='http://www.linkedin.com/in/sidpinney'&gt;Sid Pinney&lt;/a&gt; often takes on the job of investigating new locations for ThoughtWorks offices. He&amp;#8217;s been one of the first to help start our offices in England, China, and Brazil. Last week I got an email saying he&amp;#8217;s investigating possibilities in Vancouver. He&amp;#8217;s looking for people to talk to: so if you&amp;#8217;re a prospective client, possible employee, or are just friendly and looking to have Sid buy you a free food - get in touch with him by &lt;a href='mailto:sgpinney@thoughtworks.com'&gt;email&lt;/a&gt; or &lt;a href='http://twitter.com/twsidpinney'&gt;twitter&lt;/a&gt;.&lt;/p&gt;</content>
  </entry><entry>
    <title>Malware alert on thoughtworks.com</title>
    <link href="http://martinfowler.com/snips/201102031214.html"/>
    <updated>2011-02-03T12:14:00-05:00</updated>
    <id>tag:martinfowler.com,2011-02-03:Malware-alert-on-thoughtworks-com</id>
    <category term=""/>
    <content type="html">&lt;p&gt;We seem to have a shy but annoying piece of malware hanging out on thoughtworks.com. As far as we can tell, it manifests itself as a hidden iframe that redirects you to a site that hosts malware. We&amp;#8217;re a bit vague on this, as it only appears rarely so only a couple of people have seen it.&lt;/p&gt;

&lt;p&gt;Our biggest sign of it is via google. Google reported our site on Jan 7th as having problems, we looked into it, didn&amp;#8217;t find anything, and Google&amp;#8217;s complaint went away very quickly. The flag went up again on Jan 31st and this time they emailed our webmaster. We looked again for a problem, without any success, so we asked them to re-review our site. Since then various Google diagnostics have raising and lowering the suspicious flag at a dizzying rate. As I write this the site is considered safe, but given the volatility of the opinion, we aren&amp;#8217;t sure about how things will go. (If you&amp;#8217;re concerned you can check &lt;a href='http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=www.thoughtworks.com'&gt;Google&amp;#8217;s safebrowsing link&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;Clearly this is a bit of malware that&amp;#8217;s set to only show itself occasionally, which makes it harder to deal with. The tricky bit is to find how it&amp;#8217;s getting into the site. We&amp;#8217;ve checked all our content and not found anything suspicious, but it could be third party javascript libraries, could be our Drupal instance, could even be a problem with our apache installation - but we don&amp;#8217;t know for sure.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re investigating this further (including following the recommendations of &lt;a href='http://www.stopbadware.org/home/security'&gt;stopbadware&lt;/a&gt;) but haven&amp;#8217;t yet found the root cause, although we do have some strong suspects. If you see anything suspicious on our site or would like to pass on any suggestions, please contact &lt;a href='mailto:webmaster@thoughtworks.com'&gt;Andy Yates&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As far as I know, this problem &lt;a href='http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=martinfowler.com'&gt;does not affect&lt;/a&gt; martinfowler.com - which is a static site built with my custom scripts, so is less likely to attract such a problem. But do let me know if you see anything.&lt;/p&gt;</content>
  </entry><entry>
    <title>Video of Wikileaks panel</title>
    <link href="http://martinfowler.com/snips/201101211118.html"/>
    <updated>2011-01-21T11:18:00-05:00</updated>
    <id>tag:martinfowler.com,2011-01-21:Video-of-Wikileaks-panel</id>
    <category term=""/>
    <content type="html">&lt;p&gt;I enjoyed the Churchill Club panel discussion on wikileaks on Wednesday. It&amp;#8217;s thoughtful and well worth watching &lt;a href='http://fora.tv/2011/01/19/WikiLeaks_Why_It_Matters_Why_It_Doesnt'&gt;the video&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I particularly appreciated Daniel Ellsberg&amp;#8217;s picture of the climate of government secrecy and Roy&amp;#8217;s call to follow the example of librarians resisting secret gag orders. (There was a bit were it threatens to sink deep into the nature of libertarianism, but fortunately that didn&amp;#8217;t last long.) While my thoughts on wikileaks are complicated (and I&amp;#8217;ve not had the energy to write about them) I think the incident raises some very serious issues around the contending forces of privacy and openness. This panel provides a useful briefing on some of these perspectives.&lt;/p&gt;</content>
  </entry><entry>
    <title>Cindy is doing the Avon Walk for Breast Cancer</title>
    <link href="http://martinfowler.com/snips/201101201043.html"/>
    <updated>2011-01-20T10:43:00-05:00</updated>
    <id>tag:martinfowler.com,2011-01-20:Cindy-is-doing-the-Avon-Walk-for-Breast-Cancer</id>
    <category term=""/>
    <content type="html">&lt;p&gt;Last year Cindy, my wife, did Boston&amp;#8217;s Avon walk to raise money for breast cancer research. She decided to it again this year. Last year a good proportion of the money she raised came from my readers, and we&amp;#8217;re hoping we can get another round of support from you this year. If you&amp;#8217;d like to donate, please go to her &lt;a href='http://avonwalk.org/goto/Cindy.Chabot'&gt;walk page&lt;/a&gt;.&lt;/p&gt;</content>
  </entry><entry>
    <title>Speaking event in Hamburg</title>
    <link href="http://martinfowler.com/snips/201101180928.html"/>
    <updated>2011-01-18T09:28:00-05:00</updated>
    <id>tag:martinfowler.com,2011-01-18:Speaking-event-in-Hamburg</id>
    <category term=""/>
    <content type="html">&lt;p&gt;I&amp;#8217;m going to Germany next week and we&amp;#8217;ve added a third speaking event to my trip. As well as speaking at &lt;a href='http://www.sigs-datacom.de/oop2011/oop2011-eng/latest-news.html'&gt;OOP&lt;/a&gt; in Munich and in &lt;a href='http://jugcologne.eu/'&gt;Cologne&lt;/a&gt;, ThoughtWorks has organized a &lt;a href='http://www.thoughtworks.com/events/software-design-21st-century-deutschland'&gt;speaking event in Hamburg&lt;/a&gt; on Jan 31st. My colleagues Erik D&#xF6;ernenburg and Wolf Schlegel will give a talk on Continuous Deployment and I&amp;#8217;ll follow with my usual &lt;a href='http://martinfowler.com/bliki/SuiteOfTalks.html'&gt;SuiteOfTalks&lt;/a&gt;.&lt;/p&gt;</content>
  </entry><entry>
    <title>WikiLeaks:  Why it Matters. Why it Doesn&#x2019;t?</title>
    <link href="http://martinfowler.com/snips/201101171156.html"/>
    <updated>2011-01-17T11:56:00-05:00</updated>
    <id>tag:martinfowler.com,2011-01-17:WikiLeaks---Why-it-Matters--Why-it-Doesn-t-</id>
    <category term=""/>
    <content type="html">&lt;p&gt;ThoughtWorks and The Churchill Club are presenting a &lt;a href='http://www.thoughtworks.com/events/wikileaks-why-it-matters-why-it-doesnt'&gt;panel discussion on Wikileaks&lt;/a&gt; which will explore the consequences of this saga on the freedom of the internet. The panel features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://en.wikipedia.org/wiki/Daniel_Ellsberg'&gt;Daniel Ellsberg&lt;/a&gt; (of Pentagon Papers fame)&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.shirky.com/'&gt;Clay Shirky&lt;/a&gt; (thoughtful writer about the internet)&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.thoughtworks.com/roy-singham'&gt;Roy Singham&lt;/a&gt; (ThoughtWorks&amp;#8217;s founder)&lt;/li&gt;

&lt;li&gt;&lt;a href='http://en.wikipedia.org/wiki/Peter_Thiel'&gt;Peter Thiel&lt;/a&gt; (co-founder of PayPal)&lt;/li&gt;

&lt;li&gt;&lt;a href='http://en.wikipedia.org/wiki/Jonathan_Zittrain'&gt;Jonathan Zittrain&lt;/a&gt; (law professor at Harvard).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The panel is moderated by &lt;a href='http://en.wikipedia.org/wiki/Paul_Jay'&gt;Paul Jay&lt;/a&gt; from The Real News Network.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s being held at 5.30 PST on Wednesday January 19th at the Santa Clara Marriott. You can also watch the event live on &lt;a href='http://fora.tv/live/churchill_club/Wikileaks_Why_it_Matters'&gt;Fora.tv&lt;/a&gt; and &lt;a href='http://therealnews.com/t2/about-us/events'&gt;The Real News Network&lt;/a&gt;. Streaming starts at 7pm PST.&lt;/p&gt;</content>
  </entry></feed>
