<rss version="2.0">
<channel>
<title>The Anthropology of Software</title>
<link>http://www.benpoint.com/rss.xml</link>
<description>Thoughts of an anthropologist computer scientist at BenPoint.com</description>
<language>en-us</language>
<lastBuildDate>Wed, 31 Dec 2008 22:00:00 GMT</lastBuildDate>
<ttl>180</ttl>
<image>
<title>The Anthropology of Software</title>
<width>142</width>
<height>18</height>
<link>http://www.benpoint.com/</link>
<url>http://www.benpoint.com/rss.gif</url>
</image>
<item>
<title>Workflow software should de-emphasize roles</title>
<link>http://www.benpoint.com/workflow-software-should-de-emphasize-roles.htm</link>
<guid isPermaLink="false">workflow-software-should-de-emphasize-roles.htm</guid>
<pubDate>Wed, 31 Dec 2008 22:00:00 GMT</pubDate>
<category>Software Design</category>
<description><![CDATA[

<P>Workflow software helps manage business processes such as budget decision cycles or procurements. The information and tasks are organized and tracked between users according to rules derived from the business goals.</P>

<P class=quotation>optimizing workflow with computer technology involves identifying what the human and the computer each do best and assigning them tasks accordingly <a href="http://www.chips.navy.mil/archives/00_oct/workflow.html">Major Dale Long, USAF</a></P>

<P class=quotation>at that stage on a tight IT budget, trying to institute conventional workflow software would have added a rigidity to the system that would have stood in their way. <i><A href="http://www.benpoint.com/abo.htm">Lessons from the Army Budget Office</A></i></P>

<IMG src="http://www.benpoint.com/raisingflag.gif" align=right alt="Magne Øren and Coralie Bryant raising Norsk flagg for grillaften på Øren"/>

<P>One of the first things you consider when designing a workflow system is the roles of different people in the day to day business. You plan to support these different roles with different features, notifications, checklists, allocation and modification privileges, <I>who</I> approves <I>what</I>, that sort of thing.</P>

<P>The key challenge with role-based workflow systems is when roles are constantly in flux. Computer systems cannot follow and adjust to roles the way humans naturally do. When analyst responsibilities can change on an hour by hour basis as the whole team scurries to get something ready for a deadline, you don't want to spend time trying to get the system to let you do things it doesn't think you're supposed to do.</P>

<H4>No trust</H4>

<P>Let's talk about trust, and why most designs get it wrong the first time. When developers think of what the computer can control, they think of access, the username/password thing, and then they think about privileges, the authority thing. Maybe, just maybe, designers (primarily men?) like to establish a pecking order first as a way of architecting workflow software.</P>

<P>One example of a broken workflow concept is basing priviledges and approval stages on rank (e.g. military rank), the assumption being that the higher rank person would have more system priviledges.</P>

<P class=standout>But in the real world, higher ranking people generally touch computers less and you cannot wait for them to sit down at a computer and enter or approve something.</P>

<P>In most cases an administrator does a lot on behalf of many other people who don't have the time to upkeep data in the files, or database repository. This was always the case with secretaries and filing cabinets and the lowest ranking administrative assistant filing confidential materials, and it is the same now that computers are on every desk.</P>

<P>Even if you imagine a workforce where assistants no longer manage the details of workflow, it is a part of the business process that will take more than new software and a memo from the CEO to change.</P>

<H4>The revolution</H4>

<P>The photocopier brought copying and record keeping to a new level, and the computer raised it to yet another level with the ability to effortlessly store a copy of the state of something at every stage of its development. Rather than trying to make sure no one does anything wrong in a collaborative environment now we can let them do what they feel they need to do and just track what they do in case we need to go back and sort it out.</P>

<P>This is a concept that hit the bigtime with <A href="http://www.wikipedia.org/">wikipedia</A>. Realizing that getting permission beforehand is a great impediment to productivity, their idea is to let everyone contribute freely while keeping copies of every revision so that malicious or erroneous edits do not harm the good data. You can always get back to it. This concept is even more powerful in private collaborations where bad usages are rare.</P>

<P>But workflow software designers still hesitate to fully embrace this revolution. Take the case where an administrator does things on behalf of others. This person should be able to annotate or justify actions by logging a note such as "approved by so-and-so during 2:30 meeting." This is obviously necessary when the decision maker is not someone who will touch a computer.</P>

<h4>Bad workflow design causes security failure</h4>

<P>Workflow design that has rigid roles often leads to workarounds such as someone logging in as someone else just to perform a task. The person who is assigned the necessary role in the system might be sick and calling in to have someone else perform the task. Or if the necessary privileges have not been properly assigned, or somebody is in charge of ordering parts just for the day, to get the job done a person might be forced to call a co-worker and use their credentials. In terms of both security and tracking, <b>this is a worst case scenario</b>.</P>

<P>In many cases, to avoid causing a security failure the software should allow <I>anyone</I> with a login account in the office to perform the action. For sensitive or costly actions you can put an additional password on the action itself. The principle being that you can always look at the log to see who performed the action, but you must never ever have someone login as someone else to perform it.</P>

<P class=standout>People understand roles intuitively even in flux; computer software is very poor at this. Workflow design should always initially focus on the work and <b>not the roles</b>. To restrict actions, use passwords on the actions. Build a system that can provide business process automation conveniently and with great tracking and the users will reward you by adapting their roles to your software.</P>

<H4>Trust</H4>

<P>It is unavoidable that when people are brought to work together, they have to be trusted. There are many precedents for putting trust in professionals.</P>

<P class=standout>In Department of Defense classification policy the concept of "need to know" means that even if you have a secret clearance you do not look at anything classified unless you are confident of your "need to know."</P>

<P>"Need to know" incorporates trust (that someone will not pick up a classified folder when the other person turns his back) as well as elements of tracking (like 
<P>Similarly someone on the doctor's staff is allowed to look into someone's medical records only if they have a professional reason (i.e. authorization) to do so.</P>

<P>In both cases you are placing great trust in people, and that trust can be violated. If a violation is discovered there are consequences, but there is still a risk. It has been established that this risk is worth it because tightening down any more would be counter-productive. Computers cannot change this.</P>

<P>But computers do improve on this by doing an excellent job of preserving, tracking, reporting and notifying. When medical records are accessed via computer, a log is created which can be audited later to check for abuses. In other workflow situations, certain sensitive information can even be protected by the threat that ranking users will be notified, rather than by making it completely inaccessible.</P>

<H4>Tracking</H4>

<P>When someone is unexpectedly out of the office for a day, what happens to their workload? If a workflow application expects their approval in a chain of events, or only they have the authority to allocate a new resource, can someone else do it for them? If they call into the office would they need to tell someone else to login as them? If the system has a simple checkout paradigm that does not allow others to modify an item while it is checked out and someone leaves a crucial item checked out, what do you do?</P>

<P>Designers aften call these situations "exceptions to the rule." The problem is that these "exceptions" are left to be solved later while a non-versioned data store and rigid role architecture is developed. In the end you have an architecture that does not have the basic building blocks to solve the actual problem which is:</P>

<P class=standout align=center>collaboration despite fluctuating roles.</P>

<P>All of these problems are solved when you design a system around flexible version control and extensive tracking, rather than locking and pre-assigned permissions. So rather than focusing on the username/password and authority things, there is an alternative. Focus on the version control and tracking thing.</P>

<P>In most workflow and document management systems, version control should allow for multiple versions, merging, comparing, and especially mock-ups where a user can aggregate and report based on an alternative version of data, generally referred to as a <B>"what if"</B> scenario.</P>

<H4>Boss or tool?</H4>

<P>We use titles for positions in the workplace in order to give a semblance of structure, and while it is true that a title does help give you some idea of what a person does, the closer you work with them the more you see how the boundaries of those positions vary. While roles are not the same as positions since they are more specific to the software, they have the same issues. I once saw a role classification system with thousands of roles; role maintenance can become an industry in and of itself.</P>

<P>We might dream that if we can capture the essence of the roles underlying the business practices, the computer can guide and help manage the processes like a benevolent boss. But the reality is closer to that notorious Microsoft Office paperclip. Roles are often a phantom you can never satisfactorily capture.</P>

<P>This is why successful workflow systems focus more on preserving versions and tracking what people do (i.e. who did it or approved it and when) rather than controlling what they do. Computers work better as a tool than as a boss.</P>





]]></description>
</item>
<item>
<title>Google App Engine is a Micro ISV Dream</title>
<link>http://www.benpoint.com/googleappengine.htm</link>
<guid isPermaLink="false">googleappengine.htm</guid>
<pubDate>Mon, 14 Apr 2008 17:00:00 GMT</pubDate>
<category>Business of Software</category>
<description><![CDATA[

<P>A key to Microsoft's success in the 80s and 90s was that software enterpreneurs could easily develop for MS-DOS and Windows and get in front of their customers, and that in turn strengthened Microsoft. Allowing entrepreneurs to make money by building on top of your platform cements your platform's place in computing. Google has released a few small APIs and <A href="http://www.google.com/ig/directory">Google Gadgets</A>, but never attempted to introduce a major platform.</P>

<P align=center><IMG src="http://www.benpoint.com/panorama.jpg" border=1 alt="Rukungiri panorama"></P>

<P>Since the days when GMail alerted everyone that Google was more than just Internet search, Google seems to have branched into a dizzying array of software niches, rarely throwing a knockout punch though. Google Docs is still a very weak product and Froogle was dropped in favor of Product Search, but in general their products are fast and have a lot of potential.</P>

<H4>BigTable</H4>

<P>When Google started talking to techies about <A href="http://video.google.com/videoplay?docid=7278544055668715642">BigTable</A> some 2.5 years ago, my mind registered the first faint murmurs of something revolutionary, actually something long overdue. While other companies focused on the same difficult problems with the same old legacy based database infrastructures, Google quietly went and applied its search engine know-how to the problem of productizing a fast, scalable and reliable storage technology on its signature clusters of cheap Linux boxes.</P>

<P>No doubt there is a lot of money for Oracle, Microsoft and their partners in putting developers through the same old paces with databases, configuration, clustering, load balancing, expensive RAID systems, yada yada yada. It seems like their solutions are always a matter of trying harder at the same old techniques rather than developing a technology that is better suited to the problem. But the revolution is fast approaching, and BigTable has the necessary ingredients.</P>

<P class=standout>Every database these days touts itself as scalable, but the fact is that every large web site whether on Unix or Windows has jerry-rigged its data infrastructure in many stressful iterations during periods of exponential growth. That kind of growth is a nice problem to have, but do we really have to believe it must come with huge technical growing pains in scalability and availability?</P>

<P>Along comes <A href="http://code.google.com/appengine/">Google App Engine</A>. Google realized that truly solving the pain involved a compromise which makes the Google App Engine datastore different from normal databases and inappropriate for some kinds of applications. But actually it is likely to be great wherever there are potentially huge data needs. The Google App Engine datastore is based on BigTable and has 2 chief advantages over traditional database technologies like Oracle and SQL Server:</P>

<LI>its schemaless design makes it easier to develop and evolve your application</LI>
<LI>its transaction limitations enforce a scalable design in your application from the start</LI>

<P>It is unavoidable that the transition from traditional databases will slow adoption of Google App Engine, even though its better-suited features are sure to eventually replace those of traditional databases in web development.</P>

<H4>Inside Google</H4>

<P>One of the barriers faced by a web-based micro ISV or startup is getting customers to create yet another account.</P>

<P>Microsoft tried valiantly with its "passport" technology (now <A href="http://www.benpoint.com/https://accountservices.passport.net/ppnetworkhome.srf">Live ID</A>) to get web sites to re-use a Microsoft managed account, but there are inherent challenges in the external integration. Google offers a refreshingly simple answer through Google App Engine that needs no explanation: have all the apps that use Google accounts run inside Google! Why not?</P>

<P>Actually, except for the Orwellian connotations, running your application from inside Google offers <A href="http://video.google.com/videoplay?docid=-6886425545714813153">a lot of benefits</A> to small entrepreneurs who through economies of scale can cheaply have as good an infrastructure as the big leaguers (maybe better):</P>

<LI>Google App Engine keeps your application on multiple servers in different locations for high availablility.</LI>
<LI>It even keeps revisions of your application so you can rollback to a previous safer copy when a problem is discovered.</LI>
<LI>They take care of load balancing, adjusting for hot spots and sudden increases in traffic.

<P class=standout>That means no scrambling to amp up your servers the day you make the front page of the journal all your customers read.</P>

<H4>They just need good execution...</H4>

<P>This is all very promising but of course Google can still mess it up if it does not focus on maturing its app engine platform so developers can build complex applications. This doesn't mean babying customers with all the languages and frameworks they are requesting, but rather exposing all of the capabilities of a web server within the necessary confines of the sandbox and keeping it secure and reliable. Currently their Python SDK works very well, however it remains to be seen how development of complex applications goes and when the first large scale GAE apps come out.</P>

<P>I started this blog 2.5 years ago in the wake of Hurricane Katrina with an <A href="http://www.benpoint.com/googleearthrocks.htm">article about Google Earth</A> which is a product that remains singularly amazing. Now, Google App Engine is positioned to change web development and the Internet. Good going google!</P>

<P>The breath-taking simplicity of this new paradigm makes current web platform and database options look antiquated. I predict that in five years Google will be dominant in web application hosting and in just 10 short years their BigTable based datastore will eclipse the Oracles and SQL Servers.</P>

<P class=notetop></P>
<P class=notetext><img src="http://www.benpoint.com/comment.bmp"/> Amazon's Elastic Compute Cloud (EC2) and Simple Storage Solution (S3) are still firmly planted in current web development technologies. In the Amazon case, web apps use current databases and development technologies while shoring this up with keyed storage via the S3 webservice and hosting apps on EC2 virtual server clouds. It is a sign of the revolution, and its strength is in leveraging current technologies, but it is not a new answer to the problem like Google App Engine is.</P>
<P class=notesig>note by original poster Ben Bryant, 15 Apr 2008 08:40:00 -0500</P>

<P class=commenttop></P>
<P class=commenttext><img src="http://www.benpoint.com/comment.bmp"/> Hi Ben, I really enjoy your comments over at the App Engine group. With no books yet, that is the best way to learn - by reading what others are doing! Being only a hobbyist, I develop for fun, and create tools to use in my day job, which is building design and construction. However, after struggling with setting up a slice and dealing with all the database backup and security worries, I, too immediately saw the power of Google's move. Another part of the package is being in at the earliest stages of a new paradigm. Rails was a done deal when it was released, Django was developed in private, and Python is already mature, so this is a good opportunity to see how things really happen, and to influence the direction of a world-class movement. Best to you! g</P>
<P class=commentsig>submitted by G-man, 27 Jul 2008 18:26:00 -0500</P>



]]></description>
</item>
<item>
<title>Anonymous Posting is the Backbone of the JOS Forums</title>
<link>http://www.benpoint.com/anonymousposting.htm</link>
<guid isPermaLink="false">anonymousposting.htm</guid>
<pubDate>Fri, 21 Mar 2008 01:00:00 GMT</pubDate>
<category>Business of Software</category>
<description><![CDATA[


<P><IMG src="http://www.benpoint.com/viewing.jpg" border=1 align=right alt="taken by Thibodeau">A recent example of thought grooves at work -- or groupthink -- was spawned by <A href="http://www.joelonsoftware.com/items/2007/07/20.html">Joel's post where he railed against anonymous posting</A> as the bane of discussion groups.</P>

<P class=quotation>"Frankly if every anonymous post disappeared from the Joel on Software discussion group, the overall quality of the conversation would go up, way up, and the discussion would be way more interesting."</P>

<P>I'm a fan of Joel's writings, but in this case he couldn't be more wrong. Funny thing is how he could start with <A href="http://www.scripting.com/2007/01/01.html#theUneditedVoiceOfAPerson">Dave Winer's argument about personal blog comments</A> (which I whole-heartedly <I>agree</I> with) and then draw the wrong conclusion about forum posts and have all of the resulting discussions fall completely into this thought groove.</P>

<P>All of the discussion following Joel's post centered around "the problem" of anonymous posting, and the higher quality of a discussion limited to logged on posters. They also argued about whether mandated logons would be abused or be inconvenient and so forth, but few glimpsed the yawning chasm of irrational leap under this notion that anonymous posting hurts Joel's forums.</P>

<P>Let's break this down in order to observe the thought groove in action:</P>

<OL>
<LI>Anonymous posting sometimes results in more trolls, spam and careless comments</LI>
<LI>These are bad, therefore they hurt these open discussion forums</LI>
<LI>Therefore these forums would be better without anonymous posting</LI>
</OL>

<P>Woops! The last leap is the unfounded one. Due to the sheer volume of comments weighing in and quibbling over trolls and spam, everyone ignored my feeble attempts (and those of a few others) to point out the importance of anonymous posts.</P>

<P class=standout>That's groupthink when a contrary yet simple point cannot be heard over the din.</P>

<P>So to get more facts I've gone ahead and taken a sample of 131 <A href="http://discuss.joelonsoftware.com/?joel">Joel On Software Discussion Group</A> posts and broken them down according to whether they were anonymous or not. I used strict criteria to determine whether a poster is anonymous. If a logged out poster provides a protected e-mail link, he is not considered anonymous, even though there is no way a reader can identify him. Anonymous posts are strictly posts where the tagname is empty or plain text, i.e. no link, no protected e-mail button, and no logon checkmark. Feel free to e-mail me for the full data in XML format.</P>

<UL>
<LI><B>Total posts examined:</B> 131, total comments: 2242</LI>
<LI><B>Anon posts:</B> 86, comments 1478 (avg 17)</LI>
<LI><B>Identified posts:</B> 45, comments 764 (avg 17)</LI>
</UL>

<P>Wow, significantly more anonymous posts! And based on thread size (number of comments) the anonymous posts generate the same average interest as the others! If I included anonymous posters with only a protected e-mail button, the dominance of anonymous posting would have been even more clear.</P>

<P>The anonymous posts are often generated by people who logon for other posts. Why are they anonymous for some and not for others? Obviously it is because some topics are different from others; some are better kept anonymous. Here are some examples of anonymous posts where I show the title of the post, the anonymous tagname the poster used and the number of comments generated.</P>

<P>A lot of valuable anonymous posts give insights into goings on at work, e.g.</P>

<UL>
<LI><FONT color=blue>I am being setup as the fall guy</FONT> <I>Anony for this, of course</I> (14)</LI>
<LI><FONT color=blue>Stupid interview question, courtesy of Wendy's</FONT> <I>Just back from lunch</I> (30)</LI>
<LI><FONT color=blue>Pronouncing people's names from other countries/languages</FONT> <I>Cat's Got My Tongue (for this one)</I> (29)</LI>
</UL>

<P>Another valuable category is those letting off steam or in turmoil:</P>

<UL>
<LI><FONT color=blue>Gmail Stupidity… (Receiving someone else's mail)</FONT> <I>Anon Ranter</I> (27)</LI>
<LI><FONT color=blue>i almost give up</FONT> <I>family IT person</I> (22)</LI>
</UL>

<P>People who understandably don't want to link themselves to a wish or self-judgement:</P>

<UL>
<LI><FONT color=blue>What's a guy gotta do to make some money in this field?</FONT> <I>Kramer</I> (88)</LI>
<LI><FONT color=blue>Expected Salary</FONT> <I>Paul</I> (20)</LI>
<LI><FONT color=blue>Best way to convey pattern knowledge on resume</FONT> <I>Wannabe architect</I> (7)</LI>
</UL>

<P>Also there are posters who want to share sensitive revenue information or Micro-ISV internals, and many other kinds of posts that absolutely should be anonymous so the poster can discuss the subject freely. It is also useful how the tagname can be used to set a frame of reference for the original poster who is effectively moderating the thread, e.g. "family IT person."</P>

<P>You could argue that if you disallowed anonymous posting, then those with something valuable to say would step up and logon even though they might still use an anonymous tagname without a link. Adding inconvenience is a troubling and sensitive hot button issue in web sites, and would it actually serve the declared purpose if they are logged on and yet still essentially anonymous? Messing with such a large majority of the posting activity on the forums is also a big concern. Does a quieter forum continue to attract new readers and first time posters?</P>

<P class=standout>For me, and for many like me, chiming in with personal experience is out of the question if I have to attach my identity to it for any google search to pull up! Yet it is a valuable contribution, in fact moreso <I>because</I> it is anonymous.</P>

<P>So it is very interesting that the general consensus was that eliminating anonymous posting would improve the quality of the site's discussions when it really is a questionable conclusion. Now if this had been a discussion about the means of filtering spam and trolls by using logons or captcha to limit contributors, then it might have made sense to focus on anonymous posting as a problem (though that kind of site policy discussion is forbidden on the JOS forums). But it wasn't that at all. It was a discussion based on the idea that a user who wasn't willing to put his identity behind what he said online was not a valuable contributor to the discussion. This ignores the tremendous value of anonymous posting.</P>

<P>The Joel On Software forums provide a free and high quality venue for posting both anonymously and not, depending on the context. It would be absolutely devastating to the forums if anonymous posting was disallowed.</P>

<P>I think that when Joel said his forums would be better without anonymous posts he was failing to see that open forums serve a different purpose than personal blogs. One way to say it is that a blog is moderated by one person providing a certain consistency but also limited by that, while a forum offers a less directed but potentially fruitful gathering of many. Anonymous posting is a key feature of open forums.</P>

<P class=standout>I'd like to see Joel acknowledge he was wrong on this, but since he cannot do it anonymously, I doubt he will.<BR>:)</P>

<P class=notetop></P>
<P class=notetext><img src="http://www.benpoint.com/comment.bmp"/> actually, the reason he won't respond is because he'll never read this. :) I just thought it was funny to end that way.</P>
<P class=notesig>note by original poster Ben Bryant, 21 Mar 2008 01:01:00 -0500</P>

<P class=notetop></P>
<P class=notetext><img src="http://www.benpoint.com/comment.bmp"/> some talk radio shows thrive on anonymous callers who can tell extremely personal stories honestly by virtue of being anonymous, while other radio shows only have invited guests. Both types of shows have their place. This dichotomy has some similarities to the comparison online between open discussion forums and personal blogs, though you can have closed forums, and blogs built around anonymous posting too. The point is that we see the value of anonymity in certain types of radio shows, so we can understand its value in open forums too.</P>
<P class=notesig>note by original poster Ben Bryant, 21 Mar 2008 12:45:00 -0500</P>




]]></description>
</item>
<item>
<title>The Devil Is In The Integration... Details</title>
<link>http://www.benpoint.com/integration.htm</link>
<guid isPermaLink="false">integration.htm</guid>
<pubDate>Wed, 27 Feb 2008 17:00:00 GMT</pubDate>
<category>Software Design</category>
<description><![CDATA[


<P><IMG src="http://www.benpoint.com/packages.jpg" border=1 align=right alt="taken by O'Rourke"><A href="http://en.wikipedia.org/wiki/System_integration">System integration</A> is simply the <em>most difficult</em> part of programming. The engineering challenge of bringing together components to build a good product is often underestimated.</P>

<P class=standout><B>Get this:</B> developing software will just be a matter of plugging intelligent components together.</P>

<P>This claim comes up often in discussions about the current and future state of software development. It is the recurring dream of component-based development where pieces of software can essentially figure out what a programmer wants because other programmers have planned ahead. It is the wishful thinking of <A href="http://www.joelonsoftware.com/articles/fog0000000018.html">architecture astronauts</A> and people who trivialize the hands-on design and redesign stages of development.</P>

<H4>Integration problems are not obvious</H4>

<P>You cannot design two adjacent pieces of a car in isolation; they are interdependent and you must integrate them. Even if they do not touch they must allow room for each other and account for things emitted like heat or condensation. That is a big challenge because it involves knowing the required capabilities and the needs of each piece. And the more interdependent pieces you have, the bigger the integration matrix.</P>

<P class=standout>Everyone can see your cool skinnable app, but no one can see that you had to re-implement your cool spinner control because it was incompatible with your skinning technology.</P>

<P>Integration is often the part of the problem that is not immediately apparent. The part that takes all the time, but for which you get no credit.</P>

<H4>Reusing source versus binary</H4>

<P>Generally you want to reuse as many pre-existing technologies as possible. Developers always caution against "re-inventing the wheel." To reuse something always involves integration, but there are different levels. One clear distinction in programming is source versus binary. Integrating with a source technology is always less risky, because you can see what you are integrating without depending on documentation, and you can fix it without depending on another party.</P>

<P>A car maker does not design a windshield wiper timing mechanism from scratch, but reuses (borrows or licenses) technologies and inventions into their design not as prefabricated hardware, but as bits of expertise much like source code.</P>

<P>When deciding what to reuse you should consider the integration costs. If you are taking responsibility for making your product work and it depends on an unfamiliar third party binary "black box" component, it is a risk that should only be taken knowingly and if there is no better alternative. There are also many binaries we know and trust, such as Win32.</P>

<H4>Doing it yourself can be cheaper</H4>

<P>Even though the windshield wiper mechanism (the mechanical part, not the blades) sounds like a great candidate for a "plug-and-play" generic part of a car, every manufacturer still implements its own to integrate with the form and function of their own vehicles. They could outsource this part but the communication and team interdependencies during design iterations and implementation troubleshooting would likely be too costly.</P>

<P>Don't you think the software job title of "Solutions Integration Architect" is curious? I probably even applied for a job with that title once. No doubt the position came into being due to the idea that useful software can be architected by identifying components that will meet requirements and then integrating them together. But it is dangerous if it leads one to assume that integrating pre-designed components is always easier than building custom components.</P>

<H4>The #1 dev problem at Microsoft</H4>

<P>In <A href="http://moishelettvin.blogspot.com/2006/11/windows-shutdown-crapfest.html">The Windows Shutdown crapfest</A>, Moishe Lettvin shows that the interdependence between his team and the shell and kernel teams brought design and implementation of the Start Menu to a standstill.</P>

<P>The problem is not that no one was given the power to make the decision because even if a decision was made, it could eventually be overruled by the realities of the software architecture. It is not necessarily the number or quality of people as <A href="http://www.joelonsoftware.com/items/2006/11/24.html">Joel seems to indicate</A>, it is the interdependence or intersection of the responsibilities of the teams established by the architectural design they've inherited.</P>

<P class=standout>To make matters worse, Microsoft has pursued architectural choices like COM and .NET which escalate integration hurdles into the realm of deployment, rather than making programs more modular and independent.</P>

<P>COM is supposed to offer modular object oriented development and yet it ties your hands with respect to the most sensitive aspects of modularity -- versioning and side-by-side installation. Few if any COM components are shipped bug free, but a tool which ships with a 3rd party registered COM DLL cannot be installed without affecting a separate and unrelated tool installed with an earlier version of the same 3rd party COM DLL.</P>

<P>In <A href="http://discuss.joelonsoftware.com/default.asp?biz.5.597658">.NET improvements for MicroISVs</A>, a Microsoft representative admits the challenges of integrating .NET into your product installation. I've also been involved with trying to deliver a .NET component with other products both non-.NET and from other .NET versions. Imagine asking a user to install 2 versions of the .NET platform from one install! (We didn't, but we have more work to rebuild the component for different versions of .NET.) And in another post, a Microsoft program manager tells developers <A href="http://blogs.msdn.com/junfeng/archive/2005/11/18/494572.aspx">not to use .NET to develop shell extensions</A> because the .NET version may differ from another loaded for a different handler.</P>

<H4>Integration is the primary risk in managing a project</H4>

<P>Integration roadblocks often rear their ugly heads late in the game. After the obvious requirements are satisfied you get stuck with putting out the fires of unforseen integration issues. This happens with 3rd party components and libraries such as a migration tool that has install requirements that conflict with another 3rd party tool, or a 3rd party binary that has a bug that shows up after field testing. It also comes up in projects that use multiple frameworks like a web site with Java, Resin, Webwork and Freemarker when a feature of one is undermined by a workaround in another.</P>

<P>All these problems stem from earlier architectural decisions that ignore the primacy of the integration problem. These decisions end up causing developers to spend their time solving problems of integration, rather than bugs and features that end users are concerned with.</P>

<P>There is no more fundamental impact on development productivity than this class of problems, and this was instrumental in the <A href="http://www.benpoint.com/itdeathmarch.htm">Death March in an Information Technology Project</A> story, and awareness of this problem underpins <A href="http://www.benpoint.com/market.htm">The Market Software Development Paradigm</A>. Good software architecture's primary concern is setting up team responsibilities and framework/component choices that maximize independence.</P>




]]></description>
</item>
<item>
<title>Sorry, Ideas Aren't Worth Much</title>
<link>http://www.benpoint.com/notworthmuch.htm</link>
<guid isPermaLink="false">notworthmuch.htm</guid>
<pubDate>Thu, 15 Mar 2007 02:00:00 GMT</pubDate>
<category>Business of Software</category>
<description><![CDATA[

<P><IMG src="http://www.benpoint.com/going.gif" border=1 align=right>If you have 3 or more ideas it feels like you are bursting with ideas. If you have 10 or more ideas you'll probably say you have a "million" ideas. Why? Because ideas are like trees with branches reaching out into the sky in so many directions. Each idea has so many possibilities it doesn't seem to have boundaries, and so the effect of ideas in your brain is overwhelming. For budding entrepreneurs with active imaginations it can be hard to see the forest for the trees.</P>

<P class=standout>Some will insist that a good idea is priceless. But I am talking about business ideas. A business idea creatively connects your real circumstances with a real possibility of turning a profit. Such an idea is valuable only in the sense that the first step in a marathon is essential.</P>

<P>People assume it goes like this:</P>

<OL>
<LI>Entrepreneur gets Idea</LI>
<LI>Entrepreneur puts it into action</LI>
</OL>

<P>But this is a terribly inaccurate way of describing the process. To explain why it is misleading, let me go through a few things first.</P>

<H4>Keeping the idea a secret</H4>

<P>One of the common instincts when you have what you think is a great idea is to keep it secret. If you discussed it in a forum, why then everyone would jump in like a pack of, let me see, not a pack of wolves, that wouldn't be right, this is about creating, not devouring. I want a metaphor that evokes something trained and ready, waiting for that one single chance to build something amazing.</P>

<P class=standout>What is that animal in nature that sits for days and days, scanning the landscape, waiting to discover a great idea for what to create? There is no such thing! In nature, animals wait for something to eat, not something to create.</P>

<P>There are people who sit on their butts looking out for that next great idea, but you'll notice that if they do like an idea it is never quite perfectly suited to them and they soon grow disillusioned with it. People who can truly create things are already busy creating things, so busy in fact that they will not likely be able to change course and shift all that momentum because of someone else's bright idea.</P>

<H4>Looking for an accomplice</H4>

<P>Sometimes you have an idea and you even have something started and you feel you just need someone to understand your dream and put great passion into helping promote it and bring it to reality. Actually I think to some extent everyone hopes for this at some point. But again I don't recall reading a single story where this happened, except perhaps the one where Simon Peter dropped his not unprofitable fishing business to dedicate his life to the new purpose he had just discovered.</P>

<P>Your partners will be partners due to relationships and coinciding circumstances, <I>not</I> due to your idea.</P>

<H4>Are you really an entrepreneur?</H4>

<P>Creative people are rarely idle. They are trying to accomplish something, tinkering with a car, painting or planning excursions. Creative people are not necessarily entrepreneurial.</P>

<P>I think you know if you're an entrepreneur at heart. When you were a kid you were the one who sold lemonade out front; you advertised to draw signs for a small fee; held a raffle at a family event to help pay for that go-cart. And in each case you had discussions with adults about the monetary logic behind it all. Hey! You were already negotiating with potential board members!</P>

<P>And you rarely created anything you were proud of without wondering if you could make your first million off of it.</P>

<H4>A buffet of ideas</H4>

<P>Benji Smith challenged himself to blog about <A href="http://benjismith.net/index.php/2006/06/08/30-days-30-ideas/">30 ideas in 30 days</A> in an effort to decide which idea to focus on (he felt compelled to explain the thinking behind the ideas to show they weren't flippant, so it took longer than 30 days). The other reason he did it, I suspect, was just to show how <I>many</I> legitimate ideas one could have and how ideas are the easy part. Well, he finally made a <A href="http://benjismith.net/index.php/2006/08/12/some-wistful-thoughts-and-a-decision/">choice</A> and later <A href="http://benjismith.net/index.php/2006/10/28/the-new-decision/">a new choice</A> and who knows where it will lead.</P>

<P>Reading about other peoples' ideas and business stories helps you to recognize what makes for a good idea. Even your own ideas might be ones that someone else could do better than you. Ultimately the best idea for you is going to come from what you're already doing. The key to a good business idea is that you have a unique opportunity to execute on it, and the best place to look is in what you've been doing recently. Yes, you're a software developer, but what specific project captured your interest, had you so fascinated you couldn't stop working on it?</P>

<H4>Idea versus execution</H4>

<P>If an idea is truly right for you and your circumstances, then you will have the fascination with it necessary to execute on it, and it is unlikely that anyone else will be in a position to hear about it from you and execute on it better than you.</P>

<P>You'll see it discussed a lot, that "it is all in the execution." It is a common response to would-be entrepreneurs who go off every second like firecrackers, they've got the next big idea, the next hot thing, and its just hanging there like ripe fruit for the plucking. Then nothing happens.</P>

<P>I regularly run across what I think are fabulous ideas. So often that it can actually be an obstacle to getting other things done as I consider the possibilities. Someone will get together with me and discuss an idea hoping I will magically find an abundant as yet undiscovered reservoir of time I didn't know I had.</P>

<H4>Actually, there is no "Idea" with a big I</H4>

<P>Although in some cases there might be what could be considered an "initial" idea, there was probably already something before that. In truth, there is really no "Idea" with a capital I, there is really only a steady stream of execution constantly adjusted according to a steady stream of ideas.</P>

<P>At the top I said this was inaccurate:</P>

<OL>
<LI>Entrepreneur gets Idea</LI>
<LI>Entrepreneur puts it into action</LI>
</OL>

<P>The real story goes more like this:</P>

<OL>
<LI>Entrepreneur has many projects hobbies and contacts</LI>
<LI>Entrepreneur discovers a genuine prospect in amongst these</LI>
<LI>Entrepreneur puts his full attention on it</LI>
<LI>It changes, perhaps one facet of it becomes the main focus</LI>
<LI>Entrepreneur keeps at it</LI>
</OL>

<H4>Ideas are not worthless</H4>

<P>The purpose of this is to temper your sense of the value of an idea. Of course an idea is priceless in the sense that so many of the blessings we experience in life are priceless. But for an entrepreneur, business ideas are like a fluid running in and around (and coming out of) the things we do. The milestones are built on actions, not ideas.</P>


]]></description>
</item>
<item>
<title>How Not To Achieve Business Success</title>
<link>http://www.benpoint.com/success.htm</link>
<guid isPermaLink="false">success.htm</guid>
<pubDate>Thu, 15 Mar 2007 02:00:00 GMT</pubDate>
<category>Achievement</category>
<description><![CDATA[


<P class=standout>the key to achieving business success<BR>
...is to be good at it.</P>

<P><IMG src="http://www.benpoint.com/attitude.gif" border=1 align=right>Are you tired of smug successful people expanding their fame and success by publishing articles about how to become successful?</P>

<P>And it all comes down to this: <B>be really good at it!</B> How helpful is that, really? Oh yes, they mix it up with lots of catchy turns of phrase, like "<A href="http://www.stevepavlina.com/blog/2007/01/10-business-lessons-from-a-snarky-entrepreneur/">Fail your way forward</A>" suggesting that they made lots of mistakes along the way. Did they really? I kind of doubt it. I think their mistakes are just little post-it notes on their unstoppable march to a destiny of success.</P>

<P>Thousands of blog posts tell us how to build a blog into a revenue generator, and yes we eat it up: the best ways to go laughing all the way to the bank on one blog post per day. Can you stand a guy who <A href="http://www.stevepavlina.com/blog/2006/07/10-reasons-you-should-never-get-a-job/">says</A> having a job is dumb and he's making $40000 per month on his $9 blog while he spends time with his family? Let's face it, I can write, but I can't write like that; my strengths lie elsewhere. And please stop telling us to create income generating systems. It is insulting! Don't you think we will, just as soon as we figure out how?</P>

<P>Hanging on every word of <A href="http://www.joelonsoftware.com/articles/HighNotes.html">Joel Spolsky</A> (my favorite software industry inspiration) is no better. As he exposes his journey of building a software startup into a success he makes it all sound so sensible and straightforward. Does that help me? No, not a bit. It has been interesting to watch but nothing that he did has worked for me.</P>

<P>Some people might say Joel is an inspiration to them. Knowing about him may indeed be an inspiration, but that is different from following his advice or trying to do what he does. I hope I am failing to be perfectly serious here, but might I suggest that the things that worked for these people were likely specific to <I>their</I> strengths and the specific opportunities <I>they</I> encountered along the way?</P>

<P>What is ridiculous too is the thousands of get rich books and schemes on the market that make the authors richer, complete with TV infomercials full of laughable customers prepped and glamorized to help you make believe they're the next Donald Trump.</P>

<P>Oh yes, and Donald Trump and his advice to <A href="http://www.trumpuniversity.com/connect/newsletters/itt/issue01.cfm">"love what you do."</A> Mr. Trump, do I love buying and selling companies and real estate? No I don't. Okay fine, it is valid advice if you read the small print, but my rant is this: who are you, Mr. Trump, to tell anyone how to be successful?</P>

<P class=standout>Oh yeah sure. Follow these 10 steps, get organized, be consistent, unlock your potential, blah blah blah. If we could really do this beyond 10 minutes of motivated euphoria, wouldn't we already?</P>

<P>When I was ten I climbed onto the roof of my house (where we weren't allowed) with my bad boy cousin Todd while my parents were away. And we were talking about how to jump down onto the balcony which was an 8 foot drop from the eaves (nothing dangerous). Well we were both hanging from the eavestrough when my parents drove into the driveway. My cousin bravely dropped but I didn't dare and no matter how he tried to convince me I was too petrified to let go. So my dad found out where we'd been (and he "rescued" me too).</P>

<P>But in case you missed the point, yeah my cousin was able to do it; he was successful in dropping to the balcony undetected. But so <I>who</I> was <I>he</I> to try and tell <I>me</I> I could do it? <I>He was the brave one.</I></P>

<P>What I am saying should be completely obvious at this point (if I could write worth anything): who are successful people to tell you and me how to be successful? They're successful, so in that respect <B>they're not like us.</B> And therefore they can't tell us how to be successful.</P>

<P class=standout>In fact the specific thing on which they are lecturing us is precisely the thing on which they have nothing in common with us!</P>

<P>You and I can be successful but let's not look for instructions from the juggernauts of success. Seriously, would you ask the most popular kid in school how you can be popular?</P>

<P>All these success messengers truly defeat the purpose of achieving success. They distract us. They reinforce the fact of what we don't have, they remind us of what we are not: <I>successful</I>.</P>

<P>So I am going to do myself a favor and tune them out. And I invite you to do that too. And yes, I am the right person to suggest you do that because I am just like you, I have been completely unsuccessful at it.</P>

<P class=notetop></P>
<P class=notetext><img src="http://www.benpoint.com/comment.bmp"/> see discussion at Joel's forum:<BR><A href="http://discuss.joelonsoftware.com/default.asp?biz.5.465377">http://discuss.joelonsoftware.com/default.asp?biz.5.465377</A></P>
<P class=notesig>note by original poster Ben Bryant, 15 Mar 2007 15:29:00 -0500</P>




]]></description>
</item>
<item>
<title>Lessons from the Army Budget Office</title>
<link>http://www.benpoint.com/abo.htm</link>
<guid isPermaLink="false">abo.htm</guid>
<pubDate>Thu, 15 Feb 2007 20:00:00 GMT</pubDate>
<category>Software Design</category>
<description><![CDATA[

<P>I worked for a contractor in the <A href="http://www.asafm.army.mil/budget/budget.asp">Pentagon Army Budget Office</A> in and around 1995. Few of my projects have been as successful as this one, and it was also unique for me because I spent a lot of time working directly with the customers, learning their way of doing business, i.e. collecting requirements.</P>

<IMG src="http://www.benpoint.com/ww2mem.gif" align=right />

<P>The ABO has an annual schedule that revolves around U.S. budget cycles, and they have both civilian and military personel working together on budget coordination. As I recall there was a staff of about 5 and then about 15 analysts would be there at headquarters during crunch time, and many more people were involved.  The coordination in the ABO involved gathering and working with lots of forms filled out by people at the field offices as well as the decisions made in budget meetings.</P>

<P>During certain times of the year it became pretty hectic as they put together the issues and decisions that were the basis for the large budget books that would end up being combined with other branches of the Department of Defense and ultimately with all the programs under the U.S. government.</P>

<P class=standout>The software we built to help coordinate this was primarily in Microsoft Word using the language WordBasic.</P>

<P>Word was in many ways an excellent solution because it allowed precise simulation of the age-old forms the Army has been using for decades, and through Word's template feature it could be distributed merely by sending the document via e-mail, since all of the machines already had Word installed. The WordBasic software was able to help calculate and check values in tables, enforce naming conventions, and also run reports and combine and merge documents.</P>

<P>They saw a great improvement over programs they'd seen elsewhere or in the past. Typical solutions had to be installed and expected you to enter information through dialogs that did not closely resemble the standard forms. And the other alternative to dialog-based applications, forms packages, did not have the kinds of page breaking and dynamic row breaking and table column headings that Word had. Some other budget forms were done in Excel though Excel neither supported text entry well nor closely resembled the original forms.</P>

<P>But the Word-based solution was not all perfect. There were limitations with respect to controlling and guiding the input. While it was great to allow users to use their familiar Word processor to change font, bullet and bold text and so forth, there was no user friendly way to limit or standardize this usage. It was also very slow and clunky. Reports involving hundreds of pages would take hours.</P>

<P class=standout>And we had quite a scramble when the first Word virus burst onto the scene in the summer of 1995, remember that?</P>

<P>Some people felt that our solution should have done more in terms of the work flow. But I felt that at that stage on a tight IT budget, trying to institute conventional work flow software would have added a rigidity to the system that would have stood in their way. Users e-mailed documents to each other and even sent them on diskette, so that in those cases they were ultimately responsible for ensuring the right versions were submitted. The team also used frequent e-mail notices as well as a bulletin board on the wall to help coordinate activities.</P>

<P>The document-based system was ideal for flexibility. Shared folders on the LAN were used by WordBasic to submit documents where WordBasic tracking reports were run on the administrator's machine to summarize status, and merge pieces of documents. The simple architecture meant that workarounds and ad hoc adjustments were intuitive to the team because they understood the folder organization of documents and could access them with Windows Explorer.</P>

<P>By utilizing Word for Windows, e-mail, and familiar ways of using computers, training was minimized and they were able to concentrate more on the actual work than wrestling with the software. The staff really appreciated the fact that although the system did not automate everything it rarely stood in their way, and this was the key to success in that ad hoc environment.</P>





]]></description>
</item>
<item>
<title>The Market Software Development Paradigm</title>
<link>http://www.benpoint.com/market.htm</link>
<guid isPermaLink="false">market.htm</guid>
<pubDate>Wed, 16 Aug 2006 02:15:00 GMT</pubDate>
<category>Business of Software</category>
<description><![CDATA[


<P>"<A href="http://en.wikipedia.org/wiki/Agile_software_development">Agile</A>" and "<A href="http://en.wikipedia.org/wiki/Iterative_development">Iterative</A>" techniques have gained favor and even to some extent become part of the software development establishment. But they have not impacted large (team of 50+) information technology projects which gravitate to variants of the "<A href="http://en.wikipedia.org/wiki/Waterfall_model">Waterfall</A>" methodology and BDUF (Big Design Up Front). From <A href="http://en.wikipedia.org/wiki/Agile_software_development">Wikipedia</A>:</P>

<P class=quotation>Agile methods are often characterized as being at the opposite end of the spectrum from "plan-driven" or "disciplined" methodologies. This distinction is misleading, as it implies that agile methods are "unplanned" or "undisciplined." A more accurate distinction is to say that methods exist on a continuum from "adaptive" to "predictive."</P>

<P class=standout>Developers tend to agree that the more adaptive methodologies don't scale well to large projects. I am proposing the Market Paradigm as a means to scaling these adpative techniques to large projects.</P>

<P>Even when the adaptive terminology is borrowed in the context of a large project it is likely to be subverted just like the "iterative" approach was disingenuously invoked as a last ditch effort in the <A href="http://www.benpoint.com/itdeathmarch.htm">Death March in an Information Technology Project</A>. Here I talk about the potential of swinging to the opposite end of the spectrum from these predictive monoliths to a laissez-faire approach that brings about accelerated results through marketplace forces.

<h4>Market forces</h4>

<P>Before talking about specific software methodology, think about how progress is made in the industry at large. In a FORTUNE Magazine article entitled <A href="http://money.cnn.com/magazines/fortune/fortune_archive/2005/12/12/8363107/index.htm">Quoted Often, Followed Rarely</A>, Daniel Roth interviews Fred Brooks who wrote the seminal book <A href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&tag=benpoint-20&camp=1789&creative=9325&path=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F0201835959">The Mythical Man-Month (1975)</A>. In talking about open source Fred Brooks says:</P>

<P class=quotation>A second big advantage is that multiple versions of any particular component gets built, and the marketplace votes on them. In many cases one wins out. In many cases, one doesn't, and different versions circulate. That's confusing, and you get compatibility issues... Would you want to build an air-traffic-control system that way? The answer is no. That task requires a tighter degree of integration. Whereas when the community is building tools for itself, it's advantageous to have different people, with different ideas of what they want to build, build it, and then let the market vote.</P>

<P>I doubt I am alone in hearing occasional remarks about bringing "capitalist" forces to bear in software development. People will talk about how a little competition or meritocracy can help, that the re-use of a component or service can be left to depend on whether others find it useful and want it rather than by mandate from leadership.</P>

<h4>The reality of waste</h4>

<P class=standout>But the main obstacle to an acceptance of any <I>real</I> free market mechanisms within a single large project is the knee-jerk rejection of a model that accepts or expects what appears on the surface to be "waste".</P>

<P>Unfortunately I think that the lesson was not learned by the majority of people involved in the death march IT project I wrote about or others like it. Many will simply conclude that the primary methodologies were not at fault, it was simply a problem of execution. Well yes it was a problem of execution, but I would go a step further and say that these methodologies are <I>prone</I> to the abuse and failure that occurred here, and therefore we need to adapt a new approach that expects certain failures and waste in order to harness more natural human productive potential.</P>

<P>Waste is the Gorilla in the closet (the <A href="http://www.benpoint.com/mountains1.htm">Mountains of Discarded Software</A> I wrote about 7 years ago). Waste is all around us but generally ignored and explained away. A truly affective approach will recognize the realities and work together with the real human dynamics involved. The 3 laws of human nature in software development are:</P>

<OL>
<LI>We are better at "hands-on" than design-by-meeting</LI>
<LI>We are better at our little corner than comprehending the whole</LI>
<LI>We are better at adapting than predicting</LI>
</OL>

<P>I'd be rich if I had a dollar for every time a manager said something like "research it, mock it up, prototype it, but don't actually start implementing anything yet!" The desire to control your work and the fear of wasted effort has put them into a state of denial about how software actually comes about! And I'd like another dollar for every time a prototype grows directly into an end product.</P>

<h4>Micro managing independent teams</h4>

<P>Large projects generally at least give lip service to the idea of "independent" teams or modules. The understanding is that the overhead of communicating within a team grows exponentially as the size of the team grows. So teams are organized according to areas of tight integration, separating teams where there can be loose integration.</P>

<P>In "<A href="http://www.benpoint.com/machine.htm">Building the Machine That Will Build the Machine</A>" I described the problematic tendency in our industry towards architectural frameworks. This tendency turns the integration effort into a counterproductive effort, meddling in the progress of the various teams for the sake of avoiding reinvention and inconsistencies. You are in trouble when project leaders talk about "independent" modules within their architectural framework, and yet every single thing they do increases the interdependence of the modules in the architectural framework!</P>

<P>The problem is that you simply cannot <I>impose</I> a framework if you're going to have truly <I>independent</I> modules. Despite this truism, most people claim that as long as the architecture is well-designed you will be all right. The hope is that by giving up a measure of independence you gain efficiences. But the better answer is not as far off as you might think. You can <I>offer</I> framework-like features instead of <I>imposing</I> them, and suddenly you've turned the tide in your favor.</P>

<h4>Real independence</h4>

<P class=standout>That's it! With a rather small tweak you change a restrictive micro managing intervention into an empowering opportunity. The problem many will immediately point out is that these framework-like features might not get used, and every team might end up "reinventing the wheel."</P>

<P>When a software component made available by one team is not used by another team, it is rejected because it is not adequate, it is not ready, or it is not worth it. The third one is often the hardest to stomach. Every integration involves jumping through a hoop -- a hoop that needs to be maintained over time. A team that properly takes responsibility for its own progress will weigh the benefits and costs, and the costs of incorporating an externally developed component should not be underestimated. Managers love the word "re-use" but it is costly to force it where it doesn't belong.</P>

<P>With the good kind of team independence comes the good kind of distributed responsibility for productivity. Independent teams will use their ingenuity to come up with a working solution rather than waiting to implement pre-designed pieces sent down from above. And that freedom to create solutions brings unrivaled productivity.</P>

<P>The "Market" masterplan is not a micromanaging one; it grows out of the confidence that five independent teams of 10 people will be an order of magnitude more productive than one team of 50 -- so much more productive that you can stand to throw away half of their stray work and still be much much better off.</P>

<h4>A consistent product</h4>

<P>But there is another legitimate concern: the concern for a consistent end product. The reality is that certain kinds of consistency are overrated. Consistency of the end product should be envisioned with an eye to the productivity of the end user, but not in a way that restricts the explosion of creativity and progress that the Market methodology can nurture.</P>

<P>Windows Office is safely the most-used suite of software products ever. Yet it never consolidated to one consistent macro/scripting technology. Instead it has had a hodge podge of mostly Visual Basic-like technologies over the years. On a related note, remember when Object Linking and Embedding (OLE) was going to usher in an era of "document-centric" computing where you didn't care if you were in Exel or Word? Yeah right! On the other hand, certain consistencies like similarities in toolbars and menus, cut and paste, are essential to productivity across the suite.</P>

<P>It really irks me that they couldn't consolidate many more things across their suite, but the reality is that certain kinds of consistency are not worth holding back an innovative product and those considerations should lose out to business pragmatism every time. Perfectionism and architectural aesthetics can kill a product more than inconsistencies between modules can.</P>

<h4>Unifying what shouldn't be unified</h4>

<P>One can't help but wish that the Microsoft Office team had come up with a single scripting technology. It would have been ideal, but it is another matter altogether when you try to find consistencies where they don't belong.</P>

<P>Here is a hypothetical example involving various formats of identifier codes used across several legacy systems. In <code><B>H89A5673EZL</B></code>, <code><B>H</B></code> means aircraft part, <code><B>89</B></code> is the model year, <code><B>A</B></code> is the model year sequence in case there were multiple models that year, <code><B>5673</B></code> is the part number, and <code><B>EZL</B></code> is the location code. Various legacy systems had ways of interrogating the alphanumeric part identifier codes to extract relevant information. This function was of course duplicated in each of the legacy systems with subtle variations. It seemed desirable to everyone that this should be unified across the whole new system and that it was also a great opportunity to introduce a new common nomenclature for part identifier codes.</P>

<P>You immediately think such thoughts as: the two digit year could eventually lead to a Y2K problem, and we need standardized location codes. Common sense right? But attempting to force a new nomenclature could be catastrophic. Firstly, "if it ain't broke, don't fix it." The legacy system part codes already work and are infused in a myriad of business processes. Secondly, it wasn't on the customer's requirements list, so unifying these codes is not or at least should not be a priority. Thirdly, it is paramount to recognize the significance of those subtle variations, and the likeliness of underestimating the difficulty of resolving them.</P>

<P>I observed a situation much like this and it turned out that consolidating the identifier codes was filed away under "nice-to-haves" because it was simply too difficult. But the real problem was that they were focusing on where they could unify the business logic rather than how to identify small doable projects and empower teams to complete them. Micro managing business logic will never scale to a large effort.</P>

<h4>Winner takes all</h4>

<P class=standout>It is hard to imagine that consistency might come through an unpredictable evolving process rather than by consensus beforehand or by being forced, but that is indeed the case in the larger industry with such things as UI advances from Apple and printer advances from HP where a de facto leader in an area sets the standard.</P>

<P>In the case of identifier codes you might find that as business processes evolve one of the systems might find the need to come up with a unified syntax for its own purposes that would slowly be adopted by the other systems, one by one until all of them use it. This is a natural process allowing old ideosyncracies to die away at their own pace.</P>

<P>In a large project involving multiple user communities and different subsystems, you might fear that user interfaces will be divergent if they are developed by independent teams. But actually if one team comes out with great user interface features, that will create expectations for the other teams to implement similar features, much like I suspect happens among the applications in Microsoft Office.</P>

<P>Ultimately, the exchange between teams should be in the form of "touch and feel," rather than design-by-meeting. In other words, "oooh, look what you got! we want that!" instead of reading documents and having discussions beforehand. I don't use the word "competitive" because it is not an overt competitive attitude, although there are underlying competitive processes going on.</P>

<P>Team independence does not mean the team does not answer to the overall goals of the larger project, or that it would reject advances provided by other teams; each team's success will depend on the utilizing and sharing of components and implementations between teams. If the Excel team at Microsoft announced a new direction on a complete tangent from the other tools in the suite, the Excel team leadership would be replaced <I>tout de suite</I>.</P>

<h4>Divide by user community</h4>

<P>For some reason in large projects they try to divide the larger problem along functional lines. The worst example is creating a team for user interfaces, another for business logic, another for data schemas, and another for reports. I described a case of this under "Separating DBA, UI, reports into teams" in <A href="http://www.benpoint.com/itdeathmarch.htm">Death March in an Information Technology Project</A>.</P>

<P>I propose instead that you create teams for each identifiable user community or subcommunity. For example, in a typical Department of Defense scenario you would have a team for a group of users at headquarters and a team for each different type of group in the field. You might still have DBAs and reports specialists, but each team will have its own as it requires. Of course a great deal depends on the details of the project.</P>

<P>I have not spoken much about Agile techniques, but when you are regularly releasing a product to your users it is paramount to have a small well defined user base to develop a close relationship with.</P>

<h4>A new perspective on waste</h4>

<P>For a waterfall-minded project management, giving teams direct access to customers will undoubtedly be the most troubling aspect of the Market paradigm. It would certainly take strong visionary leadership to really open up the floodgates like this and get away from the traditional controlled requirements preparation of the Waterfall paradigm.</P>

<P>Well there is really no alternative! Eventually a piece of software is placed in front of a user and you get real live feedback on what is actually needed for it to be useful. This is where the rubber meets the road and I find it downright delusional at this stage to find anyone claiming that the years of BDUF leading up to this point were worth it when focused agile techniques could have yielded a similar result in a few weeks.</P>

<P>The principle behind BDUF is that it is much more efficient to resolve conflicts during requirements assessment and design phases than once a large system is implemented. However the human reality is that the sheer volume of details cannot be comprehended nor resolved until people begin to see computer programs actually doing things! In this light, the protracted periods of requirements analysis and design are much more wasteful than a program which does something wrong on the first few iterations.</P>

<h4>Decoupling</h4>

<P>The key to the Market Software Development Paradigm is in dividing the larger project into smaller projects for independent teams. A small project needs to stand on its own, with its own product management, design, testing, QA, user feedback, and release schedule -- everything. Projects are identified based on dividing lines of loose integration with other parts of the larger project.</P>

<P class=standout>If there are no obvious points of loose integration, you need to invent them, i.e. design them into your solution.</P>

<P>Developing a separate product for field and headquarters appears to be a terrible waste on the surface. It is probably the most controversial idea I am proposing, and I am not saying it is always a good idea. But if some task is a very large part of the project where you would be assigning 20 IT people, you might have a better chance of success by dividing it into two teams with 14 IT people each.</P>

<P>A task requiring so many people to develop would have significant data entry, reporting and analysis needs on the field side and you don't want to tie these down to development of the headquarters' module which has a whole different set of concerns. As separate products they would develop their own data schemas and the exchange of information between the field and headquarters would involve data interchange. This is not a bad or wasteful thing if it improves the responsiveness and agility of the development teams to their customers who are indeed very separate.</P>

<P>This is not a comparison between 20 people doing it one way or 28 (14+14) doing it the other way; it is a comparison between getting it done well versus late or never.</P>

<P>By introducing points of decoupled interoperability you create more work, but the work on those separated modules can be done more independently and therefore more quickly. In a large project this can mean the difference between soon and <I>never</I>! The challenge is in devising ways of dividing the large problem into smaller problems with separate user communities, not along functional lines.</P>

<h4>Stovepipes</h4>

<P>One of the words used to negatively describe legacy systems in the Department of Defense is "stovepipes," i.e. separate systems with very little interoperability. Funny that being "stovepipe" is always considered a bad thing, because it evokes positive aspects of independence, redundancy and security. No matter how intelligently some new age architecture is designed, interconnectivity and uniform design will open vulnerabilities to large scale problems and malicious attacks.</P>

<P class=standout>But rather than incrementally improving the interoperability of stovepipe systems (to improve something that already works) their first instinct is to replace it all in one go, much like the <A href="http://www.informationweek.com/software/showArticle.jhtml?articleID=191600952">"Big Bang" method recently lamented by Microsoft CEO Steve Ballmer</A>.</P>

<P>If you are willing to sacrifice the aesthetic purity of the "Big Bang" approach, you just might reap the rewards of a much faster adaptive incremental approach. Things are often not as they seem from the outset. Development can be greatly accelerated by allowing stovepipe systems to evolve in close relationship with their individual user communities within a larger project sharing features and components between systems. The result may bring you to a whole new, robust and interoperable (even consistent) system much more quickly that you would imagine.</P>

<h4>Think simple</h4>

<P>Since agile development is all the rage, it has inevitably caught the attention of managers of large projects that are traditionally advocates of BDUF. Often though it is assimilated as meaningless jargon, a mere dressing for the same old anti-productive processes. "Agility" is the new meaningless buzzword. People are still talking about designing and implementing large complex systems and investing in architectural frameworks. But my experience supports <A href="http://en.wikipedia.org/wiki/Gall's_law">Gall's Law</A>, which goes like this:</P>

<P class=quotation>A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system.</P>

<P>After witnessing failures of monumental proportions, it is clear to me that waste is a part of the process. The Market Software Development Paradigm brings this to a level on which failures are small and leveraged as part of an adaptive process, yielding a much better prediction of success.</P>




]]></description>
</item>
<item>
<title>Rowboat: A Database Design</title>
<link>http://www.benpoint.com/database.htm</link>
<guid isPermaLink="false">database.htm</guid>
<pubDate>Sun, 30 Jul 2006 03:00:00 GMT</pubDate>
<category>Software Design</category>
<description><![CDATA[


<P class=standout>If your database consists of a boatload of rows, you might call it a rowboat.</P>

<P>In this one short article I cover all the essentials of a complete multi-session database design. I <I>haven't</I> studied any database theory since college (1991), and I'm not even sure I did then -- although I do have a Computer Science degree. So I am writing this entirely off the cuff based on experiences with databases and my computer science knowledge.</P>

<P>The rowboat database is a single file with a small peer database engine and client application. I use only established techniques (I am not inventing anything here), but I think my design is unique in its simplicity power speed and versatility.</P>

<H4>Challenges</H4>

<P>In its simplest form, a database is just a group of tables consisting of rows (records). The term database can be used broadly to mean any data container, but I am talking about the common relational archetype. There are 3 primary challenges in implementing a database:</P>

<OL>
<LI>I/O: allowing rows to be created and deleted quickly and efficiently</LI>
<LI>Transactions: allowing grouped "all or nothing" actions and recovery on failure</LI>
<LI>Multithreading: ensuring the integrity of the data model despite concurrent activity</LI>
</OL>

<P>All of these need to be designed together. As rows are created they must be:

<OL>
<LI>added without moving around other data on disk or wasting too much space</LI>
<LI>marked so that they can be rolled back if the transaction does not complete</LI>
<LI>marked so they are not included in another thread's query begun beforehand</LI>
</OL>

<P>Similar things need to be considered for update and delete of rows. Those are the primary challenges in a nutshell.</P>

<H4>File Blocks</H4>

<P>Blocks are the universal underpinning of every computer storage technique. The basic idea is that you set a block size and implement a linked list of blocks. When a block is added, it can be allocated anywhere and logically inserted in between two other blocks without having to move any blocks in the storage medium. When a block is removed it can be added to a linked list of deleted blocks in order to be re-used later.</P>

<P>The file system happens to use blocks too, but we manage our own version of blocking or "paging" within a single file system file. I/O reads and writes always occur in terms of whole blocks, that makes I/O simple. In practice, it does not take longer to write one byte or one block because the primary factor is seek time.</P>

<P>A particular block only holds data from one table (a re-used block can of course be assigned to a different table), because when you query the data of a table, you want to involve as little of the disk as possible.</P>

<H4>Column Widths Are For Wimps</H4>

<P>Based on assumptions rooted in ancient mainframe database technology, most databases like to be able to know column widths when the table is defined (except for large objects). Heck, FORTRAN originally had a rigid input layout with column-based restrictions. But the column width requirement in databases is one of the chief aspects of inflexibility that <I>should be done away with</I>.</P>

<P class=standout>Column widths are where most databases miss the boat. Character widths are even more meaningless with the onset of cases where text fields pass through multiple encodings (that can use different numbers of bytes) like when the client and server text encodings differ.</P>

<P>Although relational in attitude, my design does <I>not</I> involve column widths. Rows (or records) are the basis of relational functionality. Columns are a prism through which we select and modify a particular row, but all activities occur in terms of rows. So you've got a bunch of rows and they're all in the same boat, so we'll call it a rowboat.</P>

<P>For the best efficiency, instead of choosing column widths you should choose a base row width. This row block size is the smallest amount of memory that will be used for the row, but the number of these blocks for a particular row can grow arbitrarily.</P>

<H4>Row Blocks</H4>

<P>In addition to file blocks, there is another level needed to handle the variable width rows. The row block size can be 128 bytes by default and tailored for every table as long as it divides evenly into the file block size. If a particular row is larger than a row block it occupies multiple linked row blocks. Each file block keeps track of how many row blocks are free in it so that the file block can be deleted if it becomes empty. So:</P>

<UL>
<LI>A logical table is a linked list of logical rows.</LI>
<LI>A physical table is a linked list of file blocks.</LI>
<LI>A physical row is a linked list of row blocks.</LI>
</UL>

<H4>Multi-user Model</H4>

<P>There are two ways to handle multiple processes manipulating a database at the same time. One is to use a <B>lock file</B> that each process uses to synchronize their actions. The second is to have a <B>server</B> through which all actions occur.</P>

<P>This is over simplified, but the lock file mechanism depends on the file system's file open command where if two processes simultaneously try to obtain exclusive access to the lock file, one of them is denied or held up until access is granted. The nice part is that the lock file can support multi-user access between processes running on different machines on a network with visibility to a shared file system.</P>

<P>The server mechanism strikes me as easier to conceive and implement since it depends on direct inter-process communication where a single application instance can coordinate all client requests. This is the model I pursue here. A pool of threads can service the queue of data access requests arriving via TCP/IP.</P>

<H4>Locking</H4>

<P>You can't just add a plain row into a table because until it is successfully committed it is only visible to the session that is inserting it. Similarly when you update a row you cannot just replace the row in the table because it must retain its old value for other sessions until it is committed. But still, a new row is added to the end of the linked list of rows. An updated row is inserted into the linked list of rows adjacent to the row it is replacing.</P>

<P>Different sessions need ways of accessing rows that allow them to determine the state of each row as it pertains to them. To satisfy this requirement, rows are marked as mid-transaction insertion or deletion. In the case of an update the replaced row is marked for deletion. A mid-transaction insertion row is ignored by every session other than the one that obtained the lock, while a mid-transaction deletion row is treated as if it exists by other sessions.</P>

<P>Table locking means that any number of sessions can be reading a table simultaneously, only one can be writing at a time. Table locks are maintained in memory by the server process.</P>

<H4>Recovery</H4>

<P>For the sake of crash recovery, we need to write any modified block to disk twice. Once in a transaction recovery block, and then overwriting the actual block of the table. A linked list of recovery blocks is maintained in the file. When the commit is successful, the recovery blocks are released back to the pool of deleted blocks.</P>

<P>If the failure occurs while parts of the transaction are being written to the recovery block, the transaction will be discarded. If the failure occurs while parts are being written to the data file, the transaction will be completed during recovery to restore integrity to the data file. Whenever the data file is opened, recovery is performed automatically.</P>

<H4>Data Types</H4>

<P class=standout>Notice that I've said nothing about data types. Each row <I>value</I> is treated by the core database as an opaque string of bytes.</P>

<P>A row (i.e. a record) is generally a structured group of fields. In most tables this will be a simple list of columns implemented for efficiency with either a prefix table of integer offsets or a persisted parsed XML fragment. Data types and row implementations are not integral to the core database design, but are useful in providing the constructs such as indexes, queries and stored procedures.</P>

<P>Indexes are a means of speeding up access by maintaining an ordered or mapped list of keys for a table. An index is an internally maintained table containing links into the indexed table. The database doesn't need to know how to compute the key from a row, but it does need to provide the infrastructure for maintaining the index on table modifications.</P>

<H4>Plan of Action</H4>

<P>My goal would be to implement this complete database technology in 3 classes in this order:</P>

<OL>
<LI>A sockets class to manage thread pools, queue requests, and negotiate peer to peer relations</LI>
<LI>A data core class to provide all the linked lists, file I/O, locking, transactions and recovery</LI>
<LI>An access class to provide the row schemas, data access language and SQL subset</LI>
</OL>

<P>The sockets class would not understand the content of requests but it would send and receive them and delegate threads to usher received requests through the access class. The sockets class could be tested for scalability and throughput by generating requests from multiple peers to each other and performing some random file I/O to represent database processing. The classes would be developed inside a test harness dialog application used to interactively generate requests.</P>

<P>The data core and access classes would actually go hand in hand to some extent. The access class would act as a front end to the data core class but in the beginning would only provide some stubbed out simple methods to service requests from the sockets class. All of the database functionality could be fleshed out while maintaining only rudimentary CRUD methods in the access class. The data core class would not "know" about the access class but would provide hooks for the access class to generate index keys and service triggers.</P>

<P>The access class would also have some client methods used to package requests to be sent, in addition to the server methods that call the data core methods. I would leave both client and server aspects of the access class together because they involve the same knowledge, plus the architecture is peer to peer so a database can be on both sides. Finally, the access class would be fleshed out with data types, row schemas, and full blown language functionality.</P>

<H4>I Repeat, No Column Widths</H4>

<P>I watched all the excitement about "XML databases" and "Object Oriented Databases" come and go. The hype went away with a resounding thud, although few seemed to notice. We're left with artifacts of the craze such as shallow "object" features in Oracle schemas. The relational model still underpins all the bulk of database programming, while extreme XML databases are more akin to file systems with supporting methods.</P>

<P>But the real question people should have asked is: why do I have to specify a column width at all? We use CLOB fields to store XML documents. Why the complexity? It is just text! Why does my database schema restrict my username length when that should be a business logic or UI decision? If my average username is 8 characters but I reserve 32 for every one of them, does anyone else see the inefficiency here?</P>

<P class=standout>I'm trying to rock the boat! <B>"No column widths"</B> is the key to the next real revolution in database programming.</P>

<P class=notetop></P>
<P class=notetext><img src="http://www.benpoint.com/comment.bmp"/> see discussion on column widths at Joel's forum:<BR><A href="http://discuss.joelonsoftware.com/default.asp?design.4.372016">http://discuss.joelonsoftware.com/default.asp?design.4.372016</A></P>
<P class=notesig>note by original poster Ben Bryant, 05 Aug 2006 09:22:00 -0500</P>




]]></description>
</item>
<item>
<title>Tropical island life for a software developer</title>
<link>http://www.benpoint.com/curacao.htm</link>
<guid isPermaLink="false">curacao.htm</guid>
<pubDate>Thu, 27 Apr 2006 22:30:00 GMT</pubDate>
<category>Business of Software</category>
<description><![CDATA[


<P class=standout>Working in the software industry has great potential for allowing one to go and experience the tropical island life. As a programmer you might find an opportunity to work on an island like I did, or as a Micro-ISV owner and/or independent consultant who just needs Internet access you could write your own ticket and spend your days with a laptop at the beachside bar. In the latter case, here is my recommendation: go for six month stretches on a tourist visa rather than officially moving there.</P>

<P>As someone who grew up with the moderately cold winters of southern Ontario, Canada, I always thought it would be great to live on a hot tropical beach somewhere. I'd been working as a C/C++ programmer in Virginia for 5 years after college when the opportunity presented itself.</P>

<P align=right><IMG src="http://www.benpoint.com/CS0007.gif" border=1 alt="Westpunt and Playa Forti"> <IMG src="http://www.benpoint.com/CS0003.gif" border=1 alt="harbor"></P>

<P>In 1996, a co-worker at the office circulated a posting he had found on the Internet for a C++ programming job in the Carribean. At first, like everyone else I said "wouldn't that be amazing!" but did not seriously entertain the idea, even though I was one of the few people who was unmarried and relatively free to make such a major move. But a week later the idea was mentioned again and I decided to shoot off an e-mail. That led to an interview with someone from the Holland-based company, and then an expense paid week on the island of Curaçao to check it out!</P>

<P>When you emerge from the plane in Curaçao you are invariably greeted with a warm blast of air. Before you descend the steps to the tarmac you see the small airport backed by a bluff -- a cliff or escarpment covered in green bushes and topped by cactii. People watch and wave from the upper level of the terminal as the passengers make their way inside. I remember looking up and wondering if one of those people was my future employer.</P>

<P><IMG src="http://www.benpoint.com/CS0006.gif" border=1 alt="Hotel Porto Paseo"> <IMG src="http://www.benpoint.com/CS0001.gif" border=1 alt="Ruud 2nd from right, see the floor to ceiling windows">  <IMG src="http://www.benpoint.com/CS0004.gif" border=1 alt="our parking"></P>

<P>In fact my future boss Ruud did meet me there, and he organized a wirlwind tour of the island that week. I stayed at a hotel in Otra Banda which happened to have some sort of modeling convention going on so there were gorgeous women constantly coming and going or being photographed by the pool. The software company office had floor to ceiling glass on two sides overlooking palm tree filled residential neighborhoods. Needless to say I was convinced the island life was for me.</P>

<P>Back home in Virginia, people were pretty amazed that I was going through with it. There were a lot of preparations. I had to disentangle myself from my job, ship my car, end my rental lease. I could barely believe it was going to happen.</P>

<P><IMG src="http://www.benpoint.com/CA115c.gif" border=1 alt="co-workers on the island"> <IMG src="http://www.benpoint.com/CS0008.gif" border=1 alt="Attila (right) and I in the condo pool"></P>

<P>For the first month in Curaçao, I shared a nice new condo with the other new hire, Attila. The place had it's own incredible swimming pool. We had loaner cars from the company and we began getting acquainted with all the things to do on the island, not to mention our new jobs. In the meantime the customs bureaucracy with our cars being shipped to Curaçao from the US turned out to be really awful. It tied up our cars for several months in endless wrangling and numerous fees that eventually involved what in hindsight must have been a bribe to finally get our cars out.</P>

<P class=standout>Probably the most important skill for survival on the island is the ability to relax and go with the flow. For me at least, this is way easier said than done! But we managed :)</P>

<P>Attila posted a lot of great information and pictures (some of them mine) of this charming little paradise island just off the coast of South America at <A href="http://www.narin.com/curacao/">Attila's Curaçao Page</A>.</P>

<P>Attila and I eventually got our own places. I found a nice roomy apartment; he rented a great house and we planted a row of palm trees in his yard. I'm not going to tell the whole story of my time in Curacao, but I wanted to tell something about it after reading a couple of discussions: <A href="http://discuss.joelonsoftware.com/default.asp?biz.5.290600">Living "The Life" on a tropical island?</A> and <A href="http://discuss.joelonsoftware.com/default.asp?joel.3.299263">See the world while working in IT?</A> From there I came across this loud <A href="http://ask.slashdot.org/comments.pl?sid=173947&cid=14471002">warning</A>:</P>

<P class=quotation>Bali, Thailand or anywhere in the tropics is fecund, incredibly fecund. Things grow. Fungus grows - everywhere. Bugs grow everywhere. Everything is green. Computers are not green. Modern appliances are not green. All the conveniences we enjoy in the middle latitudes rust or fail in the tropics. Expect many difficulties maintaining your equipment and lifestyle. </P>

<P>Not true of Curaçao! I have lived in places like that too, but Curaçao is basically a desert island. Things do grow there, but not like in the wet tropics. The rain comes in short drenching showers, one minute it is dry and sunny with only a few clouds, then there is pouring rain for 20 minutes, then it is sunny again and everything is dry in 10 minutes! The ants will find any food you drop or leave out, but in general you are not overwhelmed by critters and growing things like you can be near a rainforest.</P>

<P align=right><IMG src="http://www.benpoint.com/CS0005.gif" border=1 alt="dry landscape"> <IMG src="http://www.benpoint.com/CA077c.gif" border=1 alt="St. Christoffel Mountain"></P>

<P>Though it is not your lush tropical look, the dryness of the climate has benefits. But there are other detractors to keep in mind:</P>

<UL>
<LI>like Europe, stores are not open at convenient hours</LI>
<LI>neighborhood dogs bark all night</LI>
<LI>banking and exchange rates can be a pain</LI>
<LI>imported items (sunblock, even fruit) are more expensive than in the U.S.</LI>
<LI>occassional electrical outages</LI>
</UL>

<P>But the little inconveniences are entirely outweighed by the attractions and the general overall amazing experience of island life.</P>

<UL>
<LI>scuba diving and snorkeling</LI>
<LI>carnival and jump-ups (endless dance parties in the streets)</LI>
<LI>beaches, coastlines, and hilly countryside</LI>
<LI>oceanside restaurants, beach bars and casinos</LI>
<LI>watching salsa competitions!</LI>
</UL>

<P><IMG src="http://www.benpoint.com/CC026.gif" border=1 alt="scuba diving"> <IMG src="http://www.benpoint.com/CN008.gif" border=1 alt="carnival"> <IMG src="http://www.benpoint.com/CB027c.gif" border=1 alt="cliff edge at Westpunt"></P>

<P>I stayed for 15 months. It was an incredible time in my life, but ultimately it had to come to an end. The Washington D.C. Virginia region called me back with all its activity, commercial efficiency and job prospects. There is only so much relaxing in the sun that an ambitious northerner can take!</P>




]]></description>
</item>
<item>
<title>Where is the Pain?</title>
<link>http://www.benpoint.com/whereisthepain.htm</link>
<guid isPermaLink="false">whereisthepain.htm</guid>
<pubDate>Mon, 27 Feb 2006 13:00:00 GMT</pubDate>
<category>Business of Software</category>
<description><![CDATA[

<P>In the software industry, real pain is what makes you want to strangle someone at the company that made the software you are using; real pain is when you are losing money because you can't get your systems to integrate knowledge and manpower; real pain is when software breaks down or is unnecessarily susceptible to human error; real pain is when all of the available solutions have one significant shortcoming for your needs like not supporting your platform or too large a footprint. All these real pains create tremendous opportunities for startups.</P>

<P>The pain that my current product CMarkup solves is the complexity and overhead of XML solutions for simple XML purposes. Experienced and practical C++ programmers take one look at those big things out there and say "Yuck! There's got to be something small and easy for such a trivial problem" and then they go online and find my product.</P>

<P>But CMarkup was just a nice accident as I explained in <A href="http://www.benpoint.com/iseemarkup3.htm">I See Markup, Part 3 - Transition To Commercial Product</A>. The idea I introduced in my last post "<A href="http://www.benpoint.com/idea.htm">Here Is My Idea</A>" is the peer to peer spreadsheet idea that was in my mind when I started my company in 1999, though I have never brought it to market.</P>

<P>I made the mistake in "<A href="http://www.benpoint.com/idea.htm">Here Is My Idea</A>" of not powerfully invoking any <I>real pain</I>. Instead of describing pain I listed a few annoyances. Real pain is the number one means of communicating a good idea because everyone can understand real pain. As Joel Spolsky <A href="http://www.joelonsoftware.com/articles/Micro-ISV.html">wrote</A>:</P>

<P class="quotation">Don't start a business if you can't explain what pain it solves, for whom, and why your product will eliminate this pain, and how the customer will pay to solve this pain. The other day I went to a presentation of six high tech startups and not one of them had a clear idea for what pain they were proposing to solve. I saw a startup that was building a way to set a time to meet your friends for coffee...</P>

<P>On one hand, my peer to peer spreadsheet idea is still somewhat of a solution in search of a problem. The are a number of ways to specialize and I plan to do that. On the other hand, my idea <I>did</I> come out of specific problem area for which I believe there is still no powerfully appropriate technology, the U.S. government budget coordination process. And that remains the area I would love to pursue again someday.</P>

<P>In <A href="http://codesnipers.com/?q=node/249">The Right Idea?</A>, Gavin Bowman lists a whole bunch of great points on selecting and proofing your idea. At the end he really nails what it all boils down to:</P>

<P class=quotation>If that sounds like a lot of steps and a lot of work, it is, but it's a lot easier and less painful than building a product that nobody wants. Or, than building something and then trying to figure out who wants it and how you're going to get it in front of them.</P>

<P>My peer to peer spreadsheets idea is meant to address many of the pains in current distributed work-flow, approval, and publishing solutions. These are not new ideas, I just plan on executing a solution very specific to the needs of the domain. The challenges faced by systems that need to bring information managed by many people into one place often fail to get a good balance between management and data flow. There is the centralization bottleneck that works against the productive autonomy of a dispersed group of information managers. Peer to peer functionality supports managers in the field to control their own processes before dialing in to the central office. Centralized solutions have a bad dependency in times of movement and or turmoil when Internet access is unreliable, and being dependent on a server they make it difficult to move the center of operations.</P>

<P>I believe the pain amongst many existing customers of budget coordination systems is very real and that they, or the contractors providing their systems will benefit from a core product to address these pains. There are still a lot of questions to answer about this idea though, so stay tuned.</P>




]]></description>
</item>
<item>
<title>Here Is My Idea</title>
<link>http://www.benpoint.com/idea.htm</link>
<guid isPermaLink="false">idea.htm</guid>
<pubDate>Tue, 31 Jan 2006 10:30:00 GMT</pubDate>
<category>Software Design</category>
<description><![CDATA[


<P class=quotation>Yeah, selling the idea is difficult. But, it's not impossible. Just start a blog and explain why your idea is better than Microsoft's or Google's.</P>

<P>I started this blog six months ago to do just <A href="http://scobleizer.wordpress.com/2006/01/29/conferences-vcing-hot-topics-this-morning/">what Robert Scoble is saying</A>: to explain why my idea is so good. I don't want venture capital, but I do want to capture the imaginations of colleagues and first adopters. I have some white papers and a prototype from about 5 years ago that I only showed under non-disclosure at the time, but now I intend to explain it all in this blog eventually. That old assumption that it needed to be kept secret has long since vanished.</P>

<P class=standout>My idea brings together spreadsheets, XML and peer to peer technology. Stay tuned to this blog as I expand on it.</P>

<P>I don't know how best to sell this idea yet, so instead this far I have been practicing by putting down some foundations of my philosophy of software. But Scoble's post catapulted me into posting this. Like the ebays and the Googles, my idea is not so much something new as it is an approach that recombines existing things. Since it is not likely to catch on with a quick description, it is up to me to carry it forward for the long haul.</P>

<P>One starting place is to talk about problems or pains with existing solutions such as Microsoft Excel and Access. But it is not to say the existing solutions are bad. They are powerful and widely used, so I would never try to compete directly. But any widely used software has to compromise and leave many of its users less than happy.</P>

<P>I have always found it very annoying that Excel and QuickBooks print that pesky extra column on a separate page when my table gets a little wide. There are ways to fix it, but it takes some mucking around, and its generally after I have already wasted paper. Another issue in Excel is centering the title on the whole page when it only occupies some of the columns, and doing headers and footers without editing them in the spreadsheet. Also, the VBA programming language is separate from the cell formula syntax, so when regular users reach the limit of a formula's capability they stop there.</P>

<P class=standout>What I am doing is identifying my constituency. My users are spread across several applications for which none of the established tools are quite right. Ideally I can carve out my place between those giants where I can grow without being stepped on.</P>

<P>Bookkeeping is often done with Excel and/or Access because of the difficulty of setting up and conforming to accounting applications. The idea is that you want to keep records in a way that is natural to your day to day business, and you would prefer to worry about doing reports and taxes later, when the time comes. But bookkeeping programs almost always require a lot of setup at the beginning and it is hard to know where and how to record unusual things.</P>

<P>Excel is great just to put stuff in columns and rows. Access takes you a step further to get it into columns and rows that are in database tables facilitating additional data processing. Word takes you one step back and allows regular text and pictures in addition to tables with columns and rows, but then programmatic access can be difficult.</P>

<P>The spreadsheet component of my idea has several defining aspects:</P>

<UL>
<LI>When starting with a blank sheet, it focuses on rapid flexible freeform and tabular data entry on a page view where the number of columns can change between rows.</LI>
<LI>Reports are simply new sheets which may be built from other sheets, and sheets are accessed like database tables.</LI>
<LI>A sheet is like a document that prints the way it looks. This is a unifying principle that limits embedded components to ones which print as they appear in their non-focused state.</LI>
<LI>Sheets are easily designed and programmed for end user friendly data entry and work flow.</LI>
<LI>The formula shorthand and scripting language are unified with debugging and auditing, and wizards generate modifiable scripts.</LI>
</UL>

<P>The desktop application can act as a node in a peer to peer network for sharing a sheet or a bundle of sheets. In contrast to <A href="http://www.groove.net">Groove</A>, this P2P arrangement de-emphasizes infrastructure, and instead supports quick ad-hoc connections more akin to instant messaging.</P>

<P>While my spreadsheet prototype has never been released, you can try out my animated graphical demonstration of peer to peer messaging in Windows. The <A href="http://www.firstobject.com/dn_message.htm">firstobject XML Messaging</A> project is a simple executable you can run right out of the zip file and type "demo" to see the animated show of a buyer seller conversation. Run it from an additional machine on your LAN and without any setup you can hook it into the conversation occuring on the first machine by typing "loc sellerXYZ,ComputerA" and "buyer SellerXYZ". Full details are there on that page.</P>

<P><img src="http://www.benpoint.com/2buy1sell.jpg" alt="Scenario: 2 Buyers and 1 Seller"></P>

<P>This post is only a first peek. There is already quite a bit of depth to this technology including written materials that I will be slowly going through and putting forth in this blog, and components under development in other (free) <A href="http://www.firstobject.com">firstobject.com</A> projects like the messaging one.</P>




]]></description>
</item>
<item>
<title>Death March in an Information Technology Project</title>
<link>http://www.benpoint.com/itdeathmarch.htm</link>
<guid isPermaLink="false">itdeathmarch.htm</guid>
<pubDate>Thu, 19 Jan 2006 09:45:00 GMT</pubDate>
<category>Business of Software</category>
<description><![CDATA[


<P>Software development is a problem solving business. But it seems we sometimes can't even apply common sense. This is a true story of how the leadership of a large IT project (team of 100+) went through various stages of denial and last ditch adjustment on a long drawn out death march.</P>

<P class=standout>To make a large problem manageable you generally have to break it down into smaller problems and let separate teams handle the smaller problems. Of course you need to break it down along lines that allow the smaller problems to be solved <I>individually</I>, otherwise you have not really broken it down at all.</P>

<h4>Big Design Up Front (BDUF)</h4>

<P>The project was launched with a lot of excitement and enthusiasm about doing the job right. The goal was to modernize a whole bunch of legacy systems from various platforms and locations throught the world into a new design with a set of subsystems (roughly analogous to the original legacy systems but greatly enhanced and interconnected). They were aware of failures in the past, but they assembled a formidable team of domain experts and were well-versed in the latest software development best practices and technologies. Some of the key players were hot off of other successful (albeit smaller) projects and everyone felt the synergy was just right.</P>

<P>All of the initial goodwill may have gone to some peoples' heads because there seemed to be a sense that something really quite visionary was going on. They decided that as part of the requirements analysis and design phases, they would create a software framework that was meant to streamline the project by abstracting certain generalizable processes out of the overall application and data development effort. Though it was their pride and joy, I'm guessing that this framework concept may have hurt the design phase by allowing abstractions to dominate instead of tangibles.</P>

<P>The ideal of the BDUF (<A href="http://en.wikipedia.org/wiki/Big_Design_Up_Front">Big Design Up Front</A>) approach used in virtually all large IT projects is that with good design and specifications to work from, the various teams can go off and implement their parts and later bring them all together and get them working with tweaks here and there. The principle is that it is much more efficient to resolve conflicts during requirements assessment and design than after such a large system is implemented.</P>

<P>Whether specifications can allow teams to go away and implement their parts independently is debatable. But even as a means of defining and integrating the efforts of teams on this large project BDUF had 3 major problems:</P>

<OL>
<LI>The design negotiation process got paralysed. Meetings never seemed to reach a resolution because of the sheer volume of legacy system details and experiences being considered. The more experts that got involved the worse it got. The more they earnestly wanted concensus the longer it took.</LI>
<LI>Specifications could not cover the enormity of details. Ultimately specifications are only as good as the people writing them can get their minds around the problem. Modeling tools and prototypes helped but the results were not inspiring.</LI>
<LI>No one read them. Well that's not true, but many times they were only read until a glitch or inconsistency was found, and then the author was contacted anyway.</LI>
</OL>

<P class=standout>The bottom line is that BDUF demands something of humans that we aren't any good at, <I>at all</I>.</P>

<P>After a year or two when the customers started to have misgivings about whether progress was being made, the design meetings became shouting matches. The project leaders tried to control the egos involved by planning a certain amount of time for each point to be addressed and opinions to be discussed.  I went to a couple of these meetings a year apart and had intense déjà vu as I discovered some of the exact same issues were still being debated.</P>

<P>Common sense from trial and error should have told them that unifying the design of a large number of legacy systems on the scale they were attempting was simply not going to happen in meetings and spec-writing iterations. But ultimately the problem was not BDUF, it was a complete unwillingness to break the large problem down into smaller more manageable problems.</P>

<h4>Special teams and new initiatives saddled</h4>

<P>Giving true autonomy to teams tends to lead to non-uniform and duplicative solutions (which may nevertheless yield better results but I'll come back to that another time), and this prospect worried them so much that they ruled it out altogether. However, their stubbornness did not stop them from hedging their bet with some experiments. After insisting for years that the BDUF approach was paying off they began to consider other options behind closed doors.</P>

<P>They formed some small special teams to go and quietly start building software outside of the official process. They did this somewhat secretively because they didn't want to be seen as undercutting the process they had championed for so long, and also because they weren't exactly confident about it. But it was precisely because of their timidity that it did not bear much fruit.</P>

<P>The special teams weren't allowed to work freely with the other teams because of their unofficial status and yet were expected to utilize the progress of the other teams so as not to be duplicating effort. In addition they were forced to work within the same framework designed by the team leadership and so-called software architecture experts. The special players made a herculean effort and months of overtime turned into years, to no avail.</P>

<P>At one point a buzz circulated that the project leadership was embracing a new "iterative" approach, but it turned out to be in name only, since <A href="http://en.wikipedia.org/wiki/Iterative_development">iterative development</A> emphasizes building <I>releasable</I> software and they were still only producing a framework and system architecture. The deliverables still required the customers to <I>use their imaginations</I>; it was not a releasable end product. In fact it took a lot of smoke and mirrors to keep the customer from concluding that the emperor had no clothes.</P>

<P>The <A href="http://en.wikipedia.org/wiki/Waterfall_model">waterfall methodology</A> (requirements analysis, design, implementation, testing, integration, and maintenance phases) used on this project (and most if not all <I>large</I> IT projects) has built in mechanisms to measure and predict progress. However, due to its reliance on volumes of specifications that the customers can never hope to digest, it is susceptible to being hijacked by misguided project management. In addition, it appeared that the customers had committed to the framework vision advanced by the project leaders. With all hopes pinned on a framework there was no room for truly introducing any new approaches to avert disaster.</P>

<P class=standout>Ultimately every well-meaning effort was undermined by subjugation to the over-architected, meddling, micro-managed whole.</P>

<h4>Separating DBA, UI, reports into teams</h4>

<P>The high level unified design being hammered out in meetings played into a manifestation of groupthink that had a dangerous effect on the division of problem areas. For example, in order to build the subsystems of the end product, there were 3 teams to manage different aspects of each of the subsystems:</P>

<UL>
<LI>Database administration</LI>
<LI>User interface development</LI>
<LI>Report generation</LI>
</UL>

<P>The idea was that the report system would be written once and then each subsystem would be easily added after that, the UI team would utilize common UI components across all subsystems, and the database administrators would design and manage a unified data and application model to greatly reduce potential maintenance down the road. These were meant to be <I>independent</I> teams, not just tasks within a larger team, and were to be judged on their progress separately.</P>

<P>However, on any given subsystem used by a specific group of users there are many details affecting all of the data, UI and reports. Effectively, the 3 teams were expected to each learn the exact same things about every subsystem: the user roles, tables, indexes, and the ways of accessing, displaying and filtering the data, all of which effect each other a great deal (e.g. a DBA cannot design user roles and indexes without knowing about the reports and filters that will be needed for all the affected subsystems). The most sobering problem was that compromises made for the unified design often turned out to be showstoppers for individual subsystems and this would drive the issues back up into the design meetings.</P>

<P>A pragmatic approach would have been to give one team jurisdiction over all of the data, UI and reports of a particular subsystem and truly relegate the framework to <I>optional</I> services, but that idea was always dismissed as a maintenance nightmare.</P>

<P>Dividing each subsystem between the 3 teams ultimately led to an insurmountable effort, not to mention a dumbing down of the specific requirements that further hindered completion of any one subsystem. The cost of conformity and efficiencies across subsystems was too high a price to pay when it stopped progress in its tracks.</P>

<P class=standout>No matter what you do, you cannot get away from the reality that if a problem cannot be solved except in the context of the solutions to other problems, then you are greatly increasing the work by trying to assign it to a separate team.</P>

<P>Faced with increasing pressure and desperation from developers, the leadership eventually adopted a modified team structure based on subsystems with attached DBA and reports people. But they were too slow to ease the mandates on framework conformance to allow substantial productivity to set in. As a friend of mine likes to say, they were just <cite>"moving deck chairs around on the Titanic."</cite></P>

<h4>The consequences</h4>

<P>After some 3 or 4 years, the customers started to make desperate demands to see something concrete. The project leaders chose a small sample subsystem and decided to accelerate it. This was going to be the showcase, the proof that the complex framework (the metaphorical "machine") they had put in place to generate the end product was going to yield vast efficiencies (see "<A href="http://www.benpoint.com/machine.htm">Building the Machine That Will Build the Machine</A>"). However, at every turn, it was the framework that was slowing them down. They took to spending whole days in the rooms with the developers, telling them to skip this and forget about that in a mad rush to get something concrete.</P>

<P>As the deadline approached they completely scrapped the application framework in favor of rapid application development, still maintaining that they would go back and retrofit the solution to their framework later. But they had already clung to framework goals too long to allow the team to adequately address the intricacies of the specific subsystem.</P>

<P>When the customers were presented with a demonstration of this sample program they were sorely disappointed. They recognized immediately that it was only a cursory treatment of the subsystem requirements it was meant to service. Many years and millions upon millions of dollars already invested were the only thing keeping them from bailing immediately. It would be some time still before the project was scaled back and effectively dissolved.</P>

<P>It is an unfortunate story that has affected me deeply. I observed this from a system services role (not any of the special, DBA, UI or report teams mentioned above) and wasn't in a position of influence. In a future article I'll talk about a "market" approach that I argue would have worked well because of this project's natural subsystem organization.</P>

<P class=commenttop></P>
<P class=commenttext><img src="http://www.benpoint.com/comment.bmp"/> <B>None of us...<BR>
...is as dumb as all of us.</B><BR>
Despite winning every battle, the overall war was lost, making every success still viewed as a failure. While unfortunate, I learned so much of 'what not to do' while on the Program, and have to attribute the reminder of this failure to much of my more recent successes.  Great read, thanks!</P>
<P class=commentsig>submitted by Rainman, 19 Jan 2006 14:09:00 -0500</P>

<P class=notetop></P>
<P class=notetext><img src="http://www.benpoint.com/comment.bmp"/> see discussion at Joel's forum:<BR><A href="http://discuss.joelonsoftware.com/default.asp?joel.3.294328">http://discuss.joelonsoftware.com/default.asp?joel.3.294328</A></P>
<P class=notesig>note by original poster Ben Bryant, 21 Jan 2006 11:00:00 -0500</P>




]]></description>
</item>
<item>
<title>Building the Machine That Will Build the Machine</title>
<link>http://www.benpoint.com/machine.htm</link>
<guid isPermaLink="false">machine.htm</guid>
<pubDate>Fri, 13 Jan 2006 10:30:00 GMT</pubDate>
<category>Software Design</category>
<description><![CDATA[


<P>The first car in history was not built on an assembly line. In fact, the first car of any newly designed model is still not built on an assembly line. Well that goes without saying right? Why then do the leads on large projects (team of 50+) try to build the assembly line before they produce their first car? In fact, why do they try to use an assembly line at all when every car is going to be different?</P>

<P>Well okay, may be it is not exactly an assembly line (although some have been known to use the term), they are just trying to define the architectural framework, i.e. the way that modules will work together and re-use common parts. But, to borrow Tim Bray's <A href="http://www.tbray.org/ongoing/When/200x/2006/01/09/On-XML-Language-Design">words</A>, this attempt to design the framework beforehand fails in its "<cite>overreaching completism, trying to be, in <A href="http://en.wikipedia.org/wiki/Gall's_law">Gall's</A> terms, 'a complex system designed from scratch.'"</cite> He goes on to characterize one of the tenets of <A href="http://en.wikipedia.org/wiki/Agile_software_development">agile development</A> this way:</P>

<P class=quotation>Until you've implemented and deployed a feature, you don't really understand it. So don't try to build multiple layers of features on things you don't really understand.</P>

<P>I subcontracted on a large government contract that demonstrated how to go about it the wrong way. As I discussed in <A href="http://www.benpoint.com/largecontracts.htm">The Large Software Contract Problem</A>, large IT projects are <I>not</I> like highway construction where a much clearer critical path can be drawn to schedule tasks that depend on each other. That certainly presents a challenge but it slowly crystallized for me that the reason this large government contract was on a death march was the fault of its leaders: they were stubbornly spinning their wheels trying to build the architectural framework that would eventually be used to build the end product.</P>

<P class=standout>So much was being implemented under the pretense that it would be part of generating and ensuring the consistency and efficiency of the end solution that they never even approached a satisfactory end solution. After 3 years they had absolutely nothing tangible to show the customer!</P>

<P>Of all the most preposterous absurdities, they chose Oracle Developer 2000 to "help" lay the foundation for this project. Developer 2000 was essentially a framework that never really arrived, even by 2002. But in 1999 they hadn't even started trying to use it before they were figuring out how to work-around certain fundamental characteristics such as some sort of repository that did not support their schema design. Rather than seeing the folly in this, they also had a subcontractor hire a lot of people to pursue the development of a new database framework as well.</P>

<P>When you commit to a framework, whether it is a database development framework or a web community portal or a distributed network component architecture, a significant effort is shifted to installation, configuration and training for that framework. It would be one thing if that framework <I>was</I> the end solution such as a web community that needs no alteration, but then that is not a large project. Actually the problem is often more than a matter of alteration, it involves an attempt to overcome certain shortfalls in the framework, sometimes via a horrid attempt to marry it with yet another framework!</P>

<P>This industry sees wave after wave of application frameworks that come and go. The desire to have a framework is so strong that developers constantly keep turning to the idea of a framework rather than getting on with it! Can you imagine what they might have accomplished in 3 years on the contract mentioned above if instead of chasing frameworks they put all that effort into working closely with selected customers to build a few small tight user interfaces that greatly improved upon existing legacy systems? The problem was that instead of just doing the thing they know how to do, they are hung up on creating this big complex thing that they <I>feel</I> they need.</P>

<P>Early on in the story "<A href="http://discuss.joelonsoftware.com/default.asp?joel.3.219431">Why I Hate Frameworks</A>" it sounds kind of plausible that rather than building the actual tool, they will build the factory that can easily produce the specialized tool.</P>

<P class=quotation>"According to our research, what people really needed wasn't a Universal Hammer after all. It's always better to have the right kind of hammer for the job. So, we started selling hammer factories, capable of producing whatever kind of hammers you might be interested in using."</P>

<P>But the absurdity becomes evident as the same logic continues to find value in abstracting the task one level further out:</P>

<P class=quotation>"As it turns out, people don't want to build an entire factory just to manufacture a couple of hammers. Leave the factory-building up to the factory-building experts, that's what I always say!! ... So we stopped selling those schematics and started selling hammer-factory-building factories."</P>

<P>I <I>used</I> to read books about software development. Now I look more to market dynamics and read stories in business magazines like <A href="http://www.baselinemag.com/">Baseline</A> about how inspired people strike the right balance of passion, action, and design.</P>

<P class=standout>In large projects you desperately need a strong technical leader to plot a pragmatic course keeping all eyes on the prize. But too often I find that people who focus on software development principles have an affliction that I call "building the machine that will build the machine."</P>

<P>Ben Bernanke, who succeeded Alan Greenspan as chairman of the Federal Reserve, explains the difficult nature of economics by comparing it to "<cite>learning how to repair a car while it is still running</cite>". That is one of the necessities of dealing with something as large and complex as the economy or (I would argue) IT solutions in major institutions. Starting over from scratch with a fresh new framework is simply not a viable option.</P>

<P class=notetop></P>
<P class=notetext><img src="http://www.benpoint.com/comment.bmp"/> see discussion at Joel's forum:<BR><A href="http://discuss.joelonsoftware.com/default.asp?joel.3.290075">http://discuss.joelonsoftware.com/default.asp?joel.3.290075</A></P>
<P class=notesig>note by original poster Ben Bryant, 18 Jan 2006 22:32:00 -0500</P>




]]></description>
</item>
<item>
<title>Why Michael Kaplan is the Ideal Dev Blogger</title>
<link>http://www.benpoint.com/kaplan.htm</link>
<guid isPermaLink="false">kaplan.htm</guid>
<pubDate>Sat, 07 Jan 2006 16:00:00 GMT</pubDate>
<category>Business of Software</category>
<description><![CDATA[


<P>Microsoft bloggers have a new star in their midst with Michael Kaplan who began his prolific blog over a year ago. <A href="http://www.joelonsoftware.com/items/2005/08/10.html">Praised</A> by Joel Spolsky, Michael is a natural blogger since he was always active in the newsgroups and wrote a highly regarded <a href="http://www.amazon.com/exec/obidos/redirect?link_code=as2&path=ASIN/0672319772&tag=benpoint-20&camp=1789&creative=9325">book</a> some time ago too. I don't know if it is a good thing to shamelessly heap more praise on him, but it shouldn't do much harm because no one will know about it: I have <I>at most</I> 2 or 3 people reading my blog (and one of them is me)! Anyway, Michael is hands down my favorite blogger of 2005.</P>

<P>The theme of his blog, <a href="http://blogs.msdn.com/michkap/">Sorting It All Out</a>, is internationalization with some straying into adventures at conferences and travels and there is a supporting cast of regulars commenting, most noteably Mihai Nita, an Internationalization MVP who is a great contributor. It might strike one at first as very Windows-centric and technical, but actually his subject area looks outward to the cultures of the world as well as the <A href="http://unicode.org/">Unicode Consortium</A>, so he escapes the Microsoft-only and techy pigeon holes too.</P>

<P>I follow a few other Microsoft bloggers. <A target=_top href="http://blogs.msdn.com/oldnewthing/default.aspx">Raymond Chen</A> is a great technical insider who likes to explain Windows inner and outer workings such as when he <A href="http://blogs.msdn.com/oldnewthing/archive/2003/07/22/54559.aspx">said</A> the reason you click the Start button to shut down is <cite>the same reason you turn the ignition key to shut off your car</cite>. <A target=_top href="http://blogs.msdn.com/larryosterman/default.aspx">Larry Osterman</A> capitalizes on his oldtimer status by telling stories from the old days at Microsoft like in 1989 when he <A href="http://blogs.msdn.com/larryosterman/archive/2005/02/02/365635.aspx">happened</A> to have David Weise show him some of the early Windows 3.0 stuff that ended up blowing away the competition and making Microsoft what it is today. The best known Microsoft blogger <A target=_top href="http://scoble.weblogs.com/">Robert Scoble</A> is a master of hype but his big mouth gets tiresome. I've watched <A target=_top href="http://www.25hoursaday.com/weblog/default.aspx">Dare Obasanjo</A> active in XML-related discussion groups for a long time, but his blog's running commentary on the latest industry hype and <A href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=f89bf559-922f-4e1c-8b72-e5aeedb84291">delicate jabs</A> at his employer are not his strength (for good criticism of Microsoft, not to mention industry commentary, I prefer a former employee like Joel Spolsky, see <A href="http://www.joelonsoftware.com/articles/fog0000000049.html">Microsoft Goes Bonkers</A>).</P>

<P class=standout>In a new age of company insider bloggers, Michael brings a great balance being critical of <A href="http://blogs.msdn.com/michkap/archive/2005/08/22/454360.aspx">specific</A> Microsoft APIs and documentation while rejecting any outright condemnation of Microsoft. He is a voice of <A href="http://blogs.msdn.com/michkap/archive/2005/07/27/444171.aspx">reason</A> in the face of those zealous critics of Microsoft, and he doesn't toy much with commentary on the overall direction of his company. It is a sign of a writer who has a knack for talking about what he knows rather than trying to talk about what one might think should be talked about just to give his 2 cents. I think this is what makes him a valuable dev (as in developer) blogger.</P>

<P>Michael's primary field is called "internationalization" which in software development refers to the process of making programs capable across multiple languages and cultures of the world. In one sense it is making the world of computers more homogeneous by allowing programs to work in more locales, but in another it is allowing different places to use computers in more unique and culturally sensitive ways.</P>

<P>How important is internationalization in software? We all have implemented or used a sorted list of names in a program such as a list of contacts in an e-mail address book. Look at the following 2 ways of sorting the same group of words from Michael's post <A href="http://blogs.msdn.com/michkap/archive/2005/12/29/508045.aspx">What's a secondary distinction?</A></P>

<P><TABLE><TR><TD>
<P><ul>
<li>a</li> 
<li>&#x0101;</li>
<li>&#x0101;bols</li>
<li>ala</li>
<li>auns</li>
<li>&#x0101;zis</li>
<li>b</li>
</ul></P>
</TD><TD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD><TD>
<P><ul>
<li>a</li>
<li>ala</li>
<li>auns</li>
<li>&#x0101;</li>
<li>&#x0101;bols</li>
<li>&#x0101;zis</li>
<li>b</li>
</ul></P>
</TD></TR></TABLE></P>

<P>The simplest concept of comparing strings is to set up the underlying values of each letter so that <B>a</B> sorts before <B>&#x0101;</B> which sorts before <B>b</B> right? Not so fast! The problem is that a word starting with <B>&#x0101;</B> can sort <I>before</I> a word starting with <B>a</B> depending on the remainder of the word! The algorithm producing the list on the left is much more useful to someone scanning by eye than the one on the right, but it is harder to implement.</P>

<P>Well, this issue already existed in English with sorting uppercase <B>A</B> together with lowercase <B>a</B>. These are letters that behave as if they are the same unless all the others being compared are the same too. If you convert all strings to the same case and then sort, you still need to go back to the original case and re-compare when the same-case versions are identical. With European text you add <B>&#x0100;</B> and <B>&#x0101;</B> (and many more) to this same process.</P>

<P>And here's another problem. Different locales have different sorting practices. In the Swedish <A href="http://blogs.msdn.com/michkap/archive/2004/12/08/278170.aspx">system</A>, <cite><B>&#x00c5;</B> and <B>&#x00d6;</B> are both considered to be separate letters that sort after <B>Z</B>, rather than being treated as an <B>A</B> and an <B>O</B> with accessories (diacritics)</cite>. What the Microsoft operating system is now beginning to facilitate is the ability to sort the list based on a computer's locale configuration so that the same list might be displayed in a culturally appropriate order based on where it is viewed.</P> 

<P>But this is nothing so far! Michael also gets into some pretty obscure stuff like the fact that in French the diacritics are evaluated from right to left (<A href="http://blogs.msdn.com/michkap/archive/2004/12/31/344739.aspx">French collation: When diacritical becomes diabolical</A>) and I haven't even mentioned things like pronunciation sorting in Asian languages.</P>

<P><ul>
<li>cote (dimension)</li> 
<li>c&#x00f4;te (coast)</li>
<li>cot&#x00e9; (with dimensions)</li>
<li>c&#x00f4;t&#x00e9; (side)</li>
</ul></P>

<P>Internationalization is a huge looming area of software development that has not yet quite found its place in the hearts and minds of average engineers, or in operating systems and databases for that matter. But I don't care about that. I am not going to urge companies to internationalize their software because it is "the right thing to do", or because "it will be better in the long run". That sentiment reminds me too much of the Y2K craze which I believe was way over-hyped.</P>

<P>But what impresses me about internationalization is that people like Michael Kaplan are building an amazing depth of language and culture functionality into the Windows platform that users will inevitably come to depend upon and expect. And what is still being worked out is which parts of all this can be built into the operating system and which parts will be the responsibility of the client software developers. Unicode capability and compliance with regional settings will eventually be expected by users and the marketplace will be the driving force to promote these features in software.</P>

<P>Internationalization support may end up being the biggest differentiator of all between Windows and other operating systems because of the complexity of <A href="http://blogs.msdn.com/michkap/archive/2005/12/23/506887.aspx">implementing</A> the evolving Unicode standard with its text that mixes left to right with right to left scripts and its rules for rendering of fonts and combining diacritical marks, together with sorting and regional settings like numbers and dates. So riding this new wave, and by exposing these developments right down in the nitty gritty details like in <A href="http://blogs.msdn.com/michkap/archive/2005/12/30/508233.aspx">thoughts about the Indic keyboard layouts</A>, Michael is providing a valuable service to developers in or out of the Microsoft camp.</P>

<P class=standout>It is ominous to realize that due to Windows dominance the developers at Microsoft are making choices every day that will impact the very languages and cultural practices their platform is interfacing with.</P>

<P>Keyboard layouts, word processing, calendars, fonts, and text sorting affect social practices with respect to text layout and appearance, scheduling appointments, listing names, shortforms used, makeshift spellings (can you imagine having to use a lowercase <B>i</B> without a dot? The equivalent of this is common in other languages that have to work around platform shortfalls), as well as naming and differentiation of languages and dialects (<A href="http://blogs.msdn.com/michkap/archive/2006/01/05/509100.aspx">e.g.</A> Urdu vs. Arabic). Here is a thought provoking question from <A href="http://blogs.msdn.com/michkap/archive/2005/12/17/505062.aspx">Sometimes, tech companies cannot take sides</A>:</P>

<P class=quotation>How easy would it be to claim that your opinion on Taiwan, or Macedonia, or Kashmir, or Pakistan was the right opinion, and cite as one of the many proofs that Windows does things a particular way that establishes the point?</P>

<P>I find it reassuring that Michael has become a key player because I think he'll have a level-headed influence. His blog brings the Microsoft inside track together with a knack for blogging and a balanced practical attitude on an important subject area. 'Nuff said!</P>




]]></description>
</item>
</channel>
</rss>
