<?xml version='1.0' encoding='UTF-8' ?>
<rss version="2.0" xmlns:admin="http://webns.net/mvcb/" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:icbm="http://postneo.com/icbm" xmlns:includedComments="http://www.laudably.com/rss2-comments" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
	<channel>
		<title>Smalltalk Tidbits, Industry Rants: category: ot2004</title>
		<link>http://www.cincomsmalltalk.com/blog/blogView</link>
		<description>Cincom Product Manager</description>
		<webMaster>jrobertson@cincom.com</webMaster>
		<lastBuildDate>Sun, 30 Jul 2006 23:47:51 EDT</lastBuildDate>
		<image>
			<url>http://www.cincomsmalltalk.com/images/cst_small.jpg</url>
			<title>Smalltalk Tidbits, Industry Rants</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView</link>
			<height>50</height>
			<width>81</width>
		</image>
		<admin:generatorAgent rdf:resource="http://www.cincomsmalltalk.com/CincomSmalltalkWiki/Silt"></admin:generatorAgent>
		<admin:errorReportsTo rdf:resource="mailto:jrobertson@cincom.com"></admin:errorReportsTo>
		<dc:language>en-us</dc:language>
		<dc:creator>James A. Robertson</dc:creator>
		<dc:rights>Copyright 2005 Cincom Systems, Inc.</dc:rights>
		<dc:date>2006-07-30T23:47:51-05:00</dc:date>
		<icbm:latitude>39.214103</icbm:latitude>
		<icbm:longitude>-76.878807</icbm:longitude>
		<item>
			<title>ot2004 Wraps up</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258196527</link>
			<category>ot2004</category>
			<pubDate>Wed, 31 Mar 2004 14:35:27 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><p>It was a great conference - I really enjoyed it.  The Robinson Centre was a very nice place to have a conference - the rooms were comfortable, the meeting rooms were very nice, and the central lounge area was comfy - nice couches, and WiFi provided by <a href="http://www.thoughtworks.com/">ThoughtWorks</a> - that WiFi setup made all these posts far easier to make than they would have been otherwise.  There was a lot of interest at the Cincom booth - lots of people seemed to be pleasantly surprised that Smalltalk was alive, kicking, and <a href="http://www.cincomsmalltalk.com/BottomFeeder">ready for anything</a>.  </p>

<p>I suppose I should mention my own session, which ran during the last time slot - I spoke about blogs and RSS.  <a href="http://martinfowler.com/bliki">Martin Fowler</a> had some good suggestions for me on the organization of the slides - I'll be revising them before I give this presentation again.  The discussion was very lively - as it turned out, a lot of the audience (about 20 or so) didn't have a good grasp of what RSS was before the talk.  I plan to be back next year - great show, wonderful time!</p></p>
</div>]]></description>
			<guid isPermaLink="false">3258196527</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3258196527</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3258196527</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258196527</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258196527</includedComments:puid>
					<includedComments:author>Ewan Milne</includedComments:author>
					<includedComments:pubDate>2004-04-01T10:16:55-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Glad you enjoyed Ot, look forward to seeing you next year (at SPA2005 ;-))



I guess I was one of those in your audience without a good grasp of RSS - hope we didn't divert the focus of the session too much. It certainly gave me enough of a taster, so that I definitely plan to look into this area - thanks.



&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Untitled</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258196527</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258196527</includedComments:puid>
					<includedComments:author>Matt Stephenson</includedComments:author>
					<includedComments:pubDate>2004-04-01T13:53:04-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Hi James,



Glad you enjoyed the conference. We enjoyed putting it together! Also, it's great to see that you intend to come back next year. It will be great to have you there. Watch out for the Call for Participation coming soon!



Cheers

Matt&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Ot2004</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258196527</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258196527</includedComments:puid>
					<includedComments:author>Keith Braithwaite</includedComments:author>
					<includedComments:pubDate>2004-04-02T11:18:06-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Ak! Of course, the one session that I can't read about here is James' own, which I could make it to.



I was intersted to see James bloggin away (or at least composing posts) during sessions. This kind of put me in mind of those tourists you see walking everywhere with their eye glued to the viewfinder of a camera. How can one engage fully in the here and now with the eyes (and hands) wrapped up in some piece of technology, thinking about the future?



Anyway, I wish I had been able to make it to the blog session as I had been keen to make a couple of points. 



1) it seems to me that blogs suffer from not having the sort of document mode editorial capabilitites (or do some of them? I don't know) that wikis do. Blogs seem to be mainly for thready stream-of-conciousness stuff that ages quickly and badly, with no opportunity to fix, collate or restructure postings later within the medium.



2) regarding the content of 99.99% of blogs (that I have seen :) masturbation is a fine pass-time, but only in the rarest of circumstances does it make an adequate spectator sport.



Finally, let me say that I'm glad that James enjoyed OT, and it was very nice to see a commerical Smalltalk stall there after all these years. I look forward to seeing James (and Smalltalk) at SPA 2005.



KB

2)&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>irony</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3258196527</wfw:comment>
		</item>
		<item>
			<title>Easy Discovery - network resources</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258170729</link>
			<category>ot2004</category>
			<pubDate>Wed, 31 Mar 2004 07:25:29 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><p>Laura Hill and Bernard Horan of Sun (R&D group)</p>

<p>Examples</p>

<ul>
<li> Remote Door Bell - say you are working outside, doorbell rings.  Nice if the doorbell muted the radio and rang itself on the radio (or on the mobile phone, etc).  Not possible if all devices are using fully proprietary interfaces.  Bernard showed his Bluetooth enabled phone controlling volume on the Bluetooth enabled notebook as an example. </li>
<li> Elder hospice care facility to monitor safety/health of resident(s)</li>
<ul>
<li> Health stats</li>
<li> Intrusions</li>
<li> Fire, etc</li>
</ul>
<li> Small scale home security syste</li>
<ul>
<li> Wireless, battery operated</li>
<li> Elements discover each other on net</li>
<li> Each item in system does its own task (video monitiring, etc)</li>
<li> Nice if it could be set up to notice "normal" anomalies (a cat, for instance, should not set off the network)</li>
</ul>
<li> Imaging</li>
<ul>
<li> Being able to easily discover an available printer on an ad-hoc (WiFi) network</li>
<li> Variable pricing, etc</li>
</ul>
</ul><p>A 40 minute team exercise - come up with a new service/idea that plays into discoverability.  We came up with the notion of personal location identification cutting across devices and locations:</p>

<ul>
<li> Phone (land and mobile)</li>
<li> PDA</li>
<li> Email</li>
<li> Home and other locations recognizing you and configuring themselves to your known desires</li>
<ul>
<li> Privacy settings issues</li>
</ul>
</ul><p>First group - Jack Black finds himself in a strange city with a PDA, and may be in danger of sobering up if he does not find a bar.  So his PDA should be able to have that critical information available and route him to the nearest bar:</p>
<ul>
<li> Local Customs (tip, etc)</li>
<li> How late is bar open?</li>
<li> How close?  How do we get there?</li>
<li> When Jack's blood alcohol level drops below a certain level it notifies him that it's time to drink. Also takes account of current monetary level, and which location is closest</li>
<li> Environment needs to be able to deal with any local environment automatically.  Not all locations will have services that work for this.  </li>
<li> Should be able to translate across language barriers</li>
<li> Should have privacy, security, abiding by local laws</li>
</ul>
<p>Second group - Intelligent Visitor Filtering doorbell</p>
<p>User Requirements<br/>
<ul>
<li> Filters visitors based on context and learned preferences</li>
<ul>
<li> Time of Day</li>
<li> State of House</li>
<li> Who is present in house</li>
<li> Contents of the fridge</li>
<li> Learned preferences of the homeowners for visitors based on context</li>
</ul></p>
</ul><p>Task Requirements<br/>
<ul>
<li> Need for discovery of context of house and home owner</li>
<li> Need for discovery of purpose of visit</li>
<li> Comparison of visit purpose with context with preferences, assessment of significance of vist for homeowner/those present</li>
</ul></p>

