<?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>Pathfinder Development &#187; Software Development</title>
	<atom:link href="http://www.pathf.com/blogs/category/agileajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pathf.com/blogs</link>
	<description>Running commentary about agile development, user experience design and Ajax.</description>
	<lastBuildDate>Tue, 16 Mar 2010 13:42:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Teamicide</title>
		<link>http://www.pathf.com/blogs/2010/03/teamicide/</link>
		<comments>http://www.pathf.com/blogs/2010/03/teamicide/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 01:44:54 +0000</pubDate>
		<dc:creator>Perry Hertler</dc:creator>
				<category><![CDATA[Agile Coaching]]></category>
		<category><![CDATA[Agile Project Management]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4953</guid>
		<description><![CDATA[
A couple of years ago I had the benefit of seeing agile contrasted against waterfall with the same development team on the same project. The team had recently delivered the 1.1 version of a global web application. The customer then took over the project by replacing the project manager and business analysts with people who [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/03/teamicide/">Teamicide</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/12/velocity/' rel='bookmark' title='Permanent Link: You Shall Know Our Velocity!'>You Shall Know Our Velocity!</a></li><li><a href='http://www.pathf.com/blogs/2009/07/what-should-a-good-iteration-contain/' rel='bookmark' title='Permanent Link: What should a good iteration contain'>What should a good iteration contain</a></li><li><a href='http://www.pathf.com/blogs/2009/09/does-your-project-have-code-ownership-culture/' rel='bookmark' title='Permanent Link: Does your project have Code Ownership Culture?'>Does your project have Code Ownership Culture?</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p style="float: right"><img src="http://www.pathf.com/blogs/wp-content/uploads/2010/03/srum2.jpg" alt="" style="float: right" height="240" border="1"></p>
<p style="float: left">A couple of years ago I had the benefit of seeing agile contrasted against waterfall with the same development team on the same project. The team had recently delivered the 1.1 version of a global web application. The customer then took over the project by replacing the project manager and business analysts with people who had no agile experience.</p>
<p>Up until after the 1.1 release our highly productive team absolutely loved coming to work in the morning. We were eating up storing points with an insatiable appetite and pressure to perform came from inside the team. Frequently our roles would cross. Developers would help out Testers and BAs as needed and the Testers and BAs worked very closely together to document proper story acceptances.</p>
<p>When agile was dropped for a more traditional process, things deteriorated very quickly (teamicide). I noticed major negative consequences in user stories, project planning, management, and software development.</p>
<p><strong>Stories</strong></p>
<p>The agile team that was together from inception through release 1.1 benefited from testable stories with high value features. Developers worked with Business Analysts to identify tasks within a story that would require significant development time so that the Product Owner could make informed decisions on whether or not a particular feature provided enough business value to warrant the cost. The BAs also enjoyed lower cost alternatives provided by developers. Only minor changes to a story were allowed after a pair of developers started on it. Significant changes required a new story.</p>
<p>After release 1.1, pseudo-stories were created with many nice to have, but not critical requirements with no developer input. Story requirements changed throughout the iteration including after the story delivery.</p>
<p><strong>Planning</strong></p>
<p>The agile team assigned points to stories during the inception. The amount of points completed during an iteration determined the team's velocity. The average velocity over the last two iterations was used to predict release dates.</p>
<p>The new project manager on the post-1.1 team planned out the next four releases in Microsoft Project with no input from the developers. The releases had unrealistic delivery dates for features that were not yet defined. This is the classic "phony deadline" technique used by managers to (de)motivate developers.</p>
<p><strong>Project Management</strong></p>
<p>The agile project manager was deliberately inattentive to enable the team to self-organize. This resulted in very high morale because developers felt free to contribute ideas and felt a sense of project ownership. The agile project manager's primary role was to remove obstacles that would otherwise distract the team.</p>
<p>The new project manager micromanaged all aspects of the project. We continued to have a stand-up every morning, but as each person gave a status, the PM would ask further questions like "how much longer until the story is completed?".</p>
<p><strong>Development</strong></p>
<p>Pre-teamicide, pairing time was protected, the velocity was high, the code quality was good. Pressure to perform came from other developers. All of this was achieved a sustainable pace with little or no overtime.</p>
<p>Post-teamicide, development time was highly fragmented through frequent meetings, phone calls, and IMs. The velocity was very low and pressure to perform came from the project manager who had set unreasonable deadlines. Large amounts of overtime were required, which led to many more bugs in design and code.</p>
<p><strong>Conclusion</strong></p>
<p>This project thoroughly convinced me of the effectiveness of the agile methodology. It was a great learning experience, but I hope it is not repeated!</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/03/teamicide/">Teamicide</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/12/velocity/' rel='bookmark' title='Permanent Link: You Shall Know Our Velocity!'>You Shall Know Our Velocity!</a></li><li><a href='http://www.pathf.com/blogs/2009/07/what-should-a-good-iteration-contain/' rel='bookmark' title='Permanent Link: What should a good iteration contain'>What should a good iteration contain</a></li><li><a href='http://www.pathf.com/blogs/2009/09/does-your-project-have-code-ownership-culture/' rel='bookmark' title='Permanent Link: Does your project have Code Ownership Culture?'>Does your project have Code Ownership Culture?</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/03/teamicide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Who values your product and do you value them?</title>
		<link>http://www.pathf.com/blogs/2010/03/values-product/</link>
		<comments>http://www.pathf.com/blogs/2010/03/values-product/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 17:26:26 +0000</pubDate>
		<dc:creator>Michael Walkden</dc:creator>
				<category><![CDATA[Custom Application Development]]></category>
		<category><![CDATA[Product Strategy]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[User Experience Design]]></category>
		<category><![CDATA[Web Application Development]]></category>
		<category><![CDATA[uxd]]></category>
		<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Product Design]]></category>
		<category><![CDATA[product management]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4923</guid>
		<description><![CDATA[
 photo credit: victoriapeckham
We have reached the most critical point on a project I'm working on.  After a few months we think we know enough about the domain and application to build a product road map that will take us to the first public release.  The proof of concept is complete.  The [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/03/values-product/">Who values your product and do you value them?</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/12/sdlc-product-decide/' rel='bookmark' title='Permanent Link: Your SDLC or Your Product – You Decide'>Your SDLC or Your Product – You Decide</a></li><li><a href='http://www.pathf.com/blogs/2010/01/user-driven-product-development/' rel='bookmark' title='Permanent Link: User Driven Product Development'>User Driven Product Development</a></li><li><a href='http://www.pathf.com/blogs/2008/09/build-half-a-product-not-a-half-assed-product-tips-on-clarity-and-focus-from-jason-fried-of-37signals/' rel='bookmark' title='Permanent Link: &#8220;Build half a product, not a half-assed product&#8221; &#8211; tips on clarity and focus from Jason Fried of 37Signals'>&#8220;Build half a product, not a half-assed product&#8221; &#8211; tips on clarity and focus from Jason Fried of 37Signals</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div style="float:right;padding:10px"><a href="http://www.flickr.com/photos/victoriapeckham/164175205/" rel="nofollow" title="Anonymous Crowd"  target="_blank"><img src="http://www.pathf.com/blogs/wp-content/uploads/2010/03/164175205_9951e05eb6_m.jpg" border="0" alt="Anonymous Crowd" /></a><br />
<small><a href="http://creativecommons.org/licenses/by/2.0/" rel="nofollow" title="Attribution License"  target="_blank"><img src="http://www.pathf.com/blogs/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" rel="nofollow"  target="_blank">photo</a> credit: <a href="http://www.flickr.com/photos/victoriapeckham/164175205/" rel="nofollow" title="victoriapeckham"  target="_blank">victoriapeckham</a></small></div>
<p>We have reached the most critical point on a project I'm working on.  After a few months we think we know enough about the domain and application to build a product road map that will take us to the first public release.  The proof of concept is complete.  The design team has created a remarkable, genera changing product.  Additionally, the system is designed around real users we have been able to talk to and get feedback from.  We have put together an unbelievably good development team and built a backlog of stories with estimates.  We have been here before.  Putting together a design and backlog of stories is something we have done countless times...</p>
<p>The easy part is over.  Now the hard part begins.</p>
<p>Our research and user feedback tells us we have multiple potentialcustomer groups we can build the system for.  On one hand this is great news. We have a number of potential markets to choose from.  On the other, we don't have an infinite amount of time and money to build it for all of these groups.  We have to commit and go all in with one group. Right now, these are just some of the questions we are asking ourselves now:</p>
<ul>
<li>What customer group do we value the most?</li>
<li>What features do <em>they</em> value the most?</li>
<li>How expensive is it to build the ultimate product for each group?</li>
<li>What is the minimum viable product we can build for each group?</li>
<li>Which group is most likely to give feedback and partner with us to help refine our product?</li>
<li>How much feedback is this group likely to give you?</li>
<li>Are we missing some market window by passing on one group v.s. another?</li>
</ul>
<p>This is a critical point in the product's design.  Whichever user group we choose will be our customers.  Or another way of saying it:  They will be our <strong>ONLY</strong> customers.  Other customer groups aren't likely to be interested because we aren't building any features for them yet.</p>
<p>When designing a product do you consider what customer groups you are including and excluding?  Are you going to be happy with that choice for the foreseeable future?</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/03/values-product/">Who values your product and do you value them?</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/12/sdlc-product-decide/' rel='bookmark' title='Permanent Link: Your SDLC or Your Product – You Decide'>Your SDLC or Your Product – You Decide</a></li><li><a href='http://www.pathf.com/blogs/2010/01/user-driven-product-development/' rel='bookmark' title='Permanent Link: User Driven Product Development'>User Driven Product Development</a></li><li><a href='http://www.pathf.com/blogs/2008/09/build-half-a-product-not-a-half-assed-product-tips-on-clarity-and-focus-from-jason-fried-of-37signals/' rel='bookmark' title='Permanent Link: &#8220;Build half a product, not a half-assed product&#8221; &#8211; tips on clarity and focus from Jason Fried of 37Signals'>&#8220;Build half a product, not a half-assed product&#8221; &#8211; tips on clarity and focus from Jason Fried of 37Signals</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/03/values-product/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimizing has_role? in acl9</title>
		<link>http://www.pathf.com/blogs/2010/03/optimizing-has_role-in-acl9-2/</link>
		<comments>http://www.pathf.com/blogs/2010/03/optimizing-has_role-in-acl9-2/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 04:11:24 +0000</pubDate>
		<dc:creator>Sharad Jain</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4921</guid>
		<description><![CDATA[
acl9 is a an authorization library for rails applications. It is one of the widely used library if not the most widely used now. Our experience with acl9 shows that it might be heavy weight if your authorization needs are simpler (which most projects are) but could be useful for other projects.
If you've used acegi/spring-security [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/03/optimizing-has_role-in-acl9-2/">Optimizing has_role? in acl9</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/11/testing-various-roles-in-ruby-on-rails/' rel='bookmark' title='Permanent Link: Testing various roles in ruby on rails'>Testing various roles in ruby on rails</a></li><li><a href='http://www.pathf.com/blogs/2008/11/designing-for-security/' rel='bookmark' title='Permanent Link: The Truth About Designing For Security'>The Truth About Designing For Security</a></li><li><a href='http://www.pathf.com/blogs/2006/07/openfount_libra/' rel='bookmark' title='Permanent Link: Openfount Library Revisited'>Openfount Library Revisited</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm1.static.flickr.com/84/235453953_b565f23939_m_d.jpg" alt="" style="float: right" height="240" border="1"></p>
<p><a href="http://github.com/be9/acl9" rel="nofollow" >acl9</a> is a an authorization library for rails applications. It is one of the widely used library if not the most widely used <a href="http://www.ruby-toolbox.com/categories/rails_authorization.html" rel="nofollow" >now</a>. Our experience with acl9 shows that it might be heavy weight if your authorization needs are simpler (which most projects are) but could be useful for other projects.</p>
<p>If you've used <a href="http://www.acegisecurity.org/" rel="nofollow" >acegi/spring-security</a> for authorization in your java apps, you know that acl9 is very similar in principle and hence very powerful. In addition to primary roles, it provides object level permissions which are stored in a generic way separately from the objects being controlled, all without the need for handcoding/distributing your authorization columns in each authorization-object tables.</p>
<p>One place where acl9 differs from acegi is how it doesn't differentiate between a role and a permission. Acegi signifies roles as global permission level which allows you to do certain things (some action on any object of a given class). Where as, a "permission" controls whether your can take that action on a certain object of a class or not. Acl9 calls them all "roles" (primary-roles and object-roles). As you can imagine, a given user may have a few roles in system but end up with lot and lots of permissions in system depending on how many objects user owns  etc. This may seem like good idea at first but it presents a unique problem which is not apparent at first. Since roles and permissions are not conceptually separate in acl9 - and that a user can have lots of them (few roles and lots of permissions) - prevents us from loading and caching them in memory. Why do we need to keep them in memory? Because you are querying user's primary roles most often in your rendering of pages.</p>
<p>For example, consider navigation-bar which is common in most applications. Different users are presented with different tabs in navigation-bar and this bar gets rendered on each request/response cycle. Whether to render a particular tab is conditional to whether a user has certain role (primary role in particular) or not. Since acl9 cannot keep all roles (and permissions) in memory, it has to perform database query every time it has to find whether a user has_role?(admin) or not. Given that there can be only a few primary-roles that the user will have in any system, it seems in-efficient to not cache them and go to database each time.</p>
<p>The solution would be to separate these primary-roles from permission-roles and cache them for each request. In acl9 this means overriding User.has_role? and user.has_role!.</p>
<pre>
class User
  def has_role?(role, object = nil)
    if object || !Role.primary?(role)
      super
    else
      primary_roles.collect(&amp;:name).include?(role.to_s)
    end
  end

  def has_role!(role, object = nil)
    super
    @primary_roles = extract_primary_roles if(Role.primary?(role))
  end

  def primary_roles
    @primary_roles ||= extract_primary_roles
  end

  def extract_primary_roles
     self.role_objects.select { |r| r.primary? }
  end
  private :extract_primary_roles
end
</pre>
<p>That does it. You cache the primary-roles and leverage those for has_role? queries.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/03/optimizing-has_role-in-acl9-2/">Optimizing has_role? in acl9</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/11/testing-various-roles-in-ruby-on-rails/' rel='bookmark' title='Permanent Link: Testing various roles in ruby on rails'>Testing various roles in ruby on rails</a></li><li><a href='http://www.pathf.com/blogs/2008/11/designing-for-security/' rel='bookmark' title='Permanent Link: The Truth About Designing For Security'>The Truth About Designing For Security</a></li><li><a href='http://www.pathf.com/blogs/2006/07/openfount_libra/' rel='bookmark' title='Permanent Link: Openfount Library Revisited'>Openfount Library Revisited</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/03/optimizing-has_role-in-acl9-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Refactoring versus Rewriting</title>
		<link>http://www.pathf.com/blogs/2010/03/refactoring-rewriting/</link>
		<comments>http://www.pathf.com/blogs/2010/03/refactoring-rewriting/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 11:09:50 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[Technical Debt]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4867</guid>
		<description><![CDATA[
 photo credit: moonlightbulb
Refactoring versus Rewriting
I started my first real Agile software development project in 1999. I'd been doing more traditional software development before then all the way back to 1980. I won't bore you with the details of those earlier projects, but my feeling was that there had to be a better way of [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/03/refactoring-rewriting/">Refactoring versus Rewriting</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/11/gwt-static-dynamic-religious-war/' rel='bookmark' title='Permanent Link: GWT and the Static Versus Dynamic Religious War'>GWT and the Static Versus Dynamic Religious War</a></li><li><a href='http://www.pathf.com/blogs/2008/11/has-many-has_many-a-refactoring-story/' rel='bookmark' title='Permanent Link: Has Many has_many: A Refactoring Story'>Has Many has_many: A Refactoring Story</a></li><li><a href='http://www.pathf.com/blogs/2009/12/feature-lists-budgets-deadlines/' rel='bookmark' title='Permanent Link: Requirements Set in Stone and Software Made of Concrete'>Requirements Set in Stone and Software Made of Concrete</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div style="float:right;padding:10px"><a href="http://www.flickr.com/photos/24532534@N02/4144127000/" rel="nofollow" title="Giant eraser in the sculpture garden"  target="_blank"><img src="http://farm3.static.flickr.com/2595/4144127000_e29b6e8a30_m.jpg" border="0" alt="Giant eraser in the sculpture garden" /></a><br />
<small><a href="http://creativecommons.org/licenses/by/2.0/" rel="nofollow" title="Attribution License"  target="_blank"><img src="http://www.pathf.com/blogs/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" rel="nofollow"  target="_blank">photo</a> credit: <a href="http://www.flickr.com/photos/24532534@N02/4144127000/" rel="nofollow" title="moonlightbulb"  target="_blank">moonlightbulb</a></small></div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Refactoring versus Rewriting</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">I started my first real Agile software development project in 1999. I'd been doing more traditional software development before then all the way back to 1980. I won't bore you with the details of those earlier projects, but my feeling was that there had to be a better way of developing software that didn't involve a senior technologist (me) telling a whole bunch of junior technologists what to do. It turns out I was right. <img src='http://www.pathf.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">But almost from the start I got pushback from other people in the development organizations I worked in that Agile development was horribly wasteful. They pointed to Test Driven Development ("all those tests more than double your effort"), pair programming ("two developers doing the work of one?"), and refactoring ("you're rewriting the software every time at enormous cost"). Of course all of these objections were borne out of a misunderstanding of Agile development, but of how their own software development processes actually worked.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">The issue of refactoring was particularly mysterious to my colleagues. If you took the time and designed software properly up front, you don't have to do expensive rewrites. Of course anyone who has ever maintained code knows that this isn't true. All code, regardless of how it is developed, changes over time for bug fixes and to meet the needs of new requirements. If you aren't thoughtful about how you change your software, you can easily end up with a big mess.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">If you are thoughtful about how you change your software and think about the sorts of "code smells" that crop up in your code over time, you end up making more fundamental changes, rather than adding a method here or a instance variable there. You might see that two methods are always called in conjunction and decide they should be folded into one method (a design win), or you may have extended your design and ended up with two parallel hierarchies of classes. You break the Go4 glass and pull out the Bridge Pattern to solve that burgeoning design problem. Through constant refactoring (or rewriting, take your pick) you avoid painting yourself into a corner as your requirements change.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">The fact is that good developers are constantly redesigning and rewriting their code. Those same developers will tell you that the longer you leave problems before refactoring, the bigger and more expensive they become, until you might be better off just scrapping the system and rewriting from scratch.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Agile development takes this normal refactoring to it's logical extreme. Rather than doing a big design up front and then doing a series of expensive changes when they are inevitably found to be wrong, Agile teams accept that their design will be imperfect and then build comparatively inexpensive refactoring into every iteration. It may seem counterintuitive, but all that refactoring results in code that is cheaper to develop, easier to maintain (because it's easier to understand, change and debug).</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Among professional writers the golden rule is that the key to all good writing is rewriting. The same is certainly true of software.</div>
<p>I started my first real Agile software development project in 1999. I'd been doing more traditional software development before then all the way back to 1980. I won't bore you with the details of those earlier projects, but my feeling was that there had to be a better way of developing software that didn't involve a senior technologist (me) telling a whole bunch of junior technologists what to do. It turns out I was right. <img src='http://www.pathf.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>But almost from the start I got pushback from other people in the development organizations I worked in that Agile development was horribly wasteful. They pointed to Test Driven Development ("all those tests more than double your effort"), pair programming ("two developers doing the work of one?"), and refactoring ("you're rewriting the software every time at enormous cost"). Of course all of these objections were born not just out of a misunderstanding of Agile development, but a fundamental misunderstanding of how their own software development processes actually worked.</p>
<p><span id="more-4867"></span>The issue of refactoring was particularly mysterious to my colleagues. If you took the time and designed software properly up front, they reasoned, you won't have to do expensive rewrites. Of course anyone who has ever maintained code knows that this isn't ever true. All code, regardless of how it is developed, changes over time for bug fixes and to meet the needs of new requirements. If you aren't thoughtful about how you change your software, you can easily end up with a big mess. Further, very little software is design with a perfect understanding of the requirements, leading to imperfect designs and things like the second and third system effects.</p>
<p>If you are thoughtful about how you change your software and think about the sorts of <a href="http://en.wikipedia.org/wiki/Code_smell" rel="nofollow"  target="_blank">"code smells"</a> that crop up in your code over time, you end up making more fundamental changes, rather than adding a method here or a instance variable there. You might see that two methods are always called in conjunction and decide they should be folded into one method (a design win, see State Patterns), or you may have extended your design and ended up with two parallel hierarchies of classes. You break the Go4 glass and pull out the <a href="http://en.wikipedia.org/wiki/Bridge_pattern" rel="nofollow"  target="_blank">Bridge Pattern</a> to solve that burgeoning design problem. Through constant refactoring (or rewriting, take your pick) you avoid painting yourself into a corner as your requirements change.</p>
<p>The fact is that good developers are constantly redesigning and rewriting their code. Those same developers will tell you that the longer you leave problems (<a href="http://en.wikipedia.org/wiki/Technical_debt" rel="nofollow"  target="_blank">technical debt</a>) before refactoring, the bigger and more expensive they become, until you might be better off just scrapping the system and rewriting from scratch.</p>
<p>Agile development takes this normal refactoring to it's logical extreme. Rather than doing a big design up front and then doing a series of expensive changes when they are inevitably found to be wrong, Agile teams accept that their design will be imperfect and then build comparatively inexpensive refactoring into every iteration. It may seem counterintuitive, but all that refactoring results in code that is cheaper to develop, easier to maintain (because it's easier to understand, change and debug).</p>
<p>Among professional writers the golden rule is that the key to all good writing is rewriting. The same is certainly true of software.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/03/refactoring-rewriting/">Refactoring versus Rewriting</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/11/gwt-static-dynamic-religious-war/' rel='bookmark' title='Permanent Link: GWT and the Static Versus Dynamic Religious War'>GWT and the Static Versus Dynamic Religious War</a></li><li><a href='http://www.pathf.com/blogs/2008/11/has-many-has_many-a-refactoring-story/' rel='bookmark' title='Permanent Link: Has Many has_many: A Refactoring Story'>Has Many has_many: A Refactoring Story</a></li><li><a href='http://www.pathf.com/blogs/2009/12/feature-lists-budgets-deadlines/' rel='bookmark' title='Permanent Link: Requirements Set in Stone and Software Made of Concrete'>Requirements Set in Stone and Software Made of Concrete</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/03/refactoring-rewriting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remembered: Claude Shannon</title>
		<link>http://www.pathf.com/blogs/2010/02/remembered-claude-shannon/</link>
		<comments>http://www.pathf.com/blogs/2010/02/remembered-claude-shannon/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 18:38:42 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Claude Shannon]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4852</guid>
		<description><![CDATA[

So, it's little Stevie Jobs' birthday today. Certainly he's been influential in the world of digital computing. But when folks wax on and wax off about how great some of these more recent figures in computing have been, I like to remind them of some of the all-time greats. It just so happens that that [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/remembered-claude-shannon/">Remembered: Claude Shannon</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/08/higher-order-ja/' rel='bookmark' title='Permanent Link: Higher Order JavaScript'>Higher Order JavaScript</a></li><li><a href='http://www.pathf.com/blogs/2010/02/computers-people-playing-chess/' rel='bookmark' title='Permanent Link: Why Computers are (aren&#8217;t) Better Than People at Playing Chess'>Why Computers are (aren&#8217;t) Better Than People at Playing Chess</a></li><li><a href='http://www.pathf.com/blogs/2006/04/march_of_the_ga/' rel='bookmark' title='Permanent Link: March of the Games'>March of the Games</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div style="float:right;padding:10px">
<div class="wp-caption alignnone" style="width: 226px"><img style="float:right;padding:10px" title="Claude Shannon" src="http://upload.wikimedia.org/wikipedia/en/2/2f/Claude_Elwood_Shannon_%281916-2001%29.jpg" alt="Claude Shannon" width="216" height="305" /><p class="wp-caption-text">Claude Shannon</p></div>
</div>
<p>So, it's <a href="http://en.wikipedia.org/wiki/Steve_Jobs" rel="nofollow"  target="_blank">little Stevie Jobs' birthday today</a>. Certainly he's been influential in the world of digital computing. But when folks wax on and wax off about how great some of these more recent figures in computing have been, I like to remind them of some of the all-time greats. It just so happens that that today is also the 9th anniversary of the death of Claude Shannon. Who is Claude Shannon, you ask? How soon they forget, or perhaps they never knew.</p>
<p>Well, in his masters thesis at MIT in 1937, he observed that you could solve Boolean algebra problems using switching and relay circuits. OK, think about what that means. Wait for it...yes, he invented the modern digital computer. In 1937. In a <em>masters</em> thesis.</p>
<p>It was all downhill from there, of course. He only founded the field of Information Theory (central to cryptography, computational linguistics, and pretty much any kind of digital information processing). Yes, the digital revolution started with him.</p>
<p>Oh, and he also laid out the field of computer chess in 1950, describing the different ways a computer chess program could be designed. Sixty years later, his roadmap for the field has been dead on.</p>
<p>So, the next time someone celebrates Stevie's birthday, let them know about <a href="http://en.wikipedia.org/wiki/Claude_Shannon" rel="nofollow"  target="_blank">Claude Elwood Shannon</a>.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/remembered-claude-shannon/">Remembered: Claude Shannon</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/08/higher-order-ja/' rel='bookmark' title='Permanent Link: Higher Order JavaScript'>Higher Order JavaScript</a></li><li><a href='http://www.pathf.com/blogs/2010/02/computers-people-playing-chess/' rel='bookmark' title='Permanent Link: Why Computers are (aren&#8217;t) Better Than People at Playing Chess'>Why Computers are (aren&#8217;t) Better Than People at Playing Chess</a></li><li><a href='http://www.pathf.com/blogs/2006/04/march_of_the_ga/' rel='bookmark' title='Permanent Link: March of the Games'>March of the Games</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/02/remembered-claude-shannon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mort_calc gem: Rails Mortgage Calculation Gem</title>
		<link>http://www.pathf.com/blogs/2010/02/mortcalc-gem/</link>
		<comments>http://www.pathf.com/blogs/2010/02/mortcalc-gem/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 21:26:39 +0000</pubDate>
		<dc:creator>Perry Hertler</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[mortgage calculation]]></category>
		<category><![CDATA[rails gem]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4829</guid>
		<description><![CDATA[Ruby gem for calculating APR<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/mortcalc-gem/">mort_calc gem: Rails Mortgage Calculation Gem</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/07/launched-rapid-reporting-employment-chek/' rel='bookmark' title='Permanent Link: Launched:  Rapid Reporting Employment Chek'>Launched:  Rapid Reporting Employment Chek</a></li><li><a href='http://www.pathf.com/blogs/2008/11/installing-edge-ferretacts_as_ferret/' rel='bookmark' title='Permanent Link: Installing Edge Ferret/acts_as_ferret'>Installing Edge Ferret/acts_as_ferret</a></li><li><a href='http://www.pathf.com/blogs/2008/09/tips-tricks-from-windy-city-rails/' rel='bookmark' title='Permanent Link: Rails Performance, Code Metrics, and Locking Down your Application: Tips &#038; Tricks from Windy City Rails 2008'>Rails Performance, Code Metrics, and Locking Down your Application: Tips &#038; Tricks from Windy City Rails 2008</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>I recently published the <a href="http://gemcutter.org/gems/mortgage_calc" rel="nofollow" >mort_calc gem</a> at <a href="http://gemcutter.org" rel="nofollow" >gemcutter.org</a>. The code can be found at <a href="http://github.com/perry3819/mort_calc/" rel="nofollow" >http://github.com/perry3819/mort_calc/</a>.</p>
<p>The gem calculates the <a href="http://en.wikipedia.org/wiki/Annual_percentage_rate" rel="nofollow" >APR</a> and monthly payment for a mortgage in the United States.</p>
<p>Calculating the monthly payment is straight forward.</p>
<p><img class="alignnone size-full wp-image-4831" title="monthly_payment" src="http://www.pathf.com/blogs/wp-content/uploads/2010/02/monthly_payment.png" alt="monthly_payment" width="161" height="66" /></p>
<p>C = Loan amount</p>
<p>E = Extra costs</p>
<p>r = monthly interest rate = interest rate / 1200</p>
<p>N = amortization term in months</p>
<p>An iterative approach is needed to find the APR. The equation for the APR follows.<br />
<span id="more-4829"></span></p>
<p><img class="alignnone size-full wp-image-4830" title="apr" src="http://www.pathf.com/blogs/wp-content/uploads/2010/02/apr.png" alt="apr" width="163" height="75" /></p>
<p>a = APR/1200</p>
<p>N = amortization term in months</p>
<p>P = Monthly payment (including all fees paid by borrower)</p>
<p>C = Loan amount</p>
<p>The following graph shows the APR calculation plotted for N = 360, P = 2500, and C = 400,000. The APR is where the line crosses the <strong>A</strong> axis.</p>
<p><img class="alignnone size-full wp-image-4835" title="apr_plot" src="http://www.pathf.com/blogs/wp-content/uploads/2010/02/apr_plot.png" alt="apr_plot" width="499" height="325" /></p>
<p>I chose the<a href="http://en.wikipedia.org/wiki/Newton's_method" rel="nofollow" > Newton-Raphson method</a> to quickly find a precise solution.</p>
<p><img class="alignnone size-full wp-image-4834" title="Screen shot 2010-02-16 at 1.51.57 PM" src="http://www.pathf.com/blogs/wp-content/uploads/2010/02/Screen-shot-2010-02-16-at-1.51.57-PM.png" alt="Screen shot 2010-02-16 at 1.51.57 PM" width="140" height="46" /></p>
<p>The <a href="http://github.com/perry3819/mort_calc/blob/master/lib/mortgage_calc/mortgage_util.rb" rel="nofollow" >MortgageUtil</a>.calculate_apr method provides a starting value of the interest rate, which makes the Newton-Raphson converge on a accurate solution between 1 and 3 passes.<br />
<script src="http://gist.github.com/305850.js?file=gistfile1.txt"></script></p>
<p><strong>Installation</strong></p>
<p>% sudo gem install gemcutter</p>
<p>% gem tumble</p>
<p>% sudo gem install mortgage_calc</p>
<p><strong>Example</strong><br />
<script src="http://gist.github.com/305874.js?file=gistfile1.txt"></script></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/mortcalc-gem/">mort_calc gem: Rails Mortgage Calculation Gem</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/07/launched-rapid-reporting-employment-chek/' rel='bookmark' title='Permanent Link: Launched:  Rapid Reporting Employment Chek'>Launched:  Rapid Reporting Employment Chek</a></li><li><a href='http://www.pathf.com/blogs/2008/11/installing-edge-ferretacts_as_ferret/' rel='bookmark' title='Permanent Link: Installing Edge Ferret/acts_as_ferret'>Installing Edge Ferret/acts_as_ferret</a></li><li><a href='http://www.pathf.com/blogs/2008/09/tips-tricks-from-windy-city-rails/' rel='bookmark' title='Permanent Link: Rails Performance, Code Metrics, and Locking Down your Application: Tips &#038; Tricks from Windy City Rails 2008'>Rails Performance, Code Metrics, and Locking Down your Application: Tips &#038; Tricks from Windy City Rails 2008</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/02/mortcalc-gem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Post-Agile in the Game Development World?</title>
		<link>http://www.pathf.com/blogs/2010/02/postagile-game-development-world/</link>
		<comments>http://www.pathf.com/blogs/2010/02/postagile-game-development-world/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 10:52:44 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Agile Coaching]]></category>
		<category><![CDATA[Agile Project Management]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4804</guid>
		<description><![CDATA[
 photo credit: Rich B-S
Gwarred Mountain over at Climax Studios has posted a very thoughtful blog post about software development methods and the appropriateness of Agile Software Development. I was ready not to like this article, what with the title and things like this:
If I have to sit through another meeting with some little "agile" [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/postagile-game-development-world/">Post-Agile in the Game Development World?</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/09/agile-2009-reminded-team-leadership-2/' rel='bookmark' title='Permanent Link: Agile 2009: A reminder of why each team needs leadership'>Agile 2009: A reminder of why each team needs leadership</a></li><li><a href='http://www.pathf.com/blogs/2009/09/agile-development-play-understanding/' rel='bookmark' title='Permanent Link: Agile Development and Play: Understanding the Value'>Agile Development and Play: Understanding the Value</a></li><li><a href='http://www.pathf.com/blogs/2009/08/building-high-performance-agile-team-assume-hit/' rel='bookmark' title='Permanent Link: Building a High Performance Agile Team:  Assume You Will Be a One Hit Wonder'>Building a High Performance Agile Team:  Assume You Will Be a One Hit Wonder</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div style="float:right;padding:10px"><a href="http://www.flickr.com/photos/38584744@N00/4166463121/" rel="nofollow" title="V&amp;A Kanban December 7"  target="_blank"><img src="http://farm3.static.flickr.com/2534/4166463121_f08dc88e4a_m.jpg" border="0" alt="V&amp;A Kanban December 7" /></a><br />
<small><a href="http://creativecommons.org/licenses/by/2.0/" rel="nofollow" title="Attribution License"  target="_blank"><img src="http://www.pathf.com/blogs/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" rel="nofollow"  target="_blank">photo</a> credit: <a href="http://www.flickr.com/photos/38584744@N00/4166463121/" rel="nofollow" title="Rich B-S"  target="_blank">Rich B-S</a></small></div>
<p>Gwarred Mountain over at Climax Studios has posted a <a href="http://gwaredd.blogspot.com/2010/02/game-development-in-post-agile-world.html" rel="nofollow"  target="_blank">very thoughtful blog post about software development methods</a> and the appropriateness of Agile Software Development. I was ready not to like this article, what with the title and things like this:</p>
<blockquote><p><span>If I have to sit through another meeting with some little "agile" toe-rag defending their train wreck of a project then I may end up forcibly ramming a kanban where the scrum does not shine.</span></p></blockquote>
<p>But then I thought about all of those fresh-faced management consultants we've run into recently -- who have read a book about agile -- trying to teach us how to do it. Well, yes. I've had some uncharitable thoughts myself.<span id="more-4804"></span></p>
<p>Surprisingly, I felt myself agreeing with most of what he wrote. No, Agile is no panacea. Yes, it works best on small to medium sized projects. Yes, you have to have an experienced team to do it well. Yes, there are other methods that are more appropriate in some cases and, yes, you have to recognize when to use something else than an agile approach.</p>
<p>His breakdown of people vs process is one of the many nicely coherent gems in the post:</p>
<blockquote><p>So what is so great about process? Well, it gives us:</p>
<ul>
<li>Repeatable and predictable results</li>
<li>Quality Assurances (through the above)</li>
<li>Cost savings through the ability to optimise work flows</li>
<li>Defined work flow allows us to use cheaper labour</li>
<li>The promotion of best practices and conceptual integrity</li>
<li>The ability to scale to large numbers</li>
<li>A means to effectively track our progress against the objectives</li>
</ul>
<p>McDonalds is a great example of successful process. No matter where you are in the world, you know what you are going to get and you get it quickly and cheaply. This process has successfully scaled to thousands of restaurants. Whether you consider this good or bad it is hard to argue with the results.</p>
<p>Nevertheless, software development is much harder than frying beef burgers. Process is sometimes inappropriate or unconstructive.</p></blockquote>
<p>I'd say the lesson from his post is that you need to be thoughtful about the software development and project management technique you adopt. Know why you are doing things. Any process that has magical rituals rather than purposeful activities has a good chance of devolving into a software development farce.</p>
<p>There is one thing with which I take issue. He states that Test Driven Development (TDD) adds from 15%-35% to development effort. He cites an empirical Microsoft Research study. The paper, authored by Nagappan, et. al., is one that I am well familiar with. The study looks at four case studies, one at IBM and three at Microsoft, where two teams are given the same system to implement. Everything is the same except in one team incorporates TDD into their process. Neither team is told they are part of a study.</p>
<p>It isn't clear from the paper, but in my experience teams that adopt a new technique or tool usually are not as efficient the first time around. Certainly that is born out by our own empirical observations -- developers that are performing TDD for the first time are anywhere from 10%-30% less productive. That starts to move toward 0% after the first project. It becomes second nature. And as the study itself makes clear, the productivity losses in the study would be more than made up for in the maintenance phase of the software life-cycle, where 80% of software product costs land anyway.</p>
<p>Let's see, lower defect rates, no productivity loss after a little bit of developer training and reduced cost in the maintenance phase? Sounds like a no-brainer to me. Of course I don't know Mr. Mountain's industry. It may be that there is no maintenance in the game development space, just code and release. No updates. So rush to release, bugs be damned may be the best way to go (not being facetious here).</p>
<p>The fact that this study comes out of Microsoft already sets some alarm bells ringing for me. Although we're headquartered in Chicago now, we actually were founded in Seattle, physically and intellectually not far from the Microsoft campus. Based on what we saw working at and for Microsoft, we soon began a physical and intellectual journey away from there that has landed us in Chicago as a premier User Driven Software Product Development shop. We use experienced teams, User Experience Design (UXD) and are thoughtful about how and why we practice Agile.</p>
<p>We may not be everyone's cup of tea, but if you have a consumer or business software product or service that you need to get out to the marketplace swiftly, reliably and with high quality, then we may well be a fit for you.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/postagile-game-development-world/">Post-Agile in the Game Development World?</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/09/agile-2009-reminded-team-leadership-2/' rel='bookmark' title='Permanent Link: Agile 2009: A reminder of why each team needs leadership'>Agile 2009: A reminder of why each team needs leadership</a></li><li><a href='http://www.pathf.com/blogs/2009/09/agile-development-play-understanding/' rel='bookmark' title='Permanent Link: Agile Development and Play: Understanding the Value'>Agile Development and Play: Understanding the Value</a></li><li><a href='http://www.pathf.com/blogs/2009/08/building-high-performance-agile-team-assume-hit/' rel='bookmark' title='Permanent Link: Building a High Performance Agile Team:  Assume You Will Be a One Hit Wonder'>Building a High Performance Agile Team:  Assume You Will Be a One Hit Wonder</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/02/postagile-game-development-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Computers are (aren&#8217;t) Better Than People at Playing Chess</title>
		<link>http://www.pathf.com/blogs/2010/02/computers-people-playing-chess/</link>
		<comments>http://www.pathf.com/blogs/2010/02/computers-people-playing-chess/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 03:54:42 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[chess]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4800</guid>
		<description><![CDATA[
 photo credit: World Economic Forum
It is very easy to misunderstand software and it's capabilities. Although people and software often perform the same tasks, they often do so in very different ways and achieve very different results. The results software can achieve are sometimes surprising, even amazing. But what computers can do is still quite [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/computers-people-playing-chess/">Why Computers are (aren&#8217;t) Better Than People at Playing Chess</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/11/chess-game-viewer-in-gwt/' rel='bookmark' title='Permanent Link: Chess Game Viewer in GWT'>Chess Game Viewer in GWT</a></li><li><a href='http://www.pathf.com/blogs/2008/09/porting-java-libraries-jazzed-about-gwt/' rel='bookmark' title='Permanent Link: Porting Java Libraries &#8211; Jazzed About GWT'>Porting Java Libraries &#8211; Jazzed About GWT</a></li><li><a href='http://www.pathf.com/blogs/2009/02/are-we-engineering-software-or-people/' rel='bookmark' title='Permanent Link: Are We Engineering Software or People?'>Are We Engineering Software or People?</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div style="float:right;padding:10px"><a href="http://www.flickr.com/photos/15237218@N00/374713818/" rel="nofollow" title="Anatoly Karpov - World Economic Forum Annual Meeting Davos 2007"  target="_blank"><img src="http://farm1.static.flickr.com/153/374713818_41c1b95c43_m.jpg" border="0" alt="Anatoly Karpov - World Economic Forum Annual Meeting Davos 2007" /></a><br />
<small><a href="http://creativecommons.org/licenses/by-sa/2.0/" rel="nofollow" title="Attribution-ShareAlike License"  target="_blank"><img src="http://www.pathf.com/blogs/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" rel="nofollow"  target="_blank">photo</a> credit: <a href="http://www.flickr.com/photos/15237218@N00/374713818/" rel="nofollow" title="World Economic Forum"  target="_blank">World Economic Forum</a></small></div>
<p>It is very easy to misunderstand software and it's capabilities. Although people and software often perform the same tasks, they often do so in very different ways and achieve very different results. The results software can achieve are sometimes surprising, even amazing. But what computers can do is still quite limited. Making software development decisions based on an incomplete understanding on how software works, or drawing unwarranted equivalence between humans and computers, can lead to comical or even disastrous consequences.</p>
<p>It is with this in mind that I wanted to revisit one of my favorite topics: chess engines -- the computer programs that play a game of chess. Chess and computers were back in the news with a mainstream article by the mother of Kris Littlejohn entitled <a href="http://blogs.techrepublic.com.com/geekend/?p=4211" rel="nofollow"  target="_blank">The Role of Computers in Planning Chess Strategy</a>. Her son, Kris, helps current US Chess Champion Hikaru Nakamura prepare his openings for torunaments and matches and he makes use of various software (chess databases and engines) for this purpose. It's a well written article and well worth a read.</p>
<p>I've been an avid chess player for many decades and have also written a number of chess playing programs over the years. So it really tickles me how when then world champion <a href="http://en.wikipedia.org/wiki/Deep_Blue_%28chess_computer%29" rel="nofollow"  target="_blank">Gary Kasparov lost to Deep Blue</a> in a match back in 1997, many folks predicted that chess as a human past time would die. over a decade later, the situation is even worse for the humans: the best GM's can not hope to defeat the best programs, even at material odds. Yet the game is more popular than before. Part of the reason is online play thanks to the Internet. Another reason is that these strong chess engines make for primitive coaches. So the future of chess is safe for now.</p>
<p><span id="more-4800"></span></p>
<p>But there is a bit of a misunderstanding on how chess engines beat strong human players. Early on, chess computers were considered curiosities, able to play a legal game, but not able to beat any but the most basic of beginners. That's because computers were slow, and the problem solving method they used -- tree search, a sort of "I move, you move, I move, you move,..." tree for all possible moves -- was inefficient. Also, the computers weren't very smart at figuring out whether a particular position they had reached was good for them or not.</p>
<p>Over time computers got faster, the programs first got better at searching less of the tree, then more of the really important parts, and they got smarter and figuring out whether a particular position was good. Eventually they started looking further ahead than most people do and got so that they played a pretty reasonable game of chess.</p>
<p>But when we say that a computer can beat the world champion, that's not quite the same thing as saying the computer is better. By way of illustration, let's imagine we are playing a game with your word processor. We take turns Stringing sentences together. First I write a sentence, then the computer writes a sentence. The sentences make sense, they talk about the same thing, they argue, explain and so on. Our sentences are better, more elegant, than those of the computer, since we have a more sophisticated understanding of language.</p>
<p>Let's suppose that we have one more rule. If either player makes a spelling mistake or a grammatical error, they lose. First of all, the computer will never do that. When's the last time your word processor misspelled a word? We, however, misspell words a great deal of the time. Also, we find our selves constructing sentences that end in a propositions. Crap! We lose!</p>
<p>That's how computers win a great deal of the time: they capitalize on a few human oversights and wins. Since I play against some of the best engines on my own computers from time to time for training purposes, I can verify that this is true. When I play Rybka 3, the currently strongest chess engine on the market, at reasonably slow time controls, I need to take back about 5 errors on average to win against it. I'm not cheating, I just get to correct some of my mistakes.</p>
<p>If you had made the mistake of thinking you could win against any human, any time using a chess engine, you might have entered a correspondence chess tournament (these days played on a web server instead of by mail or email), where people can take days or weeks to ponder over their moves, and placed a large wager on you computer doing well. And you'd be out a lot of money. The best human correspondence players don't make that many mistakes to begin with and also use chess engines to check the "spelling" on their moves. They would eat your poor computer alive.</p>
<p>So, lessons from this post? When evaluating the capabilities of software versus people, see how each arrives at their performance. You may be avoiding a big mistake.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/computers-people-playing-chess/">Why Computers are (aren&#8217;t) Better Than People at Playing Chess</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/11/chess-game-viewer-in-gwt/' rel='bookmark' title='Permanent Link: Chess Game Viewer in GWT'>Chess Game Viewer in GWT</a></li><li><a href='http://www.pathf.com/blogs/2008/09/porting-java-libraries-jazzed-about-gwt/' rel='bookmark' title='Permanent Link: Porting Java Libraries &#8211; Jazzed About GWT'>Porting Java Libraries &#8211; Jazzed About GWT</a></li><li><a href='http://www.pathf.com/blogs/2009/02/are-we-engineering-software-or-people/' rel='bookmark' title='Permanent Link: Are We Engineering Software or People?'>Are We Engineering Software or People?</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/02/computers-people-playing-chess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Single Purpose Devices vs. Flexible Platforms and Functional Cases</title>
		<link>http://www.pathf.com/blogs/2010/02/single-purpose-devices-flexible-platforms-functional-cases/</link>
		<comments>http://www.pathf.com/blogs/2010/02/single-purpose-devices-flexible-platforms-functional-cases/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 12:54:17 +0000</pubDate>
		<dc:creator>Bernhard Kappe</dc:creator>
				<category><![CDATA[Product Strategy]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[iPhone/Mobile]]></category>
		<category><![CDATA[ease of use]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Kindle]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[purpose built devices]]></category>
		<category><![CDATA[simplicity]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4738</guid>
		<description><![CDATA[A few weeks ago, I wrote about the Skype Video Phone, part of a trend towards trading needless complexity for simplicity and ease of use.  It's also on the wrong side of another trend:  The trend away from single purpose mobile devices to flexible mobile platforms.  


For a while there was a [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/single-purpose-devices-flexible-platforms-functional-cases/">Single Purpose Devices vs. Flexible Platforms and Functional Cases</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2010/02/ipad-15-examples/' rel='bookmark' title='Permanent Link: Where the iPad will take over: 15 examples'>Where the iPad will take over: 15 examples</a></li><li><a href='http://www.pathf.com/blogs/2009/03/which-mobile-platforms-should-you-target-part-2/' rel='bookmark' title='Permanent Link: Which Mobile Platforms Should You Target? (Part 2)'>Which Mobile Platforms Should You Target? (Part 2)</a></li><li><a href='http://www.pathf.com/blogs/2007/01/the_iphone_and_/' rel='bookmark' title='Permanent Link: the iPhone and Touch screen technology'>the iPhone and Touch screen technology</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago, I wrote about the <a href="http://www.pathf.com/blogs/2010/01/trading-technical-complexities-vastly-increased-simplicity-ease/">Skype Video Phone</a>, part of a trend towards trading needless complexity for simplicity and ease of use.  It's also on the wrong side of another trend:  The trend away from single purpose mobile devices to flexible mobile platforms.  </p>
<p><img src="http://www.pathf.com/blogs/wp-content/uploads/2010/02/smdemyrecipe.jpg" alt="smdemyrecipe" title="smdemyrecipe" width="250" class="left" /></p>
<p><img src="http://www.pathf.com/blogs/wp-content/uploads/2010/02/panasonic-mca-h1-nursescanning.jpg" alt="panasonic-mca-h1-nursescanning" title="panasonic-mca-h1-nursescanning" width="260"  class="left" /></p>
<p>For a while there was a trend towards more and more purpose built digital products, from ebook readers to portable picture frames and pocket size digital cameras, all the way to to <a href="http://www.mydemy.com/" rel="nofollow" >digital recipe readers</a> ($299) and tablet pcs with tough cases, handles and barcode scanners for the medical industry.  </p>
<p>The iPhone, the iPod Touch and the soon to be launched iPad signal a reverse of that trend.  Apple has designed and built flexible platforms that combine the ease of use and simplicity that single purpose devices with the flexibility of general purpose devices, and that is proving to be a compelling value proposition.  </p>
<p>On the iPad, for example, you can easily get as good or better a recipe reader experience as you would with the demy digital recipe reader, a better digital picture frame or slide show experience than with a digital picture frame, likely as good or better of an ebook reader experience, and likely as good or better of a bar code scanning medical tablet experience.</p>
<p>How is that last possible, when the iPad does not come with a bar code scanner?   The solution will likely be through peripherals built into functional cases.  As an example, take a look at the digital checkout devices like Apple's own <a href="http://www.appleinsider.com/articles/09/11/03/exclusive_look_at_apples_new_ipod_touch_based_easypay_checkout.html" rel="nofollow" >EasyPay touch</a> (used at Apple's retail stores),   <a href="http://gigaom.com/2009/12/08/verifone-punches-square-launches-iphone-based-card-reader/" rel="nofollow" >Verifone</a> and <a href="http://gigaom.com/2009/12/31/ieconomy/" rel="nofollow" >Morphie</a> - that combine a magnetic card reader, a bar code scanner and a battery in a case for an iPod touch.<br />
<span id="more-4738"></span><br />
<img src="http://www.pathf.com/blogs/wp-content/uploads/2010/02/iphone-gets-credit-card-reader.jpg" alt="iphone-gets-credit-card-reader" title="iphone-gets-credit-card-reader" width="250" height="165" class="left" /></p>
<p><img src="http://www.pathf.com/blogs/wp-content/uploads/2010/02/paywaremobile-b11.jpg" alt="paywaremobile-b11" title="paywaremobile-b11" width="256"  class="left" /></p>
<p><img src="http://www.pathf.com/blogs/wp-content/uploads/2010/02/easypay-091103-10.png" alt="easypay-091103-10" title="easypay-091103-10" width="537" height="454" class="alignright size-full wp-image-4744" /></p>
<p>And of course, when the video enabled iPad finally comes out, it will likely replace the Skype Video Phone that my parents so love.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/single-purpose-devices-flexible-platforms-functional-cases/">Single Purpose Devices vs. Flexible Platforms and Functional Cases</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2010/02/ipad-15-examples/' rel='bookmark' title='Permanent Link: Where the iPad will take over: 15 examples'>Where the iPad will take over: 15 examples</a></li><li><a href='http://www.pathf.com/blogs/2009/03/which-mobile-platforms-should-you-target-part-2/' rel='bookmark' title='Permanent Link: Which Mobile Platforms Should You Target? (Part 2)'>Which Mobile Platforms Should You Target? (Part 2)</a></li><li><a href='http://www.pathf.com/blogs/2007/01/the_iphone_and_/' rel='bookmark' title='Permanent Link: the iPhone and Touch screen technology'>the iPhone and Touch screen technology</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/02/single-purpose-devices-flexible-platforms-functional-cases/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tiling a 2-D Polygon using C# GDI+</title>
		<link>http://www.pathf.com/blogs/2010/02/tiling-2d-polygon-gdi/</link>
		<comments>http://www.pathf.com/blogs/2010/02/tiling-2d-polygon-gdi/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 22:14:33 +0000</pubDate>
		<dc:creator>Karthik Muthupalaniappan</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Custom Application Development]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technologies and Platforms]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Drawing]]></category>
		<category><![CDATA[GDI+]]></category>
		<category><![CDATA[Window Forms Development]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4781</guid>
		<description><![CDATA[One of the most challenging problems I came across working on a .NET PDF Annotator and Editor application was to tile a 2-D polygon and also accurately determine the number of tiles that fill the surface of the polygon.  The tiling part was not as much of a challenge as the counting part. The tiled [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/tiling-2d-polygon-gdi/">Tiling a 2-D Polygon using C# GDI+</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/07/eyespot_ajax_ap/' rel='bookmark' title='Permanent Link: Eyespot &#8211; AJAX App for Video Editing'>Eyespot &#8211; AJAX App for Video Editing</a></li><li><a href='http://www.pathf.com/blogs/2008/07/linq-to-my-domain/' rel='bookmark' title='Permanent Link: LINQ to My Domain'>LINQ to My Domain</a></li><li><a href='http://www.pathf.com/blogs/2007/01/how_to_really_d/' rel='bookmark' title='Permanent Link: How to REALLY do Page Preview in Java with Embedded HTML Rendering'>How to REALLY do Page Preview in Java with Embedded HTML Rendering</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div id="attachment_4787" class="wp-caption alignnone" style="width: 543px"><img class="size-full wp-image-4787" title="Tiling a Polygon" src="http://www.pathf.com/blogs/wp-content/uploads/2010/02/Tiling-Polygon.png" alt="Tiling a Polygon" width="533" height="388" /><p class="wp-caption-text">Tiling a Polygon</p></div>
<p>One of the most challenging problems I came across working on a <a href="http://www.pathf.com/showcase/success-stories/pdf-annotation-software/" rel="nofollow"  target="_blank">.NET PDF Annotator and Editor application</a> was to tile a 2-D polygon and also accurately determine the number of tiles that fill the surface of the polygon.  The tiling part was not as much of a challenge as the counting part. The tiled polygon was to be rendered on a PDF document since the application in question is a PDF Annotating and Editing tool. We looked for anything the third party .NET PDF rendering/manipulation API that was used could provide for the tile rendering but there was nothing unfortunately.<br />
<span id="more-4781"></span><br />
So we set out to use <a href="http://msdn.microsoft.com/en-us/library/ms533798%28VS.85%29.aspx" rel="nofollow"  target="_blank">C#'s native GDI+ library</a> to render the tiles for the polygon.  After trying out different approaches to accomplish the rendering of the tiles, we discovered the one that would work best. The idea was simple. Every 2-D shape on the drawing surface has a bounding rectangle that encloses the shape. Starting from the top left bounding point of the rectangle, iteratively render a rectangle (tile with whatever length and width) across the X axis until the right most edge of the rectangle and this iteration needs to happen over the Y-axis (not sure if I explained clearly enough <img src='http://www.pathf.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .  So now we have rectangular tiles laid out across the bounding rectangle for the polygon. GDI+ gives us a clip method that allows us to clip the rendering surface to a specific graphics path or region. Using the clip method, clip the drawing surface to be the graphics path for just the Polygon so that only tiles within the polygon's graphics path get rendered on the screen. We could apply other transformations to the rendered tiles like offseting, rotation or a gap between each tile.</p>
<p>Coming up with the most efficient way to count the number of tiles (including partial tiles) was a little trickier than rendering the tiles.  It turned out that the ideal approach was to essentially count each tile as it was drawn and checking whether the tile was partially or fully part of the polygon's graphics path/region. So, there is this method <a href="http://msdn.microsoft.com/en-us/library/system.drawing.region.isvisible%28VS.71%29.aspx" rel="nofollow"  target="_blank">Region.IsVisible</a> that lets you test whether a rectangle is partially or fully contained within a graphics region. During the rendering of each rectangular tile, the method was used to check whether the tile was going to be part of the region associated with the polygon and was counted if it was going to be. Even though, this was the most efficient solution for the problem, we did nt see 100% accuracy sometimes when rotation transformation was applied to the tiles. Still havent found an answer to this anomaly.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/tiling-2d-polygon-gdi/">Tiling a 2-D Polygon using C# GDI+</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/07/eyespot_ajax_ap/' rel='bookmark' title='Permanent Link: Eyespot &#8211; AJAX App for Video Editing'>Eyespot &#8211; AJAX App for Video Editing</a></li><li><a href='http://www.pathf.com/blogs/2008/07/linq-to-my-domain/' rel='bookmark' title='Permanent Link: LINQ to My Domain'>LINQ to My Domain</a></li><li><a href='http://www.pathf.com/blogs/2007/01/how_to_really_d/' rel='bookmark' title='Permanent Link: How to REALLY do Page Preview in Java with Embedded HTML Rendering'>How to REALLY do Page Preview in Java with Embedded HTML Rendering</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/02/tiling-2d-polygon-gdi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Architectural Anxiety and the Waterfall Approach</title>
		<link>http://www.pathf.com/blogs/2010/02/architectural-anxiety-waterfall-approach/</link>
		<comments>http://www.pathf.com/blogs/2010/02/architectural-anxiety-waterfall-approach/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 10:50:58 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Divide and Conquer]]></category>
		<category><![CDATA[Stress]]></category>
		<category><![CDATA[waterfall]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4778</guid>
		<description><![CDATA[ photo credit: bark
We've discussed the benefits of Agile development before and that the iterative approach to building the architecture -- where you explore architectural issues (very few apps are completely new and unknown) a little bit through each iteration -- is an effective method for arriving at a good application architecture. What is less [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/architectural-anxiety-waterfall-approach/">Architectural Anxiety and the Waterfall Approach</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/06/agile-development-improves-roi-%e2%80%93-but-rfp-processes-are-stuck-in-waterfall/' rel='bookmark' title='Permanent Link: Agile Development Improves ROI – But RFP Processes are Stuck in Waterfall.'>Agile Development Improves ROI – But RFP Processes are Stuck in Waterfall.</a></li><li><a href='http://www.pathf.com/blogs/2009/10/waterfall-cost-bugs-launch/' rel='bookmark' title='Permanent Link: Under the Waterfall: The Cost of Bugs After Launch'>Under the Waterfall: The Cost of Bugs After Launch</a></li><li><a href='http://www.pathf.com/blogs/2007/12/ia-and-agility/' rel='bookmark' title='Permanent Link: IA and agility'>IA and agility</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div style='float:right;padding:10px'><a href="http://www.flickr.com/photos/49503168860@N01/4257136773/" rel="nofollow"  title="an unwitting victim...bwahahhahahaa" target="_blank"><img src="http://farm5.static.flickr.com/4044/4257136773_5634a21fa2_m.jpg" alt="an unwitting victim...bwahahhahahaa" border="0" /></a><br /><small><a href="http://creativecommons.org/licenses/by/2.0/" rel="nofollow"  title="Attribution License" target="_blank"><img src="http://www.pathf.com/blogs/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" rel="nofollow"  target="_blank">photo</a> credit: <a href="http://www.flickr.com/photos/49503168860@N01/4257136773/" rel="nofollow"  title="bark" target="_blank">bark</a></small></div>
<p>We've discussed the benefits of Agile development before and that the iterative approach to building the architecture -- where you explore architectural issues (very few apps are completely new and unknown) a little bit through each iteration -- is an effective method for arriving at a good application architecture. What is less obvious is the psychological benefit to working in this way.</p>
<p>It's frankly been a while since I've participated in a large waterfall project directly (one benefit of working for a firm that does agile software product development), but I regularly talk with folks who are still in the corporate trenches doing things the old fashioned way. One thing that hasn't changed is the <strong>BIG ARCHITECTURE</strong> wrestling match up front. Management wants to know the architecture, the guys with "architect" in their job titles want to know the architecture (so they can criticize, natch), the project manager(s) want to know the architecture. How will we scale? How will we ensure security? More useless brainpower is spent on this ultimately fruitless task -- solving problems that end up being no problem at all -- than almost any other activity in the project.</p>
<p><span id="more-4778"></span></p>
<p>What mostly isn't recognized by participants and observers is the psychological burden this puts on the development teach. Making big decisions early, often in the absence of critical information, produces a lot of anxiety. This often leads to poor decision making and procrastination (where necessary decisions are pushed back to a later date).</p>
<p>Agile, in contrast, provides a natural divide and conquer approach to breaking big tasks into smaller tasks and allows the development team to make decisions at the right time with the right information. I'm halfway convinced that all of those "enterprise architects" at big firms are really just stress counselors for tech leads suffering from waterfall anxiety.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/architectural-anxiety-waterfall-approach/">Architectural Anxiety and the Waterfall Approach</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/06/agile-development-improves-roi-%e2%80%93-but-rfp-processes-are-stuck-in-waterfall/' rel='bookmark' title='Permanent Link: Agile Development Improves ROI – But RFP Processes are Stuck in Waterfall.'>Agile Development Improves ROI – But RFP Processes are Stuck in Waterfall.</a></li><li><a href='http://www.pathf.com/blogs/2009/10/waterfall-cost-bugs-launch/' rel='bookmark' title='Permanent Link: Under the Waterfall: The Cost of Bugs After Launch'>Under the Waterfall: The Cost of Bugs After Launch</a></li><li><a href='http://www.pathf.com/blogs/2007/12/ia-and-agility/' rel='bookmark' title='Permanent Link: IA and agility'>IA and agility</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/02/architectural-anxiety-waterfall-approach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unit Testing Sphinx</title>
		<link>http://www.pathf.com/blogs/2010/02/unit-testing-sphinx/</link>
		<comments>http://www.pathf.com/blogs/2010/02/unit-testing-sphinx/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 01:28:17 +0000</pubDate>
		<dc:creator>Sharad Jain</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4776</guid>
		<description><![CDATA[Sphinx (and its rails plugin thinking-sphinx) is my choice of search engine on ruby/rails project. It is powerful yet super easy to setup.
However, testing Sphinx code is not easy at first. Since Sphinx works by leverging database commit hooks, it cannot be tested within the bounds of unit testing framework that rails provides. This is [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/unit-testing-sphinx/">Unit Testing Sphinx</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/11/testing-various-roles-in-ruby-on-rails/' rel='bookmark' title='Permanent Link: Testing various roles in ruby on rails'>Testing various roles in ruby on rails</a></li><li><a href='http://www.pathf.com/blogs/2008/05/agile-development-and-testing-unit-or-montecarlo/' rel='bookmark' title='Permanent Link: Agile Development and Testing: Unit or Montecarlo?'>Agile Development and Testing: Unit or Montecarlo?</a></li><li><a href='http://www.pathf.com/blogs/2009/04/unit-testing-can-you-afford-not-to/' rel='bookmark' title='Permanent Link: Unit Testing: Can You Afford Not To?'>Unit Testing: Can You Afford Not To?</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Sphinx (and its rails plugin thinking-sphinx) is my choice of search engine on ruby/rails project. It is powerful yet super easy to setup.</p>
<p>However, testing Sphinx code is not easy at first. Since Sphinx works by leverging database commit hooks, it cannot be tested within the bounds of unit testing framework that rails provides. This is understandable because, in rails testing, a transaction is started before each test that is bound to rollback after the test is finished. Since the test data is never committed, sphinx doesn't get a chance to index anything and cannot be tested.</p>
<p>The documentation for <a href="http://freelancing-god.github.com/ts/en/testing.html" rel="nofollow" >sphinx testing</a> suggests using cucumber for integration testing. To me, cucumber test are still miles away from the smallest piece of sphinx code (inside Model) to be tested. So, I turned to <a href="http://github.com/rails/rails/blob/master/activerecord/test/cases/transactions_test.rb" rel="nofollow" >how transactional code is tested in rails</a> framework for some cue.</p>
<p>Here is what I ended up with:</p>
<pre class="ruby">&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> TransactionalUserTest &lt; <span style="color:#6666ff; font-weight:bold;">ActiveSupport::TestCase</span>
  // any transactional test needs to have this
  <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">use_transactional_fixtures</span> = <span style="color:#0000FF; font-weight:bold;">false</span>
&nbsp;
  context <span style="color:#996600;">&quot;with no users in database&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    setup <span style="color:#9966CC; font-weight:bold;">do</span>
      // clear the existing data <span style="color:#9966CC; font-weight:bold;">for</span> our test - <span style="color:#9966CC; font-weight:bold;">not</span> sure <span style="color:#9966CC; font-weight:bold;">if</span> this affects other test but we use machinist instead of fixture files, so we should be good here.
      <span style="color:#9900CC;">User</span>.<span style="color:#9900CC;">destroy_all</span>
      UserProfile.<span style="color:#9900CC;">destroy_all</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    context <span style="color:#996600;">&quot;with a few users created&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      setup <span style="color:#9966CC; font-weight:bold;">do</span>
        <span style="color:#0066ff; font-weight:bold;">@john</span> = <span style="color:#0066ff; font-weight:bold;">@david</span> = <span style="color:#0000FF; font-weight:bold;">nil</span>
        // any data <span style="color:#9966CC; font-weight:bold;">for</span> sphinx test should be wrapped <span style="color:#9966CC; font-weight:bold;">in</span> transaction so sphinx can see these changes
        User.<span style="color:#9900CC;">transaction</span> <span style="color:#9966CC; font-weight:bold;">do</span>
          <span style="color:#0066ff; font-weight:bold;">@john</span> = User.<span style="color:#9900CC;">make</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:first_name</span> =&gt; <span style="color:#996600;">&quot;John&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
          <span style="color:#0066ff; font-weight:bold;">@david</span> = User.<span style="color:#9900CC;">make</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:first_name</span> =&gt; <span style="color:#996600;">&quot;David&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
      should <span style="color:#996600;">&quot;find user with first name john&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
        // start sphinx server
        <span style="color:#6666ff; font-weight:bold;">ThinkingSphinx::Test</span>.<span style="color:#9900CC;">run</span> <span style="color:#9966CC; font-weight:bold;">do</span>
          // give sphinx an opportunity to index newly added data <span style="color:#006600; font-weight:bold;">&#40;</span>required before calling search<span style="color:#006600; font-weight:bold;">&#41;</span>
          <span style="color:#6666ff; font-weight:bold;">ThinkingSphinx::Test</span>.<span style="color:#9900CC;">index</span>
          assert_equal<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span>@john<span style="color:#006600; font-weight:bold;">&#93;</span>, User.<span style="color:#9900CC;">search</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;john&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">collect</span><span style="color:#006600; font-weight:bold;">&#41;</span>
          assert_equal<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span>@david<span style="color:#006600; font-weight:bold;">&#93;</span>, User.<span style="color:#9900CC;">search</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;david&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">collect</span><span style="color:#006600; font-weight:bold;">&#41;</span>
          assert_equal<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,User.<span style="color:#9900CC;">search</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;cheese&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">collect</span><span style="color:#006600; font-weight:bold;">&#41;</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;</pre>
<p>Isn't it nicer to be able to test sphinx code in isolation <img src='http://www.pathf.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/unit-testing-sphinx/">Unit Testing Sphinx</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/11/testing-various-roles-in-ruby-on-rails/' rel='bookmark' title='Permanent Link: Testing various roles in ruby on rails'>Testing various roles in ruby on rails</a></li><li><a href='http://www.pathf.com/blogs/2008/05/agile-development-and-testing-unit-or-montecarlo/' rel='bookmark' title='Permanent Link: Agile Development and Testing: Unit or Montecarlo?'>Agile Development and Testing: Unit or Montecarlo?</a></li><li><a href='http://www.pathf.com/blogs/2009/04/unit-testing-can-you-afford-not-to/' rel='bookmark' title='Permanent Link: Unit Testing: Can You Afford Not To?'>Unit Testing: Can You Afford Not To?</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/02/unit-testing-sphinx/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flashback: The iPhone and the Early Days of the Web</title>
		<link>http://www.pathf.com/blogs/2010/02/flashback-iphone-early-days-web/</link>
		<comments>http://www.pathf.com/blogs/2010/02/flashback-iphone-early-days-web/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 21:19:07 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Disruption]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technologies and Platforms]]></category>
		<category><![CDATA[iPhone/Mobile]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Trends]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4774</guid>
		<description><![CDATA[
 photo credit: B Rosen
I remember my first real grownup and serious web project outside of the university environment. It was 1994 and SSL was a novelty. People were making insane predictions that one day up to $600 million (think Dr. Evil) worth of consumer goods would be sold on the web worldwide. In 2007, [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/flashback-iphone-early-days-web/">Flashback: The iPhone and the Early Days of the Web</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/12/ajax-and-browse/' rel='bookmark' title='Permanent Link: Ajax and Browsers: Recapitulating the Early Days of Personal Computers'>Ajax and Browsers: Recapitulating the Early Days of Personal Computers</a></li><li><a href='http://www.pathf.com/blogs/2008/10/will-q4-iphone-sales-surpass-expectations/' rel='bookmark' title='Permanent Link: Will Q4 iPhone Sales Surpass Expectations?'>Will Q4 iPhone Sales Surpass Expectations?</a></li><li><a href='http://www.pathf.com/blogs/2010/01/apples-earnings-call-enterprise-iphone-adoption-growth/' rel='bookmark' title='Permanent Link: Apple&#8217;s Earnings Call:  Enterprise iPhone Adoption Growth'>Apple&#8217;s Earnings Call:  Enterprise iPhone Adoption Growth</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div style="float:right;padding:10px"><a href="http://www.flickr.com/photos/82763263@N00/3681001732/" rel="nofollow" title="269/365 - why even have that deal?"  target="_blank"><img src="http://farm4.static.flickr.com/3590/3681001732_8ccd165965_m.jpg" border="0" alt="269/365 - why even have that deal?" /></a><br />
<small><a href="http://creativecommons.org/licenses/by-nd/2.0/" rel="nofollow" title="Attribution-NoDerivs License"  target="_blank"><img src="http://www.pathf.com/blogs/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" rel="nofollow"  target="_blank">photo</a> credit: <a href="http://www.flickr.com/photos/82763263@N00/3681001732/" rel="nofollow" title="B Rosen"  target="_blank">B Rosen</a></small></div>
<p>I remember my first real grownup and serious web project outside of the university environment. It was 1994 and SSL was a novelty. People were making insane predictions that one day up to $600 million (think Dr. Evil) worth of consumer goods would be sold on the web worldwide. In 2007, just <a href="http://www.emarketer.com/Reports/All/Emarketer_2000547.aspx" rel="nofollow"  target="_blank">Canadian B2C sales were US$12.9 Billion</a>.</p>
<p>Some folks, especially startups and smaller companies, saw the web as an opportunity to shake up the established order and establish a new sales channel or an entirely new business model. They invested what they could in building the first of what became known as e-commerce sites. Among established players, and some more conservative smaller players, there was initial hostility toward the new medium. When in 1994 I proposed to Ameritech (now part of SBC/AT&amp;T) that they bring their lucrative print yellowpages online, I was run out of Hoffman Estates on a rail.</p>
<p><span id="more-4774"></span></p>
<p>The con arguments ran as follows:</p>
<ol>
<li>Investing in the web will increase our IT costs and require us to support lots of new and different technologies.</li>
<li>It will spoil our existing business model.</li>
<li>The platform is unproven. We have a proven client/server (desktop, etc., etc.) solution which is far better than some primitive web site.</li>
</ol>
<p>These were all valid points. And if the web was just the idea of some crazed developer, then it could have been safely ignored.</p>
<p>But the web was being rapidly adopted by both consumers and businesses, knocking down barriers to entry wherever it went. The network effect was about to slap the entrenched players upside the head.</p>
<p>Now we're seeing much the same thing in the world of mobile, which right now means mostly iPhone but will at some point include more players such as Android and perhaps Blackberry devices. The same objections are being raised towards the iPhone -- more IT costs, spoils our business, unproven/not capable -- and the answer is still the same: if you ignore iPhone/mobile, then the network effect is going to knock you upside the head.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/flashback-iphone-early-days-web/">Flashback: The iPhone and the Early Days of the Web</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/12/ajax-and-browse/' rel='bookmark' title='Permanent Link: Ajax and Browsers: Recapitulating the Early Days of Personal Computers'>Ajax and Browsers: Recapitulating the Early Days of Personal Computers</a></li><li><a href='http://www.pathf.com/blogs/2008/10/will-q4-iphone-sales-surpass-expectations/' rel='bookmark' title='Permanent Link: Will Q4 iPhone Sales Surpass Expectations?'>Will Q4 iPhone Sales Surpass Expectations?</a></li><li><a href='http://www.pathf.com/blogs/2010/01/apples-earnings-call-enterprise-iphone-adoption-growth/' rel='bookmark' title='Permanent Link: Apple&#8217;s Earnings Call:  Enterprise iPhone Adoption Growth'>Apple&#8217;s Earnings Call:  Enterprise iPhone Adoption Growth</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/02/flashback-iphone-early-days-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>To the Moon: an iPhone with Wheels</title>
		<link>http://www.pathf.com/blogs/2010/02/moon-iphone-wheels/</link>
		<comments>http://www.pathf.com/blogs/2010/02/moon-iphone-wheels/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 20:42:09 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[iPhone/Mobile]]></category>
		<category><![CDATA[Google X Prize]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4771</guid>
		<description><![CDATA[
 photo credit: musiciennedusilence
A friend of mine from college is a physics professor who does a lot of stuff with the space station and the new Google Lunar X Prize, that awards up to $30 million for the first non-governmental organization to land a robot on the moon. He likes to get his students involved [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/moon-iphone-wheels/">To the Moon: an iPhone with Wheels</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/08/jquery-vs-proto/' rel='bookmark' title='Permanent Link: jQuery vs. Prototype: OO JavaScript with or without training wheels'>jQuery vs. Prototype: OO JavaScript with or without training wheels</a></li><li><a href='http://www.pathf.com/blogs/2008/07/developing-iphone-applications-using-ruby-on-rails-and-eclipse-part-2-displaying-iphone-content-to-the-client-also-up-on-ibm-developerworks/' rel='bookmark' title='Permanent Link: &#8220;Developing iPhone applications using Ruby on Rails and Eclipse, Part 2: Displaying iPhone content to the client&#8221; Also up on IBM Developerworks'>&#8220;Developing iPhone applications using Ruby on Rails and Eclipse, Part 2: Displaying iPhone content to the client&#8221; Also up on IBM Developerworks</a></li><li><a href='http://www.pathf.com/blogs/2008/11/iphone-view-testing-td/' rel='bookmark' title='Permanent Link: iPhone SDK: UIViewController Testing &amp; TDD'>iPhone SDK: UIViewController Testing &amp; TDD</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div style="float:right;padding:10px"><a href="http://www.flickr.com/photos/9675912@N08/4330665649/" rel="nofollow" title="moon"  target="_blank"><img src="http://farm5.static.flickr.com/4063/4330665649_96095d11cf_m.jpg" border="0" alt="moon" /></a><br />
<small><a href="http://creativecommons.org/licenses/by/2.0/" rel="nofollow" title="Attribution License"  target="_blank"><img src="http://www.pathf.com/blogs/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" rel="nofollow"  target="_blank">photo</a> credit: <a href="http://www.flickr.com/photos/9675912@N08/4330665649/" rel="nofollow" title="musiciennedusilence"  target="_blank">musiciennedusilence</a></small></div>
<p>A friend of mine from college is a physics professor who does a lot of stuff with the space station and the new <a href="http://www.googlelunarxprize.org/" rel="nofollow"  target="_blank">Google Lunar X Prize</a>, that awards up to $30 million for the first non-governmental organization to land a robot on the moon. He likes to get his students involved and has a gift for expressing things in terms they can immediately grasp. "The robot," he tells them, "can be small. Think of an iPhone with wheels."</p>
<p>When something has penetrated the collective consciousness the way the iPhone has, it changes the way we look at what is possible.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/moon-iphone-wheels/">To the Moon: an iPhone with Wheels</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/08/jquery-vs-proto/' rel='bookmark' title='Permanent Link: jQuery vs. Prototype: OO JavaScript with or without training wheels'>jQuery vs. Prototype: OO JavaScript with or without training wheels</a></li><li><a href='http://www.pathf.com/blogs/2008/07/developing-iphone-applications-using-ruby-on-rails-and-eclipse-part-2-displaying-iphone-content-to-the-client-also-up-on-ibm-developerworks/' rel='bookmark' title='Permanent Link: &#8220;Developing iPhone applications using Ruby on Rails and Eclipse, Part 2: Displaying iPhone content to the client&#8221; Also up on IBM Developerworks'>&#8220;Developing iPhone applications using Ruby on Rails and Eclipse, Part 2: Displaying iPhone content to the client&#8221; Also up on IBM Developerworks</a></li><li><a href='http://www.pathf.com/blogs/2008/11/iphone-view-testing-td/' rel='bookmark' title='Permanent Link: iPhone SDK: UIViewController Testing &amp; TDD'>iPhone SDK: UIViewController Testing &amp; TDD</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/02/moon-iphone-wheels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Slight Correction to using PureMVC with Vaadin</title>
		<link>http://www.pathf.com/blogs/2010/02/4701/</link>
		<comments>http://www.pathf.com/blogs/2010/02/4701/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 20:32:42 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technologies and Platforms]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[PureMVC]]></category>
		<category><![CDATA[Vaadin]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4701</guid>
		<description><![CDATA[ photo credit: suki_fotografiert
 A while back I looked at the Vaadin Plugin and tried to make it work with the Multiton PureMVC. Back then I proposed the following code:
&#160;
public static ApplicationFacade getInstance&#40;&#41; &#123;
   if &#40;instance == null&#41; &#123;
     // nuke the multiton so we can do the grails [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/4701/">A Slight Correction to using PureMVC with Vaadin</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/08/making-vaadin-puremvc-grails-work/' rel='bookmark' title='Permanent Link: Making Vaadin, PureMVC and Grails Work Together'>Making Vaadin, PureMVC and Grails Work Together</a></li><li><a href='http://www.pathf.com/blogs/2009/03/notification-testing-with-puremvc-and-flexunit/' rel='bookmark' title='Permanent Link: Notification Testing with PureMVC and FlexUnit'>Notification Testing with PureMVC and FlexUnit</a></li><li><a href='http://www.pathf.com/blogs/2009/10/griffon-puremvc-plugin-initial-thoughts/' rel='bookmark' title='Permanent Link: Griffon and a PureMVC Plugin: Some Initial Thoughts'>Griffon and a PureMVC Plugin: Some Initial Thoughts</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div style='float:right;padding:10px'><a href="http://www.flickr.com/photos/36423218@N05/4304040376/" rel="nofollow"  title="Bench Monday" target="_blank"><img src="http://farm5.static.flickr.com/4049/4304040376_ab19e8382a_m.jpg" alt="Bench Monday" border="0" /></a><br /><small><a href="http://creativecommons.org/licenses/by-nd/2.0/" rel="nofollow"  title="Attribution-NoDerivs License" target="_blank"><img src="http://www.pathf.com/blogs/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" rel="nofollow"  target="_blank">photo</a> credit: <a href="http://www.flickr.com/photos/36423218@N05/4304040376/" rel="nofollow"  title="suki_fotografiert" target="_blank">suki_fotografiert</a></small></div>
<p> A while back <a href="http://www.pathf.com/blogs/2009/08/making-vaadin-puremvc-grails-work/comment-page-1/" taget="_blank">I looked at</a> the Vaadin Plugin and tried to make it work with the Multiton PureMVC. Back then I proposed the following code:</p>
<pre class="java">&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> ApplicationFacade getInstance<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
   <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>instance == <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
     <span style="color: #808080; font-style: italic;">// nuke the multiton so we can do the grails recompile</span>
     <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>ApplicationFacade.<span style="color: #006600;">hasCore</span><span style="color: #66cc66;">&#40;</span>CORE<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
       ApplicationFacade.<span style="color: #006600;">removeCore</span><span style="color: #66cc66;">&#40;</span>CORE<span style="color: #66cc66;">&#41;</span>;
     <span style="color: #66cc66;">&#125;</span>
     instance = <span style="color: #000000; font-weight: bold;">new</span> ApplicationFacade<span style="color: #66cc66;">&#40;</span>CORE<span style="color: #66cc66;">&#41;</span>;
   <span style="color: #66cc66;">&#125;</span>
   <span style="color: #000000; font-weight: bold;">return</span> instance;
 <span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>A little more noodling and you'll see that doesn't work. In a multi-session environment, each user will need his own core. Furthermore, inactive cores should be harvested, otherwise we will have a memory leak.<br />
<span id="more-4701"></span><br />
A little repair work and we have the following code, which does half the job:</p>
<pre class="java">&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> ApplicationFacade getInstance<span style="color: #66cc66;">&#40;</span>HttpSession session<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
   <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" rel="nofollow" ><span style="color: #aaaadd; font-weight: bold;">String</span></a> id = session.<span style="color: #006600;">getId</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
   <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>instance == <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
     <span style="color: #808080; font-style: italic;">// nuke the multiton so we can do the grails recompile</span>
     <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>ApplicationFacade.<span style="color: #006600;">hasCore</span><span style="color: #66cc66;">&#40;</span>CORE + <span style="color: #ff0000;">&quot;_&quot;</span> + id<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
       ApplicationFacade.<span style="color: #006600;">removeCore</span><span style="color: #66cc66;">&#40;</span>CORE + <span style="color: #ff0000;">&quot;_&quot;</span> + id<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
     <span style="color: #66cc66;">&#125;</span>
     instance = <span style="color: #000000; font-weight: bold;">new</span> ApplicationFacade<span style="color: #66cc66;">&#40;</span>CORE + <span style="color: #ff0000;">&quot;_&quot;</span> + id<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
   <span style="color: #66cc66;">&#125;</span>
   <span style="color: #000000; font-weight: bold;">return</span> instance;
 <span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>We get the session through the Vaadin <code>ApplicationContext</code> object. So, now we get a fresh core per session. But we still have the problem of leaking memory every time a session or Vaadin application is invalidated. Neither PureMVC nor Vaadin have any lifecycle methods to hook into for cleanup. In PureMVC that is understandable, since it isn't really designed for a web application context, but this seems a more serious oversight in Vaadin.</p>
<p>We can hook some PureMVC cleanup by storing the key as a session attribute and using a <code>HttpSessionListener</code> to clean it up. I'll test that out and blog about it in the future.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/02/4701/">A Slight Correction to using PureMVC with Vaadin</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/08/making-vaadin-puremvc-grails-work/' rel='bookmark' title='Permanent Link: Making Vaadin, PureMVC and Grails Work Together'>Making Vaadin, PureMVC and Grails Work Together</a></li><li><a href='http://www.pathf.com/blogs/2009/03/notification-testing-with-puremvc-and-flexunit/' rel='bookmark' title='Permanent Link: Notification Testing with PureMVC and FlexUnit'>Notification Testing with PureMVC and FlexUnit</a></li><li><a href='http://www.pathf.com/blogs/2009/10/griffon-puremvc-plugin-initial-thoughts/' rel='bookmark' title='Permanent Link: Griffon and a PureMVC Plugin: Some Initial Thoughts'>Griffon and a PureMVC Plugin: Some Initial Thoughts</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/02/4701/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple Earnings Call: 90% of iPhone Apps Approved within 2 Weeks</title>
		<link>http://www.pathf.com/blogs/2010/01/apple-earnings-call-90-iphone-apps-approved-2-weeks/</link>
		<comments>http://www.pathf.com/blogs/2010/01/apple-earnings-call-90-iphone-apps-approved-2-weeks/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 20:06:19 +0000</pubDate>
		<dc:creator>Bernhard Kappe</dc:creator>
				<category><![CDATA[Product Strategy]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[iPhone/Mobile]]></category>
		<category><![CDATA[ap store]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[ipod touch]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4670</guid>
		<description><![CDATA[Anther interesting item from yesterday's earnings call:
Over 90% of iPhone apps are approved within 14 days of submission.

Given over 100,000 apps in the store from a wide variety of developers (from amateurs to experts) and a wide variety of topics, that's actually pretty good.  Apple claims that most rejections are actually for bugs in [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/01/apple-earnings-call-90-iphone-apps-approved-2-weeks/">Apple Earnings Call: 90% of iPhone Apps Approved within 2 Weeks</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2010/01/apples-earnings-call-enterprise-iphone-adoption-growth/' rel='bookmark' title='Permanent Link: Apple&#8217;s Earnings Call:  Enterprise iPhone Adoption Growth'>Apple&#8217;s Earnings Call:  Enterprise iPhone Adoption Growth</a></li><li><a href='http://www.pathf.com/blogs/2008/10/will-q4-iphone-sales-surpass-expectations/' rel='bookmark' title='Permanent Link: Will Q4 iPhone Sales Surpass Expectations?'>Will Q4 iPhone Sales Surpass Expectations?</a></li><li><a href='http://www.pathf.com/blogs/2008/10/8-tips/' rel='bookmark' title='Permanent Link: 8 Tips &#038; Tricks When Starting Objective-C iPhone Apps: [self.paradigm shiftFrom:@"ruby" to:@"objective-c"];'>8 Tips &#038; Tricks When Starting Objective-C iPhone Apps: [self.paradigm shiftFrom:@"ruby" to:@"objective-c"];</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Anther interesting item from <a href="http://www.macworld.com/article/145806/2010/01/apple_earnings.html" rel="nofollow" >yesterday's earnings call</a>:</p>
<blockquote><p>Over 90% of iPhone apps are approved within 14 days of submission.
</p></blockquote>
<p>Given over 100,000 apps in the store from a wide variety of developers (from amateurs to experts) and a wide variety of topics, that's actually pretty good.  Apple claims that most rejections are actually for bugs in code, which makes sense given the wide disparity in development quality and test coverage.*</p>
<p>* For example, are you testing your software for ipod touch as well?  You should - applications have been rejected for working on the iPhone, but not the iPod touch.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/01/apple-earnings-call-90-iphone-apps-approved-2-weeks/">Apple Earnings Call: 90% of iPhone Apps Approved within 2 Weeks</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2010/01/apples-earnings-call-enterprise-iphone-adoption-growth/' rel='bookmark' title='Permanent Link: Apple&#8217;s Earnings Call:  Enterprise iPhone Adoption Growth'>Apple&#8217;s Earnings Call:  Enterprise iPhone Adoption Growth</a></li><li><a href='http://www.pathf.com/blogs/2008/10/will-q4-iphone-sales-surpass-expectations/' rel='bookmark' title='Permanent Link: Will Q4 iPhone Sales Surpass Expectations?'>Will Q4 iPhone Sales Surpass Expectations?</a></li><li><a href='http://www.pathf.com/blogs/2008/10/8-tips/' rel='bookmark' title='Permanent Link: 8 Tips &#038; Tricks When Starting Objective-C iPhone Apps: [self.paradigm shiftFrom:@"ruby" to:@"objective-c"];'>8 Tips &#038; Tricks When Starting Objective-C iPhone Apps: [self.paradigm shiftFrom:@"ruby" to:@"objective-c"];</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/01/apple-earnings-call-90-iphone-apps-approved-2-weeks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Driven Product Development</title>
		<link>http://www.pathf.com/blogs/2010/01/user-driven-product-development/</link>
		<comments>http://www.pathf.com/blogs/2010/01/user-driven-product-development/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 02:02:23 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[User Experience Design]]></category>
		<category><![CDATA[User Modeling]]></category>
		<category><![CDATA[Venture Capital]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4660</guid>
		<description><![CDATA[
 photo credit: Hugo90
This morning I sat through two pitches by two startups looking for funding. I won't get into the details, but they both had clever ideas at their root. But while one company was attractive and poised for success, the other was mediocre and not getting much traction. Why was that? They both [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/01/user-driven-product-development/">User Driven Product Development</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/05/upcoming-talk-a-2/' rel='bookmark' title='Permanent Link: Upcoming Talk at RIApalooza: Fast. Smart. Agile. User Experience Driven Agile Development'>Upcoming Talk at RIApalooza: Fast. Smart. Agile. User Experience Driven Agile Development</a></li><li><a href='http://www.pathf.com/blogs/2008/04/at-todays-web-2/' rel='bookmark' title='Permanent Link: Web 2.0 Expo: Behavior-Driven Development with Rails and RSpec'>Web 2.0 Expo: Behavior-Driven Development with Rails and RSpec</a></li><li><a href='http://www.pathf.com/blogs/2008/02/ionut-alex-chit/' rel='bookmark' title='Permanent Link: Gmail, agile development and user experience design'>Gmail, agile development and user experience design</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div style="float:right;padding:10px"><a href="http://www.flickr.com/photos/32109282@N00/3914842102/" rel="nofollow" title="1958 Edsel Villager"  target="_blank"><img src="http://farm3.static.flickr.com/2617/3914842102_a4405e7335_m.jpg" border="0" alt="1958 Edsel Villager" /></a><br />
<small><a href="http://creativecommons.org/licenses/by/2.0/" rel="nofollow" title="Attribution License"  target="_blank"><img src="http://www.pathf.com/blogs/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" rel="nofollow"  target="_blank">photo</a> credit: <a href="http://www.flickr.com/photos/32109282@N00/3914842102/" rel="nofollow" title="Hugo90"  target="_blank">Hugo90</a></small></div>
<p>This morning I sat through two pitches by two startups looking for funding. I won't get into the details, but they both had clever ideas at their root. But while one company was attractive and poised for success, the other was mediocre and not getting much traction. Why was that? They both had clever ideas, no?</p>
<p>Over the years I've looked at a lot of business plans for Venture Funds. The first lesson that I learned was that cool ideas didn't equal successful companies. While I would get all hot and bothered by a particularly elegant software solution, the VC's I was consulting to preferred the plans that understood the market and the customers in it (and had a kick ass management team, natch).<br />
<span id="more-4660"></span><br />
The "good" company from this morning had a clever idea that was a clear solution to a customer problem. The mediocre company had a clever idea that didn't really solve a specific customer problem.  What accounted for this difference? Well, the "good" company spun out of a larger business, while the mediocre came out of a government funded not-for-profit.</p>
<p>The easy conclusion here is that business folks have the discipline of competition working for them, while NFP's don't. It's true that I've seen companies that have no valid competitors flounder when it comes to a business plan, but that's a disease that's not restricted the the NFP realm.</p>
<p>No, instead this seemed to be a different ivory tower problem: lack of a customer. As a result their product definition was crap. Who would want this thing? Always start with the customer.</p>
<p>If your startup idea includes a software component, you should make sure that your software development practice also keeps the customer front and center. It may be tempting to start with architecture, to see if your software solution can "scale." But if you get the customer wrong, you won't need to scale.</p>
<p>That why with most software products that we develop, we start with user modeling. We do move on, eventually, to data modeling, process modeling, etc., etc., etc., but only after we've set the tone, so to speak, with user modeling -- personas, user stories, task flows, etc. Everything that follows is then motivated by the customer.</p>
<p>So, before you spend a million dollars on that cool idea, validate it with some customers to see if they actually want it.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/01/user-driven-product-development/">User Driven Product Development</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/05/upcoming-talk-a-2/' rel='bookmark' title='Permanent Link: Upcoming Talk at RIApalooza: Fast. Smart. Agile. User Experience Driven Agile Development'>Upcoming Talk at RIApalooza: Fast. Smart. Agile. User Experience Driven Agile Development</a></li><li><a href='http://www.pathf.com/blogs/2008/04/at-todays-web-2/' rel='bookmark' title='Permanent Link: Web 2.0 Expo: Behavior-Driven Development with Rails and RSpec'>Web 2.0 Expo: Behavior-Driven Development with Rails and RSpec</a></li><li><a href='http://www.pathf.com/blogs/2008/02/ionut-alex-chit/' rel='bookmark' title='Permanent Link: Gmail, agile development and user experience design'>Gmail, agile development and user experience design</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/01/user-driven-product-development/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Agile Product Management: The Concept Phase</title>
		<link>http://www.pathf.com/blogs/2010/01/agile-product-management-concept-phase/</link>
		<comments>http://www.pathf.com/blogs/2010/01/agile-product-management-concept-phase/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 11:49:33 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Innovation]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4570</guid>
		<description><![CDATA[
 photo credit: NIOSH
Academic research is incredibly inefficient when it comes to producing products and services. Grad students, post-docs and professors work on "problems" that some collection of graybeards has deemed "interesting." Their "solutions" -- sometimes successful, sometimes not -- are published as research and then, occasionally, if the stars align, is turned into a product or [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/01/agile-product-management-concept-phase/">Agile Product Management: The Concept Phase</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/03/agile-development-for-product-managers-why-agile-testing-rocks/' rel='bookmark' title='Permanent Link: Agile Development for Product Managers: Why Agile Testing Rocks'>Agile Development for Product Managers: Why Agile Testing Rocks</a></li><li><a href='http://www.pathf.com/blogs/2006/04/scenarios_in_pr/' rel='bookmark' title='Permanent Link: Scenarios in Product and Project Management'>Scenarios in Product and Project Management</a></li><li><a href='http://www.pathf.com/blogs/2009/12/sdlc-product-decide/' rel='bookmark' title='Permanent Link: Your SDLC or Your Product – You Decide'>Your SDLC or Your Product – You Decide</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div style="float:right;padding:10px"><a href="http://www.flickr.com/photos/25069384@N03/2492023651/" rel="nofollow" title="Scientist conducting an experiment"  target="_blank"><img src="http://farm3.static.flickr.com/2361/2492023651_d213e8dc5c_m.jpg" border="0" alt="Scientist conducting an experiment" /></a><br />
<small><a href="http://creativecommons.org/licenses/by/2.0/" rel="nofollow" title="Attribution License"  target="_blank"><img src="http://www.pathf.com/blogs/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" rel="nofollow"  target="_blank">photo</a> credit: <a href="http://www.flickr.com/photos/25069384@N03/2492023651/" rel="nofollow" title="NIOSH"  target="_blank">NIOSH</a></small></div>
<p>Academic research is incredibly inefficient when it comes to producing products and services. Grad students, post-docs and professors work on "problems" that some collection of graybeards has deemed "interesting." Their "solutions" -- sometimes successful, sometimes not -- are published as research and then, occasionally, if the stars align, is turned into a product or service through the application of venture capital via a startup.</p>
<p>The only thing less efficient in producing innovative products and service is the corporate R&amp;D department. In most places you have a phase-gate process (waterfall under a different name) of conceptualization, feasibility testing, definition/specification, development and launch. They are typically bloated, bureaucratic monstrosities with huge documentation requirements and endless committee meetings that do more to stifle innovation than promote it.</p>
<p>There is a way, however, of applying Agile principles to the concept phase, and it relies on two of the basic tennets of Agile: failing fast and self organizing teams.</p>
<p><span id="more-4570"></span><strong>Failing Fast</strong></p>
<p>Fast also means cheap (time is money, etc.). If with the expenditure of $1,000 and three days I can tell you with 50% certainty that a particular idea is any good, or I can spend $50,000 and 3 weeks and tell you with a 80% certainty whether a particular idea is any good, which process would you prefer? If your budget for developing new ideas is $250,000, then you'll be able to test 5 ideas in the $50,000 case, and 250 ideas in the $1,000 case.</p>
<p>If you have a low yield on your ideas, i.e. few of them look good after vetting, then two things happen. First, you're really rolling the dice on coming up with a decent idea for taking the next step into feasibility testing. Second, since so much is riding on a few decisions, the organization "clenches" and pressurizes the decision making process. That's not a good recipe for wise decision making.</p>
<p><strong>Self Organizing Teams</strong></p>
<p>If you practice top-down management throughout your business, you are going to create a class of passive, dependent employees. It would not occur to them to come up with business and product ideas for your business. Funny thing, though, any 1000 employees, properly motivated and harnessed are smarter than any single CEO.</p>
<p>The key to unlocking this potential is empowering these employees to take initiative. We think self organizing teams -- teams that are given the responsibility and authority to organize and manage their own work as a unit rather than receiving it from a manager -- are an excellent way to empower your workforce. Another way to put this is "give them problems, let them come up with the solution." Implement this management pattern throughout your organization, and you have the beginnings of that creative workforce that can help you innovate.</p>
<p><strong>Publish Problems, Welcome Solutions</strong></p>
<p>There is room for experts in all of this: have them define the key problems that your organization faces. We need a way to reduce our shipping costs. We need a way to prevent our customers from switching to cheaper offshore competitors. We need a way to leverage new wireless technologies in our products. Publish these problems to your company (in itself a very useful business excercise) and welcome proposed solutions from all employees. Reward your employees for their suggestions. Reward them and involve them when their ideas make it past the Concept Phase.</p>
<p>Again, your experts can weigh in at this point in selecting the winners among the proposed solutions. We'll get to how to do quick and agile feasibility testing in an upcoming article.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/01/agile-product-management-concept-phase/">Agile Product Management: The Concept Phase</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/03/agile-development-for-product-managers-why-agile-testing-rocks/' rel='bookmark' title='Permanent Link: Agile Development for Product Managers: Why Agile Testing Rocks'>Agile Development for Product Managers: Why Agile Testing Rocks</a></li><li><a href='http://www.pathf.com/blogs/2006/04/scenarios_in_pr/' rel='bookmark' title='Permanent Link: Scenarios in Product and Project Management'>Scenarios in Product and Project Management</a></li><li><a href='http://www.pathf.com/blogs/2009/12/sdlc-product-decide/' rel='bookmark' title='Permanent Link: Your SDLC or Your Product – You Decide'>Your SDLC or Your Product – You Decide</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/01/agile-product-management-concept-phase/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sanity Amid the Tablet Hype</title>
		<link>http://www.pathf.com/blogs/2010/01/sanity-tablet-hype/</link>
		<comments>http://www.pathf.com/blogs/2010/01/sanity-tablet-hype/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 12:45:21 +0000</pubDate>
		<dc:creator>Bernhard Kappe</dc:creator>
				<category><![CDATA[Product Strategy]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technologies and Platforms]]></category>
		<category><![CDATA[apple tablet]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4544</guid>
		<description><![CDATA[
As January 26th, the rumored date for Apple's rumored tablet unveiling draws near, the hype and anti-hype keeps getting more and more over the top:
Five Ways Apple's Tablet May Change the World
The world doesn't need an Apple tablet, or any other
and the inevitable
3 Reasons A Microsoft-HP Tablet PC Would Trump Apple

If you want to keep [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/01/sanity-tablet-hype/">Sanity Amid the Tablet Hype</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2010/01/ipad-instant-reaction-apples-tablet-event/' rel='bookmark' title='Permanent Link: iPad: Instant Reaction to Apple&#8217;s Tablet Event'>iPad: Instant Reaction to Apple&#8217;s Tablet Event</a></li><li><a href='http://www.pathf.com/blogs/2010/02/big-space-laptops-iphones/' rel='bookmark' title='Permanent Link: iPad: How big is the space between laptops and iPhones?'>iPad: How big is the space between laptops and iPhones?</a></li><li><a href='http://www.pathf.com/blogs/2010/02/ipad-15-examples/' rel='bookmark' title='Permanent Link: Where the iPad will take over: 15 examples'>Where the iPad will take over: 15 examples</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img class="left" src="http://www.pathf.com/blogs/wp-content/uploads/2010/01/Rosetta_Stone.jpg" alt="Rosetta_Stone" title="Rosetta_Stone" width="250" /></p>
<p>As January 26th, the rumored date for Apple's rumored tablet unveiling draws near, the hype and anti-hype keeps getting more and more over the top:</p>
<p><strong><a href="http://www.businessweek.com/technology/content/dec2009/tc20091229_795528.htm" rel="nofollow" >Five Ways Apple's Tablet May Change the World</a></strong></p>
<p><strong><a href="http://www.betanews.com/joewilcox/article/The-world-doesnt-need-an-Apple-tablet-or-any-other/1262456214" rel="nofollow" >The world doesn't need an Apple tablet, or any other</a></strong></p>
<p>and the inevitable</p>
<p><strong><a href="http://www.crn.com/mobile/222200470">3 Reasons A Microsoft-HP Tablet PC Would Trump Apple<br />
</a></strong></p>
<p>If you want to keep up to date on the rumors, Gizmodo has a regularly updated run-down <strong><a href="http://gizmodo.com/5434566/the-exhaustive-guide-to-apple-tablet-rumors" rel="nofollow" >here.</a></strong></p>
<p>There are a couple of places that have more informed speculation and  insightful commentary - I'd recommend these three in particular:</p>
<p><a href="http://arstechnica.com/staff/fatbits/2010/01/antacid-tablet.ars" rel="nofollow" >Antacid Tablet</a> by ars technica's John Siracusa:</p>
<blockquote><p>... There's also the popular notion that Apple has to do something entirely new or totally amazing in order for the tablet to succeed. After all, tablets have been tried before, with dismal results. It seems absurd to some people that Apple can succeed simply by using existing technologies and software techniques in the right combination. And yet that's exactly what Apple has done with all of its most recent hit products—and what I predict Apple will do with the tablet. ...</p>
<p>So how will an Apple tablet distinguish itself without any headline technological marvels? It'll do so by leveraging all of Apple's strategic strengths. Now you're expecting me to say something about tight hardware/software integration, user experience, or "design," but I'm talking about even more obvious factors:</p>
<p>	•	Customers - Apple has over 100 million credit-card-bearing customer accounts thanks to the success of iTunes.<br />
	•	Developers - Over 125,000 developers have put over 100,000 iPhone OS applications up for sale on the App Store. Then there are the Mac OS X developers (though of course there's some overlap). Apple's got developers ready and able to come at the tablet from both directions.<br />
	•	Relationships - Apple has lucrative and successful relationships with the most important content owners in the music and movie businesses.</p>
<p>These are Apple's most important assets when it comes to the tablet, and you can bet your bottom dollar that Apple will lean heavily on them. This, combined with Apple's traditional strength in design and user experience, is what will distinguish Apple's tablet in the market. It will provide an easy way for people to find, purchase, and consume all kinds of media and applications right from the device. It's that simple.</p>
</blockquote>
<p><a href="http://www.suntimes.com/technology/ihnatko/1980077,ihnatko-apple-tablet-microsoft-010710.article" rel="nofollow" >Thoughts on what an Apple tablet should be – or not</a> by Andy Ihnatko  </p>
<blockquote><p>Apple always asks themselves simple and stupid questions like “How will this device be used?” and “Will this be used by human beings with, I mean, arms and hands and fingers?” and stuff like that.</p>
<p>The iPhone UI isn’t a desktop user interface where a pen takes the place of a mouse ... which is the model that previous smartphones followed. It was designed to be held in one hand and tapped with your thumb. Occasionally you’d use the index finger of the right hand to key things in.</p>
<p>You want to try to figure out the UI of the RAT? Go get yourself a comic book, or any other rectangle that measures roughly 10” on the diagonal. Hold it as though you’re reading what’s on the surface.</p>
<p>You see the problem? Your fingers get in the way. Think about how big that surface is, too. That’s a lot of acreage to scan, looking for the right buttons to push.</p>
<p>While you’ve got it in your hands, imagine that it’s a sheet of thin steel. That’s heavy, isn’t it? Hard to hold up for long periods of time.</p>
<p>Think about how a user interface would have to incorporate those observations. Now imagine that you’ve been doing this experiment for four years and not four minutes.</p>
<p>That’s a very long list of observations. If you didn’t come up with a workable solution, don’t worry: I think Apple has. </p></blockquote>
<p>and </p>
<p><a href="http://daringfireball.net/2009/12/the_tablet" rel="nofollow" >The Tablet</a> by Daring Fireball's John Gruber.</p>
<blockquote><p>... The way Apple made one device [the iPhone] that did a credible job of all these widely-varying features was by making it a general-purpose computer with minimal specificity in the hardware and maximal specificity in the software. And, now, through the App Store and third-party developers, it does much more: serving as everything from a game player to a medical device.</p>
<p>Do I think The Tablet is an e-reader? A video player? A web browser? A document viewer? It’s not a matter of or but rather and. I say it is all of these things. It’s a computer.</p>
<p>And so in answer to my central question, regarding why buy The Tablet if you already have an iPhone and a MacBook, my best guess is that ultimately, The Tablet is something you’ll buy instead of a MacBook.
</p></blockquote>
<p>Gruber's a bit more gung ho than Ihnatko or Siracusa, but they both make a pretty compelling case that something very interesting is about to happen over the next year.  </p>
<p><img class="left" src="http://cache.gawker.com/assets/images/4/2009/09/500x_apple-tablet-natgeo.jpg" alt="500x_apple-tablet-natgeo" title="500x_apple-tablet-natgeo" width="520" height="346" /></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/01/sanity-tablet-hype/">Sanity Amid the Tablet Hype</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2010/01/ipad-instant-reaction-apples-tablet-event/' rel='bookmark' title='Permanent Link: iPad: Instant Reaction to Apple&#8217;s Tablet Event'>iPad: Instant Reaction to Apple&#8217;s Tablet Event</a></li><li><a href='http://www.pathf.com/blogs/2010/02/big-space-laptops-iphones/' rel='bookmark' title='Permanent Link: iPad: How big is the space between laptops and iPhones?'>iPad: How big is the space between laptops and iPhones?</a></li><li><a href='http://www.pathf.com/blogs/2010/02/ipad-15-examples/' rel='bookmark' title='Permanent Link: Where the iPad will take over: 15 examples'>Where the iPad will take over: 15 examples</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/01/sanity-tablet-hype/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What’s the value of Agile out of the box?</title>
		<link>http://www.pathf.com/blogs/2010/01/whats-agile-box/</link>
		<comments>http://www.pathf.com/blogs/2010/01/whats-agile-box/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 04:24:05 +0000</pubDate>
		<dc:creator>Michael Walkden</dc:creator>
				<category><![CDATA[Agile Coaching]]></category>
		<category><![CDATA[Agile Project Management]]></category>
		<category><![CDATA[Custom Application Development]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[Web Application Development]]></category>
		<category><![CDATA[Agile Development]]></category>
		<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Best Practices]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=4650</guid>
		<description><![CDATA[I often meet peers who ask what Agile practices Pathfinder utilizes.  From the outside we pretty much use all of XP’s practices.  However, if you take a deeper look we do some things a little differently (especially how to use and calculate velocity).  For Agile purists, one might question if we are [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/01/whats-agile-box/">What’s the value of Agile out of the box?</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/09/agile-2009-reminded-team-leadership-2/' rel='bookmark' title='Permanent Link: Agile 2009: A reminder of why each team needs leadership'>Agile 2009: A reminder of why each team needs leadership</a></li><li><a href='http://www.pathf.com/blogs/2009/08/building-high-performance-agile-team-assume-hit/' rel='bookmark' title='Permanent Link: Building a High Performance Agile Team:  Assume You Will Be a One Hit Wonder'>Building a High Performance Agile Team:  Assume You Will Be a One Hit Wonder</a></li><li><a href='http://www.pathf.com/blogs/2009/06/effective-vs-efficient-teams/' rel='bookmark' title='Permanent Link: Effective vs Efficient Teams'>Effective vs Efficient Teams</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img title="Question Mark" src="http://www.pathf.com/blogs/wp-content/uploads/2010/01/Question-Mark.jpg" alt="Question Mark" width="221" height="221" class="right" />I often meet peers who ask what Agile practices Pathfinder utilizes.  From the outside we pretty much use all of XP’s practices.  However, if you take a deeper look we do some things a little differently (especially how to use and calculate velocity).  For Agile purists, one might question if we are really doing Agile.  They would claim changing practices is slippery slope.  For example, a team will start altering Agile practices to create a “home grown” version only to find they are using only some practices and not seeing the benefits they hoped for.  I feel questioning if we are really doing Agile based on exactly what practices one uses shows how familiar and mature one is with Agile principals.  A better question would be to ask why we changed them.  Agile is not meant to be a methodology, but a set of principals.  In my opinion, using things like Velocity to estimate whether a team will finish a project within a certain time frame is a hack at best.  This always was hard to explain to customers.  While I was reading Leading Lean Software Development I discovered something that helps.  The Poppendieck’s point out that the engineering practices of Agile (TDD, collective code ownership, etc…) are solid and not likely to change. But, the project management practices implement a system on top of another system - a hack.</p>
<p>Once you have sufficient experience managing projects with Agile practices you should feel comfortable adapting those practices to your own teams and projects.  As long as you are still following Agile principals this is okay.  In general, this is what’s going on in smaller companies.  Having coached a number of large organizations transitioning to Agile I can say this isn’t how they look at things.  The problems start when you adapt the practices, but try to deliver all projects in an identical manner.  This makes sense for waterfall-like delivery methods.  But, when an organization comes up with its own version of “Agile” it can only work for the subset of projects it is tested on.  Rolling this out to the entire organization as “the way” to deliver projects from them on is a failure pattern.  The principals are lost and so is the adaptability of the organization.  The time spent to move over to agile is immediately wasted.</p>
<p><strong>Photo Credit</strong>:<br />
<a href="http://www.flickr.com/photos/pagedooley/3983181467/sizes/s/" rel="nofollow" >kevindooley</a><br />
	under a Creative Commons Attribution License</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2010/01/whats-agile-box/">What’s the value of Agile out of the box?</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/09/agile-2009-reminded-team-leadership-2/' rel='bookmark' title='Permanent Link: Agile 2009: A reminder of why each team needs leadership'>Agile 2009: A reminder of why each team needs leadership</a></li><li><a href='http://www.pathf.com/blogs/2009/08/building-high-performance-agile-team-assume-hit/' rel='bookmark' title='Permanent Link: Building a High Performance Agile Team:  Assume You Will Be a One Hit Wonder'>Building a High Performance Agile Team:  Assume You Will Be a One Hit Wonder</a></li><li><a href='http://www.pathf.com/blogs/2009/06/effective-vs-efficient-teams/' rel='bookmark' title='Permanent Link: Effective vs Efficient Teams'>Effective vs Efficient Teams</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2010/01/whats-agile-box/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.260 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-03-18 04:05:43 -->
