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

<channel>
	<title>Bruce F. Webster &#187; Software engineering</title>
	<atom:link href="http://brucefwebster.com/category/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://brucefwebster.com</link>
	<description>Making IT work since 1974.</description>
	<lastBuildDate>Tue, 20 Mar 2012 23:04:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>A new proposed role &#8212; the &#8220;IT Czar&#8221;</title>
		<link>http://brucefwebster.com/2010/01/26/a-new-proposed-role-the-it-czar/</link>
		<comments>http://brucefwebster.com/2010/01/26/a-new-proposed-role-the-it-czar/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 16:29:42 +0000</pubDate>
		<dc:creator>bfwebster</dc:creator>
				<category><![CDATA[Art of 'Ware]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://brucefwebster.com/?p=187</guid>
		<description><![CDATA[My co-author and good friend Ruby Raley pointed me to this posting by Chris Curran over a possible new IT role, that of the &#8220;IT Czar&#8221;. Chris specifically uses a rebuilding-the-football-team analogy: What is interesting about Holmgren’s hire is that it is modeled after Bill Parcells role at Miami – The Football Czar.  He’s not [...]]]></description>
			<content:encoded><![CDATA[<p>My co-author and good friend Ruby Raley pointed me to <a href="http://www.ciodashboard.com/leadership/it-czar-leadership-role/">this posting by Chris Curran over a possible new IT role, that of the &#8220;IT Czar&#8221;</a>. Chris specifically uses a rebuilding-the-football-team analogy:</p>
<blockquote><p>What is interesting about Holmgren’s hire is that it is modeled after Bill Parcells role at Miami – The Football Czar.  He’s not the head coach and he’s not the GM (who usually handles personnel).  Instead, he is something else.  It is a role that leverages his expertise as a position coach, a head coach and a GM.  One that sees the bigger picture and is able to evaluate players AND coaches from a fresh and more independent perspective.  It is a position created to drive the “rebuilding” of a program – something Miami and Cleveland badly need.  In Parcells’ case, he took an 1-15 team and got it into the playoffs the next year with an 11-5 record.  Part of the Parcells formula is to bring in a core of coaches and players that he trusts and who know his systems, both offensively and defensively.</p></blockquote>
<p>Be sure to read Curran&#8217;s entire post, plus the robust debate in the comments that follow it.</p>
<p>Of course, Ruby and I also used the football analogy a few years ago in suggesting <a href="http://brucefwebster.com/2008/04/14/the-longest-yard-reorganizing-it-for-success/">a radically different approach to IT organization and leadership</a>. As we wrote:</p>
<blockquote><p>The bad news is that, unlike in football, the business and IT sides of a firm don’t always agree on what constitutes a &#8216;victory&#8217; (even though both sides can usually agree on what a &#8216;loss&#8217; is, at least in cases of total or significant project failure). Indeed, sometimes they cannot fully agree on what the <em>game </em>is.</p></blockquote>
<p>Curran&#8217;s IT Czar role could in theory solve that; I like his proposals and approach, and, of course, I like the sports team analogy.</p>
<p>The problem is, it&#8217;s hard to see how upper management would treat or perceive it as being any different from the current CIO role. Both as a consultant and as an expert witness, I&#8217;ve had lots of opportunity to see just how  constrained the CIO slot can be in large organizations. A lot of the blame for that rests squarely upon the CEO and other CxO leaders, both in terms of whom they select for the CIO job and how they define/constrain that job. CIOs tend to be selected from business-types with some technical background, as opposed to technical types with some business background. Curran&#8217;s analogy (e.g., Bill Parcells) suggests that the czar be someone who has been down in the trenches (e.g., position and head coach) and knows what day-to-day IT development requires, but that&#8217;s not who usually gets picked.</p>
<p>The closest model to an IT Czar that I&#8217;ve seen that has worked were the various corporate Y2K &#8216;czars&#8217; who were appointed 10+ years ago to save the officers and directors from any Y2K liability, and thus were given lots of power and pretty free rein. (A joke from those times &#8212; Q: What&#8217;s the difference between a terrorist and a corporate Y2K director? A: You can negotiate with the terrorist.) An IT czar appointed to &#8216;turn around&#8217; an organization&#8217;s IT efforts would have to be given that same power and freedom. That is not likely to happen unless, as with Y2K, the corporate officers and directors see themselves at risk &#8212; professionally, legally, financially and/or personally. Otherwise, as noted above, the &#8220;IT Czar&#8221; would be just another CIO.  ..bruce..</p>
]]></content:encoded>
			<wfw:commentRss>http://brucefwebster.com/2010/01/26/a-new-proposed-role-the-it-czar/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HR 3200 from a systems design perspective (Part II)</title>
		<link>http://brucefwebster.com/2009/09/08/hr-3200-from-a-systems-design-perspective-part-ii/</link>
		<comments>http://brucefwebster.com/2009/09/08/hr-3200-from-a-systems-design-perspective-part-ii/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 15:50:44 +0000</pubDate>
		<dc:creator>bfwebster</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Complex systems]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Risk management]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://brucefwebster.com/?p=147</guid>
		<description><![CDATA[In the first part of this three-part series, I briefly outlined the parallels between developing software and crafting legislation, while pointing out the great risks and issues in the latter. I also indicated what I felt were some of the general structural flaws  in HR 3200, the House bill on health care reform &#8212; not [...]]]></description>
			<content:encoded><![CDATA[<p>In the first part of this three-part series, <a href="http://brucefwebster.com/2009/09/07/hr-3200-from-a-systems-design-perspective-part-i/"><strong>I briefly outlined the parallels between developing software and crafting legislation</strong></a>, while pointing out the great risks and issues in the latter. I also indicated what I felt were some of the general structural flaws  in HR 3200, the House bill on health care reform &#8212; not criticizing any actual proposals, but rather highlighting some of the design and implementation problems that make it hard to understand <a href="http://www.opencongress.org/bill/111-h3200/text"><strong>HR 3200</strong></a> and even harder to predict its consequences.</p>
<p>Here in Part II, I&#8217;ll talk about some of the well-established maxims and heuristics of complex systems development, and how they apply to legislation in general and to HR 3200 in particular. (More after the jump.)</p>
<p><span id="more-147"></span></p>
<h3>Gall</h3>
<p>As far as I can tell, John Gall &#8212; in his out-of-print book <strong><a href="http://www.amazon.com/Systemantics-Systems-Work-Especially-They/dp/0671819100/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1252413293&amp;sr=1-1">Systemantics</a> </strong>(1976)&#8211; was the first to observe in print that</p>
<blockquote><p><strong>A</strong> <strong>complex system that works is found to have invariably evolved from a simple system that worked</strong>. (p. 80, 1978 paperback edition).</p></blockquote>
<p>Immediately after, he observes that:</p>
<blockquote><p><strong>A</strong><strong> complex system designed from scratch never works and cannot be made to work. You have to started over,  beginning with a working simple system</strong>.</p></blockquote>
<p>My co-blogger (over at ASIP) Bruce Henderson puts this another way:</p>
<blockquote><p><strong>Start out stupid, and work up from there</strong>.</p></blockquote>
<p>There is large room for differing arguments here as to just where HR 3200 fits in, for several reasons.</p>
<p>First, HR 3200 isn&#8217;t &#8220;designed from scratch.&#8221; As noted in <a href="http://brucefwebster.com/2009/09/07/hr-3200-from-a-systems-design-perspective-part-i/">Part I</a>, many sections of HR 3200 are modifying various existing laws and regulations, such as the Internal Revenue Code, the Public Health Service Act, Employee Retirement Income Security Act, the Social Security Act, and the United States Code.</p>
<p>However, leveraging upon and modifying several existing systems is not the same as building a &#8220;simple system that works&#8221; and evolving it into a complex system that works. I can create a large, complex piece of software that calls upon and even modifies existing systems and libraries &#8212; but that doesn&#8217;t necessarily mean I&#8217;m evolving something from a &#8220;small, simple system that works&#8221;. This is especially true when I&#8217;m pulling together from several disjoint or unrelated systems (such as those listed above).</p>
<p>Second, legislation is more robust than software, for exactly the differences outlined in part I, namely that legislation is executed by people rather than machines and operating systems. If I create an ill-formed piece of software, there&#8217;s a good chance it won&#8217;t even compile (or interpret); if it does, then it may run into linking or integration errors; and if it gets past those, it may crash, lock up, or behave bizarrely upon execution.</p>
<p>If, however, I create an ill-formed piece of legislation, it can be (and often is!) be put into practice, with various human either officially or unofficially working around the defects to make it &#8220;work&#8221;. Of course, that &#8216;deployment&#8217; of the legislation may end up drifting or even veering sharply from the stated or actual intent of the legislation. (In a way, this is reminiscent of the early PL/1 compilers that would, upon encountering a syntax error, make a best guess as to what you might have meant to write and compile that instead.)</p>
<p>Courts can shift this &#8216;deployment&#8217; in both directions. They may &#8220;find&#8221; meaning or functionality in the law never contemplated or even explicitly disavowed by those who crafted and voted for the legislation, or they may prohibit some portion of explicit functionality due to conflicts with the Constitution, prior judicial rulings, or simply their own judgment.  As noted in Part I, judges don&#8217;t always agree with one another, either, so whether a given piece of legislation (or a subportion thereof) is upheld, modified, or rejected entirely depends upon which courts or individual judges end up reviewing it.</p>
<p>Third, there are serious and compelling arguments as to how well the current government health care programs (such as Medicare and the VA hospital system) work, not to mention the government systems modified and relied upon by HR 3200 (such as the IRS and Social Security). While you may argue with Gall&#8217;s maxims above, I know of no serious systems designer who will state that it is possible to build a large, complex system that works from complex systems that work poorly, if at all. The quality of your original and leveraged systems provides <strong>an upper bound</strong> on the quality of your final system. To believe otherwise is to <a href="http://www.sciencecartoonsplus.com/gallery/math/math07.gif">succumb to wishful thinking</a>.</p>
<h3>Maier and Rechtin</h3>
<p>In <a href="http://www.amazon.com/Art-Systems-Architecting-Third-Engineering/dp/1420079131/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1252412758&amp;sr=1-1"><strong>The Art of Systems Architecting</strong></a> by Mark W. Maier and Eberhardt Rechtin (2002), the authors take a cross-discipline approach to systems architecting, including talking specifically about social systems in Chapter 5. The following passage from that chapter is of particular relevance to the overall purpose of HR 3200 (all emphasis in the original):</p>
<blockquote><p>The first insight, which might be called <strong>the four whos</strong>, asks four questions that need to be answered <em>as a self-consistent set</em> if the system is to succeed economically; namely,<strong> who benefits? who pays? who provides? and, as appropriate, who loses? </strong></p></blockquote>
<p>The political arguments raging over HR 3200 are exactly over those four questions. In fact, Maier and Rechtin themselves foresaw those arguments, since they go on to use health care as an example:</p>
<blockquote><p>Example: serious debates over the nature of their public health services are underway in many countries, triggered in large part by the technological advances of the last few decades. These advances have made it possible for humanity to live longer and in better health, but the investments in those gains are considerable. The answer to the four whos are at the crux of the debate. Who benefits &#8212; everyone equally at all levels of health? Who pays &#8212; regardless of personal health or based on need and ability to pay? Who provides &#8212; and determines cost to the user? Who loses &#8212; anyone out of work or above some risk level, and who determines who loses?</p></blockquote>
<p>The problem with HR 3200 and with the arguments put forth to date on its behalf is that they have not systematically and credibly addressed those four questions. In fact, those arguing in support of HR 3200 and health care reform in general have often given contradictory answers to those four questions, undermining their own credibility, given ammo to their opposition, and (justifiably) undermining public support for HR 3200.</p>
<p>Along those lines, the authors also note that in architecting social systems, you face not just the constraints of normal system design &#8212; risk, performance, schedule, and cost &#8212; but two more: <strong>perception vs. facts</strong>. They go on to say:</p>
<blockquote><p>Social systems have generated a painful design heuristic: <strong>it&#8217;s not the facts, it&#8217;s the perception that counts</strong>. Some real-world examples: . . .</p>
<ul>
<li>One of the reasons that health insurance is so expensive is that health care is perceived by employees as nearly &#8220;free&#8221; because almost all its costs are paid for either by the the employee&#8217;s company or the government. The facts are that the costs are either passed on to the consumer, subtracted from wages and salary, taken as a business deduction against taxes, or all of the above. There is no free lunch.</li>
</ul>
</blockquote>
<p>Again, with great relevance to the current debate over HR 3200 and the whole approach of the House over health care reform, the authors state:</p>
<blockquote><p>Like it or not, the architect must understand that perceptions can be just as real as facts, just as important in defining the system architecture, and just as critical in determining success. As one heuristic states: <strong>the phrase, &#8216;I hate it&#8217;, is direction</strong>. There have even been times when, in retrospect, perceptions were &#8220;truer&#8221; than facts which changed with observer, circumstance, technology, and better direction. . . . In the end, it is a matter of achieving a balance of perceived values. The architect&#8217;s task is to search out that area of common agreement that can result in a desirable, feasible system.</p></blockquote>
<p>Maier and Rechtin end Chapter 5 with some heuristics they consider specific to social systems. Several are those already cited above, but here are a few additional ones (my comments are in brackets):</p>
<blockquote><p><strong>Success is the eye of the beholder</strong> [i.e., the US public] <strong>(not the architect</strong> [i.e., Congress]<strong>).</strong></p></blockquote>
<blockquote><p><strong>Don&#8217;t assume that the original statement of the problem</strong> [e.g., "45 million uninsured"] <strong>is necessarily the best, or even the right one. (Most customers would agree.)</strong></p></blockquote>
<blockquote><p>I<strong>n social systems, <em>how </em>you do something may be more important than <em>what </em>you do. (A sometimes bitter lesson for technologists</strong> [and Congress] <strong>to learn.)</strong></p></blockquote>
<blockquote><p>I<strong>t&#8217;s easier to change the technical elements of a social system than the human ones (enough said).</strong></p></blockquote>
<p>Maier and Rechtin have an entire appendix at the end of the book on heuristics for system-level architecting. Most of these are intended for software and hardware architecting; however, several have bearing for HR 3200 and the general effort for health care reform.</p>
<blockquote><p><strong>Plan to throw one away; you will anyway. </strong></p></blockquote>
<p>This comes from Fred Brooks&#8217; classic work, <a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1252422286&amp;sr=8-1"><strong>The Mythical Man-Month</strong></a>, and appears to be highly relevant to what&#8217;s going on right now in Congress, where both <a href="http://politicalticker.blogs.cnn.com/2009/08/17/blue-dog-excellent-idea-to-start-over-on-health-care/">conservative Democrats</a> and <a href="http://www.cleveland.com/nation/index.ssf/2009/09/mccain_mitch_mcconnell_urge_st.html">Republicans</a> are suggesting that the best approach right now would be to start over again.</p>
<blockquote><p><strong>In architecting a new [software] program all the serious mistakes are made in the first day</strong>.</p></blockquote>
<p>As someone who has been dealing since 1995 with failed or troubled IT projects, I find that this is the maxim I keep coming back to. I think that the Obama Administration and the Democratic leadership in Congress badly miscalculated public support for rushing sweeping (and unexamined) health care reform into law given the profound economic problems facing the country (not to mention the massive Federal deficits).</p>
<blockquote><p><strong>Given a successful organization or system with valid criteria for success, there are some things it cannot do &#8212; or at least not do well. Don&#8217;t force it! </strong></p></blockquote>
<p>As noted in Part I, HR 3200 is &#8220;kitchen sink&#8221; legislation, trying to accomplish a variety of changes that are not necessarily related or dependent. I suspect that Obama and Congress would have been far more successful with a series of small, focused bills that had clear goals <em>and</em> clear limits. The problem with HR 3200 is that by trying to cover so much ground, it merely increases the overall size of the opposition &#8212; people with objections to a specific portion of HR 3200 find themselves uniting (directly or indirectly) with those objecting to other portions of HR 3200. By recasting HR 3200 into smaller, well-defined chunks, the opposition to any given chunk becomes smaller as well, increasing that bill&#8217;s chances of passage.</p>
<blockquote><p><strong>Group elements that are strongly related to each other, separate elements that are unrelated.</strong></p></blockquote>
<p>The shorthard version of this in software design is &#8220;high cohesion within a module, loose coupling between modules&#8221;. This is another argument for breaking up health care reform into smaller, well-defined and clearly-focused chunks.</p>
<blockquote><p><strong>If you don&#8217;t understand the existing system, you can&#8217;t be sure you&#8217;re re-architecting a better one. </strong></p></blockquote>
<p>And, I might add, if you don&#8217;t understand the <em>proposed </em>system, you can&#8217;t be sure it&#8217;s a better one. It is unclear that most of the members of Congress who are pushing HR 3200 understand either the current US health care system or HR 3200 itself (and all its implications).</p>
<p>I could include many more maxims here, but you are better off getting Maier and Rechtin&#8217;s book and reading it for yourself.</p>
<p><em>Part III will suggest a different approach to health care legislation using good practices from systems development and software engineering.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://brucefwebster.com/2009/09/08/hr-3200-from-a-systems-design-perspective-part-ii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HR 3200 from a systems design perspective (Part I)</title>
		<link>http://brucefwebster.com/2009/09/07/hr-3200-from-a-systems-design-perspective-part-i/</link>
		<comments>http://brucefwebster.com/2009/09/07/hr-3200-from-a-systems-design-perspective-part-i/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 01:51:40 +0000</pubDate>
		<dc:creator>bfwebster</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Complex systems]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Risk management]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://brucefwebster.com/?p=139</guid>
		<description><![CDATA[[Welcome Slashdotters -- feel free to leave comments here or there. But no debates on health care reform or what HR 3200 does or does not do, please -- just on the concept itself.] [Part II is now up.] On the occasions where I have reviewed the actual text of major legislation, I have been [...]]]></description>
			<content:encoded><![CDATA[<p>[<em>Welcome Slashdotters -- feel free to leave comments here or there.</em> <em>But no debates on health care reform or what HR 3200 does or does not do, please -- just on the concept itself.</em>]</p>
<p>[<a href="http://brucefwebster.com/2009/09/08/hr-3200-from-a-systems-design-perspective-part-ii/"><em>Part II is now up</em></a>.]</p>
<p>On the occasions where I have reviewed the actual text of major legislation, I have been struck by the parallels between legislation and software, particularly in terms of the pitfalls and issues with architecture, design, implementation, testing, and deployment. Some of the tradeoffs are even the same, such as trading off the risk of &#8220;analysis paralysis&#8221; (never moving beyond the research and analysis phase) and the risks of unintended consequences from rushing ill-formed software into production. Yet another similarity is that both software and legislation tend to leverage off of, interact with, call upon, extend, and/or replace existing software and legislation.  Finally, the more complex a given system or piece of legislation is, the less likely that it will achieve the original intent.</p>
<p>But there are some critical differences that make legislation design both harder and higher-risk than systems design. (More after the jump.)</p>
<p><span id="more-139"></span></p>
<h2>Software vs. Legislation</h2>
<p>First, software is designed for a target or reference system; you can in theory predict or constrain its behavior, and its behavior is largely repeatable.</p>
<p>Legislation, by contrast, is executed by humans, with wide latitude for interpretation and implementation, as well as misunderstandings, disagreements on meaning, and on-the-fly modifications.</p>
<p>Second, software typically has several layers of independent (non-human) syntactic, semantic, and integration checking that it of necessity goes through before deployment (though plenty of defects can and do  slip through).</p>
<p>Legislation, by contrast, is written in a natural (human) language, with all its gaps, faults, and ambiguities, and with nothing to force error checking in syntax, semantics, and integration; there&#8217;s no way of &#8220;<a href="http://en.wikipedia.org/wiki/Compiler">compiling</a>&#8220;, &#8220;<a href="http://en.wikipedia.org/wiki/Link_editor">linking</a>&#8221; and doing a test run of the legislation in a limited environment before it becomes the (largely irrevocable) law of the land.</p>
<p>Third, because of the previous two factors, two or more software engineers can typically reach professional agreement on what a given section of source code will do; if they continue to disagree, there are standard tools and methods by which they can objectively demonstrate how the software will behave, either exactly or within general limits.</p>
<p>By contrast, and due to the corresponding factors with legislation, two or more people (legislators, executives, judges, and citizens) can interpret a given section of legislation quite differently, and each may well have a defensible position, due to the potentially wide latitude of and arena for interpretation.</p>
<h2>Some Design Flaws of HR 3200</h2>
<p>This all comes to mind as I have been reviewing <strong><a href="http://www.opencongress.org/bill/111-h3200/text">HR 3200</a></strong>, aka the House bill on health care reform. While I am neither a legislator nor a lawyer (though I have <a href="http://brucefwebster.com/presentationstestimony/">worked closely with lawyers </a>for a decade), I am <a href="http://brucefwebster.com/professional-background/">a professional software architect/engineer</a>, and <a href="http://brucefwebster.com/publications/">a professional writer</a>, who has worked in the IT field for 35 years. From that point of view, I believe HR 3200 will exhibit profound problems and unintended (or unclaimed) consequences if passed. Here are some of reasons why.</p>
<p>To begin with, HR 3200 suffers from all the problems listed above with legislation. It is written in English, and complex, obscure, jargon-laden English at that. Many of the sections are imprecise and/or incomplete, leaving large amounts of interpretation and implementation to unelected humans. Many of the objections to HR 3200 come from this very problem, including the concern that the ambiguity is deliberate and intended to open doors to politically unpalatable consequences.</p>
<p>HR 3200 is also massive and very complex &#8212; over 1000 pages in printed form, with hundreds of sections. For its sheer length alone, it is difficult to understand and interpret, but (as indicated below) there are other factors that make overall comprehension nearly impossible. It also makes after-the-fact revocation or even modification extremely difficult.</p>
<p>Much of HR 3200 makes piecemeal modifications to existing legislation, often with little explanation as to intent and consequences. So, for example:</p>
<blockquote>
<h3>SEC. 1148. DURABLE MEDICAL EQUIPMENT PROGRAM IMPROVEMENTS.</h3>
<p>&#8230;</p>
<p>(c) Treatment of Current Accreditation Applications- Section 1834(a)(20)(F) of such Act (42 U.S.C. 1395m(a)(20)(F)) is amended&#8211;</p>
<p style="padding-left: 30px">(1) in clause (i)&#8211;</p>
<p style="padding-left: 60px">(A) by striking ‘clause (ii)’ and inserting ‘clauses (ii) and (iii)’;</p>
<p style="padding-left: 60px">(B) by striking ‘and’ at the end;</p>
<p style="padding-left: 30px">(2) by striking the period at the end of clause (ii)(II) and by inserting ‘; and’; and</p>
<p style="padding-left: 30px">(3) by adding at the end the following:</p>
<p style="padding-left: 60px">‘(iii) the requirement for accreditation described in clause (i) shall not apply for purposes of supplying diabetic testing supplies, canes, and crutches in the case of a pharmacy that is enrolled under section 1866(j) as a supplier of durable medical equipment, prosthetics, orthotics, and supplies.</p>
<p>Any supplier that has submitted an application for accreditation before August 1, 2009, shall be deemed as meeting applicable standards and accreditation requirement under this subparagraph until such time as the independent accreditation organization takes action on the supplier’s application.’</p></blockquote>
<p>This happens repeatedly throughout HR 3200; in fact, one entire portion (Division A, Title IV) is labeled &#8220;AMENDMENTS TO INTERNAL REVENUE CODE OF 1986&#8243;. This makes it difficult &#8212; beyond the ambiguities of the language itself &#8212; to determine just what is being modified and what the potential implications are.</p>
<p>HR 3200 also suffers in places from what a software engineer would call &#8220;<a href="http://en.wikipedia.org/wiki/Spaghetti_code">spaghetti coding</a>&#8220;. In other words, a given section within HR 3200 (and there appear to be hundreds of them; numbers go from 100 up through 2531 and appear in numeric order, but there are many gaps along the way) will reference several other sections elsewhere in HR 3200, both above and below. Furthermore, it often requires careful reading going back pages to see whether a reference to a given section is to a section within HR 3200 itself or a section in existing legislation (such as the Internal Revenue Service code).</p>
<p>HR 3200 also comes across as similar to a &#8220;kitchen sink&#8221; application, that is, a single piece of legislation that attempts to do far too much.  I will finish Part I with the table of contents for HR 3200 to give you a sense of all that it is attempting to do. Note that these divisions, titles, and subtitles could have been broken up into individual legislation.</p>
<p>Finally, HR 3200 embodies what is commonly known in software engineering as a &#8220;big bang&#8221; approach to systems development. In other words, HR 3200 attempts a massive and ill-understood (and/or ill-specified) modification to the nation&#8217;s health care system (roughly 1/6th of the economy) in one fell swoop. As such, it really represents the worst excesses of the waterfall development lifecycle, with deployment being hard or impossible to reverse.</p>
<p><a href="http://brucefwebster.com/2009/09/08/hr-3200-from-a-systems-design-perspective-part-ii/"><em>Part II discusses software architecture and development maxims, laws, and rules of thumb that appear to have application to creating legislation as well.</em></a></p>
<p><em>Part III will suggest a different approach to health care legislation using good practices from systems development and software engineering. </em></p>
<h3>H.R.3200 &#8211; America&#8217;s Affordable Health Choices Act of 2009 (table of contents)</h3>
<p>DIVISION A&#8211;AFFORDABLE HEALTH CARE CHOICES</p>
<p style="padding-left: 30px">TITLE I&#8211;PROTECTIONS AND STANDARDS FOR QUALIFIED HEALTH BENEFITS PLANS</p>
<p style="padding-left: 60px">Subtitle A&#8211;General Standards</p>
<p style="padding-left: 60px">Subtitle B&#8211;Standards Guaranteeing Access to Affordable Coverage</p>
<p style="padding-left: 60px">Subtitle C&#8211;Standards Guaranteeing Access to Essential Benefits</p>
<p style="padding-left: 60px">Subtitle D&#8211;Additional Consumer Protections</p>
<p style="padding-left: 60px">Subtitle E&#8211;Governance</p>
<p style="padding-left: 60px">Subtitle F&#8211;Relation to Other Requirements; Miscellaneous</p>
<p style="padding-left: 60px">Subtitle G&#8211;Early Investments</p>
<p style="padding-left: 30px">TITLE II&#8211;HEALTH INSURANCE EXCHANGE AND RELATED PROVISIONS</p>
<p style="padding-left: 60px">Subtitle A&#8211;Health Insurance Exchange</p>
<p style="padding-left: 60px">Subtitle B&#8211;Public Health Insurance Option</p>
<p style="padding-left: 60px">Subtitle C&#8211;Individual Affordability Credits</p>
<p style="padding-left: 30px">TITLE III&#8211;SHARED RESPONSIBILITY</p>
<p style="padding-left: 60px">Subtitle A&#8211;Individual Responsibility</p>
<p style="padding-left: 60px">Subtitle B&#8211;Employer Responsibility</p>
<p style="padding-left: 30px">TITLE IV&#8211;AMENDMENTS TO INTERNAL REVENUE CODE OF 1986</p>
<p style="padding-left: 60px">Subtitle A&#8211;Shared Responsibility</p>
<p style="padding-left: 60px">Subtitle B&#8211;Credit for Small Business Employee Health Coverage Expenses</p>
<p style="padding-left: 60px">Subtitle C&#8211;Disclosures To Carry Out Health Insurance Exchange Subsidies</p>
<p style="padding-left: 60px">Subtitle D&#8211;Other Revenue Provisions</p>
<p>DIVISION B&#8211;MEDICARE AND MEDICAID IMPROVEMENTS</p>
<p style="padding-left: 30px">TITLE I&#8211;IMPROVING HEALTH CARE VALUE</p>
<p style="padding-left: 60px">Subtitle A&#8211;Provisions Related to Medicare Part A</p>
<p style="padding-left: 60px">Subtitle B&#8211;Provisions Related to Part B</p>
<p style="padding-left: 60px">Subtitle C&#8211;Provisions Related to Medicare Parts A and B</p>
<p style="padding-left: 60px">Subtitle D&#8211;Medicare Advantage Reforms</p>
<p style="padding-left: 60px">Subtitle E&#8211;Improvements to Medicare Part D</p>
<p style="padding-left: 60px">Subtitle F&#8211;Medicare Rural Access Protections</p>
<p style="padding-left: 30px">TITLE II&#8211;MEDICARE BENEFICIARY IMPROVEMENTS</p>
<p style="padding-left: 60px">Subtitle A&#8211;Improving and Simplifying Financial Assistance for Low Income Medicare Beneficiaries</p>
<p style="padding-left: 60px">Subtitle B&#8211;Reducing Health Disparities</p>
<p style="padding-left: 60px">Subtitle C&#8211;Miscellaneous Improvements</p>
<p style="padding-left: 30px">TITLE III&#8211;PROMOTING PRIMARY CARE, MENTAL HEALTH SERVICES, AND COORDINATED CARE</p>
<p style="padding-left: 30px">TITLE IV&#8211;QUALITY</p>
<p style="padding-left: 60px">Subtitle A&#8211;Comparative Effectiveness Research</p>
<p style="padding-left: 60px">Subtitle B&#8211;Nursing Home Transparency</p>
<p style="padding-left: 60px">Subtitle C&#8211;Quality Measurements</p>
<p style="padding-left: 60px">Subtitle D&#8211;Physician Payments Sunshine Provision</p>
<p style="padding-left: 60px">Subtitle E&#8211;Public Reporting on Health Care-Associated Infections</p>
<p style="padding-left: 30px">TITLE V&#8211;MEDICARE GRADUATE MEDICAL EDUCATION</p>
<p style="padding-left: 30px">TITLE VI&#8211;PROGRAM INTEGRITY</p>
<p style="padding-left: 60px">Subtitle A&#8211;Increased Funding To Fight Waste, Fraud, and Abuse</p>
<p style="padding-left: 60px">Subtitle B&#8211;Enhanced Penalties for Fraud and Abuse</p>
<p style="padding-left: 60px">Subtitle C&#8211;Enhanced Program and Provider Protections</p>
<p style="padding-left: 60px">Subtitle D&#8211;Access to Information Needed To Prevent Fraud, Waste, and Abuse</p>
<p style="padding-left: 30px">TITLE VII&#8211;MEDICAID AND CHIP</p>
<p style="padding-left: 60px">Subtitle A&#8211;Medicaid and Health Reform</p>
<p style="padding-left: 60px">Subtitle B&#8211;Prevention</p>
<p style="padding-left: 60px">Subtitle C&#8211;Access</p>
<p style="padding-left: 60px">Subtitle D&#8211;Coverage</p>
<p style="padding-left: 60px">Subtitle E&#8211;Financing</p>
<p style="padding-left: 60px">Subtitle F&#8211;Waste, Fraud, and Abuse</p>
<p style="padding-left: 60px">Subtitle G&#8211;Puerto Rico and the Territories</p>
<p style="padding-left: 60px">Subtitle H&#8211;Miscellaneous</p>
<p style="padding-left: 30px">TITLE VIII&#8211;REVENUE-RELATED PROVISIONS</p>
<p style="padding-left: 30px">TITLE IX&#8211;MISCELLANEOUS PROVISIONS</p>
<p>DIVISION C&#8211;PUBLIC HEALTH AND WORKFORCE DEVELOPMENT</p>
<p style="padding-left: 30px">TITLE I&#8211;COMMUNITY HEALTH CENTERS</p>
<p style="padding-left: 30px">TITLE II&#8211;WORKFORCE</p>
<p style="padding-left: 60px">Subtitle A&#8211;Primary Care Workforce</p>
<p style="padding-left: 60px">Subtitle B&#8211;Nursing Workforce</p>
<p style="padding-left: 60px">Subtitle C&#8211;Public Health Workforce</p>
<p style="padding-left: 60px">Subtitle D&#8211;Adapting Workforce to Evolving Health System Needs</p>
<p style="padding-left: 30px">TITLE III&#8211;PREVENTION AND WELLNESS</p>
<p style="padding-left: 30px">TITLE IV&#8211;QUALITY AND SURVEILLANCE</p>
<p style="padding-left: 30px">TITLE V&#8211;OTHER PROVISIONS</p>
<p style="padding-left: 60px">Subtitle A&#8211;Drug Discount for Rural and Other Hospitals</p>
<p style="padding-left: 60px">Subtitle B&#8211;School-Based Health Clinics</p>
<p style="padding-left: 60px">Subtitle C&#8211;National Medical Device Registry</p>
<p style="padding-left: 60px">Subtitle D&#8211;Grants for Comprehensive Programs To Provide Education to Nurses and Create a Pipeline to Nursing</p>
<p style="padding-left: 60px">Subtitle E&#8211;States Failing To Adhere to Certain Employment Obligations</p>
<p style="padding-left: 60px">
]]></content:encoded>
			<wfw:commentRss>http://brucefwebster.com/2009/09/07/hr-3200-from-a-systems-design-perspective-part-i/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Five books every IT manager should read&#8230;right now</title>
		<link>http://brucefwebster.com/2008/11/20/five-books-every-it-manager-should-readright-now/</link>
		<comments>http://brucefwebster.com/2008/11/20/five-books-every-it-manager-should-readright-now/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 03:01:39 +0000</pubDate>
		<dc:creator>bfwebster</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Baseline]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Product development]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Surviving Complexity]]></category>

		<guid isPermaLink="false">http://brucefwebster.com/?p=77</guid>
		<description><![CDATA[My latest Baseline column  is up, and it talks about why you should read these five books now, if you haven&#8217;t already. And if you have read them, you should probably re-read them.  ..bruce..]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.baselinemag.com/c/a/IT-Management/The-5-Books-Every-IT-Manager-Should-Read-Right-Now/">My latest Baseline column  is up</a>, and it talks about why you should read these five books now, if you haven&#8217;t already.</p>
<p><a href="http://www.baselinemag.com/c/a/IT-Management/The-5-Books-Every-IT-Manager-Should-Read-Right-Now/"><img class="alignnone" src="http://brucefwebster.com/wp-includes/images/books.jpg" alt="" width="400" height="112" /></a></p>
<p>And if you have read them, you should probably re-read them.  ..bruce..</p>
]]></content:encoded>
			<wfw:commentRss>http://brucefwebster.com/2008/11/20/five-books-every-it-manager-should-readright-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Inside-Out&#8221;: IEEE presentation in Longmont (09/02/08)</title>
		<link>http://brucefwebster.com/2008/08/26/inside-out-ieee-presentation-in-longmont-090208/</link>
		<comments>http://brucefwebster.com/2008/08/26/inside-out-ieee-presentation-in-longmont-090208/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 18:50:44 +0000</pubDate>
		<dc:creator>bfwebster</dc:creator>
				<category><![CDATA[Main]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Quality assurance]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://brucefwebster.com/?p=64</guid>
		<description><![CDATA[On September 2nd, I&#8217;ll be speaking at a meeting of the Denver IEEE Reliability Society. It will be held at 5:30 pm in the Seagate Building in Longmont (CO), on Nelson Road between 75th Rd and Airport Rd. Here&#8217;s my abstract of the talk: INSIDE-OUT: Organizations too often treat software reliability as an &#8216;after the [...]]]></description>
			<content:encoded><![CDATA[<p>On September 2nd, I&#8217;ll be speaking at a meeting of the Denver IEEE Reliability Society. It will be held at 5:30 pm in the <a href="http://maps.google.com/maps?source=ig&amp;hl=en&amp;rlz=&amp;um=1&amp;ie=UTF-8&amp;q=Seagate+Longmont+Nelson+Road&amp;fb=1&amp;cid=0,0,10848858848798040362&amp;sa=X&amp;oi=local_result&amp;resnum=1&amp;ct=image">Seagate Building in Longmont </a>(CO), on Nelson Road between 75th Rd and Airport Rd.</p>
<p>Here&#8217;s my abstract of the talk:</p>
<blockquote><p>INSIDE-OUT: Organizations too often treat software reliability as an &#8216;after the fact&#8217; consideration, performing testing as a last step and then constraining it due to schedule and financial pressures. Webster will present a simple &#8220;inside-out&#8221; software lifecycle model where all software development activing (not just coding) takes place within a framework covering a broad spectrum of quality-related activities.</p></blockquote>
<p>I&#8217;ll post <a href="http://brucefwebster.com/wp-includes/presentations/InsideOut.ppt">the presentation slides</a> here after the talk. ..bruce w..</p>
]]></content:encoded>
			<wfw:commentRss>http://brucefwebster.com/2008/08/26/inside-out-ieee-presentation-in-longmont-090208/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Remembering Ashton&#8217;s Law</title>
		<link>http://brucefwebster.com/2008/07/10/remembering-ashtons-law/</link>
		<comments>http://brucefwebster.com/2008/07/10/remembering-ashtons-law/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 23:47:30 +0000</pubDate>
		<dc:creator>bfwebster</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Product development]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://brucefwebster.com/?p=53</guid>
		<description><![CDATA[The very first class I took when starting my computer science degree from Brigham Young University was CS 131. I forget the course title, but the teacher was Dr. Alan Ashton, a quiet, self-effacing but brilliant professor who would later become very, very rich by developing &#8212; along with Bruce Bastian (with whom I shared [...]]]></description>
			<content:encoded><![CDATA[<p>The very first class I took when starting my computer science degree from Brigham Young University was CS 131. I forget the course title, but the teacher was <a href="http://en.wikipedia.org/wiki/Alan_Ashton_(executive)">Dr. Alan Ashton</a>, a quiet, self-effacing but brilliant professor who would later become very, very rich by developing &#8212; along with <a href="http://en.wikipedia.org/wiki/Bruce_Bastian">Bruce Bastian</a> (with whom I shared a TA office for an entire school year) &#8212; the <a href="http://en.wikipedia.org/wiki/WordPerfect">WordPerfect</a> word processing program.</p>
<p>Dr. Ashton was an outstanding instructor. I took this class in 1974, and all our programming was done on an IBM 360/65 mainframe in 360/Assembly, on punched cards no less. Yet Dr. Ashton thoroughly inculcated in us the concepts of structured programming, having us (for example) come up with half a dozen different ways of implementing a WHILE loop in assembler.</p>
<p>At the same time, he did his best to teach us the realities of software development and engineering. One of his comments in class seemed so axiomatic that I immediately thought of it as &#8220;Ashton&#8217;s Law&#8221; and have quoted it as such ever since:</p>
<blockquote><p><strong>Ashton&#8217;s Law</strong>: Whenever someone tries to do something <em>for</em> you, they usually end up doing it <em>to</em> you.  &#8212; <em>Dr. Alan Ashton, 1974</em></p></blockquote>
<p>I have long lost track of how many times over the past 34 years I&#8217;ve thought of Ashton&#8217;s Law or have spoken it out loud to others. Dr. Ashton made the comment in the context of operating systems, software tools, and applications; all we have to do is look at something like <a href="http://www.schneier.com/blog/archives/2006/04/microsoft_vista.html">the User Account Protection in MS Vista</a> to see that Ashton&#8217;s Law is all too much alive and well.</p>
<p>But there is a deeper issue here in software design and implementation, which I&#8217;m also sure Dr. Ashton had in mind. When two software components have to interact, there is usually an explicit and documented (by the source code itself, if by no other means) interface for one component (the &#8216;called&#8217; component, for lack of a better term) that the other (the &#8216;calling&#8217; component) makes use of.</p>
<p>In designing functions or services of the called component, we often end up as perpetrators of Ashton&#8217;s Law. That is, in our desire to do something <em>for</em> those who will invoke these functions or services, we end up doing something <em>to</em> them.  We make decisions about preconditions, calculations, and results that may seem quite reasonable to us, and that we may have the best intentions for; still, our decisions may lead to others cursing our names (or at least our functions).</p>
<p>There are always tradeoffs in software development among such desirable features as reliability, performance, memory footprint, calling/service standards, security, simplicity, and so on. Our priorities &#8212; even our requirements &#8212; may differ from those who will use our component&#8217;s functions and services, and so a certain amount of friction is perhaps unavoidable. What we can do is spell out all our assumptions and restrictions, and the reasons behind them, so that those using our functions and services know what they&#8217;re getting (or not getting).</p>
<p>However, there may exist also what is variously termed a <em>deep</em>, <em>hidden </em>or <em>undocumented </em>interface for the called component. This deep interface deals with invisible and often unknown requirements, side effects, and consequences of a given function or service provided by the called component. For example, the function or service may leave some aspect of the software system or the host computer system in a different state (e.g., changes to internal data structures, changes to files or databases, launching or killing of processes, and so on) without making that fact explicitly clear in any documentation or the API itself. You may feel there is a good reason for this, but it may also interfere with the calling component&#8217;s on-going functions.</p>
<p>As with much of what I post here, this may seem quite obvious to you, but trust me &#8212; obvious or not, it&#8217;s incredibly common and quite frustrating for those having to use the offending software. As software engineers creating software components, systems, and applications to be used by others, we need to constantly keep Ashton&#8217;s Law in mind and ensure that we are truly developing useful functionality for others instead simply making their lives more difficult.  ..bruce..</p>
]]></content:encoded>
			<wfw:commentRss>http://brucefwebster.com/2008/07/10/remembering-ashtons-law/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gender differences in coding styles?</title>
		<link>http://brucefwebster.com/2008/06/09/gender-differences-in-coding-styles/</link>
		<comments>http://brucefwebster.com/2008/06/09/gender-differences-in-coding-styles/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 17:10:53 +0000</pubDate>
		<dc:creator>bfwebster</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://brucefwebster.com/?p=44</guid>
		<description><![CDATA[In my earlier post on the &#8220;thermocline of truth&#8220;, I wrote: Second, IT engineers by nature tend to be optimists, as reflected in the common acronym SMOP: “simple matter of programming.” Even when an IT engineer doesn’t have a given subsystem completed, he tends to carry with him the notion that he whip everything into [...]]]></description>
			<content:encoded><![CDATA[<p>In my earlier post on the &#8220;<a href="http://brucefwebster.com/2008/04/15/the-wetware-crisis-the-themocline-of-truth/">thermocline of truth</a>&#8220;, I wrote:</p>
<blockquote><p>Second, IT engineers by nature tend to be optimists, as reflected in the common acronym SMOP: “simple matter of programming.” Even when an IT engineer doesn’t have a given subsystem completed, he tends to carry with him the notion that he whip everything into shape with a few extra late nights and weekends of effort, even though he may actually face weeks (or more) of work. (NOTE: my use of male pronouns is deliberate; it is almost always male IT engineers who have this unreasonable optimism. Female IT engineers in my experience are generally far more conservative and realistic, almost to a fault, which is why I prefer them. I just wish they weren’t so hard to find.)</p></blockquote>
<p>Now, <a href="http://blogs.wsj.com/biztech/2008/06/06/men-write-code-from-mars-women-write-more-helpful-code-from-venus/">a post over at the Wall Street Journal</a> cites what I think is a more controversial (and harder to support) claim &#8212; by a female VP of Engineering &#8212; that female programmers tend to write clearer and better-documented code than male programmers:</p>
<blockquote><p>Emma McGrattan, the senior vice-president of engineering for computer-database company Ingres–and one of Silicon Valley’s highest-ranking female programmers–insists that men and women write code differently. Women are more touchy-feely and considerate of those who will use the code later, she says. They’ll intersperse their code–those strings of instructions that result in nifty applications and programs–with helpful comments and directions, explaining why they wrote the lines the way they did and exactly how they did it.</p>
<p>The code becomes a type of “roadmap” for others who might want to alter it or add to it later, says McGrattan, a native of Ireland who has been with Ingres since 1992.</p>
<p>Men, on the other hand, have no such pretenses. Often, “they try to show how clever they are by writing very cryptic code,” she tells the Business Technology Blog. “They try to obfuscate things in the code,” and don’t leave clear directions for people using it later. McGrattan boasts that 70% to 80% of the time, she can look at a chunk of computer code and tell if it was written by a man or a woman.</p></blockquote>
<p>I&#8217;m not sure that I could make the same claim without some serious research into a broad range of coding samples. But the article is worth reading for the comments that follow it, which (as you can imagine) are quite intense.  ..bruce..</p>
]]></content:encoded>
			<wfw:commentRss>http://brucefwebster.com/2008/06/09/gender-differences-in-coding-styles/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#8220;Pitfalls of Modern Software Engineering&#8221;: an update</title>
		<link>http://brucefwebster.com/2008/05/29/pitfalls-of-modern-software-engineering-an-update/</link>
		<comments>http://brucefwebster.com/2008/05/29/pitfalls-of-modern-software-engineering-an-update/#comments</comments>
		<pubDate>Fri, 30 May 2008 02:35:49 +0000</pubDate>
		<dc:creator>bfwebster</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[PMSE]]></category>
		<category><![CDATA[Product development]]></category>
		<category><![CDATA[Project Failure]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://brucefwebster.com/?p=42</guid>
		<description><![CDATA[One of the books I&#8217;m currently writing is Pitfalls of Modern Software Engineering, a greatly expanded and updated version of a book I published back in the 1990s. I&#8217;ve been posted new and revised pitfalls over at my Bruce F. Webster &#38; Associates (bfwa.com) website. To make the pitfalls a bit easier to browse, I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>One of the books I&#8217;m currently writing is <strong>Pitfalls of Modern Software Engineering</strong>, a greatly expanded and updated version of <a href="http://www.amazon.com/Pitfalls-Object-Oriented-Development-Webster/dp/1558513973/ref=sr_1_4/103-0472984-6043049?ie=UTF8&amp;s=books&amp;qid=1180320721&amp;sr=8-4">a book I published back in the 1990s</a>. I&#8217;ve been posted new and revised pitfalls over at my Bruce F. Webster &amp; Associates (bfwa.com) website. To make the pitfalls a bit easier to browse, I&#8217;ve now added a page to that website that <a href="http://bfwa.com/pitfalls/">lists all the pitfalls posted to date</a>, with link to their individual entries. Just FYI. ..bruce..</p>
]]></content:encoded>
			<wfw:commentRss>http://brucefwebster.com/2008/05/29/pitfalls-of-modern-software-engineering-an-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Arc of Engineering</title>
		<link>http://brucefwebster.com/2008/05/21/the-arc-of-engineering/</link>
		<comments>http://brucefwebster.com/2008/05/21/the-arc-of-engineering/#comments</comments>
		<pubDate>Thu, 22 May 2008 00:22:34 +0000</pubDate>
		<dc:creator>bfwebster</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Competition]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Product development]]></category>
		<category><![CDATA[Quality assurance]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Surviving Complexity]]></category>

		<guid isPermaLink="false">http://brucefwebster.com/?p=41</guid>
		<description><![CDATA[[Copyright 2008 by Bruce F. Webster. All rights reserved. Adapted from Surviving Complexity (forthcoming).] And so, from hour to hour, we ripe and ripe, And then, from hour to hour, we rot and rot; And thereby hangs a tale. &#8211; William Shakespeare, As You Like It, Act II, Scene vii. I have observed a pattern [...]]]></description>
			<content:encoded><![CDATA[<p>[Copyright 2008 by Bruce F. Webster. All rights reserved. Adapted from <a href="http://and-still-i-persist.com/works-in-progress/surviving-complexity/">Surviving Complexity</a> (forthcoming).]</p>
<blockquote><p>And so, from hour to hour, we ripe and ripe,<br />
And then, from hour to hour, we rot and rot;<br />
And thereby hangs a tale.</p>
<p>&#8211; William Shakespeare, <em>As You Like It</em>, Act II, Scene vii.</p></blockquote>
<p>I have observed a pattern (or anti-pattern) in IT engineering that looks something like this:</p>
<p><img src="http://brucefwebster.com/wp-includes/images/arc.jpg" alt="" /></p>
<p>Let&#8217;s call this <em>the arc of engineering</em>, since that&#8217;s more compact and elegant than <em>the strangely shaped curve with what appears to be a single inflection point of engineering</em>. &#8220;Arc&#8221; in any case conveys the essential sense: that system quality (however you wish to define that) rises over time to a peak value and then starts to decline.</p>
<p><span id="more-41"></span></p>
<p>This came to mind because I recently put a new hard drive in my laptop and have been going through the tedious drill of reinstalling all the various applications and utilities that I am used to using. With some software, I want &#8212; or have to use &#8212; the latest versions. So, for example, my versions of Firefox, Thunderbird, Quicken, and so on are all current, not to mention my anti-virus/firewall software.</p>
<p>For others, however, I either don&#8217;t need &#8212; or specifically don&#8217;t want &#8212; the newest versions. The laptop&#8217;s restore disks installed Windows XP, for which I&#8217;m grateful; I have no plans whatsoever to upgrade to Vista. Similarly, I installed MS Office 2003; I don&#8217;t own and don&#8217;t plan to buy Office 2007. As far as I can tell, Microsoft pretty much hit the top of its engineering arc for both Windows and Office a few years ago. In fact, the early to mid-2000s may well represent the peak of quality, features, and user acceptability for these product lines.  Given the on-going end-user unhappiness with Vista and Office 2007 &#8212; and the corporate resistance to upgrades to either &#8212; Microsoft&#8217;s user base may never again be as happy with these product lines as they were a few years ago.</p>
<p>This is not an anti-Microsoft screed, because I have observed a similar effect in other companies and product lines. For example, I was a very early Macintosh adopter and champion, though I also was <a href="http://www.aresluna.org/attached/computerhistory/articles/macintoshbytereview">quite critical of its initial limitations</a>. Apple continued to make improvements and changes to the Macintosh product line and finally reached what I considered at the time to be a close-to-perfect Mac: <a href="http://en.wikipedia.org/wiki/Macintosh_IIcx">the Macintosh IIcx</a>. It was solid, reliable, and very stable. Apple followed up with the <a href="http://en.wikipedia.org/wiki/Macintosh_IIci">Macintosh IIci</a>, which used the same form factor, but offered several improvements over the IIcx, though there were some software stability problems due to the rewritten ROM and related hardware changes.</p>
<p>And then came the <a href="http://en.wikipedia.org/wiki/Macintosh_IIfx">Macintosh IIfx</a>, which was supposed to be even better &#8212; but the IIfx soon became well known for <a href="http://groups.google.com/group/comp.sys.mac.hardware/browse_thread/thread/3a4023a306bd51b5/65247e31facae08b?hl=en&amp;lnk=st&amp;q=#65247e31facae08b">its hardware problems</a>, in particular its tendency to blow out power supplies.  Other Mac II models &#8212; the <a href="http://en.wikipedia.org/wiki/Macintosh_IIvi">IIvi</a>, <a href="http://en.wikipedia.org/wiki/Macintosh_IIsi">IIsi</a>, and <a href="http://en.wikipedia.org/wiki/Macintosh_IIvx">IIvx</a> &#8212; each had their own problems and limitations. From there, Apple descended into the product-line chaos known as <a href="http://en.wikipedia.org/wiki/Macintosh_Quadra">Quadra</a>/<a href="http://en.wikipedia.org/wiki/Macintosh_Centris">Centris/</a><a href="http://en.wikipedia.org/wiki/Macintosh_Performa">Performa</a>, a marketing disaster from which Apple would not recover completely until Steve Jobs came back to Apple and introduced the <a href="http://en.wikipedia.org/wiki/IMac">iMac</a>.</p>
<p>In this same time period, Apple had to deal with the fact that its operating system &#8212; <a href="http://en.wikipedia.org/wiki/Macintosh_System_7">System 7</a>, introduced in 1991 &#8212; was under-featured, underwhelming, and built on aging technology. System 7 would lose its graphical UI edge with the introduction in 1992 of <a href="http://en.wikipedia.org/wiki/Windows_3.1x">MS Windows 3.1</a> and would pretty much lose the operating systems wars completely a few years later with the introduction of <a href="http://en.wikipedia.org/wiki/Windows_95">MS Windows 95</a>. It would not be until Apple&#8217;s introduction in 2002 of the Jaguar (10.2) version of <a href="http://en.wikipedia.org/wiki/Mac_OS_X">Mac OS X</a> &#8212; a heavily updated and retooled version of the <a href="http://en.wikipedia.org/wiki/NextStep">NeXTstep OS</a> &#8212; that Apple would regain technical and UI leadership in operating systems.</p>
<p>This same pattern can appear in internal IT projects. The system under development goes into production and continues to improve over time. Then at some point, the system&#8217;s overall quality (functionality, performance, reliability) starts to decline and maintenance costs begin to go up. At some point the organization decides to replace or re-engineer the system, sometimes successfully, sometimes not.</p>
<p>So, why does this happen? I believe several factors are or can be involved. (To simply the discussion, I&#8217;ll use &#8220;system&#8221; to mean the software, IT system, product, or product line under discussion; likewise, I&#8217;ll use &#8220;developer&#8221; to mean the company and/or IT development group responsible for creating, enhancing, and maintaining the system.)</p>
<p><strong>The developer loses conceptual control of the system.</strong> In other words, no person or group of people understands the overall architecture, design, and operating constraints of the system. Thus the developer can no longer ensure that on-going changes to the system are consistent and compatible with existing aspects of the system or with other changes being made. This in turn can come about for several reasons:</p>
<ul>
<li><em>The system grows too large and complex.</em> Sheer code size is not necessarily a problem (though it doesn&#8217;t help); on the other hand, the degree of fragmentation and interdependencies can be. (See <a href="http://blogs.msdn.com/philipsu/archive/2006/06/14/631438.aspx">this Vista post-mortem</a> for some examples.)</li>
<li><em>Those who really understand the system have left or moved on to other projects.</em> The best and brightest IT engineers &#8212; particularly architects and designers &#8212; usually prefer to work on new systems. That means once this system has shipped (or gone into production), the people who created the system in the first place and who understand it best may well want to move on to other things, inside or outside of the company. Those who replace them &#8212; and those who stay behind &#8212; may be quite talented but may not understand all the system&#8217;s nuances and requirements. Eventually, they may decide to move on as well. With each generation of turnover, more institutional memory is lost.</li>
<li><em>The development organization no long meshes with the system</em>. Conway&#8217;s law states that &#8220;any piece of software reflects the organizational structure that produced it.&#8221; Since the IT group responsible for the system often changes once the system ships or goes into production, the organization of the new group responsible for the system may not match the system&#8217;s structure, causing gaps in knowledge and responsibility, plus a tendency &#8212; conscious or not &#8212; to reshape the system to match the new organization.</li>
</ul>
<p><strong>Software rot sets in</strong>. <a href="http://en.wikipedia.org/wiki/Software_rot">Software rot</a> is a real term of art within software engineering, referring to the well-known tendency of systems in production to become less reliable over time for a variety of reasons having mostly to do with piecemeal and uncoordinated changes to the system, or growing incompatibilities with external systems.</p>
<p><strong>The enhanced system finally outgrows its original foundation</strong>. When the developer seeks to expand or improve the system, it often does so without properly rearchitecting and redesigning the system first. As a result, the original system eventually may be stressed beyond its original intent and begins to suffer from functionality, reliability and/or performance problems.  <a href="http://www.fontbureau.com/people/MikeParker/">Mike Parker</a>, one of the co-founders of <a href="http://en.wikipedia.org/wiki/Pages#History">Pages Software Inc.</a> (read the 3rd paragraph), once described this syndrome as &#8220;trying to build a castle on the foundation of an outhouse.&#8221;</p>
<p><strong>Market or business needs shift beyond the product&#8217;s fundamental design.</strong> A developer creates and enhances a system to meet a specific set of business/market requirements. However, there often comes a time when new or expanded requirements exceed the capabilities of the system&#8217;s original architecture and design. This can lead to the &#8220;outgrowing the foundation&#8221; situation described above, with the resulting problems. Or it can lead to a true re-engineering or replacement effort, which may well lead to the final two problems below.</p>
<p><strong>The developer begins to add &#8220;blue sky&#8221;/&#8221;kitchen sink&#8221; enhancements.</strong> Once the &#8220;door is open&#8221; on changes to the system &#8212; or features for the new/re-engineered system &#8212; the requests pour in from all directions. Without rigorous control over these enhancements, the development effort can quickly bloat in every aspect: architecture, design, code size, schedule, staff, and defects. <strong><br />
</strong></p>
<p><strong>Backward compatibility is maintained at all costs</strong>. Supporting backwards compatibility in a system can be a bit like trying to drive a car while pedaling a wheel at the same time. Apple abandoned its old arc of engineering and created a new one under Mac OS X by first forcing binary backwards compatibility into a separate mode (the &#8220;Classic&#8221; environment) and then dropping the Classic environment altogether for Intel-based Macs running Mac OS X. Microsoft &#8212; which has struggled with the backwards compatibility issue for almost its entire OS life &#8212; has announced that for &#8220;Windows 7&#8243;, it will in effect follow Apple&#8217;s lead by not supporting binary (and to a certain extent source) backwards compatibility in Windows 7 but <a href="http://windows7news.com/2008/04/09/windows-7-backwards-compatibility/">instead using virtualization technology</a> (switching to a backwards-compatible OS) for older application.</p>
<p>I&#8217;m sure there are other reasons I haven&#8217;t listed here, but it does show why the arc of engineering exists. Comments?  ..bruce..</p>
]]></content:encoded>
			<wfw:commentRss>http://brucefwebster.com/2008/05/21/the-arc-of-engineering/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Wetware Crisis: All Our Sins Remembered &#8211; Intro</title>
		<link>http://brucefwebster.com/2008/05/14/the-wetware-crisis-all-our-sins-remembered-intro/</link>
		<comments>http://brucefwebster.com/2008/05/14/the-wetware-crisis-all-our-sins-remembered-intro/#comments</comments>
		<pubDate>Thu, 15 May 2008 03:53:08 +0000</pubDate>
		<dc:creator>bfwebster</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Project Failure]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Surviving Complexity]]></category>

		<guid isPermaLink="false">http://brucefwebster.com/?p=28</guid>
		<description><![CDATA[[Copyright 2008 by Bruce F. Webster. All rights reserved. Adapted from Surviving Complexity (forthcoming).] Humanity has been developing information technology for half a century. That experience has taught us this unpleasant truth: virtually every information technology project above a certain size or complexity is significantly late and over budget or fails altogether; those that don’t [...]]]></description>
			<content:encoded><![CDATA[<p>[Copyright 2008 by Bruce F. Webster. All rights reserved. Adapted from <a href="http://and-still-i-persist.com/works-in-progress/surviving-complexity/">Surviving Complexity</a> (forthcoming).]</p>
<blockquote><p>Humanity has been developing information technology for half a century. That experience has taught us this unpleasant truth: virtually every information technology project above a certain size or complexity is significantly late and over budget or fails altogether; those that don’t fail are often riddled with defects and difficult to enhance. Fred Brooks explored many of the root causes over twenty years ago in <strong>The Mythical Man-Month</strong>, a classic book that could be regarded as the &#8220;Bible&#8221; of information technology because it is universally known, often quoted, occasionally read, and rarely heeded. Most publications and books on IT since then have debated, discussed, and deplored these same problems. And they are with us still. Their causes stem not from technology but from human frailties. Indeed, when asked why so many IT projects go wrong in spite of all we know, one could simply cite the seven deadly sins: avarice, sloth, envy, gluttony, wrath, lust, and pride. It is as good an answer as any and more accurate than most.</p>
<p>&#8211; <em>Testimony given by Bruce F. Webster before the Subcommittee on Government Management, Information, and Technology, United States House of Representatives, June 22, 1998</em>.</p></blockquote>
<p>Many, if not most, information technology (IT) failures result from human factors, not technical ones. In my dual roles as an IT consultant to large organizations since 1995 and as an expert witness in IT systems failure litigation since 1999, I have spent thousands of hours reviewing documents, interviewing developers, managers, and executives, analyzing software lifecycle deliverables, reading deposition transcripts, pouring through error tracking logs and even reviewing source code. The goal in all this is to figure out (depending upon my role) why a project is or was troubled. In some cases, it may be because of reliance upon software or hardware that was unexpectedly flawed or insufficiently capable, or due to some unexpected external circumstances. But in the majority of cases, it really does come down to human factors &#8212; and usually one or more of the seven deadly sins cited above.</p>
<p>I now recite those sins in a different order and with slightly different wording &#8212; <strong>pride, envy, greed, lust, anger, gluttony, sloth</strong> &#8212; because that way they form the handy mnemonic &#8220;PEG LAGS&#8221; (with apologies to all Margarets and Peggys reading this).  That&#8217;s the order I&#8217;ll address them in subsequent posts. ..bruce..</p>
]]></content:encoded>
			<wfw:commentRss>http://brucefwebster.com/2008/05/14/the-wetware-crisis-all-our-sins-remembered-intro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