<p>Next step - how to create a solution - the two more general groups (ours and the intelligent filtering) will need to focus in more.  They gave us a large handout with a whole bunch of descriptive technology refs and Discovery Protocols.  I'm not going to describe all of them.</p>

<p>Descriptive tech</p>
<ul>
<li> <a href="http://www.w3.org/TR/CCPP-struct-vocab">CCPP</a> - with RDF (ick)</li>
<li> <a href="http://www.fipa.org/specs/fipa00091/S100091E.html">FIPA</a></li>
<li> <a href="http://wireless.sun.com/midp/articles/provisioning">JSR 124</a></li>
<li> <a href="http://www.ietf.org/rfc/rfc2046.txt">MIME Types</a></li>
<li> <a href="http://www.opengis.org/docs/02-0264r4.pdf">SensorML</a> (XML Schema)</li>
<li> <a href="http://telegraph.cs.berkely.edu/tinydb/tinyschema_doc/index.html">TinySchema</a></li>
</ul>
<p>Discovery Protocols</p>
<ul>
<li> <a href="http://qualweb.bluetooth.org/Content/DownloadExecute.cfm?RevisionHistoryID=670&FileName=BT_Core_Spec_v1_2.zip">Bluetooth Service Discovery Protocol</a></li>
<li> <a href="http://www.omg.org/cgi-bin/doc?formal/02-09-02">CORBA</a></li>
<li> <a href="http://wind.lcs.mit.edu/papres/ins-sosp99.pdf">INS</a></li>
<li> <a href="http://java.sun.com/rmi">Java RMI</a></li>
<li> <a href="http://www.sun.com/software/jini/whitepapers/architecture.pdf">Jini</a></li>
<li> <a href="http://www.jxta.org/docs/JxtaProgGuide_v2.pdf">JXTA</a></li>
<li> <a href="http://www.daml.org/services/owl-s/1.0">OWL-S</a></li>
<li> <a href="http://www.apple.com/macosx/pdf/Panther_Rendevous_TB_10232003.pdf">Rendevous</a></li>
<li> <a href="http://www.salutation.org/spec/Sa20e1a21.pdf">Salutation</a></li>
<li> <a href="http://www.ietf.org/rfc/rfc2608.txt">Service Location Protocol</a></li>
<li> <a href="http://www.upnp.org/download/UPnPDA10_20000613.htm">UPnP</a></li>
<li> <a href="http://www.w3.org/TR/2003/WD-ws-arch-20030808/">Web Services</a></li>
</ul>
<p>For our scenario, we came up with Bluetooth as the best mechanism for initial broadcast of identity information - providers would then do additional queries through some other mechanism (Web Services, JXTA, whatever).</p>

<p>Intelligent Doorbell Scenario - doorbell is not a doorbell, but delegates the task to whatever service should find an appropriate person - it may end up being the ring by default.  The person hitting the doorbell will be queried as to what they offer/want, and appropriate proxies will be notified.  So with that, they went with Jini, mostly for the Pub/Sub capability.  If BlueTooth did that, they would have considered it.  If JXTA did that well, might consider it.</p>

<p>The Jack Black drinking system - Ended up with the business part (getting the alcohol) and the discovery part.  Missing part - bringing up the network.  Ended up a need for multiple services from the list - possibly BlueTooth, possibly Web Services, possibly OWL-S.  </p>

<p>Notes - no one brought up security, although we did bring up privacy.  There seemed to be an "assumption that it would be secure" - meaning that no one took responsibility for it :) Not that we've seen that before :) </p></p>
</div>]]></description>
			<guid isPermaLink="false">3258170729</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3258170729</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3258170729</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3258170729</wfw:comment>
		</item>
		<item>
			<title>How to design Good APIs and Why they Matter</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258158706</link>
			<category>ot2004</category>
			<pubDate>Wed, 31 Mar 2004 04:05:06 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><p>Plenary session on 3/31 - how to design a good API - and why it matters.  Given by Joshua Bloch, senior staff engineer at Sun.  The need for good API's remain as languages and platforms change - what do we mean by APIs here - the public interface to a component or sub-system.  There are going to be examples (good and bad) given.  </p>

<p>Why is API design important?<br/>
<ul>
<li> APIs can be amongst a company's greates assets</li>
<ul>
<li> Customers get attuned to the apis that they have studied, and write (and buy) code that is aligned with those APIs</li>
<li> APIs capture and retain customers</li>
</ul>
<li> A badly designed API is an unending source of support calls - and public APIs are forever.  Once it's loose, you can't change it - you can only add to it</li>
</ul>
</p>

<p>If ypu program, you are an API designer.  Each module you create ends up with an API - either real or ad-hoc.  Useful modules tend to get reused.  Once you have users, you are not at liberty to change it - people rely on it.  These "private" apis can be an asset or a liability.  </p>

<p>Good?</p>

<ul>
<li> Easy to learn</li>
<li> Easy to use, even w/o doc</li>
<li> Hard to misuse</li>
<ul>
<li> Bad ones will be easy to misuse</li>
</ul>
<li> Easy to read and maintain code that uses it</li>
<li> Sufficiently powerfil to satisfy requirements</li>
<ul>
<li> But not <b>too</b> powerful</li>
</ul>
<li> Easy to extend</li>
<li> Appropriate to audience - no such thing as a "perfect" API for everyone</li>
</ul>
<p>Methodology for API design - there are a few things that tend to lead to good API design. Gather requirements, and be skeptical.  The audience will tell you what they want (may be different from what they need).  Extract the <i>real</i> requirements from what you get told and what you observe.  Use Cases are the best way to do this - what are the easiest things to accomplish with that API?  Do the Use Cases look good when using the API?  If not you have a problem.  It can be easier to build something more general than what you are asked for - but don't go to "framework-itis</p>

<p>Start with a small (1 page) spec.  Agility is <b>good</b> at this point.  Bounce the spec off of as many people as possible.  Keep the spec to a short description and method names - flesh it out only as you gain confidence.  Shop it around while it's simple.  When you get a large spec, it's hard to change (and involves politics).  <br/>
Write the API before you implement it.  Saves an implementation that may be useless.  Start coding to it when it's a 1 page spec to test (TDD driven API design?).  Continue to write code against the API as you develop as a constant check against it.  </p>

<p>Writing to an API (Service Provider Interface) is even more important.
<ul>
<li> Interface for supporting multiple implementations</li>
<li> Example - Java Cryptography</li>
</ul>
Write implementations against it before you release it to avoid large risk of failure - more than one (3 or more is best).  </p>

<p>Keep expectations realistic.  Won't be all things to all people.  "Aim to displease everyone equally".  Say you have 6 customers - 5 happy, one angry - not good.  6 grumbling "can work with it, but..." - likely ok.  Expect to make mistakes - you'll make them, and you'll have to evolve (NOT change!) the API.  </p>

