<?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>Guardian Software</title>
	<atom:link href="http://www.dbxsoftware.com/cms/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dbxsoftware.com/cms</link>
	<description></description>
	<lastBuildDate>Tue, 21 Jun 2011 14:32:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Why so many projects crash and burn &#8211; Part 4: Seek Not and Ye Shall Find</title>
		<link>http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-dont-seek-and-ye-shall-find/</link>
		<comments>http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-dont-seek-and-ye-shall-find/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 21:43:53 +0000</pubDate>
		<dc:creator>mmroberts</dc:creator>
				<category><![CDATA[Metaphor Crash]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[CMMI]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[deathmarch]]></category>
		<category><![CDATA[missed deadlines]]></category>
		<category><![CDATA[Overbudget]]></category>
		<category><![CDATA[Six Sigma]]></category>

		<guid isPermaLink="false">http://www.dbxsoftware.com/cms/?p=1048</guid>
		<description><![CDATA[At some point during this process, some concepts came to me that I had never considered before. I had always been a staunch member of the camp of developers who felt deep down that procedures such as Configuration Management were a complete waste of time at best and an active detriment to progress at worst. &#8230;  <a class="continue_reading" href="http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-dont-seek-and-ye-shall-find/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>At some point during this process, some concepts came to me that I had never considered before. I had always been a staunch member of the camp of developers who felt deep down that procedures such as Configuration Management were a complete waste of time at best and an active detriment to progress at worst. That is because, in my experience, they had been a complete waste of time or an active detriment to progress. I am sure you have seen the same thing.</p>
<p>A project, typically because of contractual obligations, makes the formal declaration that they are going to follow some methodology that is supposed to make everything <a href="http://en.wikipedia.org/wiki/Sweetness_and_light" target="_blank">sweetness and light</a>. They have various names (in order of &#8220;all the rage&#8221;): TQM, CMMI, ISO 9000, Six Sigma, ITIL and various others. Each of these &#8220;Management Methodologies&#8221; suffered from the same malady that the &#8220;Social Sciences&#8221; suffer from. They all try to explain everything, or in the case of management methodologies, they all tried to fix everything.</p>
<p>Of course the developers just wanted to code something, but with these processes, coding came way at the end of the line. In the meantime, an eternity was spent gathering requirements, creating goofy little charts with stick figures doing odd things, then sitting around in meetings talking about &#8220;actors&#8221;, &#8220;stories&#8221;, and various other touchy-feely things instead of cranking out the stupid code. <div class="simplePullQuote">The name given to this developer&#8217;s erotic dream was &#8220;Agile&#8221;. Who could  hate something that was agile? It sure sounded better in a sales pitch.</div></p>
<p>This lasted for a while, but slowly developers revolted. As a direct result of these over-burdensome methodologies, developers began rethinking things. Somehow they managed to get the idea that management should just leave them alone and let them write something, then let the customer tell them what sucked about it, then go back and fix those things, write some more things, and just keep doing this until they had an awesome software product. The main hints that it was developers, not managers that came up with this process is that meetings were discouraged, working with your buddy was required, and working flexible schedules and ignoring deadlines was mandated. If you weren&#8217;t going to hit a release deadline, so what? Just take that piece of code out and release what you have. They will hate it anyway and it will be back for rework in a few days, so why worry?</p>
<p>The name given to this developer&#8217;s erotic dream was &#8220;Agile&#8221;. Who could hate something that was agile? It sure sounded better in a sales pitch. Consider the difference:</p>
<p>&#8220;Our developers are all Six Sigma and CMMI certified&#8221;</p>
<p>vs.</p>
<p>&#8220;Our developers are all Agile certified&#8221;</p>
<p>If I were a clueless customer, my money would be on Agile every time.</p>
<div class="mceIEcenter">
<dl id="attachment_1051" class="aligncenter">
<dd style="text-align: center;">
<div id="attachment_1051" class="wp-caption aligncenter" style="width: 392px"><a rel="attachment wp-att-1051" href="http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-dont-seek-and-ye-shall-find/dilbert/"><img class="size-full wp-image-1051" title="Dilbert - Agile" src="http://www.dbxsoftware.com/cms/wp-content/uploads/dilbert.jpeg" alt="Dilbert cartoon for Agile Development" width="382" height="132" /></a><p class="wp-caption-text">Agile Development Training.</p></div>
</dd>
</dl>
</div>
<p>The problem with ALL of these methodologies, Agile included, was that they never really addressed the core problem. I am not surprised by this because I never even realized what the core problem was until after I had already solved it. The other problem with them is that they were so complex, so time consuming, and so utterly head-banging dull that they were soon forgotten once development kicked off. Then towards the end of a project, managers would realize that there was no documentation to prove that they had followed said methodology (because they hadn&#8217;t), so they would pull a bunch of unlucky interns or contractors in and have them start creating history in the form of back-dated documents. Trust me, it is very common.</p>
<p>As I continued to work on the required Configuration Management Plan, some patterns started to fall into place. I realized that the reason projects go so bogged down and suddenly crumbled was often because they just got too complex to manage in the traditional ways of software development. At first, everything seems good. There is a set of requirements (we are assuming they are pretty good) and a team or two of developers. There is no source code. Everything that the project can and will be lies in the future, and that future is exciting. Coding starts. The first milestones are met with ease and the first release it sent to testers. <div class="simplePullQuote">Complexity  &#8211; Order = Chaos</div></p>
<p>As testers find bugs (and they will find bugs), bug tickets are opened and worked by developers. Now there are two streams of work. Developers are still working on new code, but they are also working on fixing bugs in the existing code. Things get a little more complicated as new work is managed along side old work. If a project is using source control, they will likely branch the code at each release to test. Bugs must be fixed in the branch that they were discovered in, and then those changes must be propagated to the new branch(es) as well. A few more cycles of this process and things are really getting weird. Testers are not sure what environment they should be testing against. Most projects just resort to testing all code in the most current environment, but that environment slowly gets polluted and starts to smell bad. Phantom bugs are discovered that cannot be reproduced in the development environment.</p>
<p>Meanwhile, documentation efforts are ongoing. When a bug is discovered and the design must be changed to correct it, the existing design documents become incorrect. When missed requirements are realized, the designs again change and the design documents become even more incorrect.</p>
<p>Databases soon start to suffer the same problems as other components as their table structures, procedures, views, indexes and constraints are changed to keep up with bug fixes and new requirements. Some tables fall to disuse and some stored procedures become obsolete. Procedures suddenly expect parameters that the application code is not providing and data being returned to the application is not in the proper format or of the proper data type, resulting in more bugs.</p>
<p>What is happening here is that the project is getting complicated. There are many streams of work effort at various stages of completion, there are multiple environments that must support the changing code, and it becomes difficult if not impossible to manage it all.</p>
<p>The worst part of this often repeated scenario is that it usually gets worse the longer a project goes on. While budgets are being overrun, delivery dates are being missed, and developers are growing tired of <a href="http://en.wikipedia.org/wiki/Sprint_%28software_development%29" target="_blank">sprinting</a>, the complexity just keeps growing.</p>
<div id="attachment_1052" class="wp-caption aligncenter" style="width: 510px"><a rel="attachment wp-att-1052" href="http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-dont-seek-and-ye-shall-find/whiteboard/"><img class="size-large wp-image-1052 " style="border: 1px solid black;" title="Whiteboard Diagram" src="http://www.dbxsoftware.com/cms/wp-content/uploads/whiteboard-1024x679.jpg" alt="Crazy whiteboard diagram" width="500" height="331" /></a><p class="wp-caption-text">Complexity is not pretty. </p></div>
<p>The reason is simple to state, but difficult to correct:</p>
<h3><strong>Complexity  &#8211; Order = Chaos</strong></h3>
<p>At the stage that has been described, most projects I have seen are, whether they admit it or not, in total chaos. There is no logical way to predict what a change will affect, there is no way to estimate how long anything will take, and there is no way to be sure it is going to work in a production environment. This is the point where many a project manager will, despite what he has learned in management classes, just throw more people at the problem. As we all know, this just adds to the complexity as new developers come up to speed on the existing codebase and environments. Since what little documentation is available is almost certainly outdated if not absolutely wrong, the over-worked developers must take time out of their work day to teach the new developers what they need to know.<div class="simplePullQuote">As the experienced developers leave, they often poison the well,  advising the newer developers to get out while they can. Project death  is soon to follow.</div></p>
<h3><strong>Chaos &#8211; Direction = Apathy</strong></h3>
<p>Without any real hope of getting the project back to a known good state, many developers become disengaged and apathetic to the deadlines and mounting bug counts.  Many start looking for a better project, sometimes from their work computers during business hours.</p>
<h3><strong>Apathy &#8211; Solutions = Death</strong></h3>
<p>Before long developers who have been on the project from the beginning are leaving. They hate the project and everything that reminds them of it. The dreams they had for it are gone and all that is left is disgust at the stinking, bug-infested mess that it has become. As the experienced developers leave, they often poison the well,  advising the newer developers to get out while they can. Project death  is soon to follow.</p>
<p>I have been through this cycle more times than I care to count. I never could figure out when it started, but I could sense it like something creeping in the dark behind me. I knew when death was near, and, coward that I am, I would be one of the developers looking for a new project (although I never did it on the job!). All of those times of going through this, I never understood why it happened, but as I was working through the details of this Configuration Management Plan, I began to slowly see what had happened, and I realized that it happened much earlier in the project than I would have believed.</p>
<p>In fact, a project&#8217;s death begins before the first line of code is written.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.dbxsoftware.com%2Fcms%2Findex.php%2Fproject-crash-and-burn-dont-seek-and-ye-shall-find%2F&amp;title=Why%20so%20many%20projects%20crash%20and%20burn%20%26%238211%3B%20Part%204%3A%20Seek%20Not%20and%20Ye%20Shall%20Find"><img src="http://www.dbxsoftware.com/cms/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-dont-seek-and-ye-shall-find/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why so many projects crash and burn &#8211; Part 3: Duck and Cover</title>
		<link>http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-duck-and-cover/</link>
		<comments>http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-duck-and-cover/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 18:05:39 +0000</pubDate>
		<dc:creator>mmroberts</dc:creator>
				<category><![CDATA[Metaphor Crash]]></category>

		<guid isPermaLink="false">http://www.dbxsoftware.com/cms/?p=1041</guid>
		<description><![CDATA[A storm was brewing and once again, I was in the middle of it. I had development managers sneaking over to my desk and asking me if I could take a look at some critical bugs, software developers asking me if I could help troubleshoot some code issues, and systems engineering managers standing on me &#8230;  <a class="continue_reading" href="http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-duck-and-cover/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>A storm was brewing and once again, I was in the middle of it. I had development managers sneaking over to my desk and asking me if I could take a look at some critical bugs, software developers asking me if I could help troubleshoot some code issues, and systems engineering managers standing on me to help backfill thousands of pages of documentation.</p>
<p>Just when I was seriously considering calling back one of the other companies who had recently made me a job offer, I was saved.</p>
<p>I had sat through several contentious meetings where senior management had directed the development managers to cooperate with systems engineers &#8220;without exception&#8221;, only to have the development managers loudly protest that it was all a sham and it wouldn&#8217;t do a bit of good to document software that wasn&#8217;t going to get finished if we didn&#8217;t stop wasting their time. These meetings often morphed into general gripe sessions where everyone was accusing everyone else of messing up their code, trashing their databases, or breaking their test environments.<div class="simplePullQuote"> Finally she broke in and excitedly explained that one of the major  documents that still needed to be finished was the Configuration  Management Plan. I tried to hide a yawn.</div></p>
<p>Slowly a picture emerged in my mind of what they were trying to do. They had one test environment for all teams to use for general testing purposes called &#8220;sandbox&#8221;. This was the environment that was causing so much hate and discontent. With ten to twenty testers constantly testing what was often buggy software fixes, the data got more and more corrupted, versions of software got mixed together, and settings got changed, breaking other tests. It became apparent that the environment should have been named &#8220;Swimming Pool&#8221; because they were all peeing in it and complaining of the smell.</p>
<p>In a casual meeting in my manager&#8217;s office, I mentioned that I had dealt with this sort of problem before and may be able to offer some suggestions to ease the problem. As I was explaining, she began getting an excited look on her face (yes, I am charming, but not THAT charming). Finally she broke in and excitedly explained that one of the major documents that still needed to be finished was the Configuration Management Plan. I tried to hide a yawn.</p>
<p>As it turns out, she had been saying some of the very same things that I was saying about how to manage the environments better, but nobody was listening. She realized that the only way to get them to put aside their finger pointing and get them to actually do something about the problem was to trick them into agreeing to it in a procedural document. A procedural document such as a Configuration Management Plan. Of course she left out the tricking part and just explained to me that if I could come up with some procedures that would help manage the environments and document them in a way that was easy to understand, she would work on getting them to agree to follow it.</p>
<p><a rel="attachment wp-att-1057" href="http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-duck-and-cover/duckandcover/"><img class="alignleft size-full wp-image-1057" title="Bert The Turtle - Duck and Cover" src="http://www.dbxsoftware.com/cms/wp-content/uploads/duckandcover.jpg" alt="Old Civil Defense Bert the Turtle ad" width="400" height="400" /></a></p>
<p>I saw an immediate benefit to this idea. It got me out of the meetings with people screaming at each other for hours about things that they had no idea how to fix. I took the extra step of letting her know that, in order to do that, I would need a quiet, out of the way place to work where I wouldn&#8217;t be constantly barraged by angry managers. She moved me to a desk in an adjoining building and stopped inviting me to most of the meetings. I started to see a light at the end of the tunnel. I was just hoping it wasn&#8217;t an oncoming train.</p>
<p>Knowing absolutely nothing about how to create a Configuration Management Plan, I started downloading examples from the internet and studying them. The first thing I noticed was that there seemed to be an extremely wide opinion of just what configuration management is. Some seemed to think it was a series of meetings while others seemed to think it was just another name for source code control. I can&#8217;t count how many times I saw arguments over which was better for configuration management: SVN or Visual Source Safe (hint, neither one are any good for it. They are for source code control).<div class="simplePullQuote">I saw an immediate benefit to this idea. It got me out of the meetings  with people screaming at each other for hours about things that they had  no idea how to fix.</div></p>
<p>I knew I was in trouble even as I was reading and walking back from the printer. Right there, in crisp black and white on the still warm paper were the tell-tale words: &#8220;The tool that shall be used for configuration management on this project is Visual Source Safe.&#8221;</p>
<p>I was in for an uphill battle.</p>
<p>Part 4 -<a href="http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-dont-seek-and-ye-shall-find/http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-dont-seek-and-ye-shall-find/"> Seek Not and Ye Shall Find</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.dbxsoftware.com%2Fcms%2Findex.php%2Fproject-crash-and-burn-duck-and-cover%2F&amp;title=Why%20so%20many%20projects%20crash%20and%20burn%20%26%238211%3B%20Part%203%3A%20Duck%20and%20Cover"><img src="http://www.dbxsoftware.com/cms/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-duck-and-cover/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why so many projects crash and burn &#8211; Part 2: CYA Agent</title>
		<link>http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-cya-agent/</link>
		<comments>http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-cya-agent/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 17:33:06 +0000</pubDate>
		<dc:creator>mmroberts</dc:creator>
				<category><![CDATA[Metaphor Crash]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[Configuration Management Tools]]></category>
		<category><![CDATA[Critical Bugs]]></category>
		<category><![CDATA[Envrionment Management]]></category>
		<category><![CDATA[Software Developer]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Manager]]></category>
		<category><![CDATA[Systems Engineering]]></category>
		<category><![CDATA[Test Environment]]></category>

		<guid isPermaLink="false">http://www.dbxsoftware.com/cms/?p=1036</guid>
		<description><![CDATA[When I took a job as a contract &#8220;systems engineer&#8221; for a large ship builder, I had no idea what I was going to be doing. Looking over my resume and seeing the (on paper) impressive track record I had for large software development projects &#8211; thank God resumes don&#8217;t typically list the current condition &#8230;  <a class="continue_reading" href="http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-cya-agent/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-1064" href="http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-cya-agent/sinkingship/"><img class="alignleft size-full wp-image-1064" title="Mistakes" src="http://www.dbxsoftware.com/cms/wp-content/uploads/sinkingship.jpg" alt="Mistakes Dispair Poster Image" width="400" height="321" /></a>When I took a job as a contract &#8220;systems engineer&#8221; for a large ship builder, I had no idea what I was going to be doing. Looking over my resume and seeing the (on paper) impressive track record I had for large software development projects &#8211; thank God resumes don&#8217;t typically list the current condition of the project! &#8211; the interviewer had warned me right up front that I wouldn&#8217;t be doing any coding. That was fine by me. I was a little gun-shy of coding at this point, having just seen a huge consulting firm go bankrupt (literally!) because the project I was lead developer on failed to deploy on schedule. So something different seemed like just the thing.</p>
<p>In the interviews, we talked about design documents, architecture documents, requirements gathering&#8230;all good, safe, non-coding tasks. Besides, it would be interesting to be in on the startup of a large project for a change. I was typically hired just as the smoke started appearing and right after the development team all quit and I was a little weary of salvage work. I was actually looking forward to a nice, clean start without chaos and disaster.</p>
<p>My first meeting was an experiment in chaos and disaster. Apparently there were five different development teams, and they were all short of developers. They could smell one of their own and they started circling me like a den of wolves circling a rabbit. They all seemed irate, stressed, and desperate for an experienced developer. No matter how many times it was pointed out that I was there to do Systems Engineering work, they continued to probe my availability to help with &#8220;the most critical bugs&#8221; that were holding up testing and causing them to miss deadlines. <div class="simplePullQuote">The more I heard and saw, the more I was reminded not of a project that  is just starting up, but one that is just starting to fail. All of the  signs were there. I had been duped.</div></p>
<p>This was confusing. How could they already have &#8220;critical bugs&#8221; before the project ever started? Those usually come in towards the end of development, not the start of it. And how could they be holding up testing? Why did they even have testers on staff at this point? What could they possibly be eager to test? And how could they be missing deadlines when they didn&#8217;t even have their architecture and design work done? Why did they even have coding deadlines?</p>
<p>Confused, I faded into the background and just observed. The more I heard and saw, the more I was reminded not of a project that is just starting up, but one that is just starting to fail. All of the signs were there. I had been duped.</p>
<p>Right after the meeting, I went to my new manager&#8217;s office for some clarification. It turns out that the project was not just starting, but had been going on for nearly two years on an 18 month contract. They were behind schedule, low on budget, low on developers, and working 18 hour days. They had hundreds of critical bugs and very few people to fix them. Now the development managers were out for blood because a Systems Engineering manager had sniped a perfectly good senior developer for what? Documentation? They were livid.</p>
<p>Then it all started making sense to me. I was indeed brought in to help create the architecture documents, the software designs, even the requirements. But at the END of the project, not the beginning. Apparently management was getting spooked by being behind schedule  the persistent rumours floating around that the shipyard was considering cancelling the contract and refusing to pay for a failed project. This was going to cost the company many, many millions of dollars. Failure for this project to work could cause stock prices to fall, throw existing ship contracts behind schedule, and endanger future contract negotiations. Realizing this, and not wanting to be the ones the finger was pointing to after the fact, the Systems Engineering managers went into a frenzy to backfill all of the documentation that should have been done up front. That is what I was hired for. I was a contract CYA agent.</p>
<p>What was the point? Why would anyone be so worried about documenting software that was probably never going to be delivered or used? Why not just focus all efforts on getting it deployed and then worry about doing the documentation? It wouldn&#8217;t be the first project I had been on that had taken that approach.</p>
<p>It turns out that after a failed project, the company requires a &#8220;post mortem&#8221; audit. This is is basically a formalized witch hunt disguised as a &#8220;learning process&#8221; that brings in independent auditors who go through the tens of thousands of documents to try to determine why the project failed and how to avoid projects from failing in the future. The main problem with this in our case was that there really weren&#8217;t many documents to review. That was a serious contractual violation and would result in some heads rolling, so it needed to be &#8220;fixed&#8221; as quickly as possible.</p>
<p><a rel="attachment wp-att-1065" href="http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-cya-agent/derailed/"><img class="size-full wp-image-1065  alignright" title="Derailed Train" src="http://www.dbxsoftware.com/cms/wp-content/uploads/derailed.jpg" alt="Derailed Train" width="450" height="300" /></a></p>
<p>What this all boiled down to was that I was going to be part of another crash-and-burn project derailment, but I was going to be creating the documentation that should have been created before development started. This is a very thorny job to have because it required us to schedule meetings with developers and have them explain to us how the software they wrote works so that we could document it and create a design for them to follow in creating the software. Very few of them saw the irony of it and even fewer were happy to work with us. They saw it as an effort to deflect blame to them and were less than cooperative. The development managers were even worse. They were downright hostile, and I can&#8217;t say I blame them. I had been is a similar situation on my previous project and I knew that asking a development manager to allow me to take up hours of his developers&#8217; time when they were already way over deadlines was slightly more endearing than just kicking them in the groin.</p>
<p>The worst part was that, no matter what I did, there was nothing I could do to head off the coming project meltdown. I was just there to cover tracks. Or so it seemed.</p>
<p>Part 3: <a href="http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-duck-and-cover/">Duck and Cover</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.dbxsoftware.com%2Fcms%2Findex.php%2Fproject-crash-and-burn-cya-agent%2F&amp;title=Why%20so%20many%20projects%20crash%20and%20burn%20%26%238211%3B%20Part%202%3A%20CYA%20Agent"><img src="http://www.dbxsoftware.com/cms/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-cya-agent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why so many projects crash and burn.</title>
		<link>http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn/</link>
		<comments>http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 16:35:16 +0000</pubDate>
		<dc:creator>mmroberts</dc:creator>
				<category><![CDATA[Metaphor Crash]]></category>

		<guid isPermaLink="false">http://www.dbxsoftware.com/cms/?p=1029</guid>
		<description><![CDATA[Configuration Management is probably one of the most dreaded and misunderstood tools that software projects have available to them. As a developer with over fifteen years of experience, I have to admit that I was blissfully unaware of it until four or five years ago. However, I had become very troubled by what I saw &#8230;  <a class="continue_reading" href="http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Configuration Management is probably one of the most dreaded and misunderstood tools that software projects have available to them. As a developer with over fifteen years of experience, I have to admit that I was blissfully unaware of it until four or five years ago. However, I had become very troubled by what I saw as the unexplainable way projects were crashing and burning around me. I found it difficult to understand how development projects with budgets with six zeros after them could just fall apart with no clear cause.</p>
<p>There were always reasons cited that sort-of explained why a project ran off the rails, but none of them were really convincing to me:</p>
<p><em>&#8220;Congress killed funding for the project&#8221;</em></p>
<p>Why? Could it be because the project was already 150% over budget. two years behind schedule, and becoming obsolete before it was ever released?</p>
<p><em>&#8220;The technology was just too complex to pull together&#8221;</em></p>
<p>Why was this a surprise? Couldn&#8217;t they have seen that before spending $20 million in development money on it?</p>
<p><em>&#8220;We ran out of budget and had to lay off a lot of key developers&#8221;</em></p>
<p>Why were you so far over budget to start with?</p>
<p><em>&#8220;The development team never did understand what we were really trying to do&#8221;</em></p>
<p>Why is that? How can a team work on a project for two years and not know what it is they are building?</p>
<p>The excuses for projects crumbling go on and on, and the most disturbing thing to me was that they never seemed to learn anything from their mistakes. Developers scattered to different companies that had the next great world-changing project starting up and eighteen months later were laid off looking for another gig.<div class="simplePullQuote">eventually the walls started crumbling and we shifted into &#8220;death  march&#8221; mode where we were putting in eighteen hour days and consuming  truckloads of Mountain Dew and pizza in a doomed effort to fix the  mushrooming bugs and new requirements on an ever-dwindling budget.</div></p>
<p>In all honesty, as a developer it wasn&#8217;t so bad. I learned early on that the trick to being a happy &#8220;coding cowboy&#8221; was to never get too comfortable in your saddle. As long as you went into a project knowing that, chances are, this thing will explode on me before it ever sees the light of day, then everything else was pretty good. The pay was great, we were usually using extremely new and exciting technologies, and the atmosphere was almost always electric and exciting. While it lasted.</p>
<p>As I grew older and tired of moving to a new project every year or two, I began to question why projects never seemed to get it right. No matter how large or small, no matter what ex-football player or admiral was on the board of directors, no matter how much venture capital (or, as we called it in the development world, &#8220;vulture capital&#8221;), eventually the walls started crumbling and we shifted into &#8220;death march&#8221; mode where we were putting in eighteen hour days and consuming truckloads of Mountain Dew and pizza in a doomed effort to fix the mushrooming bugs and new requirements on an ever-dwindling budget.</p>
<p>These types of projects have been documented before. A book was written about one called &#8220;<a href="http://www.dreamingincode.com/" target="_blank">Dreaming in Code</a>&#8221; which chronicled the rise and subsequent crash and burn of an open source project called &#8220;<a href="http://chandlerproject.org/" target="_blank">Chandler</a>&#8220;.</p>
<p>The thing that I kept coming back to when considering all of these different project failures (other than &#8220;I must be an <a href="http://en.wikipedia.org/wiki/Albatross_%28metaphor%29" target="_blank">albatross</a>!&#8221;) was that there was some hidden, ticking time bomb in each of them that at some certain point in the project exploded and blanketed everything with chaos. Suddenly, just as budgets were getting strained, deadlines had been missed, and people started getting burned out, everything seemed to just fall apart. Bugs appeared by the dozens, then hundreds, and then thousands, as if they were breeding. Usually about this time (when the first development releases were being tested and put in front of the users), missed requirements were discovered and had to be &#8220;grafted&#8221; back into the application. This, of course, resulted in more bugs that had to be fixed, and fixing bugs often led to new bugs, and on and on it went until the company ran out of money and dealt with it by laying off their most expensive people first, which also deprived them of their most experienced developers. Soon thereafter, the company would declare the project officially dead and move on to their next world-changing disaster.</p>
<p>What was this mysterious force that seemed to attack a project like a virus and bring it to its knees? How could so many smart people screw up so badly so many times? This problem really bugged me for several years.</p>
<p>In 2008, I was once again looking for work after the last company I worked for, a huge consulting firm that would have been kicked off the New York Stock Exchange for accounting irregularities had it not been kicked off sooner for trading below $1 per share for a solid month, went belly-up. The project that crashed and burned on me in that instance was an internal accounting system that was supposed to correct the accounting irregularities, but it failed to make it out of the gate due to the same old bugs and delays. In this case, a failed project actually did bring down a company of over 15,000 employees&#8230;and I was lead developer on the smoking project! This really brought the problem home to me. I had done everything I could conceivably do to make the project a success and thereby prevent the collapse of a huge company and had utterly failed. It weighed very heavily on my mind. I took some comfort in the fact that I had been taken off the project after insisting that we not completely re-engineer it from the ground up a fourth time, but at that point it was pretty obvious that it was doomed anyway. It was technically still on my watch.</p>
<p>While looking for another development job, and questioning my qualifications to be lead anything after the spectacular failure that got my development team and thousands of other people laid off, I was offered a temporary contract job at a large shipyard to do some &#8220;systems engineering&#8221; work. I had no idea what they wanted me to do, but I aced the interviews and they felt confident I was qualified. At the same time, I was wondering if maybe I should get out of the software development business anyway, given my track record of killing off otherwise viable companies. Maybe some &#8220;systems engineering&#8221; or hamburger flipping was just what I needed. So I took the job.</p>
<p>As it turned out, I went from the frying pan and into the fire.</p>
<p>Part 2: <a href="http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn-cya-agent/" target="_blank">CYA Agent</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.dbxsoftware.com%2Fcms%2Findex.php%2Fproject-crash-and-burn%2F&amp;title=Why%20so%20many%20projects%20crash%20and%20burn."><img src="http://www.dbxsoftware.com/cms/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.dbxsoftware.com/cms/index.php/project-crash-and-burn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More Project Integrity Management with TreeLine</title>
		<link>http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/</link>
		<comments>http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 21:27:20 +0000</pubDate>
		<dc:creator>mmroberts</dc:creator>
				<category><![CDATA[Metaphor Crash]]></category>
		<category><![CDATA[Effective Date]]></category>
		<category><![CDATA[Export]]></category>
		<category><![CDATA[GJID]]></category>
		<category><![CDATA[Globally Unique Identifier]]></category>
		<category><![CDATA[PII]]></category>
		<category><![CDATA[PIM]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[TreeLine]]></category>
		<category><![CDATA[Universally Unique Identifier]]></category>
		<category><![CDATA[UUID]]></category>
		<category><![CDATA[Versioning]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XSLT]]></category>

		<guid isPermaLink="false">http://www.dbxsoftware.com/cms/?p=1007</guid>
		<description><![CDATA[In the last article, I covered the basics of Project Integrity Management using a very flexible editing tool called TreeLine. Today I will continue to work with that same sample project to show some useful things that can easily be accomplished with TreeLine. In our example project, the very important ID property was omitted from &#8230;  <a class="continue_reading" href="http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>In the last article, I covered the basics of Project Integrity Management using a very flexible editing tool called TreeLine. Today I will continue to work with that same sample project to show some useful things that can easily be accomplished with TreeLine.</p>
<p>In our example project, the very important ID property was omitted from the Project Integrity Items (PIIs) that were created. I will now demonstrate how to add those IDs in as well as other supporting information that will make the project integrity stronger.</p>
<p>As we left it, the project in TreeLine looked like this:</p>
<p style="text-align: center;">
<div id="attachment_990" class="wp-caption aligncenter" style="width: 489px"><a rel="attachment wp-att-990" href="http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/treeline19/"><img class="size-full wp-image-990 " title="TreeLine - New PIIs created" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeLine19.png" alt="" width="479" height="446" /></a><p class="wp-caption-text">Several PIIs with different Properties</p></div>
<p>Our first order of business is to add unique identifiers to each PII so that they can be tracked across versions without the risk of misidentifying them. To add a new property to the first PII, simply right-click on the Language property and select <em>Insert Sibling Before</em>. This will create a new property immediately above Language.</p>
<p style="text-align: center;">
<div id="attachment_1008" class="wp-caption aligncenter" style="width: 489px"><a rel="attachment wp-att-1008" href="http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/treeline21/"><img class="size-full wp-image-1008 " title="TreeLine - Insert Property" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeLine21.png" alt="" width="479" height="446" /></a><p class="wp-caption-text">Inserting the new ID property</p></div>
<p style="text-align: left;">To emphasize the point that a sequential number is not a very good way to handle unique identifiers, this example will use a made-up format of three letters plus three numbers. In a real project it would be advisable to use a standardized unique identifier such as the <a href="http://en.wikipedia.org/wiki/Globally_unique_identifier" target="_blank">GUID</a> or <a href="http://en.wikipedia.org/wiki/Universally_Unique_Identifier" target="_blank">UUID</a> format.</p>
<p style="text-align: left;">Once this property is created, it can be copied and pasted for each PII and a unique value substituted for each one:</p>
<p style="text-align: left;">
<div id="attachment_1009" class="wp-caption aligncenter" style="width: 496px"><a rel="attachment wp-att-1009" href="http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/treeview22/"><img class="size-full wp-image-1009 " title="TreeView - Added New Property" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeView22.png" alt="" width="486" height="497" /></a><p class="wp-caption-text">ID Property added to each PII</p></div>
<p style="text-align: left;">Another piece of information that would probably be useful to track is an effective data for each version. This represents that date that the version was created or put into use. Adding an Effective Date property to versions is just as easy as adding the ID field was&#8230;simply right-click the version, then select <em>Add Child</em>:</p>
<p style="text-align: left;">
<div id="attachment_1010" class="wp-caption aligncenter" style="width: 497px"><a rel="attachment wp-att-1010" href="http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/treeview23/"><img class="size-full wp-image-1010 " title="TreeLine - Add Child To Version" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeView23.png" alt="" width="487" height="503" /></a><p class="wp-caption-text">Adding a property to a Version</p></div>
<p style="text-align: left;">Just like last time, a new child item was added of the type &#8220;PII&#8221;. However, in this case, we don&#8217;t want to add a PII;we want to add a Property to the Version. This is no problem. To change the new PII to a property, simply right-click and select<em> Set Item Type </em>, then select &#8220;Property&#8221; from the list that is displayed. This will change the new item from a PII to a Property:</p>
<p style="text-align: left;">
<div id="attachment_1011" class="wp-caption aligncenter" style="width: 497px"><a rel="attachment wp-att-1011" href="http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/treeview24/"><img class="size-full wp-image-1011 " title="TreeLine - Change Item Type" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeView24.png" alt="" width="487" height="494" /></a><p class="wp-caption-text">Change Item Type</p></div>
<p style="text-align: left;">This will instantly convert the PII into a Property, which we can then name &#8220;Effective Date&#8221; and add a date value for:</p>
<p style="text-align: left;">
<div id="attachment_1012" class="wp-caption aligncenter" style="width: 496px"><a rel="attachment wp-att-1012" href="http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/treeline23/"><img class="size-full wp-image-1012 " title="TreeLine - Effective Date Added" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeLine23.png" alt="" width="486" height="497" /></a><p class="wp-caption-text">Effective Date added for all Versions</p></div>
<p style="text-align: left;">As the above example shows, items can be nested down more than one level. In fact, with TreeLine, they can be nested as many levels as desired. This is one of the reasons that TreeLine makes such a great tool for illustrating PIM methodologies since PIM projects can possibly have many levels of nesting.</p>
<p style="text-align: left;">Note in the screenshot above that some nodes have been collapsed by clicking on the &#8220;-&#8221; beside the PII name. Any node in TreeLine can be collapsed in a similar fashion, allowing easy viewing of items that are not necessarily side by side in the tree view control.</p>
<p style="text-align: left;">I would now like to show you how easy it is to create a new version of a project. In this scenario, a version has been developer tested and has been sent to testers for regression testing. At this point, any new changes must be made to a new version of the application code. This can easily be reflected in the TreeLine project with simple copy and paste procedures identical to the ones used previously to copy and paste properties and PIIs.</p>
<p style="text-align: left;">To create the new project version, first collapse the initial version all the way down by clicking on the &#8220;-&#8221; beside the version name (0.0.0), then right-click on the version and select <em>Copy</em>.</p>
<p style="text-align: left;">
<div id="attachment_1013" class="wp-caption aligncenter" style="width: 496px"><a rel="attachment wp-att-1013" href="http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/treeview25/"><img class="size-full wp-image-1013 " title="TreeLine - Copy Version" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeView25.png" alt="" width="486" height="499" /></a><p class="wp-caption-text">Copying Version Structure</p></div>
<p>Then right-click on the Widget Manager project and select <em>Paste</em>:</p>
<p style="text-align: left;">
<div id="attachment_1014" class="wp-caption aligncenter" style="width: 498px"><a rel="attachment wp-att-1014" href="http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/treeview26/"><img class="size-full wp-image-1014 " title="TreeView - Paste Version Tree Structure" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeView26.png" alt="" width="488" height="502" /></a><p class="wp-caption-text">Pasting the copied Version</p></div>
<p style="text-align: left;">Another version 0.0.0 will be added. Clicking on the &#8220;+&#8221; beside it will reveal that it did a complete copy of every item in the original version (i.e. a &#8220;deep copy&#8221; for you programmers)!  This copy is completely independent of the original and can be edited to reflect the changes made between versions. For the items that did not change, no editing is needed:</p>
<p style="text-align: left;">
<div id="attachment_1015" class="wp-caption aligncenter" style="width: 496px"><a rel="attachment wp-att-1015" href="http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/treeline28/"><img class="size-full wp-image-1015 " title="TreeLine - New Version Created" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeLine28.png" alt="" width="486" height="497" /></a><p class="wp-caption-text">New Version Created and Edited</p></div>
<p style="text-align: left;">This is a very powerful tool to manage multiple versions of a project. With a little thought, one can imagine many ways that this deep copy and paste technique can be employed to reduce redundant data entry throughout a project under PIM control.</p>
<h2 style="text-align: left;">Set Me Free!</h2>
<p style="text-align: left;">One problem with using any tool is that, while the tool may be useful, it is often difficult or impossible to use the data across different tools. For example, a software development shop may be using automated build tools to create builds and deploy them to test environments, and developers may rely on a reporting tool that notifies them when any source code versions change.  Without some sort of interface or export features, the data becomes locked in and inaccessible to other applications that may need them.</p>
<p style="text-align: left;">While I am not advocating TreeView as a large scale PIM solution, I do see many, many elements in it that lend themselves to this type of methodology. Among those is its ability to export all data in standard data formats. Using this feature, the PIM administrator could easily produce XML data files that other tools could then read and manipulate for related uses such as automation and reporting.</p>
<p style="text-align: left;">Exporting data is easy with TreeView. Data can be selectively exported by node (selected node plus all children) or as a complete file.</p>
<p style="text-align: left;">In this example, we will export the data in XML format, but exporting to CSV, HTML single file, HTML Directory Tree, XSLT, and other formats is possible.</p>
<p style="text-align: left;">First, click on the top node that should be exported. In this example, I will export the entire project (i.e. both versions). To do this, I click on the top node (Widget Manager), then click the File menu, then Export :</p>
<p style="text-align: left;">
<div id="attachment_1016" class="wp-caption aligncenter" style="width: 500px"><a rel="attachment wp-att-1016" href="http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/treeview27/"><img class="size-full wp-image-1016 " title="TreeLine - Export" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeView27.png" alt="" width="490" height="499" /></a><p class="wp-caption-text">Exporting Data</p></div>
<p style="text-align: left;">Then select the format that the data should be exported in:</p>
<p style="text-align: left;">
<div id="attachment_1017" class="wp-caption aligncenter" style="width: 447px"><a rel="attachment wp-att-1017" href="http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/treeline27/"><img class="size-full wp-image-1017" title="TreeLine - Export Format" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeLine27.png" alt="" width="437" height="314" /></a><p class="wp-caption-text">Export Format Selection</p></div>
<p style="text-align: left;">Clicking OK will start the export. In this case, it creates a standard XML file of all of the data, shown here in an XML text editor:</p>
<p style="text-align: center;">
<div id="attachment_1018" class="wp-caption aligncenter" style="width: 629px"><a rel="attachment wp-att-1018" href="http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/treelinexml/"><img class="size-full wp-image-1018 " title="TreeLine - Exported XML" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeLineXML.png" alt="" width="619" height="604" /></a><p class="wp-caption-text">XML Output</p></div>
<p>This file can now easily be imported by any other application that understands standard XML formatting.</p>
<h2 style="text-align: left;">Conclusion</h2>
<p style="text-align: left;">I will inevitably get questions on whether or not I would use a tool like TreeLine to do actual Project Integrity Management. I have to say that, as much as I like TreeLine, it is not specialized enough for true PIM. Some examples of where it falls short for this use are:</p>
<ul>
<li>It lacks element level validation. This is critical for PIM because data cross-checks must be done to prevent inconsistent versioning, duplicate IDs, and many other potential data entry problems.</li>
<li>It does not allow &#8220;pointers&#8221; to items. Instead, each version of a project must have its own copy of each item. This means that if a property is added to one version of a PII, it must be manually added to all other instances of it as well.</li>
<li>It lacks a structured workflow. Although it makes it very easy to build related groups of items, it makes it just as easy to create unintended duplicates, incomplete entries, and other hard to manage issues.</li>
<li>Managing data by Copy &amp; Paste is asking for trouble. Most developers have learned to despise &#8220;copy and paste&#8221; coding because it is difficult to maintain and propagates errors each time it is done. While copying and pasting trees in TreeView is a great timesaver compared to manually entering each item, it is not a realistic approach to managing data reliably.</li>
</ul>
<p>What TreeLine does though is make it easy to illustrate the concepts that go into Project Integrity Management and perhaps create a basic framework for any future tools that are created to implement this process in real projects.</p>
<p>It is said that a picture is worth a thousand words, so if that is the case, this article is about 12,000 words too long. I hope you learned something and will come back again as we explore ways to manage project complexity.</p>
<p style="text-align: left;">
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.dbxsoftware.com%2Fcms%2Findex.php%2Fmore-project-integrity-management-with-treeline%2F&amp;title=More%20Project%20Integrity%20Management%20with%20TreeLine"><img src="http://www.dbxsoftware.com/cms/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.dbxsoftware.com/cms/index.php/more-project-integrity-management-with-treeline/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Project Integrity Management with TreeLine</title>
		<link>http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/</link>
		<comments>http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 19:34:56 +0000</pubDate>
		<dc:creator>mmroberts</dc:creator>
				<category><![CDATA[Metaphor Crash]]></category>
		<category><![CDATA[managing PIIs]]></category>
		<category><![CDATA[PIM]]></category>
		<category><![CDATA[Screenshots]]></category>
		<category><![CDATA[TreeLine]]></category>

		<guid isPermaLink="false">http://www.dbxsoftware.com/cms/?p=979</guid>
		<description><![CDATA[About a year ago I discovered a wonderful application called TreeLine (http://treeline.bellz.org/) that is a little difficult to categorize. It is part text editor, part database, and part outliner, but it is flexible enough to be used for almost any type of outlining or data storage. A common use for it is to create outlines &#8230;  <a class="continue_reading" href="http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>About a year ago I discovered a wonderful application called TreeLine (<a href="http://treeline.bellz.org/scrnsht.html" target="_blank">http://treeline.bellz.org/</a>) that is a little difficult to categorize. It is part text editor, part database, and part outliner, but it is flexible enough to be used for almost any type of outlining or data storage. A common use for it is to create outlines for books or other publications, but with its customizable data elements, it can be used for pretty much anything.</p>
<p>In an earlier post, I promised to show how basic Project Integrity Management could be done with very basic tools. Although we could go all the way down to using just the filesystem (nested folders, etc.), that is a little too raw for any practical usage. With tools like Excel, you lose the ability to maintain relationships between the items, and with straight word processors such as Microsoft Word you have very limited support for nested items and data field management.</p>
<p>I finally settled on TreeLine for this demonstration because it is capable enough to show how the concept works, it is open source (translation: free) and works on nearly any operating system including Windows, Mac, Linux, and many versions of Unix. Since I use Linux as my primary operating system on all of my computers, this was a real advantage for me. Additionally, the TreeLine files that are created for data storage are in pure XML, a standardized, self-describing data language. What this means is that a TreeLine file I created on my Linux machine will be usable by someone on a Mac or Windows machine without any conversion needed.</p>
<p>For this article, I have made the custom template file that I used in creating the screen shots available for download at the following link:<a href="http://www.dbxsoftware.com/cms/wp-content/uploads/treelinefile.zip"> http://www.dbxsoftware.com/cms/wp-content/uploads/treelinefile.zip</a></p>
<p>Once you download and install <a href="http://treeline.bellz.org/download.html">T</a><a href="http://treeline.bellz.org/download.html" target="_blank">reeLine </a>, simply download the template file zip file, extract the file <em>treelinefile.trl</em> and double-click it to open it with TreeLine. This file will provide you with all of the data elements that I created for this demo without you having to create them yourself, assuming you are interested enough in following along to actually do all of that. Having TreeLine installed and the template file open will make following along much easier.</p>
<p>NOTE: This article does not explain the finer points of configuring and using TreeLine. For more information on that topic, <a href="http://treeline.bellz.org/use.html" target="_blank">click here.</a></p>
<h2>Using TreeLine for Project Integrity Management</h2>
<p>When you open the template file, your screen will appear similar to this:</p>
<div id="attachment_980" class="wp-caption aligncenter" style="width: 413px"><a rel="attachment wp-att-980" href="http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/treelinenew/"><img class="size-medium wp-image-980 " title="TreeLine Initial View" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreelineNew-300x278.png" alt="" width="403" height="374" /></a><p class="wp-caption-text">TreeLine with template file open.</p></div>
<p>This shows an initial project name Widget Manager and an initial version for the project of 0.0.0.</p>
<p>Before adding elements to the project, consideration should be given to what the various parts of the project are. Typically there will be a User Interface portion (UI), some business logic/server source code, possibly database access source code, and various supporting files such as configuration files and images.</p>
<p>For this simple example, we will use:</p>
<ul>
<li>A User Interface Source File</li>
<li>A General Configuration File</li>
<li>Two Image Files</li>
</ul>
<p>Any project in the real world will certainly have more content than this, but these three will serve to illustrate how this tool can be used to manage the pieces and to illustrate how a project under Project Integrity Management is structured.</p>
<p>The template file contains four data &#8220;types&#8221; or structures:</p>
<ul>
<li>Project</li>
<li>Version</li>
<li>Project Integrity Item (PII)</li>
<li>Property</li>
</ul>
<p>These four elements are all that are needed for any project when PIM is properly implemented. There is some implied structure in these elements that the template file is pre-configured to take care of. They can be summarized as:</p>
<p><strong>Project is a top level (&#8220;root&#8221;) element. </strong>Although project can be nested, i.e. have &#8220;child&#8221; projects, it is usually easiest to manage each project as its own root level element.</p>
<p><strong>Versions apply to Projects and PIIs </strong>All Projects and all PIIs will have a version. Projects will usually eventually have multiple versions as changes are made to the original codebase.</p>
<p><strong>Projects, Versions, and PIIs can all have no properties, or can have as many properties as needed.</strong> Properties can differ between PIIs and between versions. In other words, just because version 2.0.1 has a property called &#8220;Status&#8221;, version 2.0.0 is not required to have that same property, although it may.</p>
<p>Additionally, the following general guidelines are useful in understanding the structure:</p>
<ul>
<li>Projects can Contain Projects, Versions and Properties.</li>
<li>Versions can Contain Properties and PIIs</li>
<li>PIIs can contain versions, properties and other PIIs.</li>
</ul>
<p>This, no doubt, seems to be rather circular, but as the following example will show, it makes sense.</p>
<p>To start off a new project, it should be named and a initial version should be created. In the template, those steps are already done. When you open the template, you should see the following screen:</p>
<div id="attachment_998" class="wp-caption aligncenter" style="width: 470px"><a rel="attachment wp-att-998" href="http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/treeline1/"><img class="size-full wp-image-998 " title="TreeLine - PIM Template" src="http://www.dbxsoftware.com/cms/wp-content/uploads/Treeline1.png" alt="" width="460" height="430" /></a><p class="wp-caption-text">Basic PIM Template in TreeLine</p></div>
<p>Clicking on the &#8220;+&#8221; beside the project name (Widget Manager) will expand the view to show a version 0.0.0 below the project name.</p>
<p>Start out by adding a new child node to the version by right-clicking on the version 0.0.0 and selecting <em>Add Child</em></p>
<div id="attachment_982" class="wp-caption aligncenter" style="width: 487px"><a rel="attachment wp-att-982" href="http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/treeline10/"><img class="size-full wp-image-982 " title="Treeline - Add Child" src="http://www.dbxsoftware.com/cms/wp-content/uploads/Treeline10.png" alt="" width="477" height="450" /></a><p class="wp-caption-text">Adding  a child element</p></div>
<p>Because the template is already configured to default to the most likely child node type, a new child node with the type of &#8220;PII&#8221; is added when the parent is node is a &#8220;Version&#8221; node:</p>
<div id="attachment_983" class="wp-caption aligncenter" style="width: 491px"><a rel="attachment wp-att-983" href="http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/treeline11/"><img class="size-full wp-image-983 " title="Treeline - Adding a new PII" src="http://www.dbxsoftware.com/cms/wp-content/uploads/Treeline11.png" alt="" width="481" height="444" /></a><p class="wp-caption-text">Adding a new PII</p></div>
<p>As soon as the new PII node is added, you can edit the name and description fields on the right side of the screen (shown already edited).</p>
<p>Now that we have a project, a version, and a PII to manage, we need to know more about what it is. Although the description gives a general idea, it is very likely that additional information will be needed to track this particular item. That additional information is added in the form of Properties.</p>
<p>To add a property, right-click on the newly created PII and select (you guessed it) <em>Add Child.</em></p>
<p style="text-align: center;"><em><a rel="attachment wp-att-984" href="http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/treeline12/"><img class="aligncenter size-full wp-image-984" title="TreeLine - Adding Property" src="http://www.dbxsoftware.com/cms/wp-content/uploads/Treeline12.png" alt="" width="479" height="446" /></a><br />
</em></p>
<p>Notice that this time, instead of the icon for a PII (the small notepad), the new item was created with the icon for a property, a small blue sphere. Also notice that because this is a &#8220;Property&#8221; type item, instead of &#8220;Description&#8221;, it has a field titled &#8220;Value&#8221; on the right side of the screen:</p>
<div id="attachment_985" class="wp-caption aligncenter" style="width: 490px"><a rel="attachment wp-att-985" href="http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/treeline13/"><img class="size-full wp-image-985 " title="TreeLine - Adding Property" src="http://www.dbxsoftware.com/cms/wp-content/uploads/Treeline13.png" alt="" width="480" height="442" /></a><p class="wp-caption-text">Adding a Property</p></div>
<p>The important thing to remember about a property is that it can represent nearly anything that is needed for tracking purposes. For a source code file, a good thing to know is the development language it is written. Therefore, this property can be named &#8220;Language&#8221; and the value can be set to &#8220;C#&#8221;.</p>
<div id="attachment_986" class="wp-caption aligncenter" style="width: 489px"><a rel="attachment wp-att-986" href="http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/treeline14/"><img class="size-full wp-image-986 " title="TreeLine - Property Details" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeLine14.png" alt="" width="479" height="446" /></a><p class="wp-caption-text">Filling in Property Value</p></div>
<p>This process can be repeated for as many properties as needed. Once the new PII is complete with all of the needed properties, a new item can be easily added by copying the original PII and pasting it as a new PII in the 0.0.0 Version folder:</p>
<div id="attachment_987" class="wp-caption aligncenter" style="width: 492px"><a rel="attachment wp-att-987" href="http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/treeline16/"><img class="size-full wp-image-987 " title="TreeLine - Copy PII" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeLine16.png" alt="" width="482" height="448" /></a><p class="wp-caption-text">Copying an existing PII</p></div>
<div id="attachment_988" class="wp-caption aligncenter" style="width: 488px"><a rel="attachment wp-att-988" href="http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/treeline17/"><img class="size-full wp-image-988 " title="TreeLine - Pasting PII" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeLine17.png" alt="" width="478" height="447" /></a><p class="wp-caption-text">Pasting a copied PII</p></div>
<p>This creates a new PII exactly like the copied one.</p>
<div id="attachment_989" class="wp-caption aligncenter" style="width: 489px"><a rel="attachment wp-att-989" href="http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/treeline18/"><img class="size-full wp-image-989 " title="TreeLine - Pasted PII" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeLine18.png" alt="" width="479" height="446" /></a><p class="wp-caption-text">Duplicated PII</p></div>
<p>It is then easy to edit the existing properties to match the second source file. This process can then be repeated as many times as needed to get the initial set of PIIs into the project version. In the following screenshot, all four of our example PIIs have been created and edited.</p>
<div id="attachment_990" class="wp-caption aligncenter" style="width: 489px"><a rel="attachment wp-att-990" href="http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/treeline19/"><img class="size-full wp-image-990 " title="TreeLine - New PIIs created" src="http://www.dbxsoftware.com/cms/wp-content/uploads/TreeLine19.png" alt="" width="479" height="446" /></a><p class="wp-caption-text">Several PIIs with different Properties</p></div>
<p>Some interesting points to make about the above screen shot:</p>
<p>All of the PIIs are child nodes of the version 0.0.0, but each item has its own version as well. This follows the concept of Project Integrity Management with states that all Project Integrity Items must be versioned. This is important, because most source files and documents are versioned by the software development environments that are used to develop them. Including the version with the PII guarantees that any changes in the software development environment versioning is accounted for in the project.</p>
<p>One thing that may have gone unnoticed in this example is that, according to PIM rules, each PII must have a unique identifier. These PIIs do NOT have a unique identifier associated with them. In my next article, I will show you how to easily go back and add information that may have been forgotten or omitted in the original setup of the project, as well as some pretty amazing tricks for versioning entire projects and exporting them in standard data formats.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.dbxsoftware.com%2Fcms%2Findex.php%2Fproject-integrity-management-with-treeline%2F&amp;title=Project%20Integrity%20Management%20with%20TreeLine"><img src="http://www.dbxsoftware.com/cms/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.dbxsoftware.com/cms/index.php/project-integrity-management-with-treeline/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Metaphorically Speaking</title>
		<link>http://www.dbxsoftware.com/cms/index.php/metaphorically-speaking/</link>
		<comments>http://www.dbxsoftware.com/cms/index.php/metaphorically-speaking/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 15:10:04 +0000</pubDate>
		<dc:creator>mmroberts</dc:creator>
				<category><![CDATA[Metaphor Crash]]></category>
		<category><![CDATA[Command Line]]></category>
		<category><![CDATA[DOS]]></category>
		<category><![CDATA[file manager]]></category>
		<category><![CDATA[fileing cabinets]]></category>
		<category><![CDATA[Grandmother]]></category>
		<category><![CDATA[Metaphor]]></category>
		<category><![CDATA[Windows 3.1]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://www.dbxsoftware.com/cms/?p=950</guid>
		<description><![CDATA[When talking about methods of managing the complexity of Project Integrity Management, the discussion inevitably turns to software solutions. This is a natural progression of logic for people who spend a large portion of their waking hours (and in some cases, a large portion of their sleeping hours) thinking about software. When a software developer &#8230;  <a class="continue_reading" href="http://www.dbxsoftware.com/cms/index.php/metaphorically-speaking/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>When talking about methods of managing the complexity of Project  Integrity Management, the discussion inevitably turns to software  solutions. This is a natural progression of logic for people who spend a  large portion of their waking hours (and in some cases, a large portion  of their sleeping hours) thinking about software. When a software  developer or software project member sees a problem, their first  reaction is to find a software product to solve it. The unfortunate  truth of the situation though is a simple axiom that I came up with  years ago to help guide the requirements gathering phase of a project:</p>
<p>&#8220;You can&#8217;t solve a problem with software that you can&#8217;t solve on paper.&#8221;</p>
<p>In other words, software can only solve a problem if that solution  has already been figured out logically and codified in the logic that  the software operates on. For this reason, my software requirements  gathering sessions are always done with nothing more than paper, a  whiteboard, and the people who know the processes in a room together.  Crazy, huh? A software developer who will only use paper and  whiteboards. This approach does two things. It forces the people who  already have the knowledge of how to solve the problems that your  software is intended to solve to break the processes in their brains  down into individual steps, and more importantly, it exposes the gaps  that exist in their own manual processes. Until those gaps are filled  and they can explain how they do the task manually, the software  solution cannot exist.</p>
<p><a rel="attachment wp-att-941" href="http://www.dbxsoftware.com/cms/?attachment_id=941"><img class="alignleft size-full wp-image-941" title="treeview" src="http://www.dbxsoftware.com/cms/wp-content/uploads/treeview.jpg" alt="" width="180" height="245" /></a>The  reason I bring this up is because the software that I have seen for  &#8220;Configuration Management&#8221; is woefully inadequate for the task. People  who create this software clearly do not understand the complexity of the  problem they are approaching. How can I make such a bold statement  without actually talking with them? I look at the tools they use. As I  talked about in the article titled <a href="../index.php/when-all-you-have-is-a-hammer/">&#8220;When all you have is a hammer&#8230;&#8221;</a>,  they are obviously attempting to solve complex problems by using  whatever tools they have lying around. A prime example of this is the  ubiquitous Treeview control.</p>
<p>If you have ever used a modern computer, you are familiar with the  TreeView control. It is everywhere. Most operating systems make wide use  of it, particularly for navigating their filesystem. In Windows  Explorer (or &#8220;My Computer&#8221; to many), the TreeView allows users to  organize and find files that are represented as icons in folders. When a  folder is clicked, the treeview expands to show folders and files  within the selected one.</p>
<p>It is a cozy, well-understood metaphor.</p>
<div class="simplePullQuote">&#8220;You can&#8217;t solve a problem with software that you can&#8217;t solve on paper.&#8221;</div>
<p>Like most metaphors though, it is limiting. I will explain. Have you  ever really thought about the whole &#8220;folders and files&#8221; metaphor? How  well does it map to something real? That is, after all, the whole  purpose of metaphors&#8230;to access knowledge you already have and apply it  to a new concept. Ask yourself the following questions about the  Windows &#8220;filing cabinet&#8221; metaphor of folders and files and consider  whether or not the metaphor is doing more harm than good:<a rel="attachment wp-att-944" href="http://www.dbxsoftware.com/cms/?attachment_id=944"><img class="alignleft size-full wp-image-944" title="Control Panel - Windows XP" src="http://www.dbxsoftware.com/cms/wp-content/uploads/explorer.png" alt="" width="266" height="176" /></a></p>
<ul>
<li>Do you really keep your printers in a file folder named &#8220;Printers and Faxes&#8221; in your filing cabinet at home? Do they fit?</li>
<li>Do you also keep your expensive camera in your file drawer with your scanner?</li>
<li>When you want to schedule a task, do you have a folder for that in your file cabinet?</li>
<li>Do you have a very large file in your file cabinet called &#8220;Administrative Tools&#8221; with various tools in it?</li>
<li>Do you keep folders inside folders..inside folders&#8230;inside  folders&#8230;inside folders&#8230;with one document in the innermost one? Why  would you do that?</li>
</ul>
<p>Of course, the answer to these questions is almost certainly &#8220;no&#8221;,  but what does that prove? Everybody understands what it means, so why  bring it up? Because the only reason &#8220;everybody&#8221; knows what it means is  because the same &#8220;everybody&#8221; had to unlearn something for it to make  sense. Consider this example.</p>
<p>If you were to sit your grandmother who had never used a computer down in front of one  and start explaining to her that everything on the computer was stored  in files, just like her filing cabinet, she would intuitively understand  it at some level because at some point in her life, she learned how to  use a standard paper filing system. As you progressed through the  various folders (&#8220;My Documents&#8221;, &#8220;My Pictures&#8221;, etc. she would probably  have little trouble understanding the metaphor, although she may think it odd that you keep your photos and audio &#8220;records&#8221; in a file cabinet. But when you clicked on a  folder called &#8220;Printers and Faxes&#8221;, what would she expect to see there?  If she is like my grandmother, she would expect to see <em>owners manuals </em>for her printer and her fax machine, and maybe the receipts from when  she purchased them. She would certainly NOT expect to see an actual  laser printer there, any more than she would expect to open a paper file  and find one crammed into it.</p>
<p>Here is the problem with metaphors. While they save a lot of learning  up front by allowing someone to transfer knowledge that they already  have to a new concept, they soon start taking those gains away in the  form of learning the ways that the metaphor is bent to apply to the new  concept. Files on a computer are LIKE files in a filing cabinet, but  they are not REALLY files in a filing cabinet. Since they are not  identical, there must be differences, and those differences are where we  get into trouble. The more the target of the metaphor (in this case, the computer) strays from the actual item (a filing cabinet or physical desktop), the less useful the metaphor becomes, sometimes with disastrous unintended consequences. <br style="font-size: 19.5px; line-height: 28.5px;" /></p>
<p>When I was a teenager, I had thousands of hours logged riding my  bicycle. I would literally ride miles per day on asphalt, dirt roads,  gravel, and even through the woods. I could ride my bike across a large log  crossing a stream without  falling off and could jump over progressively higher ramps until I  eventually crashed and bled (that is how we knew we had reached our limit). In short, I was a good bike rider.</p>
<p>A friend of mine had a cousin who got a motorcycle that he was very  proud of. It was a small street bike in pretty good shape. He brought it  over to my friend&#8217;s house to show us, then insisted on taking my friend  for a ride. I followed along behind them on my bicycle to a new highway  that was being built. There were no cars on it. Heck, there wasn&#8217;t even  any asphalt yet&#8230;just miles and miles of red dirt. He asked me if I  wanted to &#8220;take &#8216;er for a spin&#8221;, which I took to mean riding on back of  it like my friend had. To my shock, he jumped off and said &#8220;go ahead&#8221;.</p>
<p>&#8220;I&#8217;ve never driven a motorcycle&#8221; I said. &#8220;I&#8217;ll probably wreck it.&#8221; I was telling the truth.</p>
<p>&#8220;Oh, there&#8217;s nothing to it!&#8221; he insisted, &#8220;Its just like riding a bicycle, only you don&#8217;t have to peddle!&#8221;</p>
<p>I got on and he showed me the throttle (I didn&#8217;t have one of those on  my bike). Just keep it in first gear and ride a little ways up&#8221;, he  said, grinning, &#8220;it&#8217;s simple!&#8221;.</p>
<p>Against my better judgement, but at his insistence, I started out by  giving it a little gas and suddenly I was putting along at a few miles  per hour. Cool. I did a wide turn around and came back to him. &#8220;Go  again!&#8221; he shouted, &#8220;and give it some gas this time!&#8221;. I did. It felt  great. It was much better than being on a bicycle! I cruised about two  hundred yards and was really getting the feel for it when I hit a patch  of sand.</p>
<p>This happened to me all the time on my bike, and I knew just  how to handle it. I applied the brakes a little to slow down and regain  control. Surprisingly, this made things worse and I started to seriously  swerve towards the embankment. Although I was only travelling at  fifteen miles per hour or so, it suddenly seemed to be way too fast. I  decided to just stop and start over, so I applied the back brake and  front brake heavily at the same time and coasted to a nice  smooth&#8230;arc&#8230;over the handlebars and onto the dirt road. The  motorcycle flipped over beside me and sputtered out. I lay there  wondering if I had broken my neck on my first motorcycle ride.</p>
<p>By the time my friend and his cousin came running up, I was on my feet  surveying the damage. I was scraped up, but not badly. His motorcycle  on the other hand was pretty messed up. The turn signals on one side  were hanging by wires and the front wheel was having serious  disagreements with the handlebars on which way was forward.</p>
<p>&#8220;You crashed my bike, you idiot!&#8221; he yelled.</p>
<p style="font-size: 19.5px; line-height: 28.5px;">
<div class="wp-caption alignleft" style="width: 289px"><img title="Motorcycle Controls" src="http://www.calsci.com/motorcycleinfo/Intro/controls.gif" alt="Diagram of Motorcycle Controls" width="279" height="255" /></p>
<p><p class="wp-caption-text">Motorcycle controls</p></div>
<p>&#8220;I apologized profusely as he put the front wheel against a nearby tree  and twisted the handlebars back straight, then sadly examined his broken  turn signals. &#8220;My brand new bike! What happened?&#8221; he asked.</p>
<p>I pointed out the swerve marks in the sand leading up to the tragic  spot. &#8220;I hit some sand and lost control. I don&#8217;t understand what  happened. It tried to stop and it flipped. It&#8217;s like I hit a hole in the  road, but there isn&#8217;t one there.&#8221; I blabbered, completely puzzled at  what had happened.</p>
<p>&#8220;Why didn&#8217;t you just hit the brakes?&#8221; he asked.</p>
<p>&#8220;I did&#8230;that is the weird part. As soon as I hit the brakes, it flipped.&#8221; I explained.</p>
<p>&#8220;Show Me&#8221;, he said.</p>
<div class="simplePullQuote">As this story illustrates, metaphors give, and they also take away.  At  some point, all metaphors break down and differences appear.</div>
<p>So I got on the bike and applied the brakes again, just as I had. The brake felt spongy. &#8220;I think your back brake is messed up&#8221;, I said.</p>
<p>&#8220;Brake?&#8221;, he yelled, &#8220;you really ARE an idiot! That isn&#8217;t the  back brake&#8230;it&#8217;s the CLUTCH!&#8221;. He pointed to the lever on the left  handlebar that I was squeezing. &#8220;You put on the front brake and the  clutch! No wonder it flipped!&#8221;</p>
<p>&#8220;That&#8217;s the clutch?&#8221; I said meekly, &#8220;On my bike it is the back brake.  You said that it was just like riding a bike, only without having to  pedal. So I thought that was the back brake.&#8221;</p>
<p>&#8220;Oh. Yea&#8221;, he said, much more calmly. &#8220;I forgot to tell you. The back brake is down by your foot&#8221;.</p>
<p>Because he offered up a metaphor that I so completely understood, I  was overly confident in my ability to control the motorcycle. When  someone says that something is &#8220;just like&#8221; something else, it is always  wise to press them further, because if a motorcycle was &#8220;just like&#8221; a  bicycle, it would be a bicycle, not a motorcycle. Instead, it was &#8220;very similar with some  extremely important differences&#8221;.</p>
<p>As this story illustrates, metaphors give, and they also take away.  At some point, all metaphors break down and differences appear.</p>
<p>The Tired Desktop Metaphor<br style="font-size: 19.5px; line-height: 28.5px;" /></p>
<p style="font-size: 19.5px; line-height: 28.5px;">
<div id="attachment_953" class="wp-caption alignleft" style="width: 311px"><a rel="attachment wp-att-953" href="http://www.dbxsoftware.com/cms/index.php/metaphorically-speaking/cmd/"><img class="size-full wp-image-953" title="DOS Command Line" src="http://www.dbxsoftware.com/cms/wp-content/uploads/cmd.png" alt="" width="301" height="285" /></a></p>
<p><p class="wp-caption-text">DOS Command Line</p></div>
<p>Early in  the days of computers, the concept of a &#8220;desktop&#8221; was popular. This did  not mean &#8220;a computer that could sit on your desk&#8221;, but rather it was a  metaphor for using an otherwise extremely intimidating device. Anyone  who has used Unix, Linux, or DOS can attest to the fact that, although  the command line is powerful, it is extremely hard to grasp in any  meaningful way. The desktop concept provided an abstraction from the  true nature of the beast and mapped existing knowledge to operations in  the computer. For example, instead of &#8220;text files&#8221;, you could work with  &#8220;documents&#8221;, Within those documents, you could cut, copy, and paste;  these were concepts familiar with nearly all office workers of the time  since publishing was a manual process. If you wanted to put a picture in  a paper document, you literally cut it out with scissors and pasted  onto the paper.</p>
<p>Initially the desktop metaphor was a real hit. It let people jump  right in and start using a computer without any real computer knowledge.  It was such a hit, in fact, that Bill Gates created a fortune on the  concept with the introduction of the &#8220;Windows&#8221; operating system, which  leaned heavily on the desktop metaphor.</p>
<div id="attachment_945" class="wp-caption alignright" style="width: 310px"><a rel="attachment wp-att-945" href="http://www.dbxsoftware.com/cms/?attachment_id=945"><img class="size-medium wp-image-945 " title="Windows 3.11 Desktop" src="http://www.dbxsoftware.com/cms/wp-content/uploads/win311-300x239.jpg" alt="" width="300" height="239" /></a><p class="wp-caption-text">Windows 3.11 Desktop</p></div>
<p>With the Windows desktop, the user was presented a &#8220;desktop&#8221; with  different tools on it, much as a real desk of the 1980s may have on it.  It did not have a stapler (although I always thought it should&#8230;to  stick files together as a group, but that came later as Windows  Briefcase&#8221;), but it did have a clipboard, a clock, a calendar, and  various other tools that made sense in the context of a desktop. And  most importantly, it had a file cabinet called &#8220;File Manager&#8221; whose icon  was a yellow file cabinet.</p>
<p>Over the years, as the capabilities of the computers and operating  systems evolved, Microsoft struggled to keep the desktop metaphor. Odd  items started showing up that most people wouldn&#8217;t really have on their  desk such as a mailbox, other people&#8217;s computers (Network) and a strange  piece of machinery that was apparently attached to the front left edge  of the desk called a &#8220;Start Button&#8221;, which had absolutely no discernible  function in the real word.</p>
<p style="font-size: 19.5px; line-height: 28.5px;">
<div id="attachment_954" class="wp-caption alignleft" style="width: 268px"><a rel="attachment wp-att-954" href="http://www.dbxsoftware.com/cms/index.php/metaphorically-speaking/fileman/"><img class="size-full wp-image-954   " title="File Manager" src="http://www.dbxsoftware.com/cms/wp-content/uploads/fileman.gif" alt="File Manager Screen Shot" width="258" height="210" /></a></p>
<p><p class="wp-caption-text">Windows 3.1 File Manager</p></div>
<p>This is not to say that these changes were not improvements, as they  most certainly were. They made using a computer easier, more efficient,  and in many cases, all around better. But at the same time, they  stretched the desktop metaphor to the point that it is no longer  recognizable a metaphor. Looking at the Windows 7 desktop, there is  obviously complete abandonment of the original idea of mapping tasks on  the computer to tasks in the physical world. Yet the metaphor lives on.  Why? Because its what people know. But not the original metaphor.  Someone who cut their virtual teeth on Windows XP would have no better  idea of how to operate Windows 3.1 than someone who had never seen a  computer. In fact, they would be more frustrated because they have  learned the extensive metaphor &#8220;breakers&#8221; and accepted them as common  knowledge.</p>
<div id="attachment_955" class="wp-caption alignright" style="width: 290px"><a rel="attachment wp-att-955" href="http://www.dbxsoftware.com/cms/index.php/metaphorically-speaking/w7-explorer1/"><img class="size-full wp-image-955 " title="Windows 7 Explorer" src="http://www.dbxsoftware.com/cms/wp-content/uploads/w7-explorer1.jpg" alt="Windows 7 Explorer Screenshot" width="280" height="232" /></a></p>
<p><p class="wp-caption-text">Windows 7 Explorer</p></div>
<p>Meanwhile, we are still trying to organize our filesystems into file  cabinets and folders. Even the name filesystem is left over from the  metaphor. Now instead of providing us free knowledge, the metaphor is  holding developers back. In conforming to the age-old desktop (and more  importantly, filing cabinet) metaphor, they are actually limited in what  they can do with software. The metaphor has come back to collect its  dues.</p>
<p>This doesn&#8217;t just happen in the computer world. I was unfortunate  enough to be hired by a huge consulting firm as a senior developer in  their brand spanking new software development center (as in &#8220;at the  center of nowhere) . The place was designed to provide work areas for  200+ developers, but at the time I was hired, there were fewer than  fifty, so there was a large area of the operations floor we referred to  as &#8220;the back forty&#8221; that was not being used. We would sometimes walk  through it to get to a server room on the other side of it, and one day  one of the young developers in my charge stopped and surveyed the huge  area filled with cubicles, shelves, whiteboards, etc. but no people.</p>
<p>&#8220;Man, this is nice!&#8221; he said, looking around, &#8220;This place is really  big! What are these big metal things?&#8221; He was referring to a row of no  less than fifty large vertical filing cabinets that lined the central  walkway.</p>
<p>&#8220;Those are filing cabinets,&#8221; I said, opening a drawer to show him.</p>
<p>&#8220;What are they for?&#8221; he asked.</p>
<p>&#8220;Filing papers&#8221;, I replied, amazed at his ignorance.</p>
<p>&#8220;What papers?&#8221;</p>
<p>&#8220;Hmm&#8230;you&#8217;re right. I don&#8217;t know.&#8221;</p>
<p>It dawned on me that whoever had  designed the development center had somehow calculated how many filing  cabinets would be needed for 200 developers. Developers who were not  familiar with filing cabinets and would certainly never use them.</p>
<p>The Metaphor Lives On</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.dbxsoftware.com%2Fcms%2Findex.php%2Fmetaphorically-speaking%2F&amp;title=Metaphorically%20Speaking"><img src="http://www.dbxsoftware.com/cms/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.dbxsoftware.com/cms/index.php/metaphorically-speaking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Simplicity of Complexity</title>
		<link>http://www.dbxsoftware.com/cms/index.php/the-simplicity-of-complexity/</link>
		<comments>http://www.dbxsoftware.com/cms/index.php/the-simplicity-of-complexity/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 20:30:55 +0000</pubDate>
		<dc:creator>mmroberts</dc:creator>
				<category><![CDATA[Metaphor Crash]]></category>
		<category><![CDATA[atomic]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[fractal]]></category>
		<category><![CDATA[Integrity Management]]></category>
		<category><![CDATA[mandelbrot set]]></category>
		<category><![CDATA[Molecules]]></category>
		<category><![CDATA[simplification]]></category>

		<guid isPermaLink="false">http://www.dbxsoftware.com/cms/?p=902</guid>
		<description><![CDATA[The human mind has always sought to understand the world that it lives in, and the more that is understood about it, the more complex our world seems. Early civilizations understood their world in simple terms&#8230;day and night, sky, land and sea, animal, vegetable, mineral. As observations turned to the more methodical processes of science, &#8230;  <a class="continue_reading" href="http://www.dbxsoftware.com/cms/index.php/the-simplicity-of-complexity/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>The human mind has always sought to understand the world that it lives in, and the more that is understood about it, the more complex our world seems. Early civilizations understood their world in simple terms&#8230;day and night, sky, land and sea, animal, vegetable, mineral. As observations turned to the more methodical processes of science, seemingly simple concepts took on unexpected complexity. The simple concept of day and night was discovered to be the result of a very complex interaction between orbits of the sun, earth, and the moon. As more was learned about biology, simple concepts such as birth, death, and illness became increasingly more complex.</p>
<p>This trend has continued for a very long time as people continue to discover layers of complexity under seemingly simple concepts. Something else is taking place as well, something that is the exact opposite of finding complexity in simple concepts: the discovery that complex concepts have simple underlying processes. For example, although there are many, many types of materials in existence, they can all be broken down to molecules, and then to a finite set of elements. These elements are made up of a few basic parts called atoms which obey a fairly simple set of physical rules. These can be broken down in</p>
<div class="wp-caption alignleft" style="width: 389px"><img title="molecule" src="http://www.jameshedberg.com/img/samples/caffeine-molecule-refl.jpg" alt="" width="379" height="341" /><p class="wp-caption-text">Caffeine Molecule Model</p></div>
<p>to smaller components that are even simpler in structure. What this means is that even the most complex life</p>
<p>forms on this planet can be understood by looking at them as a system of components, not as a whole.</p>
<p>The human body is extremely complex, but can be better understood when divided up by system. The digestive system, although interconnected with the rest of the body, can be understood according to its specific functions, as can the circulatory and nervous system. Each of these systems can be broken down into smaller components (i.e. heart, arteries, veins, capillaries, blood, etc.) and each of those components can be further understood by breaking them into smaller components (i.e. red blood cells, white blood cells, haemoglobin, etc.).</p>
<p>From this example, it is easy to see how the process of simplifying the incomprehensibly complex human body into smaller and smaller parts helps us understand not only what those parts do, but how they contribute to the entire biological processes that result in a living, breathing human. This is not to say that we understand everything about the problems that science examines. We don&#8217;t know exactly what causes most cancers, we don&#8217;t know exactly how gravity works, and there are many, many concepts yet to be understood, but there is no denying that we have learned much more about complex systems by breaking them down into simpler components.</p>
<p>This concept is largely what Project Integrity Management is all about. Projects are extremely complex things. When a software product is completed, it typically consists of thousands of individual files, hundreds of thousands of lines of code, and millions of individual processes that must happen in exactly the right sequence. Managing something this complex is impossible to do effectively without simplifying it in some way.</p>
<p>Most projects already do this to some degree. Database code is typically developed separate from application code, and application code is typically developed in &#8220;layers&#8221; such as in the ubiquitous &#8220;Model, View, Controller&#8221; method of</p>
<div class="wp-caption alignright" style="width: 365px"><img class="    " title="MVC" src="http://www.google.com/url?source=imgres&amp;ct=img&amp;q=http://www.nikhilk.net/Content/Posts/SilverlightViewModel/MVC.png&amp;sa=X&amp;ei=uVNQTY-_M8-1tgeHldm3AQ&amp;ved=0CAQQ8wc4DA&amp;usg=AFQjCNGdFr_vRVhAu9pBUXiyzMPvIi4Llw" alt="" width="355" height="229" /><p class="wp-caption-text">Typical MVC Layout</p></div>
<p>organizing code. This makes the jobs of developers, testers, and everyone else involved in the project easier by providing a logical separation of components, each having a specific function in the application. Even application code is further organized by intended function with the use of libraries and namespaces.</p>
<p>This organization only goes so far though. With a typical software project, there is nothing controlling how changes in one part of the application code will affect another part. There are no mechanisms to insure that a particular piece of application code is always run with other compatible pieces. Because of this, what starts out as a fairly organized project soon breaks down into a disorganized, bug-ridden nightmare. Something more is needed to insure that all of the different components are working together as intended. Something must insure that changes to the database code are accounted for in all of pieces of the application that rely on it. Something must insure that testing is done against the proper version of each and every component to insure that the testing is valid. This is where further simplification is needed.</p>
<p>The concept of the Component Integrity Item is similar to the concept of the atom. It is a fairly simple structure that can be uniquely identified, carries with it certain properties, but can be treated generically. This means that each component in a project will have a Component Integrity Item associated with it, and this CII will have a unique identifier that is used only for that particular component in that particular project. Additionally, it has a version associated with it to account for any changes that will occur to the component over time. These are the minimum requirements for a CII. Additionally, they can carry with them information about specific components such as the  file name, the format, and other relevant data. These data items are referred to as &#8220;properties&#8221;, and each CII can have as many properties as needed.</p>
<p>In practical use, this allows us to manage complex arrangements of components in a very simple way. The following simplified example traces a CII from its most basic form up to the full application level. Note that the CII that started out as a single item at the lowest level typically becomes part of a larger CII as it moves up towards the full application. Those aggregate CIIs also become part of larger components, until they reach the very top&#8230;the project&#8230;and ALL CIIs are part of the project CII.</p>
<pre><span style="font-size: medium;">Project (ID: 1)
---------------
             Application Code (ID 214)
             -------------------------
                                    ...
                                    Database Library (ID 784)
                                    -------------------------
                                                          ...
                                                          Data Retrieval (ID: 1245)
                                                          --------------------
                                                                  MySQLData.cs (ID: 2451)
                                                                  MySQL.ini (ID: 2452)
                                                                  MySQL.dll (ID: 2453)</span></pre>
<p>Note that in this hierarchical view, the continuation mark (&#8230;) is included at each level. This is to indicate that there are many more items that fall in that level that are not listed in this example. If you were to include them, and trace them down to their individual components as was done with the Data Retrieval library, you would find similar structures under each of them.</p>
<p>Also note that the ID numbers do not follow any particular sequence. This is intentional to show that the structure does not depend on the actual unique identifier&#8217;s format or sequence, only the fact that it is indeed unique within the project.</p>
<div class="wp-caption alignleft" style="width: 369px"><a href="http://bbsimg.ngfiles.com/14/16827000/ngbbs4873a88ba1d53.jpg"><img class=" " title="Fractal" src="http://bbsimg.ngfiles.com/14/16827000/ngbbs4873a88ba1d53.jpg" alt="Fractal Image" width="359" height="359" /></a><p class="wp-caption-text">A typical Mandelbrot Fractal Plot</p></div>
<p>In many ways, this concept mirrors the concept of Fractals, a mathematical construct that mathematician <a href="http://en.wikipedia.org/wiki/Mandelbrot_set">Benoit Mandelbrot </a>proposed as an example of how simple structures can result in complex structures when combined in a specific way.</p>
<p>Simpler examples of this same concept can be found throughout your everyday world. Electronics are made up of thousands of microscopic transistors integrated onto microchips. Extremely complex and realistic animations are made by combining millions of tiny polygons, electrical systems are made up of simple wires, switches, and sockets, and the list goes on and on.</p>
<p>By looking at a project as a collection of simpler items, we will be able to move away from managing complexity and towards managing simplicity, which is much easier to do. By managing the simpler aspects of the project, we create the end result of managing the complexity of it since that complexity arises from the interrelationships of the simple components that make it up.</p>
<p>In my next article I will show how general software tools such as Excel, Access, or even text files can be used to manage project complexity.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.dbxsoftware.com%2Fcms%2Findex.php%2Fthe-simplicity-of-complexity%2F&amp;title=The%20Simplicity%20of%20Complexity"><img src="http://www.dbxsoftware.com/cms/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.dbxsoftware.com/cms/index.php/the-simplicity-of-complexity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lists of Lists</title>
		<link>http://www.dbxsoftware.com/cms/index.php/lists-of-lists/</link>
		<comments>http://www.dbxsoftware.com/cms/index.php/lists-of-lists/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 21:30:44 +0000</pubDate>
		<dc:creator>mmroberts</dc:creator>
				<category><![CDATA[Metaphor Crash]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[Lists of Lists]]></category>
		<category><![CDATA[PIM]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[wiring]]></category>
		<category><![CDATA[Xanax]]></category>

		<guid isPermaLink="false">http://www.dbxsoftware.com/cms/?p=870</guid>
		<description><![CDATA[The key to managing com complexity is breaking it down into smaller, related pieces. ]]></description>
			<content:encoded><![CDATA[<p>Last night at a family get-together, several of us were talking about the day&#8217;s activities. My wife is very list-driven and seems to have a list of everything. Her idea of an accomplishment is marking something off one of her lists. While hearing her lament about not getting her list done, my uncle, always eager to point out the obvious said &quot;Well, just make shorter lists.&quot; </p>
<p>When that was met with an offer to transfer some of the list items to him, he bowed out by saying &quot;It won&#8217;t do any good&#8230;you have lists of your lists.&quot; </p>
<p>The more I thought about that statement, the more I realized that, boiled down to its absolute simplest form, that is what the concept of Project Integrity Management really is. Lists of lists. Instead of lists of tasks to get done though, they are lists of components of various environments. </p>
<div class="simplePullQuote">Looking at this endless list of items like &quot;Install Windows&quot;, &quot;Wire House&quot;, &quot;Install Bathroom&quot;, etc. was enough to make me want to just sit down in the middle of the slab (note: add &quot;install flooring&quot; to list) and cry.</div>
<p>A list by itself is not extremely useful. It can help us make sure we remember the eggs at the grocery store or to pick up the jacket from the dry cleaner, but if more than a dozen or so items are added to it, it becomes unwieldy and, in my wife&#8217;s case, somewhat depressing. </p>
<p>Now that I think back, perhaps is isn&#8217;t a weird coincidence that she gravitated towards a similar concept when dealing with her lists. I recall several years ago when we were building our house she had a list that would make even the most hard-core procrastinator cringe. Looking at this endless list of items like &quot;Install Windows&quot;, &quot;Wire House&quot;, &quot;Install Bathroom&quot;, etc. was enough to make me want to just sit down in the middle of the slab (note: add &quot;install flooring&quot; to list) and cry. As a method for dealing with this eternal list, I suggested breaking it into smaller lists and make them line up with the project dependencies. For example, I could not &quot;Install the Bathroom&quot; until &quot;Wire the House&quot; was done. Of course, Wire the House had many smaller tasks such as &quot;Install Load Center&quot;, &quot;Install Grounding Rod&quot;, etc. </p>
<p>These items caused another dependent list to be created for the purchase of the needed supplies such as Load Center, Breakers, 2.5 Miles of ROMEX wire, etc. etc. </p>
<p>After going through this process, we ended up with a large pile of shorter lists, but to her organized, list driven mind this was a step back, not a step forward. Now things were not all neat and tidy in one big list, but instead scattered throughout dozens of lists. I was on the brink of losing the battle and falling back to the original list if I didn&#8217;t do something quickly. Out of desperation, I suggested a list whose only purpose was to organize the other lists. </p>
<p>After much coaxing, explaining, demonstrating and a dose of Xanax, she agreed to give it a try. I then compiled a list of lists in the order that the big things needed to be done. So first on the list would be &quot;Wire House&quot;, followed by &quot;Install Plumbing&quot;, followed by &quot;Install Bathroom Fixtures&quot;. Each of these items had a corresponding list that had items such as &quot;Purchase Wiring Supplies&quot; (which in turn pointed to the shopping list for these items), &quot;Purchase Plumbing Supplies&#8217;, etc.</p>
<div class="simplePullQuote">Out of desperation, I suggested a list whose only purpose was to organize the other lists. After much coaxing, explaining, demonstrating and a dose of Xanax, she agreed to give it a try.</div>
<p>Looking back, I now see that this system was probably a first attempt at the ideas that eventually became Project Integrity Management. By creating a hierarchical &quot;List of Lists&quot;, I could concentrate on the portion of the overall picture that needed to be worked on next without worrying about the rest. If I ran into a delay on one list, I could leave it in a known condition and move to another list until the obstacle was cleared, then come back to it. As I completed the tasks on the smaller lists, they were marked of on their list and once the full list was complete, the item that referred to it was marked of the main list. For example, in installing the plumbing, I would mark off &quot;Install cold water pipes&quot;, &quot;Install hot water pipes&quot;, &quot;Install water heater&quot;, &quot;install drain line&quot;, etc. etc. until the list was complete. At that point, I could go to the main list and mark off &quot;Install Plumbing&quot;. </p>
<p>Believe it or not, we did actually finish the house and as far as I know, everything got done. It didn&#8217;t always go according to plan, but with the flexible &quot;List of List&quot; (LOL!) system, we were able to manage the complexity of the project in small chunks. At a basic level, this is what Project Integrity Management does. It organizes and manages the extremely complex task of building a software product, passing it through multiple environments, and shipping a clean, stable product in the end. Isn&#8217;t that all we really want from a project? </p>
<p>M@</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dbxsoftware.com/cms/index.php/lists-of-lists/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Environmentalists</title>
		<link>http://www.dbxsoftware.com/cms/index.php/software-environmentalists/</link>
		<comments>http://www.dbxsoftware.com/cms/index.php/software-environmentalists/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 14:25:10 +0000</pubDate>
		<dc:creator>mmroberts</dc:creator>
				<category><![CDATA[Metaphor Crash]]></category>
		<category><![CDATA[DEV]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Environment]]></category>
		<category><![CDATA[Environmentalist]]></category>
		<category><![CDATA[PROD]]></category>
		<category><![CDATA[Production]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[TEST]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.dbxsoftware.com/cms/?p=863</guid>
		<description><![CDATA[We hear it all the time&#8230;we must protect the environment. Cities have complex recycling systems in place, the EPA is passing more and more stringent environmental protection laws, and the concept of a &#8220;carbon footprint&#8221; has seeped into our regular vocabulary. But have you ever considered that the same ideas behind environmental conservation &#8211; the &#8230;  <a class="continue_reading" href="http://www.dbxsoftware.com/cms/index.php/software-environmentalists/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>We hear it all the time&#8230;we must protect the environment. Cities have complex recycling systems in place, the EPA is passing more and more stringent environmental protection laws, and the concept of a &#8220;carbon footprint&#8221; has seeped into our regular vocabulary. But have you ever considered that the same ideas behind environmental conservation &#8211; the concept that we all share the same environment, pollution of that environment affects us all, and the long term effects of the build-up of pollutants can cause us all to suffer &#8211; can also apply to software projects?</p>
<div class="wp-caption alignleft" style="width: 361px"><img class=" " style="border: 1px solid black;" src="http://hostez.co.uk/wp-content/uploads/2010/07/green-data-center.jpg" alt="" width="351" height="263" /><p class="wp-caption-text">This is just plain silly!</p></div>
<p>The term environment is used in a variety of ways. Recruiters speak  of a company&#8217;s &#8220;work environment&#8221;. Psychologists talk about a healthy  home environment. Environmentalists  talk about the natural environment.  What all of these concepts have in common (besides the word  &#8220;Environment&#8221;) is the concept of the shared space and components that  surround us.</p>
<p>In software development, when we speak of &#8220;environments&#8221;, we are referring to the complex relationships between a set of components and software. A typical project will have one or more environments each for development, testing, and production. This  includes the things normally thought of by development teams  such as the  operating system, the database management system, the  database itself,  and the supporting components such as shared libraries  and various  supporting and configuration files. Some other things that  may not  normally be considered as part of a development environment  are the  hardware components, peripherals such as input devices,  scanners,  printers, and external storage.</p>
<p>Most projects spend a lot of effort maintaining their source code using version control software, but how many projects put that level of control into place for their environments? Why should they?</p>
<p>Today I am discussing why it is critical for any project that intends to succeed (which I hope covers pretty much all of them) to actively control and maintain their various environments. Before making this case though, it is important to define what is meant by the term &#8220;environment&#8221;.</p>
<div class="simplePullQuote">The importance of environmental control cannot be overstated in any project, especially a large project.</div>
<p>As stated in an earlier article, the purpose of Project Integrity Management is to maintain a state of &#8220;known goodness&#8221; throughout the development process. In terms of environments, this means always knowing positively that the environment that software is being tested in is the right environment&#8230;that all software  versions are right, that all configuration settings are known, and that any device or component that the software touches is as it should be.</p>
<p>On the surface, environment management seems fairly simple. By setting up three application servers and three databases, three different environments can easily be created. We will call them Dev (Development), Test (Testing) and Prod (Production).  Ideally, software will be developed in DEV, testing in TEST, and put into production in PROD. Since these environments were identical when they were created, they should remain identical throughout the lifecycle of the software product&#8230;right? You wish.</p>
<p>In reality, things are not so clean. For example, timing is an issue. The Widget is developed in the DEV environment, then handed off to testers to validate it in the TEST environment. It will take several days to a week to completely test it, and in the meantime, development continues on the next set of development tasks. During this time, developers realize that the workflow library that they originally used has a bug that they only discovered after the initial effort was turned over to test. To correct this bug, they must upgrade the workflow library from Version 2 to Version 3. However, in order to do this, they must make a slight change to the way the library is used, so they cannot upgrade TEST while the testers are still validating the last build. Now the environments don&#8217;t match.</p>
<p>In a more common scenario, the DEV database is constantly changing as new features are developed and the database support for them is added. By the time a new release of the software is ready to go to TEST, the TEST database is obsolete.</p>
<div class="simplePullQuote">Since these environments were identical when they were created, they  should remain identical throughout the lifecycle of the software  product&#8230;right? You wish.</div>
<p>There is a myriad of other ways that environments can get out of sync,  and these subtle differences that are very hard to detect can cause days  and even weeks of project time to be lost. I have seen projects with  poor environmental control where testers would find bugs, development  would fix them, testers would validate that fix, only to have the exact  same bug show up again two or three releases later.</p>
<p>These examples are very basic and don&#8217;t even consider the complexities that come into play with larger development projects that can have many DEV, TEST, and PROD environments which must be kept in sync at all times. It also doesn&#8217;t really address the problems that can occur when there is an intentional difference between versions of the same environment. It can get overwhelming very quickly.</p>
<p>The importance of environmental control cannot be overstated in any project, especially a large project. As we progress, I will provide ideas on how to set up, manage, and ensure the integrity of your various environments. I hope you stick around for it.</p>
<p>M@</p>
<p><span style="font-size: medium;"><strong>NOTE:</strong> My apologies to those of you who thought you were going to read an article on how software can save the planet. Maybe I will write on that subject in a later post. </span></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.dbxsoftware.com%2Fcms%2Findex.php%2Fsoftware-environmentalists%2F&amp;title=Software%20Environmentalists"><img src="http://www.dbxsoftware.com/cms/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.dbxsoftware.com/cms/index.php/software-environmentalists/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

