<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gojko Adzic &#187; alt.net</title>
	<atom:link href="http://gojko.net/tag/altnet/feed/" rel="self" type="application/rss+xml" />
	<link>http://gojko.net</link>
	<description>Building software that matters</description>
	<lastBuildDate>Tue, 31 Jan 2012 09:07:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Upcoming .NET events at Skills Matter:  MassTransit, Future of Web development and Mono</title>
		<link>http://gojko.net/2009/09/14/upcoming-net-events-at-skills-matter-masstransit-future-of-web-development-and-mono/</link>
		<comments>http://gojko.net/2009/09/14/upcoming-net-events-at-skills-matter-masstransit-future-of-web-development-and-mono/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 08:06:57 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[alt.net]]></category>
		<category><![CDATA[altdotnet]]></category>
		<category><![CDATA[aspnetmvc]]></category>
		<category><![CDATA[masstransit]]></category>
		<category><![CDATA[mono]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=1127</guid>
		<description><![CDATA[The plan for the opensource .NET events at Skills Matter for the following three months is: Mike Hadlow: Enterprise integration with MassTransit, October 1st Dylan Beattie: The future of Web development: HTML 5 and ASP.NET MVC 2, November 2nd Toby Henderson: Introduction to Mono, December 3rd All these events are...]]></description>
			<content:encoded><![CDATA[<p>The plan for the opensource .NET events at Skills Matter for the following three months is:</p>
<ul>
<li><a href="http://mikehadlow.blogspot.com/">Mike Hadlow</a>: <a href="http://skillsmatter.com/event/open-source-dot-net/enterprise-integration-with-masstransit">Enterprise integration with MassTransit</a>, October 1st</li>
<li><a href="http://www.dylanbeattie.net/">Dylan Beattie</a>: <a href="http://skillsmatter.com/event/open-source-dot-net/the-future-of-web-development-html-5-and-aspdot-net-httpaspdot-net-mvc-2">The future of Web development: HTML 5 and ASP.NET MVC 2</a>, November 2nd</li>
<li><a href="http://holytshirt.blogspot.com/">Toby Henderson</a>: <a href="http://skillsmatter.com/event/open-source-dot-net/an-introduction-to-mono">Introduction to Mono, December 3rd</a></li>
</ul>
<p>All these events are free, but up-front registration is required for capacity planning. Click on individual events to register.</p>
<p>In addition to that, I&#8217;ll be running the 3 day Progressive .NET course again on November 11th-13th. The course helps students learn the most important emerging practices in the .NET community such as dependency injection, aspect oriented programming, MVC, object-relational mapping, unit and acceptance TDD and so on, with practical exercises using leading opensource .NET tools such as the Castle stack, NHibernate, MBUnit&#8230; For more information and to register, see <a href="http://skillsmatter.com/course/open-source-dot-net/opensource-dot-net-tools-crash-course">http://skillsmatter.com/course/open-source-dot-net/opensource-dot-net-tools-crash-course</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2009/09/14/upcoming-net-events-at-skills-matter-masstransit-future-of-web-development-and-mono/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Free presentation on Space Based Programming, September 2nd, London</title>
		<link>http://gojko.net/2009/08/19/free-presentation-on-space-based-programming-september-2nd-london/</link>
		<comments>http://gojko.net/2009/08/19/free-presentation-on-space-based-programming-september-2nd-london/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 10:22:53 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[alt.net]]></category>
		<category><![CDATA[altdotnet]]></category>
		<category><![CDATA[skillsmatter]]></category>
		<category><![CDATA[space based architectures]]></category>

		<guid isPermaLink="false">http://gojko.net/2009/08/19/free-presentation-on-space-based-programming-september-2nd-london/</guid>
		<description><![CDATA[I&#8217;m doing a free evening talk on space based programming on September 2nd at Skills Matter. Space-based architectures are an alternative to the traditional n-tier model for enterprise applications. Instead of a vertical tier partitioning, space based applications are partitioned horizontally into self-sufficient units. This leads to almost linear scalability...]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m doing a free evening talk on space based programming on September 2nd at Skills Matter. </p>
<p>Space-based architectures are an alternative to the traditional n-tier model for enterprise applications. Instead of a vertical tier partitioning, space based applications are partitioned horizontally into self-sufficient units. This leads to almost linear scalability of stateful, high-performance applications. In this presentation, I&#8217;ll talk about space based programming in general and demonstrate how to do that on the .NET platform. </p>
<p>The event is free but up-front registration is required. See <a href="http://skillsmatter.com/podcast/open-source-dot-net/space-based-programming/">http://skillsmatter.com/podcast/open-source-dot-net/space-based-programming/</a> for more information and to register.</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2009/08/19/free-presentation-on-space-based-programming-september-2nd-london/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building software that matters</title>
		<link>http://gojko.net/2009/08/03/building-software-that-matters/</link>
		<comments>http://gojko.net/2009/08/03/building-software-that-matters/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 10:05:33 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[acceptance testing]]></category>
		<category><![CDATA[alt.net]]></category>
		<category><![CDATA[bsm]]></category>
		<category><![CDATA[ddd]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[lean]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=1051</guid>
		<description><![CDATA[We had a fantastic discussion on delivering value with software yesterday at Alt.NET UK, centred around two proposed topics: “From concept to cash” and “Building software that matters”. Starting with questions on how do we get to cash quicker, how do we make sure that we&#8217;re building the most valuable...]]></description>
			<content:encoded><![CDATA[<p>We had a fantastic discussion on delivering value with software yesterday at Alt.NET UK, centred around two proposed topics: “From concept to cash” and “Building software that matters”. Starting with questions on how do we get to cash quicker, how do we make sure that we&#8217;re building the most valuable software possible and how do we measure progress, this open space discussion touched upon some very interesting ideas to improve software processes.<span id="more-1051"></span></p>
<h2>Increasing visibility</h2>
<p>A common topic in the discussion was increasing visibility, both the visibility of business value to developers and visibility of developer progress to business. We discussed different metrics to increase visibility of the progress, but this turned out to be quite a tricky subject. One interesting metric mentioned was cycle time, how much it takes to get a story from the backlog into production. This would require that stories have a fairly normalised size though. The conclusion for me is that metrics make it very easy to slide towards efficiency but not effectiveness (with the example of a hamster in a cage which might spin the wheel very efficiently, but going nowhere), which also lead us to the fact that teams should be aware where does the value come from and define what success looks like before a project starts. Ensuring that everyone knows the answers to these questions would significantly increase the value visibility and help people prioritise better. </p>
<p>Some interesting examples of what companies do to increase visibility were estimating technical debt with monetary value (how much will it cost to fix it) and assigning monetary value to stories (how much benefit will it bring) and implementation estimates (how much will it cost to make it). Although everyone agreed that getting these figures right would be a challenge, even rough estimates can help immensely to set the priorities and ensure that we&#8217;re building the thing of greatest value. </p>
<p>Another challenge mentioned is actually measuring how much value features bring when they are in production and do they justify the cost of maintenance. We all agreed that it is very hard to measure effects of individual features, but A-B testing was suggested as a way to to measure this. In A-B testing, a part of the system runs with a feature and a part of the system runs without it, and then the results are compared to determine the effectiveness of that particular feature. This approach has additional management overheads and risks involved though.</p>
<h2>Waste</h2>
<p>Unsurprisingly, the discussion often touched upon lean software development principles and looking at what causes waste in the process. Two good books mentioned about this were Implementing Lean Software Development: From Concept to Cash by Mary and Tom Poppendieck (<a href='http://www.amazon.co.uk/Implementing-Lean-Software-Development-Addison-Wesley/dp/0321437381'>ISBN 0321437381 Addison-Wesley 2006</a>) and Agile Management For Software Engineering by David Anderson (<a href='http://www.amazon.co.uk/Agile-Management-Software-Engineering-Constraints/dp/0131424602'> ISBN 0131424602, Prentice-Hall 2003</a>). Anderson is also apparently working on a new book related to this subject. Additional suggested resources for Lean Software development included <a href='http://www.sep.com/lk2009'>Lean Conference 2009 videos</a>,  <a href='http://www.agilemanagement.net/'>David Anderson&#8217;s blog</a> , <a href='http://availagility.wordpress.com/'>Karl Scotland&#8217;s blog</a> , <a href='http://leanandkanban.wordpress.com/'>David Joyce&#8217;s blog</a> and the <a href='http://agileinaction.com/'>Agile in action Blog</a>.</p>
<p>A common theme in the discussion on waste was building too much software, where people did not know whether they really needed it. As a possible solution for the problem we talked about the DDD core domain idea, where companies should focus on identifying a very small core of the system that makes it worth building, something that brings direct competitive advantage, and source the rest from external providers or buy off-the-shelf solutions. Core domain is explained more in Domain-driven Design: Tackling Complexity in the Heart of Software by Eric Evans (<a href='http://www.amazon.co.uk/Domain-driven-Design-Tackling-Complexity-Software/dp/0321125215'>ISBN 0321125215, Addison-Wesley 2003</a>).</p>
<p>Another source of waste was building “nice to have” features suggested by the business but not really bringing any value. As a possible solution for this, we talked about the Goals-Features-Requirements breakdown (a variant of which is Goals-Stories-Acceptance tests) where each feature introduced into the system has to be connected directly to a stated project goal, and each requirement has to be directly connected to a feature. If the person suggesting a requirement cannot name a feature (or likewise someone suggesting a feature cannot justify it by naming a goal), this gives us ground to push back and reject scope creep. This idea comes from The Art of Project Management by Scott Berkun (<a href='http://www.amazon.co.uk/Project-Management-Theory-Practice-OReilly/dp/0596007868'>ISBN 0596007868 O&#8217;Reilly 2005</a>).</p>
<p>The development counterpart of this is just-in-case code, something that developers decided to put in because they think it is needed. This was called the biggest source of waste by Mary Poppendieck in the Lean Software Development book. As possible solutions for this, we discussed specification workshops and agile acceptance testing – explained in my book Bridging the Communication Gap Specification By Example and Agile Acceptance Testing (<a href='http://www.amazon.co.uk/Bridging-Communication-Gap-Specification-Acceptance/dp/0955683610/'>ISBN 0955683610, Neuri 2009</a>). As the answer to the problem &#8216;we know that we&#8217;ll need it soon&#8217;, we discussed a fine line between making the system flexible to accept a future change and actually building in flexibility. The former would involve isolating a piece of code that we know is going to change, the latter would involve actually building in a very flexible framework to start with. The conclusion was that very often these complex flexible frameworks don&#8217;t pay off as requirements might change and the requested flexibility never actually makes it into the product.   </p>
<p>The fourth related cause of waste was working on a problem that people don&#8217;t know enough about and identifying that too late. Specification workshops are also a solution for that.</p>
<p>UI design and redesign was also perceived as a common source of waste, perhaps because all the people in the room were developers. Someone suggested <a href='http://developer.yahoo.com/ypatterns/'> Yahoo&#8217;s UI design pattern library</a> as a good source of information to make this process quicker and easier.</p>
<h2>Prioritisation</h2>
<p>The last major theme of this discussion was prioritisation – how do we actually decide what to build first and how to deliver value quickest. Value visibility certainly helps, and assigning monetary value to features and costs of production might help prioritise. There was a concern though that only low-risk features would ever get implemented by this, but we concluded that this would probably be pushed back to the business and they would be able to decide how much risk they want to take. </p>
<p>We also discussed the difference between iterative and incremental development and how that helps with prioritisation – rather than asking customers to prioritise between a car door and an engine, for example, we could ask them to prioritise between a car with a poor door system but a great engine and a car with great doors and a poor engine, delivering a car that they could use in any case. This is explained in a lot more detail by <a href='http://www.agileproductdesign.com/blog/dont_know_what_i_want.html'>Jeff Patton</a> (also see <a href='http://alistair.cockburn.us/Incremental+means+adding,+iterative+means+reworking'>Alistair Cockburn&#8217;s response</a> and <a href='http://gojko.net/2007/12/04/waterfall-trap/'>my write-up of Patton&#8217;s keynote at XPDay 07</a>).</p>
<p>Having a map of goals to stories and tests makes it easier to prioritise as well, because business should be able to prioritise goals and we can derive priorities of lower levels based on that. </p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2009/08/03/building-software-that-matters/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Links from the TDD discussion at Alt.NET UK</title>
		<link>http://gojko.net/2009/08/02/links-from-the-tdd-discussion-at-alt-net-uk/</link>
		<comments>http://gojko.net/2009/08/02/links-from-the-tdd-discussion-at-alt-net-uk/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 23:09:51 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[alt.net]]></category>
		<category><![CDATA[altnetuk]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=1049</guid>
		<description><![CDATA[Here are the links to books and blog posts I mentioned today in the TDD discussion at Alt.NET Uk: A Set of Unit Testing Rules, article by Michael Feathers Red-Green-Refactor, article by Jim Shore Mocks Aren&#8217;t Stubs, article by Martin Fowler The Decline and Fall of Agile, article by Jim...]]></description>
			<content:encoded><![CDATA[<p>Here are the links to books and blog posts I mentioned today in the TDD discussion at Alt.NET Uk:</p>
<ul>
<li><a href="http://www.artima.com/weblogs/viewpost.jsp?thread=126923">A Set of Unit Testing Rules</a>, article by Michael Feathers</li>
<li><a href="http://jamesshore.com/Blog/Red-Green-Refactor.html">Red-Green-Refactor</a>, article by Jim Shore</li>
<li><a href="http://martinfowler.com/articles/mocksArentStubs.html">Mocks Aren&#8217;t Stubs</a>,  article by Martin Fowler </li>
<li><a href="http://jamesshore.com/Blog/The-Decline-and-Fall-of-Agile.html">The Decline and Fall of Agile</a>, article by Jim Shore (rescuing Scrum Teams).</li>
<li><a href="http://gojko.net/2009/02/27/thought-provoking-tdd-exercise-at-the-software-craftsmanship-conference/">Original TDD as if you meant it exercise</a></li>
<li><a href="http://gojko.net/2009/08/02/tdd-as-if-you-meant-it-revisited/">TDD as if you meant it exercise repeated at Alt.NET UK day one</a></li>
<li><a href="http://www.amazon.co.uk/xUnit-Test-Patterns-Refactoring-Signature/dp/0131495054/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1249254153&#038;sr=8-1">xUnit Test Patterns: Refactoring Test Code, Gerard Meszaros, ISBN 0131495054, Addison Wesley 2007</a>. Also see <a href="http://xunitpatterns.com/">the accompanying web site</a>.</li>
<li><a href="http://www.amazon.co.uk/Exploring-Requirements-Quality-Before-Design/dp/0932633137/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1249254264&#038;sr=1-1">Exploring Requirements: Donald Gause and Gerald Weinberg, ISBN 0932633137, Dorset House 1989</a></li>
</ul>
<p>Many of these ideas are explored in more detail in my <a href="http://skillsmatter.com/course-details/open-source-dot-net/test-driven-dot-net-development-in-practice">TDD in practice</a> course, which will start from September at Skills Matter. </p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2009/08/02/links-from-the-tdd-discussion-at-alt-net-uk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TDD as if you meant it &#8211; revisited</title>
		<link>http://gojko.net/2009/08/02/tdd-as-if-you-meant-it-revisited/</link>
		<comments>http://gojko.net/2009/08/02/tdd-as-if-you-meant-it-revisited/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 03:31:42 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[popular]]></category>
		<category><![CDATA[alt.net]]></category>
		<category><![CDATA[altdotnet]]></category>
		<category><![CDATA[altnetuk]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=1035</guid>
		<description><![CDATA[Yesterday at AltNetUK Openspace Coding Days we repeated the TDD as if you meant it exercise, originally organised by Keith Braithwaite at the Software Craftsmanship 2009 conference. This gave me a chance to once again go back to the problem, but from a completely different perspective. The exercise involves developing...]]></description>
			<content:encoded><![CDATA[<p><img src="/images/tictactoe.png" align="left"/>Yesterday at <a href="http://www.altnetuk.com/2009.en.html">AltNetUK Openspace Coding Days</a> we repeated the <a href="http://gojko.net/2009/02/27/thought-provoking-tdd-exercise-at-the-software-craftsmanship-conference/">TDD as if you meant it exercise</a>, originally organised by <a href="http://peripateticaxiom.blogspot.com/">Keith Braithwaite</a> at the <a href="http://softwarecraftsmanship.org.uk">Software Craftsmanship 2009</a> conference. This gave me a chance to once again go back to the problem, but from a completely different perspective.<span id="more-1035"></span></p>
<p>The exercise involves developing a very simple piece of code strictly adhering to the TDD rules, so much so that participants aren&#8217;t allowed to create domain methods or classes other than extracting them from test code. The goal of the exercise is to demonstrate factoring out just what you really need from the test code into domain design rather than starting with a pre-set design structure. Although this is in general taken as a goal of TDD, many programmers (me included) don&#8217;t realise how much their assumptions make them jump ahead too quickly. By making it very painful to add new domain code, this exercise slows participants down to a point where people have to spend a considerable amount of time actually focusing code on exactly what is required  and no more. </p>
<p>Even on a very simple problem such as tic-tac-toe, differences from a pre-conceived design and the one that emerges from code are considerable, the latter being a lot more elegant and better suited to describe a problem.</p>
<h2>The exercise</h2>
<p>The original exercise involved stones and the Go game. As I&#8217;ve never played that before and we had a lot less time than in the original one, I suggested tic-tac-toe. This turned out to be a very good idea as we spent less time explaining what the domain but it still proved the point of the exercise. </p>
<p>The requirements on the flip-chart were the following:</p>
<ul>
<li>a game is over when all fields are taken</li>
<li>a game is over when all fields in a column are taken by a player</li>
<li>a game is over when all fields in a row are taken by a player</li>
<li>a game is over when all fields in a diagonal are taken by a player</li>
<li>a player can take a field if not already taken</li>
<li>players take turns taking fields until the game is over</li>
</ul>
<h2>The dynamics</h2>
<p>All the participants worked in pairs. Most of the teams started by building a 3&#215;3 board and describing requirements that were not given at all (eg first player won, tics or noughts being placed) and took three or four attempts at describing the problem to really go down to basics. As predicted, people were annoyed by this but I did make an effort to explain that the start of the exercise feels silly and annoying so this went much better than I expected. After the first requirement was done correctly, the next three followed easily as they are fairly related. The fifth one though posed a problem again and this is where things got really interesting, some teams falling back on the grid idea (and getting their code deleted) and some teams starting to flesh out the concepts of players and the actual dynamics of fields being taken.</p>
<p>By the end of the exercise, almost half the teams were coding towards something that was not a 3&#215;3 char/int grid. We did not have the time to finish the whole thing, but some interesting solutions in making were:</p>
<ul>
<li>a bag of fields that are literally taken by players &#8211; field objects start in the collection belonging to the game and move to collections belonging to players, which simply avoids edge cases such as taking an already taken field and makes checking for game end criteria very easy.</li>
<li>fields that have logic whether they are taken or not and by whom</li>
<li>game with a current state field that was recalculated as the actions were performed on it and methods that could set this externally to make it easy to test</li>
</ul>
<p>Most of the game classes had very nice explicit methods for checking different game end criteria. During a short retrospective at the end, some participants said that their code was very nicely isolated and encapsulated, with &#8220;less leakage than normal&#8221;, and that very explicit specifications ended up in the code making it easy to understand.    </p>
<h2>Multiple models</h2>
<p>This exercise reminded me again about Eric Evans&#8217; <a href="http://www.infoq.com/presentations/model-to-work-evans">introductory presentation to domain modeling</a>. One of the basic ideas there is that the best models are not the most realistic ones but the ones that allow us to describe a particular problem efficiently. The best models are good because they serve a particular purpose in a particular context, so a bag of fields might be a better model of the tic-tac-toe game than a 3&#215;3 board even if the latter feels much more realistic and natural.  </p>
<h2>Conclusions</h2>
<p>In my view, this exercise worked really well. It was interesting to observe it from a different perspective (this time I got the role of the annoying git who went around the room and deleted code that people wrote and did not need). Tic-tac-toe was a good choice as it did not require spending time on explaining and comes with an almost guaranteed 3&#215;3 pre-conceived model. Some participants suggested that we should have done requirements 5 and 6 first and then moved to 1-4. Although this would take away the big refactoring moment, it might actually work better to allow people to factor out a very different model straight from the start. Introducing that the exercise is a bit annoying at the start was also a good idea, as I think that it went smoother than the original one with less opposition to dropping unnecessary code. </p>
<p>You can see some of the code examples on <a href="http://openspacecode.googlecode.com/svn/trunk/src/2009-08-01%20London/TddAsIfYouMeanIt/">the openspacecode repository</a>. For more information on the original exercise and the rules, see <a href="http://gojko.net/2009/02/27/thought-provoking-tdd-exercise-at-the-software-craftsmanship-conference/">my earlier post</a> about it. Mark Needham repeated the exercise earlier as well, building a message interceptor &#8211; something much more technical and practical than a tic-tac-toe or Go game. You can read his conclusions at <a href="http://www.markhneedham.com/blog/2009/04/30/coding-dojo-13-tdd-as-if-you-meant-it/">markhneedham.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2009/08/02/tdd-as-if-you-meant-it-revisited/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