<p>General Principles - should do one thing, and one thing well.  Use good naming.  If it's hard to name, it's a bad sign of code smell.  Bad names mean poor understanding.  Be open to refactoring (splitting and merging modules).  The API should be as small as possible but no smaller (Occam's razor).  When in doubt, <b>leave it out</b> - in terms of classes, methods, functionality - they can be added later, but once it's there, it's there.  <b>Conceptual weight</b> is more important - how long will it take to learn the API?  A Java example - if you implement an interface that is already there, people have a guide.  <br/>
Implementation should not impact the API.  Implementation details constrain you and confuse users.  Don't over specify (e.g., don't specify the details of a hash function...).  Don't let implementation details leak into the API.  Exceptions, on the wire, or on disk formats are good examples where leakage can hurt.  The initial Java String hash function (which they almost had to live with) was very bad.  Actual is better, but still specified (bad).  </p>

<p>Minimize accessibilty - maximize information hiding.  Make instance variables private (i.e., in ST, no accessors).  APIs are a "little language" - <b>be consistent</b> - parts of speech and basic names.  Intention revealing names important.  <br/>
Documentation matters, a lot.  Reuse won't happen without good design <b>and</b> good documentation.  Document every class, every interface, every method, constructor, parameter, exception (ed. - most methods should not <b>need</b> doc - especially internal, non API ones.  API methods, likely should.  IMHO, intention revealing names should do most of this).  If there are state constraints, doc that, or risk unusability.</p>

<p>Consider performance implications of an API.  
<ul>
<li> Mutability?</li>
<li> Constructor instead of static factories</li>
<li> Implementation type instead of interface</li>
</ul></p>

<p>ed. - These are issues that, IMHO, most people should never have to worry about....</p>

<p>Bad API designs are permanent.  Example: In AWT, Component.getSize returns (mutable) Dimension object.  Each getSize call allocates a Dimension (ed. - that's a GC issue.  VW has never had an issue here....)<br/>
API's must co-exist with the platform.  Obey naming conventions, avoid obsolete stuff, etc.  Take advantage of any language features.  Avoid any language/platform specific traps</p>

<p>Class Design</p>

<ul>
<li> Minimize mutability - classes should be immutable unless there's a good reason... not sure I agree with that...</li>
<li> If mutable, keep the state space small and well defined</li>
<ul>
<li> Date and Calendar are bad examples</li>
<li> Timer is good</li>
</ul>
</ul><p>Seriously, I don't know that - other than (previously mutable) Strings in Smalltalk, this is ever something I've had to worry about...</p>

<p>Subclass only when makes sense</p>
<ul>
<li> Liskov substitutability principle</li>
<li> Inheritance violates encapsulation - he says you should use final - I disagree violently.  To me, this is a classic engineer's mistake of assuming all possible future uses of a class or library.  You can't see that.  Now, admittedly, making classes interface compatible rather than inheritance compatible is safer - but "fragile base class" is more of a Java/C   issue.  Final is a bug.</li>
</ul>
<p>Method design</p>
<ul>
<li> Don't make the client do anything the module should do - reduce need for boilerplate.  There's an example of this from the DOM code in Java.  If you require boilerplate, then your library is missing a few things.  Think as a user of the API and encapsulate that sort of thing.  </li>
<li> Don't violate the "principle of least astonishment" (old Smalltalk adage :) ).  Spending time on the API to make it easier is more important than performance.  Example - method called "interrupted" in Thread clears state as well as reporting it.</li>
<li> Fail fast - he likes strong static typing, but he's wrong :)  In general, good principle goes with "least astonishment" - fail early when it makes most sense.  Ironically, his properties example shows the limits of declarative typing.  put() in HashTable accepts any objects, but actually enforces Strings in code.</li>
<li> Don't make the client play "20 questions" when asking for state.  </li>
<li> Provide programmatic access to all data available in String form - otherwise people will parse them.  This ends up turning those strings into a de-facto API.  </li>
<li> Overload with care - no two with same number of args (ed. - not a Smalltalk problem due to keyword messages :) ) </li>
<li> Use appropriate parameters and return types - "least astonishment"</li>
<ul>
<li> Favor interfaces</li>
<li> Don't use Floats for money (amazing that this still comes up!)</li>
</ul>
<li> Use consistent parameter ordering - note again that keyword messages solve this whole problem :)</li>
<li> Avoid long parameter lists - long ones cause problems (going to doc) - especially bad - long lists of identical types (again, solved by keywords...)</li>
<li> Avoid return values that demand processing - he says not to return null (Wrong!) - In Smalltalk, answering nil is a well understood and widely used pattern.  </li>
<li> Don't use exceptions for control flow, only for errors.  Don't fail silently!</li>
<li> Favor unchecked exceptions.  Checked exceptions cause boilerplate.  See Parcel loading in Smalltalk for examples of this and the previous...</li>
<li> Include failure/capture information with the exception</li>
</ul>
<p>Refactoring<br/>
The examples are showing the Collection hierarchy in Java as a replacement for the older Vector stuff.  Another example shows a cleanup of some Thread code (replace Strings and keys with key objects).  </p>

<p>Summary<br/>
Can be rewarding and valuable for companies and teams.  Suggests that these rules are guidelines, not hard and fast rules.  API design is not simple.  "Perfection is unachievable"</p></p>
</div>]]></description>
			<guid isPermaLink="false">3258158706</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3258158706</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3258158706</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258158706</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258158706</includedComments:puid>
					<includedComments:author>Nalla Senthilnathan</includedComments:author>
					<includedComments:pubDate>2004-04-04T22:20:58-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;This .Net API doc seem to be listing the use cases like you have mentioned:

http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemIOFileClassTopic.asp



Nalla&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>clues from .Net API</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3258158706</wfw:comment>
		</item>
		<item>
			<title>Naked Objects</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</link>
			<category>ot2004</category>
			<pubDate>Tue, 30 Mar 2004 16:56:56 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><p>Naked Objects - a BOF session after the end of the normal day here.  Naked Objects - oddball thing about the name - book lookup on Amazon yields some "interesting" nearby subjects</p>

<p>The idea - to get rid of all the extraneous things - reduce to the leanest, bare essentials.  Four layers in classic architecture:

<ul>
<li> Presentation</li>
<li> Application/Controller</li>
<li> Domain Object Model</li>
<li> Persistence</li>
</ul>
<p>Naked Objects eliminates the controller layer - encapsualtes all business functionality on the entity objects (note - this elides any issues with session access to behavior that is permission based).  Make the presentation layer generic.  Make the persistence layer generic.  In theory, generate the presentation and persistence layers from the domain model.  I detect MVC being reinvented in the Java sphere :)</p>

<p>An example - conference registration:</p>

<ul>
<li> BOF</li>
<li> Delegate</li>
<li> Room</li>
<li> Resources</li>
<li> Company</li>
</ul>
<p>Noting that a delegate can be part of a company.  The demo proceeded using Together/J to build the domain using UML (ed. - I am historically very wary of this kind of tool and development model.  In particular, I find it easier and faster to just <b>use a browser</b> :) ).  After building the four domain classes, a build yields a simple set of classes that have some basic UI behavior (not unlike a Smalltalk inspector, although less powerful than Trippy to be sure).  Relationships?  There's a visual programming way of doing that (like PARTS, noting that we've been there, and it doesn't scale...).  Important note on that being that the Together/J linking behavior is not a necessary part of Naked Objects -  it's a part of Together/J that is independent of what you are doing.  </p>

