<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.6" -->
<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/"
	>

<channel>
	<title>Architected Information</title>
	<link>http://www.architected.info/blog</link>
	<description>How people, practices, and information are transformed into relationships and understanding.</description>
	<pubDate>Mon, 21 Jul 2008 15:06:45 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.6</generator>
	<language>en</language>
			<item>
		<title>Spreadsheets, Architecture, and Compliance</title>
		<link>http://www.architected.info/blog/spreadsheets-architecture-and-compliance</link>
		<comments>http://www.architected.info/blog/spreadsheets-architecture-and-compliance#comments</comments>
		<pubDate>Tue, 09 Jan 2007 14:56:38 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
		
		<category>Databases</category>

		<category>Information Architecture</category>

		<category>Systems Integration</category>

		<category>Information Quality</category>

		<category>Automation</category>

		<category>Practices</category>

		<category>Reporting</category>

		<guid isPermaLink="false">http://www.architected.info/blog/spreadsheets-architecture-and-compliance</guid>
		<description><![CDATA[The Sarbanes-Oxley Compliance Journal has a very detailed article discussing the implications of spreadsheets on compliance and financial regulation.   It is a well thought out, well written piece that gives very specific, very conservative steps to ensure that an organization doesn&#8217;t run into regulatory issues from day-to-day business practices.
One thing I appreciated in [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.s-ox.com" onclick="javascript:urchinTracker ('/outbound/article/www.s-ox.com');">Sarbanes-Oxley Compliance Journal</a> has <a href="http://www.s-ox.com/feature/detail.cfm?articleID=2244" onclick="javascript:urchinTracker ('/outbound/article/www.s-ox.com');">a very detailed article</a> discussing the implications of spreadsheets on compliance and financial regulation.   It is a well thought out, well written piece that gives very specific, very conservative steps to ensure that an organization doesn&#8217;t run into regulatory issues from day-to-day business practices.</p>
<p>One thing I appreciated in the article was its realistic tone, which recognized the existence of <a href="http://www.bireview.com/article.cfm?articleId=21&#038;searchTerm=raden" onclick="javascript:urchinTracker ('/outbound/article/www.bireview.com');">shadow systems</a> and the role that they play in the real world.  While the article focused on spreadsheets, this doesn&#8217;t mean that they are bad and that centralized CRM is good (as a matter of fact I might argue the opposite in many cases). The real issue being discussed is the risk that occurs when information architecture doesn&#8217;t match the needs of the organization.</p>
<p><em><strong>Looking Globally </strong></em></p>
<p>For many low-importance, one-off operations, a spreadsheets is fine.  It can be shared easily, and usually owned by one person.  However, what normally happens is that someone sharp (and usually not someone in IT) decides to do try to build some infrastructure around a spreadsheet without considering the consequences.  It is quick, cheap, and easy to do, to a point.  The problem is that the point when a spreadsheet becomes unmanageable is often well after the point where an organization depends on its output to function effectively.</p>
<p>For any system, an information architect needs to consider:</p>
<ul>
<li>Cost</li>
<li>Effectiveness</li>
<li>Visibility</li>
<li>Traceability</li>
<li>Mangageability</li>
<li>Quality</li>
<li>Auditability</li>
</ul>
<p>Furthermore, the situation needs to be considered from a forward-thinking perspective.  That is, we need to try to understand how the landscape is going to look a few years down the road, and to make our systems flexible enough so that we don&#8217;t put our organization into a bind if we are wrong.</p>
<p>Spreadsheets are normally built only considering cost and effectiveness, something that is only discovered after time has gone on.  It is often the case that a system would be much more effective living in a database, BI tool, or custom software application when considered over time.
</p>
<div class="sociable"><span class="sociable_tagline"><strong>Share and earn some karma ...</strong><span>These icons link to social bookmarking sites where readers can share and discover new web pages.</span></span><ul>
	<li><a href="http://del.icio.us/post?url=http://www.architected.info/blog/spreadsheets-architecture-and-compliance&amp;title=Spreadsheets%2C+Architecture%2C+and+Compliance" title="del.icio.us" onclick="javascript:urchinTracker ('/outbound/article/del.icio.us');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/delicious.png" alt="del.icio.us" /></a></li>
	<li><a href="http://digg.com/submit?phase=2&amp;url=http://www.architected.info/blog/spreadsheets-architecture-and-compliance&amp;title=Spreadsheets%2C+Architecture%2C+and+Compliance" title="digg" onclick="javascript:urchinTracker ('/outbound/article/digg.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/digg.png" alt="digg" /></a></li>
	<li><a href="http://www.furl.net/storeIt.jsp?u=http://www.architected.info/blog/spreadsheets-architecture-and-compliance&amp;t=Spreadsheets%2C+Architecture%2C+and+Compliance" title="Furl" onclick="javascript:urchinTracker ('/outbound/article/www.furl.net');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/furl.png" alt="Furl" /></a></li>
	<li><a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://www.architected.info/blog/spreadsheets-architecture-and-compliance&amp;h=Spreadsheets%2C+Architecture%2C+and+Compliance" title="NewsVine" onclick="javascript:urchinTracker ('/outbound/article/www.newsvine.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/newsvine.png" alt="NewsVine" /></a></li>
	<li><a href="http://reddit.com/submit?url=http://www.architected.info/blog/spreadsheets-architecture-and-compliance&amp;title=Spreadsheets%2C+Architecture%2C+and+Compliance" title="Reddit" onclick="javascript:urchinTracker ('/outbound/article/reddit.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/reddit.png" alt="Reddit" /></a></li>
	<li><a href="http://www.spurl.net/spurl.php?url=http://www.architected.info/blog/spreadsheets-architecture-and-compliance&amp;title=Spreadsheets%2C+Architecture%2C+and+Compliance" title="Spurl" onclick="javascript:urchinTracker ('/outbound/article/www.spurl.net');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/spurl.png" alt="Spurl" /></a></li>
</ul></div>
]]></content:encoded>
			<wfw:commentRss>http://www.architected.info/blog/spreadsheets-architecture-and-compliance/feed/</wfw:commentRss>
		</item>
		<item>
		<title>EC2 &#8212; Dynamic or Static (or Both)?</title>
		<link>http://www.architected.info/blog/ec2-dynamic-or-static-or-both</link>
		<comments>http://www.architected.info/blog/ec2-dynamic-or-static-or-both#comments</comments>
		<pubDate>Fri, 01 Dec 2006 21:57:00 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
		
		<category>Information Architecture</category>

		<category>Systems Integration</category>

		<category>Automation</category>

		<category>Over the Horizon</category>

		<category>AWS</category>

		<guid isPermaLink="false">http://www.architected.info/blog/ec2-dynamic-or-static-or-both</guid>
		<description><![CDATA[A Problem
I have been working more and more with AWS and EC2 and one of the challenges in working with EC2 is dealing with the fact that each instance gets a dynamic IP address upon creation.  This makes it easy easy to crank out a large number of instances, which is a key feature [...]]]></description>
			<content:encoded><![CDATA[<p><em><strong>A Problem</strong></em></p>
<p>I have been working more and more with <a href="http://www.architected.info/blog/category/over-the-horizon/aws/" >AWS</a> and <a href="http://aws.amazon.com/ec2" onclick="javascript:urchinTracker ('/outbound/article/aws.amazon.com');">EC2</a> and one of the challenges in <a href="http://www.architected.info/blog/?s=ec2-&#038;submit=Go" >working with EC2</a> is dealing with the fact that each instance gets a dynamic IP address upon creation.  This makes it easy easy to crank out a large number of instances, which is a key feature of the system.  At the same time, it makes it difficult to find and manage those instances in an automated, systematic way.  So, there is a disconnect here.</p>
<p><em><strong>A Solution</strong></em></p>
<p>A decent solution is <a href="http://en.wikipedia.org/wiki/Dynamic_dns" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">Dynamic DNS</a>.  That is, to have your instance be assigned a easily recognized hostname as it is being started, but still keeps its dynamic IP address and creation.  To me, this seems like the best solution, as it lets AWS folks be good at what they are good at (providing cool technology infrastructures) and allows its users to be good what they are good at (making cool applications that use the infrastructure).</p>
<p>How can this be done?  Well, it takes a couple of steps:</p>
<ol>
<li>Establish an account with one of the myriad <a href="http://developer.amazonwebservices.com/connect/thread.jspa?threadID=11489&#038;start=15&#038;tstart=0" onclick="javascript:urchinTracker ('/outbound/article/developer.amazonwebservices.com');">DDNS providers</a>.</li>
<li>Configure your instance to use the DDNS software upon boot-up.</li>
<li>Profit!</li>
</ol>
<p>I have gotten some feedback about possibly using <a href="http://www.amazon.com/gp/browse.html/ref=sc_fe_c_1_3435361_6/104-0379937-1687105?%5Fencoding=UTF8&#038;node=13584001&#038;no=3435361&#038;me=A36L942TSJ2AJA" onclick="javascript:urchinTracker ('/outbound/article/www.amazon.com');">SQS</a> to do something similar to this.  I actually thought of this, but there are issues here around cost (cost per message) and configuration (<a href="http://developer.amazonwebservices.com/connect/thread.jspa?messageID=42365&#42365" onclick="javascript:urchinTracker ('/outbound/article/developer.amazonwebservices.com');">duplicates and ordering</a>).  Because I would like to maximize the system&#8217;s reliability and scalability, I would probably rule these out.<em><strong>Which Brings Another Problem &#8230;</strong></em></p>
<p>There is a caveat here, and it isn&#8217;t a small one if you don&#8217;t want to write code.  The big problem is that every instance you create is going to behave identically.  So, if you open up multiple instances each thinking they are &#8216;dynamic-name-1..com&#8217; then you will not get the results you are looking for.   Instead, most likely that name will be assigned to the last instance that started and the others will run around headless.</p>
<p><em><strong>Which Requires a Hack &#8230;</strong></em></p>
<p>This leaves a couple of options. First, you can write a script to go through your pool of potential host names, pick one that isn&#8217;t being used, and then request that name from the DDNS provider. Better yet is to pass the Dynamic DNS value you want to the instance through the keypair.</p>
<p>Of course, the best solution would be for someone to write a script that would make each node self-configure itself to get a dynamic hostname.  I would think this would be something that would be attractive to most of the <a href="http://developer.amazonwebservices.com/connect/thread.jspa?threadID=11489&#038;start=15&#038;tstart=0" onclick="javascript:urchinTracker ('/outbound/article/developer.amazonwebservices.com');">DDNS providers</a>, perhaps one of them will read this and get cracking.  If I don&#8217;t spot anything in the near future I will probably write a simple KSH to do this.<br />
<em><strong>Conclusion</strong></em></p>
<p>I think that at some point the folks at AWS are going to allow for some type of host identification, either through passing parameters to instances or by renting out static IP addresses or subdomain ranges. However, for now it will take some DIY in order to make this happen.</p>
<p>To be honest, probably the best solution here is to approach the problem as if you will never have a static IP address or host name and go from there. It will probably force you to think about your solution differently and challenge you to come up with a more flexible, scalable solution. It isn&#8217;t going to fit for every type of problem, but I think it works for the types of things that AWS is inherently good at.
</p>
<div class="sociable"><span class="sociable_tagline"><strong>Share and earn some karma ...</strong><span>These icons link to social bookmarking sites where readers can share and discover new web pages.</span></span><ul>
	<li><a href="http://del.icio.us/post?url=http://www.architected.info/blog/ec2-dynamic-or-static-or-both&amp;title=EC2+--+Dynamic+or+Static+%28or+Both%29%3F" title="del.icio.us" onclick="javascript:urchinTracker ('/outbound/article/del.icio.us');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/delicious.png" alt="del.icio.us" /></a></li>
	<li><a href="http://digg.com/submit?phase=2&amp;url=http://www.architected.info/blog/ec2-dynamic-or-static-or-both&amp;title=EC2+--+Dynamic+or+Static+%28or+Both%29%3F" title="digg" onclick="javascript:urchinTracker ('/outbound/article/digg.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/digg.png" alt="digg" /></a></li>
	<li><a href="http://www.furl.net/storeIt.jsp?u=http://www.architected.info/blog/ec2-dynamic-or-static-or-both&amp;t=EC2+--+Dynamic+or+Static+%28or+Both%29%3F" title="Furl" onclick="javascript:urchinTracker ('/outbound/article/www.furl.net');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/furl.png" alt="Furl" /></a></li>
	<li><a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://www.architected.info/blog/ec2-dynamic-or-static-or-both&amp;h=EC2+--+Dynamic+or+Static+%28or+Both%29%3F" title="NewsVine" onclick="javascript:urchinTracker ('/outbound/article/www.newsvine.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/newsvine.png" alt="NewsVine" /></a></li>
	<li><a href="http://reddit.com/submit?url=http://www.architected.info/blog/ec2-dynamic-or-static-or-both&amp;title=EC2+--+Dynamic+or+Static+%28or+Both%29%3F" title="Reddit" onclick="javascript:urchinTracker ('/outbound/article/reddit.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/reddit.png" alt="Reddit" /></a></li>
	<li><a href="http://www.spurl.net/spurl.php?url=http://www.architected.info/blog/ec2-dynamic-or-static-or-both&amp;title=EC2+--+Dynamic+or+Static+%28or+Both%29%3F" title="Spurl" onclick="javascript:urchinTracker ('/outbound/article/www.spurl.net');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/spurl.png" alt="Spurl" /></a></li>
</ul></div>
]]></content:encoded>
			<wfw:commentRss>http://www.architected.info/blog/ec2-dynamic-or-static-or-both/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Scripting EC2</title>
		<link>http://www.architected.info/blog/scripting-ec2</link>
		<comments>http://www.architected.info/blog/scripting-ec2#comments</comments>
		<pubDate>Tue, 31 Oct 2006 04:55:36 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
		
		<category>Systems Integration</category>

		<category>Automation</category>

		<category>Over the Horizon</category>

		<category>AWS</category>

		<guid isPermaLink="false">http://www.architected.info/blog/scripting-ec2</guid>
		<description><![CDATA[I wrote a shell script that will automate the creation of EC2 instances.  Really, all it does is glue together the existing command line tools that Amazon provides in a fairly crude manner.  However, it works and it makes my life easier, so I like it.  Hopefully it can do the same [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote a shell script that will automate the creation of EC2 instances.  Really, all it does is glue together the existing command line tools that Amazon provides in a fairly crude manner.  However, it works and it makes my life easier, so I like it.  Hopefully it can do the same for you &#8230;.</p>
<p><strong>Things You MUST Understand</strong></p>
<ul>
<li>Every time you run this script you will be charged for at least one hour&#8217;s worth of time by Amazon, even if you shut things down immediately. These aren&#8217;t my rules, I have <a href="http://www.architected.info/blog/amazon-ec2-billing-discrepancy" >complained about them previously</a>.</li>
<li>Make sure you use the ec2-terminate-instances script after running this script. If you don&#8217;t, you will be charged by Amazon until you shut it down.</li>
<li>You have to have the <a href="http://docs.amazonwebservices.com/AmazonEC2/gsg/2006-06-26/" onclick="javascript:urchinTracker ('/outbound/article/docs.amazonwebservices.com');">EC2 API Tools installed</a> for this script to work.</li>
<li>You have to have an active <a href="http://www.amazon.com/gp/browse.html?node=201590011" onclick="javascript:urchinTracker ('/outbound/article/www.amazon.com');">EC2</a> account for this script to work.</li>
</ul>
<p><strong>Caveats</strong></p>
<ul>
<li>This script hasn&#8217;t been tested by anyone other than me.  It works just fine for me, and I am able to use it on a regular basis.  However, if you are looking for a polished, documented, or commercial product then this is the wrong place for you (unless you are willing to pay, of course).</li>
<li>The script is for UNIX, and was developed under Mac OS X.  It may run under Windows with Cygwin, although I haven&#8217;t tried (and don&#8217;t really want to).</li>
<li>The script is in Korn.  It doesn&#8217;t use any particularly odd syntax, so my guess is that it would run under other shells.  To be honest I haven&#8217;t tried, simply because I use <a href="http://www.kornshell.com/" onclick="javascript:urchinTracker ('/outbound/article/www.kornshell.com');">KSH</a> so much with my current work that I am far more efficient with it than any other shell.  If anyone wants to test it and/or clean it up to run more universally it would be most appreciated.</li>
<li>Every time you run this script you will be charged for at least one hour&#8217;s worth of time by Amazon.  These aren&#8217;t my rules, I have <a href="http://www.architected.info/blog/amazon-ec2-billing-discrepancy" >complained about them previously</a>.</li>
<li>Make sure you use the ec2-terminate-instances script after running this script.  If you don&#8217;t, you will be charged by Amazon until you shut it down.</li>
</ul>
<p><strong>Licensing</strong></p>
<p>This script is provide it under the <a href="http://www.opensource.org/licenses/mit-license.php" onclick="javascript:urchinTracker ('/outbound/article/www.opensource.org');">MIT license</a>.  To summarize, it is provided as-is and can be used free of charge.  I am not liable for your screw-ups.</p>
<p>OK, with all that being said, if you still want to use it you can download the script <a href="http://architected.info/blog/wp-content/uploads/2006/10/30" >here</a>.
</p>
<div class="sociable"><span class="sociable_tagline"><strong>Share and earn some karma ...</strong><span>These icons link to social bookmarking sites where readers can share and discover new web pages.</span></span><ul>
	<li><a href="http://del.icio.us/post?url=http://www.architected.info/blog/scripting-ec2&amp;title=Scripting+EC2" title="del.icio.us" onclick="javascript:urchinTracker ('/outbound/article/del.icio.us');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/delicious.png" alt="del.icio.us" /></a></li>
	<li><a href="http://digg.com/submit?phase=2&amp;url=http://www.architected.info/blog/scripting-ec2&amp;title=Scripting+EC2" title="digg" onclick="javascript:urchinTracker ('/outbound/article/digg.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/digg.png" alt="digg" /></a></li>
	<li><a href="http://www.furl.net/storeIt.jsp?u=http://www.architected.info/blog/scripting-ec2&amp;t=Scripting+EC2" title="Furl" onclick="javascript:urchinTracker ('/outbound/article/www.furl.net');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/furl.png" alt="Furl" /></a></li>
	<li><a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://www.architected.info/blog/scripting-ec2&amp;h=Scripting+EC2" title="NewsVine" onclick="javascript:urchinTracker ('/outbound/article/www.newsvine.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/newsvine.png" alt="NewsVine" /></a></li>
	<li><a href="http://reddit.com/submit?url=http://www.architected.info/blog/scripting-ec2&amp;title=Scripting+EC2" title="Reddit" onclick="javascript:urchinTracker ('/outbound/article/reddit.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/reddit.png" alt="Reddit" /></a></li>
	<li><a href="http://www.spurl.net/spurl.php?url=http://www.architected.info/blog/scripting-ec2&amp;title=Scripting+EC2" title="Spurl" onclick="javascript:urchinTracker ('/outbound/article/www.spurl.net');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/spurl.png" alt="Spurl" /></a></li>
</ul></div>
]]></content:encoded>
			<wfw:commentRss>http://www.architected.info/blog/scripting-ec2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Parameterized vs. Generic</title>
		<link>http://www.architected.info/blog/parameterized-vs-generic</link>
		<comments>http://www.architected.info/blog/parameterized-vs-generic#comments</comments>
		<pubDate>Mon, 17 Jul 2006 23:44:10 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
		
		<category>ETL</category>

		<category>Systems Integration</category>

		<category>Automation</category>

		<guid isPermaLink="false">http://www.architected.info/blog/parameterized-vs-generic</guid>
		<description><![CDATA[Have you ever come across a process that is so parameterized that it has become generic?  A programmer takes all the things that help their code to make logical decisions and pushes them out to the user.  The process then becomes a shell that is all based around user-supplied information, such as command [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal">Have you ever come across a process that is so parameterized that it has become generic?  A programmer takes all the things that help their code to make logical decisions and pushes them out to the user.  The process then becomes a shell that is all based around user-supplied information, such as command line arguments or a configuration file.  At best, it is <a href="http://en.wikipedia.org/wiki/Minimalism#Minimalist_design" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">minimalism</a> run amok.</p>
<p class="MsoNormal">For example, I came across a shell script that looked like this:</p>
<blockquote>
<p class="MsoNormal">#!/bin/ksh</p>
<p class="MsoNormal">$1/$2 $(echo $* | sed  “s/$1//g” | sed  “s/$2//g”)</p>
</blockquote>
<p class="MsoNormal">For those of you who aren’t UNIX people, this script takes a number of arguments, the first two being a path and a program name.  The script then pastes them together and executes them along with any extra arguments that might have been provided.</p>
<p class="MsoNormal">This example would be run like:</p>
<blockquote>
<p class="MsoNormal">test ls $HOME</p>
</blockquote>
<p class="MsoNormal">Of course, you could just run the command</p>
<blockquote>
<p class="MsoNormal">ls $HOME</p>
</blockquote>
<p class="MsoNormal">And get the same result.</p>
<p class="MsoNormal">This example is extremely silly, as it really doesn’t have any value to the person who is calling it.   As a matter of fact, it is less than valuable, as it makes the person calling the program do something they wouldn’t normally do (split a command line into two pieces).  What has been done here is that all the effort that it takes to execute the program has been pushed out to the person calling the program.</p>
<p class="MsoNormal">A <strong>parameterized process</strong> will allow certain parts of its execution to change based on well-defined, well controlled input from the user.  It provides value by allowing the user to do things faster or accomplish things they couldn’t otherwise do easily.  A <strong>generic process</strong> is that has taken parameterization too far.  It is merely a container for executing user logic that could be better done elsewhere.</p>
<p class="MsoNormal">Often, people new to <a href="http://www.architected.info/data-centrism" >data-centric programming</a> misguidedly try to apply the principles <a href="http://en.wikipedia.org/wiki/Object-oriented_programming" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">of object-oriented programming</a> to their work.  The problem is, you end up with programs that are generic instead of parameterized.  Writing good code is a matter of making tools that allow your users as productive and flexible as possible.  Normally, this involves a combination of user parameters and internal logic to build something coherent and truly useful.</p>
<p class="MsoNormal">Here are some rules to see if your processes are in the sweet spot.</p>
<p class="MsoNormal">A process is well parameterized if …</p>
<ol type="1" start="1" style="margin-top: 0in">
<li class="MsoNormal">It      simplifies the use and understanding of another tool or combination of      tools.</li>
<li class="MsoNormal">It can      easily be run in a loop from the command line (in whatever operating      system you use).</li>
<li class="MsoNormal">It      works well with the environment specific features of your operating      system, such as pipes and redirection in UNIX.</li>
<li class="MsoNormal">It is      designed to run on a variety of machines (but not any possible one) without      much effort.</li>
</ol>
<p class="MsoNormal">A process is probably generic if …</p>
<ol type="1" start="1" style="margin-top: 0in">
<li class="MsoNormal">It absolutely requires a GUI in order to execute.</li>
<li class="MsoNormal">There      are more command line options than you can easily remember.</li>
<li class="MsoNormal">The      man page (for UNIX tools) is more than the user can comfortably read in      one sitting.</li>
<li class="MsoNormal">The      primary logic of the process is contained outside the process itself.</li>
<li class="MsoNormal">There      is no reason to contact you if there is a problem with the process, as it      can all be associated to either the user configuration or the underlying      system.</li>
<li class="MsoNormal">It      takes more effort to use the process than it did to develop it.</li>
</ol>
<p class="MsoNormal">Remember, there is no free ride in the data life cycle, the logic and effort has do be done somewhere.  The only reason to develop tools is to make the users or systems more productive in the long term.</p>
<p class="MsoNormal">Don’t put a white label and bar-code on your processes.  Add value!</p>
<p align="right" style="text-align: right"><strong><span style="font-size: 10pt">technorati tags</span></strong><span style="font-size: 10pt">:<a href="http://technorati.com/tag/information%20architecture" onclick="javascript:urchinTracker ('/outbound/article/technorati.com');">information architecture</a>, <a href="http://technorati.com/tag/parameterization" onclick="javascript:urchinTracker ('/outbound/article/technorati.com');">parameterization</a>, <a href="http://technorati.com/tag/parameters" onclick="javascript:urchinTracker ('/outbound/article/technorati.com');">parameters</a></span></p>
<div class="sociable"><span class="sociable_tagline"><strong>Share and earn some karma ...</strong><span>These icons link to social bookmarking sites where readers can share and discover new web pages.</span></span><ul>
	<li><a href="http://del.icio.us/post?url=http://www.architected.info/blog/parameterized-vs-generic&amp;title=Parameterized+vs.+Generic" title="del.icio.us" onclick="javascript:urchinTracker ('/outbound/article/del.icio.us');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/delicious.png" alt="del.icio.us" /></a></li>
	<li><a href="http://digg.com/submit?phase=2&amp;url=http://www.architected.info/blog/parameterized-vs-generic&amp;title=Parameterized+vs.+Generic" title="digg" onclick="javascript:urchinTracker ('/outbound/article/digg.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/digg.png" alt="digg" /></a></li>
	<li><a href="http://www.furl.net/storeIt.jsp?u=http://www.architected.info/blog/parameterized-vs-generic&amp;t=Parameterized+vs.+Generic" title="Furl" onclick="javascript:urchinTracker ('/outbound/article/www.furl.net');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/furl.png" alt="Furl" /></a></li>
	<li><a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://www.architected.info/blog/parameterized-vs-generic&amp;h=Parameterized+vs.+Generic" title="NewsVine" onclick="javascript:urchinTracker ('/outbound/article/www.newsvine.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/newsvine.png" alt="NewsVine" /></a></li>
	<li><a href="http://reddit.com/submit?url=http://www.architected.info/blog/parameterized-vs-generic&amp;title=Parameterized+vs.+Generic" title="Reddit" onclick="javascript:urchinTracker ('/outbound/article/reddit.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/reddit.png" alt="Reddit" /></a></li>
	<li><a href="http://www.spurl.net/spurl.php?url=http://www.architected.info/blog/parameterized-vs-generic&amp;title=Parameterized+vs.+Generic" title="Spurl" onclick="javascript:urchinTracker ('/outbound/article/www.spurl.net');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/spurl.png" alt="Spurl" /></a></li>
</ul></div>
]]></content:encoded>
			<wfw:commentRss>http://www.architected.info/blog/parameterized-vs-generic/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Process Meta-Usability</title>
		<link>http://www.architected.info/blog/process-meta-usability</link>
		<comments>http://www.architected.info/blog/process-meta-usability#comments</comments>
		<pubDate>Fri, 07 Jul 2006 03:24:27 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
		
		<category>Databases</category>

		<category>ETL</category>

		<category>Information Architecture</category>

		<category>Systems Integration</category>

		<category>Information Quality</category>

		<category>Automation</category>

		<category>People</category>

		<category>Metadata</category>

		<guid isPermaLink="false">http://www.architected.info/blog/process-meta-usability</guid>
		<description><![CDATA[Something I have been thinking about a lot lately is something I like to call process meta-usability.  I define this as:
Process meta-usability: The degree to which a process is able to be operated and understood by those who design, develop, execute, and troubleshoot it.

Process meta-usability is probably a subset of the field of usability. [...]]]></description>
			<content:encoded><![CDATA[<p>Something I have been thinking about a lot lately is something I like to call <em><strong>process meta-usability</strong></em>.  I define this as:</p>
<blockquote><p><strong>Process meta-usability</strong>: The degree to which a process is able to be operated and understood by those who design, develop, execute, and troubleshoot it.</p>
</blockquote>
<p>Process meta-usability is probably a subset of the field of <a href="http://en.wikipedia.org/wiki/Usability" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">usability</a>.  However, with most data-oriented processes (such as <a href="http://www.architected.info/blog/category/transformation/etl/" >ETL</a> and <a href="http://www.architected.info/blog/category/transformation/db/" >databases</a>), <a href="http://ask.yahoo.com/20020903.html" onclick="javascript:urchinTracker ('/outbound/article/ask.yahoo.com');">the proof is in the pudding</a>.  That is, the people who are actually consuming the data have no idea what went to making it happen, and the old quote about <a href="http://swexegete.typepad.com/GuysBlog/2003/07/sausage_and_the.html" onclick="javascript:urchinTracker ('/outbound/article/swexegete.typepad.com');">sausage and politics</a> probably applies.</p>
<p>This brings up some subtleties that we need to consider:</p>
<ul>
<li>Most people who design data-oriented processes either don&#8217;t know or don&#8217;t care about <a href="http://en.wikipedia.org/wiki/Usability" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">usability</a>.  <em>They aren&#8217;t normally impacted by it at all</em>.</li>
<li>Most people who operate data-oriented processes are too busy to care about <a href="http://en.wikipedia.org/wiki/Usability" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">usability</a>, <em>but are greatly impacted by it</em>.</li>
<li>Most people who sponsor data-oriented process don&#8217;t see the need to improve <a href="http://en.wikipedia.org/wiki/Usability" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">usability</a>, <em>and are impacted by it unknowingly</em>.</li>
</ul>
<p>To design for meta-usability, a data-oriented process needs to consider:</p>
<ol>
<li><strong>Automation &#8211;</strong> CPU cycles, disk sectors and memory chips are cheap and reliable.  Humans are not.   Consider the cost of <a href="http://en.wikipedia.org/wiki/Moore%27s_law" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">Moore&#8217;s Law</a> vs. <a href="http://www.isquare.com/turnover.cfm" onclick="javascript:urchinTracker ('/outbound/article/www.isquare.com');">the cost of employee turnover</a> for the life cycle of your process.</li>
<li><strong>Human intervention &#8211;</strong> Trap and deal with every possible situation in the design phase.  Also, when a human does have to be involved, make it easy for them to understand what is going on at a glance.  This probably means documentation, standards, naming conventions, log files, metadata, the works.  This isn&#8217;t as hard as it sounds, there are <a href="http://www.architected.info/blog/making-metadata-pay" >some easy steps</a> that you can take to make things run more smoothly for your friendly neighborhood operator.</li>
<li><strong>Understandability &#8211;</strong> A simple process is always better than a complicated one, readable source is always better than faster code.  Again, consider standards, naming conventions, and all that stuff that developers hate to consider.</li>
<li><strong>Communication &#8211;</strong> If everyone knows what is going on, it is a lot easier to make things happen.  If a process that is supposed to be automated is actually taking someone 10 hours a week to keep running then it is easier to justify spending 40 hours to fix the issue.</li>
<li><strong>Downtime &#8211;</strong>  During the design phase, try to calculate the cost per incident of downtime for your data process.  If you don&#8217;t have any hard numbers, consider the business <a href="http://en.wikipedia.org/wiki/Opportunity_cost" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">opportunity cost</a> plus the cost per hour of having an analyst, developer, DBA, and operator all on a conference call trying to figure out what is going on.  Compare this with the cost of developing processes to avoid or mitigate downtime and see what side of the curve you want to be on.</li>
<li><strong>Staffing &#8211;</strong> Consider that for any data-oriented system (like feeding a shadow system, data mart, or data warehouse) the bottleneck is most often keeping the overall system running effectively.  If it takes longer to resolve issues with individual processes then fewer of them can be run at the same staffing level.  This isn&#8217;t because of  a technological, but because there literally aren&#8217;t enough hours in a day.</li>
</ol>
<div align="right"><!-- technorati tags begin --></p>
<p style="font-size: 10px; text-align: right"><strong>technorati tags</strong>:<a href="http://technorati.com/tag/automation"rel="tag"  onclick="javascript:urchinTracker ('/outbound/article/technorati.com');">automation</a>, <a href="http://technorati.com/tag/usability"rel="tag"  onclick="javascript:urchinTracker ('/outbound/article/technorati.com');">usability</a>, <a href="http://technorati.com/tag/etl"rel="tag"  onclick="javascript:urchinTracker ('/outbound/article/technorati.com');">ETL</a>, <a href="http://technorati.com/tag/information%20architecture"rel="tag"  onclick="javascript:urchinTracker ('/outbound/article/technorati.com');">information architecture</a></p>
<p><!-- technorati tags end --></p>
</div>
<div class="sociable"><span class="sociable_tagline"><strong>Share and earn some karma ...</strong><span>These icons link to social bookmarking sites where readers can share and discover new web pages.</span></span><ul>
	<li><a href="http://del.icio.us/post?url=http://www.architected.info/blog/process-meta-usability&amp;title=Process+Meta-Usability" title="del.icio.us" onclick="javascript:urchinTracker ('/outbound/article/del.icio.us');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/delicious.png" alt="del.icio.us" /></a></li>
	<li><a href="http://digg.com/submit?phase=2&amp;url=http://www.architected.info/blog/process-meta-usability&amp;title=Process+Meta-Usability" title="digg" onclick="javascript:urchinTracker ('/outbound/article/digg.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/digg.png" alt="digg" /></a></li>
	<li><a href="http://www.furl.net/storeIt.jsp?u=http://www.architected.info/blog/process-meta-usability&amp;t=Process+Meta-Usability" title="Furl" onclick="javascript:urchinTracker ('/outbound/article/www.furl.net');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/furl.png" alt="Furl" /></a></li>
	<li><a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://www.architected.info/blog/process-meta-usability&amp;h=Process+Meta-Usability" title="NewsVine" onclick="javascript:urchinTracker ('/outbound/article/www.newsvine.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/newsvine.png" alt="NewsVine" /></a></li>
	<li><a href="http://reddit.com/submit?url=http://www.architected.info/blog/process-meta-usability&amp;title=Process+Meta-Usability" title="Reddit" onclick="javascript:urchinTracker ('/outbound/article/reddit.com');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/reddit.png" alt="Reddit" /></a></li>
	<li><a href="http://www.spurl.net/spurl.php?url=http://www.architected.info/blog/process-meta-usability&amp;title=Process+Meta-Usability" title="Spurl" onclick="javascript:urchinTracker ('/outbound/article/www.spurl.net');"><img src="http://www.architected.info/blog/wp-content/plugins/sociable/images/spurl.png" alt="Spurl" /></a></li>
</ul></div>
]]></content:encoded>
			<wfw:commentRss>http://www.architected.info/blog/process-meta-usability/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