<p>My main concern would be the assertion that we can make the UI generic.  In my experience, lots of work ends up going into the UI that is only <i>marginally</i> related to the domain - ways that the UI can be configured by the end user (in <a href="http://www.cincomsmalltalk.com/BottomFeeder">BottomFeeder</a>, for instance, the ability to zoom/unzoom different parts of the UI, and how that depends on the current <i>UI state</i>.  I guess I just have a hard time with the notion of a generic UI.  It flies in the face of what I've had to do with Bf.</p>

<hr/>

<p>Now a second session on ModelScope - a prototyping tool.  The notion is model driven prototyping, using state transition diagrams.  The tool interprets that to create the model.  No code generation from the tool - it generates models.  Events change the system, but may not be associated with a single object - thus the usage of state transition diagrams.  No GUI for the front end, so things are loaded from a front end text file.  They have an engine that generates models.  </p>

<pre>

MODEL OT2004

OBJECT BOF
	NAME BOF Name
	ATTRIBUTES BOF Name String
	STATES proposed scheduled cancelled
	TRANSITION @new*Propose=proposed*Schedule=scheduled @any*Cancel=cancelled

OBJECT Room
	NAME Room Room
	ATTRIBUTES Name Name	String
	STATES available
	TRANSITION @new*Make Available=available available*Schedule=available

EVENT Propose
	ATTRIBUTES BOF BOF 	BOF Name String

EVENT Schedule
	ATTRIBUTES BOF	BOF	Room Room

EVENT Cancel
	ATTRIBUTES BOF	BOF

EVENT Make Available
	ATTRIBUTES Room	Room	Room Name String
</pre></p>

<p>Then you run the model generator (ed. - Java based - wouldn't Smalltalk or Lisp be way, way easier for this sort of thing?).  You get a model that allows you to work with the state transitions as they have been defined.  Hard to tell much at this point - needs more fleshing out.</p>
</div>]]></description>
			<guid isPermaLink="false">3258118616</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3258118616</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3258118616</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:puid>
					<includedComments:author>Carl Gundel</includedComments:author>
					<includedComments:pubDate>2004-03-30T20:04:18-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;This is supposed to be a new idea?  How many Smalltalkers have invented this whole thing all by themselves.  We built a prototype system just exactly like this back in 1996 at Kronos.  No special tools were required.&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Untitled</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:puid>
					<includedComments:author>Isaac Gouy</includedComments:author>
					<includedComments:pubDate>2004-03-31T10:25:05-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;&lt;i&gt;a hard time with the notion of a generic UI &lt;/i&gt; &lt;br&gt;

You aren't the only one. &lt;br&gt;

See &lt;b&gt;&lt;a href="http://www.foruse.com/newsletter/foruse28.htm#4"&gt;"The Emperor Has No Clothes"&lt;/a&gt;&lt;/b&gt;





&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Naked Objects - pity the user</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:puid>
					<includedComments:author>Richard Pawson</includedComments:author>
					<includedComments:pubDate>2004-04-01T15:00:47-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;The largest system that we know of built according to the Naked Objects pattern (which a completely generic auto-generated UI) is at the Department of Social &amp; Family Affairs in Ireland  - an 80 user system for benefits processing.



In a post-implementation survey of users, not only did they report that they strongly liked the look and feel of the UI, and that they valued the flexibility it offered in choosing how to approach a task, but 15 out of 15 users interviewed reported that the system 'contributed positively to their sense of job satisfaction'.  That's not something you hear very often in regard to the hand-ctafted UIs that so many people seem to beleive are necessary.  Oh, and this is one the few cases where the system has genuinely enabled massive organisational change and the organisation is already getting substantial benefit from it.  Before it went live they had a backlog of 20,000 claims.  That backlog is now down to a steady 3,000 which is their operational goal.  &lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Naked Objects  -  the users love it!</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:puid>
					<includedComments:author>James Robertson</includedComments:author>
					<includedComments:pubDate>2004-04-01T19:53:42-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Comment on &lt;a href="http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616"&gt;Naked Objects&lt;/a&gt;  by James Robertson

Richard&lt;br/&gt;
I can find anecdotal evidence to support nearly any assertion.  I'm still very unconvinced about this kind of generated UI&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Re: Naked Objects</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:puid>
					<includedComments:author>Patrick Logan</includedComments:author>
					<includedComments:pubDate>2004-04-02T01:47:14-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;&lt;i&gt;I detect MVC being reinvented in the Java sphere :)&lt;/i&gt;

&lt;p&gt;

Except NO generates the V and C automatically. If you are happy with the defaults, you save a lot of effort. If you are not happy with the defaults, you can create new class-specific defaults and write a new V and C for that class.

&lt;p&gt;

I wrote a mostly operational NO for Python and used it in some small examples. I think it has potential in some end user situations and certainly prototyping. Not sure how widely for end users, but the NO's results are encouraging.





&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>NO and MVC</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:puid>
					<includedComments:author>Ashley McNeile</includedComments:author>
					<includedComments:pubDate>2004-04-02T03:00:40-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;When I talked about ModelScope at OT2004 I think I explained the relationship between Events and Objects in a rather confusing manner. The idea is that an Event is associated with, and can affect the state of, multiple Objects. For instance, a funds transfer between accounts is one Event but affects two Objects (two accounts) and changes the balance of both. This is an important difference between Events (as in ModelScope) and Messages (as in OOP), as Messages only have one receiver so only affect one Object. Messages can be used to implement Events, so Events are at a higher level of abstraction than Messages. Other modelling techniques that have also have concept of Event similar to that in ModelScope are: JSD (Jackson), Syntropy (Cook and Daniels) and Catalysis (D'Souza and Wills).



An interesting question is this: Would the Naked Objects approach be improved if it too supported Events? It would seem likely, as a user interface should work at the Event rather than the Message level of abstraction.



Another small point: It is not quite correct to say that ModelScope "generates a model". It is a model interpreter, so it executes a model without code generation.&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Naked Objects and ModelScope</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:puid>
					<includedComments:author>Richard Pawson</includedComments:author>
					<includedComments:pubDate>2004-05-07T00:57:00-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Ashley McNeil said: "Would the Naked Objects approach be improved if it too supported Events?"



I don't think so.  I believe that your events construct merely encourages poor object modelling. You cite the example of a bank transfer as an 'event' that impacts two bank accounts.  A bank transfer should be an object in its own right.  &lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Naked Objects and events</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258118616</includedComments:puid>
					<includedComments:author>Ashley McNeile</includedComments:author>
					<includedComments:pubDate>2004-05-25T01:58:03-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Richard Pawson said: "I believe that your events construct merely encourages poor object modelling."

My dear fellow, you can't just make an assertion like that and expect to be taken seriously! What is your reasoning, please!

Richard Pawson also said: "You cite the example of a bank transfer as an 'event' that impacts two bank accounts. A bank transfer should be an object in its own right."

A number of respected OO domain modelling approaches encourage the identification of Events, for instance: JSD, Syntropy and Catalysis. All of these approaches allow that a single event may impact multiple objects. Of course, in an OO paradigm, events are ultimately implemented as objects themselves. There is no evidence or suggestion that I know of that this leads to poor object modelling.&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Naked Objects and Events</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3258118616</wfw:comment>
		</item>
		<item>
			<title>How to fail at XP</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258094455</link>
			<category>ot2004</category>
			<pubDate>Tue, 30 Mar 2004 10:14:15 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><p>This one comes from Keith Braithwaite of WDS Global and Steve Freeman of ThoughtWorks UK.</p>

<p>We are going to</p>
<ul>
<li> Seed some stories</li>
<li> Break into groups and share stories</li>
<li> Each group to discuss their stories and extract 3 anti-patterns</li>
<li> Each group will present their anti-patterns</li>
<li> Pick top 3, discuss</li>
</ul></p>

<p>Dissenters should be tolerated as long as possible, but no longer:<br/>
<ul>
<li> Some people take time to convert, give them time</li>
<li> One "Professional Skeptic" can bring everything to a halt</li>
<li> Special treatment for the squeaky wheel can cause resentment amongst the rest - possible on a non-XP team, virtually impossible on one</li>
</ul></p>

<p>Proxy customers must remember their place
<ul>
<li> Very few people saying they are doing XP are - most have a proxy customer, not a real one (Product Manager?)</li>
<ul>
<li> Knowing the solution domain well does not imply knowing the business domain well</li>
<li> Having a proxy available when the real customer is not available can help</li>
<ul>
<li> Can blow up if they forget that they are not, in fact, the customer - end product will then answer the wrong question(s)</li>
</ul></p>
</ul>
</ul><p>Must be prepared to pay the cost of fixing the mess
<ul>
<li> Decent engineering is expensive to retro-fit</li>
<li> Customers will not see any progress from this - they will start to think you are "wasting time".  Unclear how to do this well.  Only real solution is constant checking, or deal with catostrophes as they occur</li>
<li> Probably won't like the extra discipline... they don't feel the pain</li>
</ul>
<p>You need to be doing other good stuff beyond XP.  There's not a lot to XP - it's light.  What's not part of XP that is necessary?
<ul>
<li> Small design up front doesn't hurt, and will definitely help.  <b>Not</b> BDUF....</li>
<li> Many people do not absorb the rigor required - especially if they have only "read the books" and not discussed it</li>
<li> Version control - surprising number of teams <b>don't</b></li>
<li> Test/Code/Refactor is necessary but not sufficient.  Have to have skill, it's not a silver bullet.  There are process/interpersonal issues as well.  You can run down refactoring rabbit holes, for instance....</li>
</ul></p>

<p>Don't frighten the customer
<ul>
<li> Most orgs adopting XP have other, non-XP projects.  Don't be a full-time evangelist</li>
<li> Over emphasizing it can be dangerous, and get you labelled as a "religious fanatic"</li>
</ul></p>

<p>Stand up to the Customer
<ul>
<li> Customers drive the project</li>
<ul>
<li> Doesn't mean they are always right or know what they always want</li>
<li> Developers can be frightened of customer, and not question them, even when they "know" they are wrong</li>
<li> This can end up delivering the wrong solution to the wrong problem</li>
</ul></p>
</ul>
<p>Step up to the customer role
<ul>
<li> The "Real" customer is unavailable</li>
<ul>
<li> lack of feedback and direction increases risk - recall the "remember your place" in the proxy customer role</li>
<li> Someone in that role is better than no one...</li>
</ul></p>
</ul>
<p>The exercise - come up with a few anti-patterns and proposed solutions.  We came up with:</p>

<p><b>Create a Customer</b></p>
<ul>
<li> There is no customer</li>
<li> Without a customer, rat holes abound</li>
<li> Some projects - such as vendor products - lack a single definable customer</li>
</ul>
<p>Get a new Bo peep</p>
<ul>
<li> Need a working team</li>
<li> Coach leaves</li>
<li> Lost Sheep after coach leaves</li>
</ul>
<p>Hire experienced people</p>
<ul>
<li> The blind leading the blind</li>
<li> They fall off the clock</li>
<li> There's no substitute for an experienced coach</li>
</ul>
<p>Other examples</p>

<p>Timely shutdown</p>
<ul>
<li> No customer - shut down the project (don't let marketing run wild</li>
<li> Seeing the Forest and the trees - Lots of apparent chaos - step back, find the ball</li>
<li> Right Rewards - Align incentives and development goals with reality and actual business goals</li>
</ul>
<p>Personal Space</p>
<ul>
<li> 24 hour pair programming</li>
<li> Not accomodating the individual</li>
<li> Cabin fever - learning needs</li>
</ul>
<p>Single Voice</p>
<ul>
<li> You have multiple customers</li>
<li> You cannot serve two masters</li>
</ul>
<p>Escape from refactoring</p>
<ul>
<li> Refactoring paralysis</li>
<li> Stalled/No progress</li>
<li> "The perfect is the enemy of the good enough"</li>
</ul>
<p>Quarantine</p>
<ul>
<li> Small XP team in large company experiencing growth</li>
<li> XP Team absorbed back into "mainstream" - XP practices lost</li>
<li> Protect the team, keep it separate</li>
</ul>
<p>Others I didn't quite get down - "Stealth XP" and "Explicit XP"</p>

<p>So we have a vote to determine the top three:
<ul>
<li> <i>Timely shutdown</i></li>
<li> <i>Personal Space </i></li>
<li> <i>See forest and trees</i></li>
</ul></p>

<p>The voting results came back differently than at the Benelux conference - they all came back with issues surrounding customer relations, whereas we came back with technologist/team issues.  Likely because this group <b>is</b> a technologist, but not necessarily doing XP.  The Benelux conference was an explicitly XP Conference.  </p></p>
</div>]]></description>
			<guid isPermaLink="false">3258094455</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3258094455</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3258094455</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258094455</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258094455</includedComments:puid>
					<includedComments:author>Ryan Lowe</includedComments:author>
					<includedComments:pubDate>2004-03-31T11:18:54-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;These are some great notes.  :)  Lots of good points.  I wonder, if you pay to go to a conference (not sure if you did), do they care if you blog the content?  Or do the presenters see it as a "leak" and a loss of potential income?  I guess nothing can replace actually interacting at the conference ...&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Great Notes</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258094455</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258094455</includedComments:puid>
					<includedComments:author>James Robertson</includedComments:author>
					<includedComments:pubDate>2004-03-31T13:53:30-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Comment on &lt;a href="http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258094455"&gt;How to fail at XP&lt;/a&gt;  by James Robertson

I paid to attend - and actually, the organizers are likely going to make sure that all sessions get blogged next year :)&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Re: How to fail at XP</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258094455</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258094455</includedComments:puid>
					<includedComments:author>Ewan Milne</includedComments:author>
					<includedComments:pubDate>2004-04-01T10:26:13-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;

The Ot conference culture is very open - the site hosts a wiki (www.ot2004.org/cgi-bin/wiki.pl), on which both speakers and delegates are encouraged to freely share the outputs of sessions, experiences, etc....

&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Untitled</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3258094455</wfw:comment>
		</item>
		<item>
			<title>Dispersed Development</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258083936</link>
			<category>ot2004</category>
			<pubDate>Tue, 30 Mar 2004 07:18:56 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><p>This is a case study presented by John daniels and Paul Dyson</p>

<p>What they are going to cover:<br/>

<ul>
<li> Multiple teams - each team in one office?  Not the topic</li>
<li> Satellite Workers - most in one office, some remote workers.  Not the topic exactly</li>
<li> Dispersed team - Every team member is remote - this is what they are covering</li>
</ul>
</p>

<p>Why do it?<br/>
<ul>
<li> Cost (lower)</li>
<li> Get people who do not want to travel/relocate</li>
<li> Constrained by circumstances - (personal or business)</li>
</ul></p>

<p>Case study, source: JD.  Two FNL projects covered here.  Both were part of a larger project<br/>

<ul>
<li> Specialized Workflow engine, 2 people, fixed price, 5 months, server based (EJB), no UI</li>
<li> Information management system with 4-6 people - T&M.  Lot of interdependence between this part and others.  Large EJB/J2EE project, 6 months</li>
</ul>
</p>

<p>Case study - source: PD<br/>

<ul>
<li> Integration of web services provision for internet platform.  4-5 people, fixed price, Java web services, no UI</li>
<li> 4-5 people, 9 months, Java, multiple interfaces, migrated from office environment.  Tried to develop a product from (1)</li>
</ul></p>

<p>Working Environment<br/>

Needed:<br/>
<ul>
<li> Full broadband (beware upload chokes!) - needed cable/DSL</li>
<li> Phones plus conf calls</li>
<ul>
<li> Could use VOIP for one to one</li>
</ul>
<li> Powerful machines for team.  </li>
<ul>
<li> Beware desktop sharing over net with large displays</li>
<li> Install <b>complete</b> platform at each site - so need power at each site</li>
</ul>
<li> Wiki for sharing</li>
<li> Version control system that works in this fashion</li>
<li> NetMeeting for collaboration</li>
<ul>
<li> VNC or equivalent</li>
</ul>
<li> IM for chat/see who's around</li>
<li> Security (physical and cyber) - in practice, ignored many of the customer requirements for physical security)</li>
<ul>
<li> Firewall</li>
<li> IPSec encryption (same router at each site)</li>
<li> Encrypted email (PGP plugin)</li>
<li> if appropriate, encrypt HDs</li>
</ul>
</ul></p>
<p>Issues<br/>
<ul>
<li> Tool support for this is currently very weak (very ad-hoc)</li>
<li> Supporting multiple/varied desktops is very hard.  Everyone ends up being an SA.</li>
</ul></p>

<p>Interacting with the customer<br/>
<ul>
<li> Initial face to face meeting (ongoing)</li>
<li> cannot support regular XP model of an onsite customer</li>
<ul>
<li> More expectation mgmt needed - lack of shared experience in team</li>
<li> More formal review periods</li>
<li> Need to schedule customer time, as it is not going to happen otherwise</li>
<li> Need more doc - without direct interaction, necessary</li>
</ul>
<li> Issues need to be resolved by phone/chat/wiki</li>
<li> Customers had no access to the environment (VPN or servers)</li>
</ul>
</p>FNL Example<br/>
<ul>
<li> Customer had already donse some prototyping</li>
<li> Customer had done extensive business analysis</li>
<li> Jointly produced feature list</li>
<li> Had access to their intranet and repository</li>
<li> They were happy to use dispersed dev - saved desks/space</li>
</ul></p>
<p>
e2x<br/>
<ul>
<li> Many onsite meetings for clarification</li>
<li> 2 - 3 week iterations, delivery after each</li>
<li> 1-2 days onsite to assist with integration at each step</li>
<li> 1  week onsite to really integrate</li>
</ul></p>

<p>This latter project was <b>hard</b></p>

<p>General approach<br/>
<ul>
<li> Evolutionary approach</li>
<li> Short iterations</li>
<li> Daily "stand up" meetings</li>
<li> features vs. tasks - used tools like the Wiki and spreadsheets to manage the difference</li>
</ul></p>

<p>One thing learned - used Wiki as a "virtual wall" of cards for the project.  <b>Very difficult</b> to enforce without discipline.  Worked well, but the team needed to think about it.  The actual development process was not a lot different from normal - other than the need for on site delivery and integration - in a full on site job, would have been more natural.  </p>

<p>Designing the System<br/>
Needed to do early architecture/design work in up front face to face meetings.  Worked better face to face, later on used shared desktop with virtual whiteboards.  Did this in UML, used Rose (somewhat).  The process was API driven (from the EJBs).  Design doc was produced after the fact, not during or up front.  Revisiting the design decisions were more important than in a "normal" XP process, as there is less lunch/coffee (etc) side conversations.  Needed to make up for that lack.  Ran up against poor tool support for dispersed diagramming.</p>

<p>Team Organization<br/>
mixed pairing with "buddying" - work alone, but check in with buddy on a regular basis.  When pairing this way, agree on how work was to be done and split it up.  Work as a pair until complexity was understood, then just go off and do it.  One common split - tests vs. implementation.  Most tasks were paired, there was the odd singleton task on the e2x project.  In response to a question, code review and code quality takes extra work.</p>

<p>Programming Technology<br/>
<ul>
<li> Eclipse</li>
</ul>( CVS
<ul>
<li> Eclipse and Tortoise clients</li>
<ul>
<li> Server running on spare PC (Server hosting)</li>
<li> e2x later switched to the tool they were building (Cyclex)</li>
</ul>
<li> Pair programming with NetMeeting</li>
<ul>
<li> Slight delay over wire if you are not the driver (mostly ok)</li>
<li> re-synch to version control to switch driver</li>
<li> Mostly worked w/o problems!</li>
</ul>
<li> Varying degrees of continuous integration as a result (IMHO, not a lot different from normal process issues)</li>
</ul></p>

<p>
<ul>
<li> Process for programming tasks<br/></li>
<ul>
<li> Sketch the ifc</li>
<li> Code the tests</li>
<li> Run new tests</li>
<li> Code the implementation</li>
<li> Run new tests</li>
<li> Iterate until pass</li>
<li> Run all tests until integrated</li>
<li> Check in</li>
</ul>
<li> test focused rather than simply test driven</li>
<li> Updated user abd design doc before each software release</li>
</ul></p>

<p>Project 2 FNL<br/>
<ul>
<li> Used customer repository</li>
<ul>
<li> No Eclipse integration</li>
<li> Couldn't use NetMeeting while connected to their repository - made pairing very tedious</li>
</ul>
<li> Pairing over NetMeeting via ADSL</li>
<ul>
<li> Once VPN worked, easy</li>
<li> audio and desktop sharing worked well over VPN</li>
</ul></p>
</ul>
<p>Project e2x<br/>
<ul>
<li> Who's got the monkey?</li>
<ul>
<li> Used an actual "monkey" toy in the office, what to do remotely?</li>
<li> Use IM (did not work as well)</li>
</ul>
<li> Lack of "overheard" conversations</li>
<ul>
<li> Interruptions are worse than when co-located (other phones, door, etc)</li>
</ul>
<li> Latency makes swap over a problem</li>
<ul>
<li> Poor support in CVS</li>
<li> Supported in Cyclex</li>
</ul></p>
</ul>
<p>What about Testing?<br/>
<ul>
<li> General</li>
<ul>
<li> Focus on functional tests - are unit tests still important?  They think less so</li>
<li> Used JUnit</li>
<li> Automated one click testing critical</li>
</ul>
<li> FNL</li>
<ul>
<li> When paiting, <b>both</b> developers had to get all tests to pass on their machines before it was agreed to be done - the "it works on my machine" problem</li>
</ul></p>
</ul>
<p>General Advice<br/>
<ul>
<li> Shared understanding of the tasks is crucial</li>
<li> e2x: Does work with people you don't know.  Works better with people you do know</li>
<li> FNL: Only employed people that they knew already</li>
<ul>
<li> Minimized start up time</li>
<li> Minimized cultural/personal diffs</li>
</ul>
<li> Face to face - especially with customer - is still crucial!</li>
<li> Important to establish working etiquette as you go along</li>
<li> Allow time for setting up the infrastructure (VPNs, databases, etc)</li>
<li> Test focused </li>
<li> Maximum team size limit? They have done 5-6</li>
</ul></p>

<p>Discussion session<br/>
<ul>
<li> One thing that comes up is that all interaction has to be more considered - and somewhat more formal - than in an office environment.  John Daniels: This form of pairing is actually more productive (admittdely, anecdotal).  </li>
<li> There are times and tasks where people work more efficiently alone.  Remote development with buddying allows for that</li>
</ul></p>
</p>
</div>]]></description>
			<guid isPermaLink="false">3258083936</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3258083936</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3258083936</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3258083936</wfw:comment>
		</item>
		<item>
			<title>Getting your story straight - User stories in XP</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258079155</link>
			<category>ot2004</category>
			<pubDate>Tue, 30 Mar 2004 05:59:15 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><p>This session is going to talk about:</p>

<ul>
<li> What an XP story is</li>
<li> How stories differ from Use Cases</li>
<li> Where analysis fits in the XP Process</li>
</ul>
<p>On site customer - proxy for all the stakeholders (ed. - politics).  The on site customer <b>is used instead of documentation</b>.</p>
<p><b>Q</b> - What about maintenance phase, which is 80%?  What about doc for that?<br/>
<b>XP</b> - XP is weak in this area.</p>

<p>On site customer needs to know the system requirements,  Communicates context, required outcomes.  Prioritizes work based on business value.  <b>Available to answer questions</b> </p>

<p>Stories<br/>
Stories should be of a size where you can build a few of them in an iteration.  Stories are time boxed by definition, and should be between 1 and 5 "ideal" programming weeks.</p>

<p><b>Q</b> - What about projects that may well span <b>much</b> more time than that?<br/>
<b>A</b> - XP is not a silver bullet - not all problems can be solved via stories").</p>

<p>Story format is <b>not</b> important.  Has a title, concise problem statement, sketches of screen layout, etc.).  Now the group is discussing how you fit in things like refactoring (etc).  Some things aren't part of the explicit customer stories, but are part of their implicit desire for a maintainable, working system.  Side note on my part - I can see an RSS feed for stories being a very nice fit :)</p>
<p>Acronym <b>Invest</b><br/>
<ul>
<li> I Independent</li>
<li> N Negotiable</li>
<li> V Valuable</li>
<li> E Estimable</li>
<li> S Small</li>
<li> T Testable</li>
</ul>
</p>

<p>Unit tests are <b>not</b> enough, we need acceptance tests as well - "When I do tis action, I expect this result".  Ideally, test suite should be automated.  The tests help you collaborate with the customer and iterate towards "what they meant" as opposed to "what you did".  This is easier said than done, IMHO.</p>

<p>So - why stories on index cards?  Because you can't overdo it - can't fit much text on a card.  Easy to get everyone involved.  </p>

<p>Pitfalls<br/>
<ul>
<li> System requirements may be too large to fit in customer's head</li>
<li> Customer does not have time to do their end</li>
<li> Customer is not on site</li>
<li> Customer blind spots (missing tests)</li>
<li> Losing parts of stories</li>
<li> Customer team, many voices</li>
<li> If customer spends "too much" time with the team, may lose touch with business stakeholders</li>
</ul>
</p>

<p>Shoring up - Multiple customer teams?  Story repositories?  </p>

<p><b>Exercise</b><br/>
We took a simple order entry (CRUD) system.  Split into roles (customer, QA, developers) and develop stories.  Then, passed stories along to next table to look.  As it turns out, the stories we received were much more complete than the ones we sent along - we were very incomplete.  basically, we did not include enough story detail, and mostly omitted acceptance tests.  The results were mixed - two groups created stories with tests, two groups (like ours) created decent stories and tests (within the time constraints).  Very interesting exercise, opened my eyes on this area.</p></p>
</div>]]></description>
			<guid isPermaLink="false">3258079155</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3258079155</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3258079155</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258079155</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258079155</includedComments:puid>
					<includedComments:author>Ryan Lowe</includedComments:author>
					<includedComments:pubDate>2004-03-31T11:29:46-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Customer blind spots are an interesting area.  I'm reading a book in the XP Series called "Testing Extreme Programming", where they pitch an "XP tester" role to replace quality assurance/control from old-style development.



During the initial story formulation, this book says to focus on the "happy path" and the happy path one simple situation where the story is not working.  The happy path is the story working out completely.  The XP tester's role, because she's seen tons of problems with software over the years, is to expand on the happy path and think of all of the possible problems that the customer and even most developers miss.  Then the acceptance tests are based on all of these situations where things can do wrong.



The book had a great point: developers are used to seeing things work, and testers are always used to seeing things break.  :)  That kind of perspective is invaluable when creating acceptance tests for situations off the happy path for a story.&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Customer Blind Spots and the Happy Path</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3258079155</wfw:comment>
		</item>
		<item>
			<title>Ivar Jacobson  - more notes</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258037490</link>
			<category>ot2004</category>
			<pubDate>Mon, 29 Mar 2004 18:24:50 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><p>Immo H%FCneke was kind enough to share his notes from Ivar's talk - he didn't miss the beginning.  His notes:</p>

<blockquote>
<p><b>An evening with Ivar Jacobson</b><br/>
<p>Bruce Anderson introduced Ivar as someone very well known in the industry - best known for the introduction of Use Cases.</p>
<p><b>Q:</b> Do you think that the move from text-based to more highly structured use cases is a step forwards or backwards?<br/>
<b>A:</b> It's a step forwards! We need structure in requirements. Anything else sends you to sleep in two hours. But I'm cautious not to formalise more than necessarily. It's easy to formalise, but very hard to get the right formalism. With experience of Vienna Development Method (VDM) and other formalisms, I believe that  "some structure" is appropriate.<br/>
<b>Q:</b> Is Use Cases the universal method for expressing functional requirements or is there anything else?<br/>
<b>A:</b> There are things better expressed using mathematical formulae, spreadsheets or anything else - but such expressions should probably be attached to a use case.<br/>
<b>Q:</b> What about something like a video-game, which is very state-dependent?<br/>
<b>A:</b> Probably just one or two use cases there -  "play the game". The radio in a Volvo car was described button by button in the manual: I could never learn how to work it. It would be nice to see appliance manuals structured along Use Case lines.<br/>
<b>Q:</b> Would such a use case be structured along the lines of what actions the user wanted to do in the game, e.g.  "kill adversary"?<br/>
<b>A:</b> People use state charts, activity diagrams, screenshots etc. to describe the use-case. The documentation should be anchored in something concrete, not floating in semantic emptiness. Use an object model (we call it analysis). The analysis model is more precisely expressed than the use case model. It uses activity diagrams, swim lanes etc. to express the realisation of each use case more precisely.<br/>
<b>Q:</b> What about XP then, which just uses stories and goes straight to code?<br/>
<b>A:</b> That's a lightweight process, which can be used to generate rapid prototypes. Lightweight use cases are appropriate for a lightweight process.<br/>
<b>Q:</b> Sticking with requirements, how do you deal with the distinction between functional and other requirements? Is this a good categorisation?<br/>
<b>A:</b> In most cases, this distinction is useful. Most of the non-functional requirements are specific to one use-case (e.g. performance - making a telephone call has one performance requirement, hanging up a call has another).<br/>
<b>Q:</b> But what about qualities that have to apply to the whole system?<br/>
<b>A:</b> RUP puts these in a document called supplemental requirements. But security (an infrastructure requirement) is well accommodated within the Use Case structure. Aspect-oriented development has become quite popular for infrastructure requirements.<br/>
<b>Q:</b> Why has aspect-oriented become important?<br/>
<b>A:</b> Separation of concerns. Security can be dealt with separately, without even talking about specific applications. This can be traced to code and tested separately from the rest of the system. Every new feature (e.g. follow-me service, directory enquiry) can be specified separately but has to be integrated into existing code that handles telephone calls. Result: scattering and entangling. This is the nature of the systems that we have lived with for 20-30 years. Aspect-oriented approaches allow us to escape from these impacts.<br/>
<b>Q:</b> But what has this got to do with use cases?<br/>
<b>A:</b> A quite simple but powerful mechanism, which allows us to keep the use cases separate. In the future, we will be able to develop, deploy and test each use case in isolation. They can be composed to build systems rapidly. It was a huge step to move from structured to object-oriented languages, but this switch to aspect-oriented is just a refinement.<br/>
<b>Q:</b> (JD) Bruce, did you understand that answer?<br/>
<b>A:</b> Yes!<br/>
<b>JD:</b> then it's just me!<br/>
<b>Q:</b> Before you started work for Rational, you were successfully promoting your own method, Objectory. Is RUP just Objectory renamed, as you are quoted as saying?<br/>
<b>A:</b> I have never said that.<br/>
<b>Q:</b> Well, you must have had to make compromises with your colleagues when leading the RUP development?<br/>
<b>A:</b> No. But Objectory v. 3.8 was really RUP.<br/>
<b>Q:</b> Was anything lost in the process?<br/>
<b>A:</b> Yes, a few things - I was never very happy with the way we describe architecture in RUP. It is correct, but probably unnecessarily complicated. Another thing I miss is analysis - we do analysis in a diluted way. Today we can not have a process that isn't supported by a tool. The process is said to have been adapted to the limitations of the tools, but perhaps analysis has been removed because the tools didn't support it. For example, Objectory supports multi-modelling, while ROSE doesn't. There still are people working with the old Objectory tool.<br/>
There is a perceived distinction between Objectory and RUP. Business processes including the software development process itself are modelled in Objectory. When I first began to develop Objectory at Ericsson, they had a good process for component-based development. But all we could give programmers was templates - there was no guidance about creating good sequence diagrams, state charts, good components etc. So this was where we concentrated in Objectory. We ignored project management. Just to give you an idea why Objectory was well-liked: it was the only tool that gave you help with these aspects. The single user licence was $22K! Yet we sold over 300 copies. The most expensive copy sold was $1M.<br/>
<b>Q:</b> RUP doesn't support architecture very well, does it?<br/>
<b>A:</b> The way Objectory got developed, the system is modelled through seven or so models - use case model, analysis model etc. Even the code is one model. There was also a test model at one time. Today we talk about viewpoints and perspectives. Models are easier to comprehend. Architecture should be just the use of the models. This should be fixed.<br/>
<b>Q:</b> So should we have architectural views of each of the models?<br/>
<b>A:</b> Yes, to present the essential core of those models. I don't like the term  "executable architecture", I prefer to think of it as version 0.1 of the system.<br/>
<b>Q:</b> Let's talk about MDA, another  "hot" topic. Some people look on the MDA models as just programs in a very high level language. What's your view on those models in MDA?<br/>
<b>A:</b> Model driven development is usually seen as a positive idea. MDA is more specific: it requires you to build a PIM (which is analogous to the analysis model in Objectory). It is supposed to be expressed in an executable language. I don't believe it is ready today to develop production-quality code. One day we will get there - the platform-specific extensions still need to be developed. Anyone waiting for MDA to be delivered before embarking on a new development is playing a high risk game.<br/>
<b>Q:</b> Looking back over your career, is there anything you would prefer to be remembered for than Use Cases?<br/>
<b>A:</b> I never thought that Use Cases would be so important - I was quite surprised by their success. I think the most important thing I did was to introduce component-based development in Ericsson. We had sequence and collaboration diagrams, state charts on components. This helped to make Ericsson as successful as it now is.<br/>
<b>Q:</b> Which of your innovations has earned you the most money?<br/>
<b>A:</b> Not an innovation, but perhaps a mis-translation: Use Case was originally Usage Case in Swedish!<br/>
<b>Q:</b> Software Engineering Professionalism: XP and agile approaches in general seem to emphasise the art/craft aspect of software development rather than engineering. Is this a step backwards?<br/>
<b>A:</b> Large groups of people have always viewed software as a craft - actually the proportion that views it as engineering is growing steadily. Languages go in cycles - Smalltalk is coming back into fashion. Tools are getting more powerful because we understand software engineering better. All my life I have worked on understanding how to develop software. I have worked with models and process to simplify it. It is engineering more than an art form. You can't be trained to be artistic, but I refuse to believe that only the select few can be really good at software development.<br/>
<b>Q:</b> Another quote is  "XP doesn't help you to grow an organisation". What did you mean by that?<br/>
<b>A:</b> I can't remember saying this. In the context of the quote though, it makes sense. I believe that there are lots of good things in extreme programming. It has put the finger on agility, which was not explicitly addressed by my processes. However, the whole purpose of Objectory was to codify knowledge of how to create good software, with the aim of making the process more reliable and faster. Knowledge has to be applied, yet RUP by itself doesn't apply anything. You not only have to know something, you also have to be smart in applying it. I would use something like XP for every new product I worked on, because you have to start small. There isn't anything in XP that people haven't been using for 30 years, but it has put them together in a very nice way. As soon as a product is successful, we have to grow beyond XP processes in order to prevent loss of knowledge as people move away to other projects. You can use RUP in a very lightweight manner to support an agile process and then grow it. For example, my daughter and I recently developed a rule-based product based on intelligent agents. She had no need to use RUP, but did so anyway, and it is growing with the needs of the company now that the product is becoming successful. A shortcoming of XP is that knowledge is not explicit, it stays in people's heads. RUP makes knowledge so explicit that it can be automated using rules - which is what the product I mentioned does.<br/>
<b>Q:</b> Is RUP heavyweight then?<br/>
<b>A:</b> You can use as little or as much as you like.<br/>
<b>Q:</b> What do you regret not doing differently?<br/>
<b>A:</b> At OOPSLA, I got the same question. There are a couple of things. Dave Thomas is a very good friend. He visited me in '98 in Sweden. He had looked at Objectory and felt very positive about it. He said I should write a very thin book (125 pages at most) about Use Cases. He also urged me to let him develop a tool for it for $100K. But with my Ericsson background, I thought that writing such a thin  "stupid" book and developing such a small  "stupid"  tool was not something I would ever do. In fact it could have been a lot of fun.<br/>
<b>Q:</b> What's on the cards for the second half of the Jacobson Career?<br/>
<b>A:</b> If you look at software and automation in general today, how has it advanced in 100 years? Ericsson's first switch in '23 was built out of relays, which was the dominant technology from '00 to '50. Joining Ericsson, I felt that we were nearing the top of the S curve. Software was the answer - it made it easy to add new features to switches. However, we now are reaching the limitations of software. Every piece of equipment you now buy comes loaded with software, most of which we cannot use because some idiot designed the user interface (passive software). We need to move towards active software - which can intuit what you are trying to do and help you to achieve it. Software that can help you to improve the way you do things and shorten the path to success. Active software is coming into all kinds of applications already and is going to grow.<br/>
</p>
</blockquote>
</p>
</div>]]></description>
			<guid isPermaLink="false">3258037490</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3258037490</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3258037490</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258037490</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258037490</includedComments:puid>
					<includedComments:author>bryan</includedComments:author>
					<includedComments:pubDate>2004-03-30T04:09:10-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;it's somewhat offputting.&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>encoding problems?</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258037490</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258037490</includedComments:puid>
					<includedComments:author>Jochen</includedComments:author>
					<includedComments:pubDate>2004-03-31T10:25:39-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;I guess with software inuition would be the same as with human inuition

- it can fail! (yeah, all software can fail...)

Should we rely on systems using intuition?

Still some time to conduct research in that direction, I asume.&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Software intuition</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258037490</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258037490</includedComments:puid>
					<includedComments:author>James Robertson</includedComments:author>
					<includedComments:pubDate>2004-03-31T14:02:59-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Comment on &lt;a href="http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3258037490"&gt;Ivar Jaconson - more notes&lt;/a&gt;  by James Robertson

Sorry, fixed the encoding issues...&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Re: Ivar Jaconson - more notes</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3258037490</wfw:comment>
		</item>
	</channel>
</rss>
