<?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>Armedia Blog &#187; Design</title>
	<atom:link href="http://www.armedia.com/blog/category/software-development/design/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.armedia.com/blog</link>
	<description></description>
	<lastBuildDate>Thu, 02 Feb 2012 15:53:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>The CRASH Report</title>
		<link>http://www.armedia.com/blog/2012/01/the-crash-report/</link>
		<comments>http://www.armedia.com/blog/2012/01/the-crash-report/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 16:54:17 +0000</pubDate>
		<dc:creator>Scott Roth</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Quality Assurance]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Visual Studio 2010 - C#]]></category>
		<category><![CDATA[Webapps]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=2012</guid>
		<description><![CDATA[Cast software, the maker of software quality tools, released their second annual CRASH (Cast Report on Application Software Health) report in December. The report examined the &#8220;health&#8221; of world-wide software applications by examining the source code of 745 applications (~365 million lines of code), from 160 different companies, spanning 10 industry sectors, and 8 programming [...]]]></description>
			<content:encoded><![CDATA[<p>Cast software, the maker of software quality tools, released their second annual CRASH (Cast Report on Application Software Health) report in December. The report examined the &#8220;health&#8221; of world-wide software applications by examining the source code of 745 applications (~365 million lines of code), from 160 different companies, spanning 10 industry sectors, and 8 programming languages. The code examination flagged 1800 different types of development and architecture violations that compromise application &#8220;health&#8221; in 5 major categories. The categories were:</p>
<ul>
<li><em>Robustness</em> &#8211; The stability of an application and the likelihood of introducing defects when modifying it.</li>
<li><em>Performance</em> &#8211; The efficiency of the software&#8217;s application layers.</li>
<li><em>Security</em> &#8211; An application&#8217;s ability to prevent unauthorized intrusions.</li>
<li><em>Transferability</em> &#8211; The ease with which an application can be transferred to a new maintenance team.</li>
<li><em>Changeability</em> &#8211; An application&#8217;s ability to be easily and quickly modified.</li>
</ul>
<p>Cast has drawn some interesting conclusions in their report. Here are a few I found notable.</p>
<ul>
<li>The most secure applications seem to be large COBOL applications in the financial and insurance industry (that should be reassuring to everyone). The least secure applications were written in .Net.  Yikes!</li>
<li>J2EE applications scored worst in performance, primarily because of misunderstood technologies and frameworks.  Another contributing reason could be the high degree of modularity inherent in J2EE applications.</li>
<li>Transferability scores for applications in the government sector scored lower than in any other industry sector. Being a government contractor, this one strikes close to home. What conclusions or insights can be gleaned from this finding? One insight the report draws is that government agencies are spending ~73% (on average) of their IT budgets to maintain existing applications &#8212; more than any other industry sector. I ask you, where is the money in government IT contracting?</li>
<li>Transferability and Changeability scores were highest for applications developed using a classic waterfall style methodology, as opposed to an Agile methodology. Whoa! I didn&#8217;t see that one coming. (Cast found that the other three categories, Robustness, Performance and Security, were about equal between waterfall and Agile methodologies.) Perhaps because Agile projects are in a continual state of refactoring that they are never in an ideal state to be transferred.</li>
</ul>
<p>All of the deficiencies identified in this report are termed &#8220;technical debt&#8221; and have an average cost (according to Cast) of $3.61 per line of code to repair &#8212; except for Java, which rings in at $5.42 per line of code. That&#8217;s a lot of money and consumes an enormous amount of IT budgets.  For the roughly 365 million lines of code used in the study, that&#8217;s $1.3 billion of technical debt.</p>
<p>In conclusion, let me quote from Cast&#8217;s own conclusion, who I think said it quite well: &#8220;The observations from these data suggest that development organizations are focused most heavily on Performance and Security in certain critical applications. Less attention appears to be focused on removing the Transferability and Changeability problems that increase the cost of ownership and reduce responsiveness to business needs. These results suggest that application developers are still mostly in reaction mode to the business rather than being proactive in addressing the long term causes of IT costs and geriatric applications.&#8221;</p>
<p>The 22 page executive summary can be downloaded from Cast here.<br />
<a href="http://www.castsoftware.com/resources/resource/email-campaigns/cast-report-on-application-software-health?gad=HPH">http://www.castsoftware.com/resources/resource/email-campaigns/cast-report-on-application-software-health?gad=HPH</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2012/01/the-crash-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#039;m in eRoom, Get Me Out of Here!</title>
		<link>http://www.armedia.com/blog/2011/07/im-in-eroom-get-me-out-of-here/</link>
		<comments>http://www.armedia.com/blog/2011/07/im-in-eroom-get-me-out-of-here/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 18:26:21 +0000</pubDate>
		<dc:creator>cstephenson</dc:creator>
				<category><![CDATA[Data Migration]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Documentum]]></category>
		<category><![CDATA[eRoom]]></category>
		<category><![CDATA[Information Rights Management]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[EMC]]></category>
		<category><![CDATA[ETL]]></category>
		<category><![CDATA[Extract]]></category>
		<category><![CDATA[Load]]></category>
		<category><![CDATA[Miration]]></category>
		<category><![CDATA[Transform]]></category>
		<category><![CDATA[Visual Basic]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=448</guid>
		<description><![CDATA[[turns up amplifier, cranks up volume to 11, puts Huey Lewis and the News vinyl on record player....] I start up Visual Studio 6.0 and settle down to some nostalgic programming with Visual Basic (VB) 6.  Ah, college memories come flooding back and strangely not many related to actual study.  I feel like I have [...]]]></description>
			<content:encoded><![CDATA[<p>[<em>turns up amplifier, cranks up volume to 11, puts <a title="Huey Lewis and the News" href="http://www.hueylewis.com/">Huey Lewis and the News</a> vinyl on record player....</em>]<br />
I start up <a title="Visual Studio 6.0" href="http://msdn.microsoft.com/en-us/library/ms950417.aspx">Visual Studio 6.0</a> and settle down to some nostalgic programming with <a title="Visual Basic 6.0" href="http://msdn.microsoft.com/en-us/vbasic/ms788229">Visual Basic </a>(VB) 6.  Ah, college memories come flooding back and strangely not many related to actual study.  I feel like I have stepped back in time &#8211; the processor has worked its speed up to 88 mph and now I am back using VB6.  I also remember learning <a title="Delphi" href="http://delphi.about.com/cs/azindex/a/dhistory_2.htm">Delphi</a> Version 1.0 so that I could *help* a friend do their final year project. Good times.</p>
<p><span id="more-448"></span>A long time ago I posted this <a title="So long, farewell, auf wiedersehen, eRoom" href="http://www.armedia.com/blog/?p=420">blog</a>.  I had not realized it was over a year ago, but I will continue on with more information around the Export.  I chose to use VB6 as it was the easiest way to start working against eRoom&#8217;s API&#8217;s.  John and I discussed whether we should attempt to migrate against the <a title="EMC eRoom" href="http://www.emc.com/products/detail/software2/eroom.htm">eRoom</a> database tables or use its API&#8217;s.  It was decided to go down the path of using the API&#8217;s which should provide more flexibility going forward.  Though I do still like the idea of migrating from the database directly.</p>
<p>The design of the export piece is fairly simplistic.  Start at the top of the eRoom structure and walk each branch outputting all associated metadata into a well formed XML document.  The goal was to have as much data as required to recreate it all again in another eRoom instance.  [Note, we have not actually written a Load module for going into eRoom.]</p>
<p>For the most part, in the code, every object can be treated as an IERUItem.  This helps with creating helper functions as we can simply pass this object type about.  The next important step is to determine the properties that are part of IERUItem by which you can further derive information.  By doing this you open up a host of new goodies to delve into.</p>
<p>For example is this item a container.  To find out check the property isContainer (which is missing from API help document).  A container is a way of grouping other objects together.  Kind of like a folder.  If a room is being exported, first the groups and members are put into the XML, followed by properties relating immediately to the room, then a container element is identified.  The Exporter takes a depth first approach, so a list of all items in the container are identified and the process continues.</p>
<p>One thing to note, a visual debugger is your friend.  The API documentation is good up to a point.  Then you realize that some object properties were left out of the documentation or property values may not be quite what you expected them to be, like properties may not be instantiated if they are not relevant to the object.  Once the gaps are filled in it becomes quite intuitive working through eRoom structures.</p>
<p>Currently, the user can export all of the communities or facilities, or selected rooms.  The design thought running behind this was to be in the position of exporting rooms to the repository of choice.  In other words, if marketing and legal have all their content within the same facility but would like them to be in separate repositories, this can be accommodated.  Actually it can be accommodated in a couple of  ways.  At the export setup, you can export specific rooms to be designated for specific repositories.  All of the necessary metedata will still be exported (i.e. users, groups, etc.) with each room.  The result is multiple export.xml files.  Then at ingestion time, the user would ingest each export.xml and associate it with the appropriate repository.  The other method would be to export all rooms and handle the repository association at ingestion time.</p>
<p>Some thoughts around improving the Exporter Tool is around further investigation into the eRoom XML Query interface.  This opens up more options for different programming languages and different thoughts around the overall export.  Of course, it could open up more gotcha&#8217;s as well <img src='http://www.armedia.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   The next exciting installment around eRoom migration will be around the transformation tool.  Now that we have all this wonderful XML, what do we do with it?  This is were things really start to get interesting as what will the eRoom XML output be transformed into?</p>
<p>So who else has been looking at their eRoom environment wondering when and how they are going to migrate away from their legacy system?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2011/07/im-in-eroom-get-me-out-of-here/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top 25 Programming Errors</title>
		<link>http://www.armedia.com/blog/2011/07/top-25-programming-errors/</link>
		<comments>http://www.armedia.com/blog/2011/07/top-25-programming-errors/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 15:31:50 +0000</pubDate>
		<dc:creator>Scott Roth</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Quality Assurance]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=1650</guid>
		<description><![CDATA[The 2011 CWE/SANS Top 25 Most Dangerous Software Errors report was published by the SANS Institute and MITRE in June (cwe.mitre.org/top25).  The report leveraged the SANS Institute&#8217;s Tops 20 attack vectors (www.sans.org/top20) and MITRE&#8217;s Common Weakness Enumeration (CWE) to develop a list of the most frequent and sever programming errors this year.  The report details [...]]]></description>
			<content:encoded><![CDATA[<p>The <em>2011 CWE/SANS Top 25 Most Dangerous Software Errors </em>report was published by the SANS Institute and MITRE in June (<a href="http://cwe.mitre.org/top25">cwe.mitre.org/top25</a>).  The report leveraged the SANS Institute&#8217;s Tops 20 attack vectors (<a href="http://www.sans.org/top20">www.sans.org/top20</a>) and MITRE&#8217;s Common Weakness Enumeration (CWE) to develop a list of the most frequent and sever programming errors this year.  The report details each error, how it is implemented, what the danger is, and practical ideas for identifying and mitigating it.  The report is a fascinating report to read &#8212; both its compilation and technical content &#8212; and well worth your time even if you are an experienced developer.  The report also suggests it would be a valuable read for software project managers, software  project customers, and educators.  I agree.</p>
<p>Not surprising, the top 25 most dangerous programming errors contain some well known programming mistakes that have been with us for years (decades, in fact).  For example, the first error discussed in the report is SQL Injection.  Using<br />
improperly escaped special characters in a SQL query, hackers can steal and/or highjack your data. Skeptical?  Ask Sony Pictures, PBS and MySQL.com, they were all victims of attack this year enabled by this common programming mistake.  It is<br />
unfortunate, because with a little effort, this programming vulnerability can be easily mitigated.</p>
<p>Also, still in the top 5 is the classic Buffer Overflow problem. This mistake allows hackers to inject more information into a field or variable than it can handle.  The resulting &#8220;overflow&#8221; can contain malicious code and grant hackers access to your system, plant viral code, or simply crash your system.  Buffer overflows have been around for decades.  Too bad, since these too can<br />
easily be corrected.</p>
<p>Other common mistakes include:  OS Command Injection, Cross-site Scripting, Hard Coded Credentials, Unrestricted File Uploads, bogus or flawed cryptography, and Open Redirects.  As detailed in the report, all of the errors are very simple to correct and prevent.  It would server everyone well &#8212; developers, testers, designers, managers and users &#8212; to be aware of<br />
these errors, how to identify them, and most importantly, how to mitigate them.  Give it a read, it is well worth your time:  <a href="http://cwe.mitre.org/top25">cwe.mitre.org/top25</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2011/07/top-25-programming-errors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using SP Designer 2010 to Add Custom Buttons</title>
		<link>http://www.armedia.com/blog/2011/06/using-sp-designer-2010-to-add-custom-buttons/</link>
		<comments>http://www.armedia.com/blog/2011/06/using-sp-designer-2010-to-add-custom-buttons/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 18:16:51 +0000</pubDate>
		<dc:creator>Tim Lisko</dc:creator>
				<category><![CDATA[Case Management]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[ECM Industry]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[enhancing performance]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=1533</guid>
		<description><![CDATA[Sharepoint Designer  2010 provides a great quick way to add simple actions to your SharePoint application. I have a project that I wanted to add a couple buttons that would allow the user to navigate away from a &#8220;Drop-Off&#8221; library to the libraries where files are directed by my content organizer rules. So, without thought [...]]]></description>
			<content:encoded><![CDATA[<p>Sharepoint Designer  2010 provides a great quick way to add simple actions to your SharePoint application.</p>
<p>I have a project that I wanted to add a couple buttons that would allow the user to navigate away from a &#8220;Drop-Off&#8221; library to the libraries where files are directed by my content organizer rules. So, without thought to SP Designer I opened my VS 2010 and commenced to coding. The great thing about building your buttons in VS is the flexibility you have &#8211; but being so flexible means you have to build a lot even if you only want a little!</p>
<p>In this instance I only wanted my buttons in one library. Using VS2010 you start with an elements.xml file. Unfortunately the elements file can only point to a &#8220;type,&#8221; not a specific library or list. So, even though I only wanted to see my buttons in my &#8220;Drop Off&#8221; document library, all the document libraries would also display the buttons. You can certainly get around that by omitting the type and buttons and code them in or setting visibility, but I haven&#8217;t done that myself so I was less interested in getting the coding right and figuring out where to insert the coding.</p>
<p>Enter SharePoint Designer 2010. It provides an easy nterface for creating custom actions that aren&#8217;t complex. You can create buttons that will navigate to a form, initiate a workflow, or navigate to a URL. Even better, it only applies to the document library or list where you are adding the custom action &#8211; exactly what I wanted!</p>
<p>You can certainly add an image to your button &#8211; this was something I overlooked initially and was driving me crazy that I &#8220;couldn&#8217;t&#8221; add a button image! Well, of course you can add an image. Just move that scrollbar down on the side of the &#8220;Create Custom Action&#8221; screen to get to the &#8220;Advanced custome action options&#8221; &#8211; duh!</p>
<p>So, a couple limitations right off:</p>
<ul>
<li>You can&#8217;t create tabs, groups, or context groups with SP Designer so far as I can see</li>
<li>SP Designer placed my buttons in the &#8220;Manage&#8221; group of the &#8220;Documents&#8221; tab. There does not appear to be anyway to direct your buttons to a specific ribbon group or tab that you might prefer.</li>
</ul>
<p>In this case the SP Designer provided all the functionality I needed and saved me time I would have spent coding, testing, and deploying!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2011/06/using-sp-designer-2010-to-add-custom-buttons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Q: Why should I test my CMIS application against multiple repositories?</title>
		<link>http://www.armedia.com/blog/2011/05/q-why-should-i-test-my-cmis-application-against-multiple-repositories/</link>
		<comments>http://www.armedia.com/blog/2011/05/q-why-should-i-test-my-cmis-application-against-multiple-repositories/#comments</comments>
		<pubDate>Thu, 26 May 2011 20:30:27 +0000</pubDate>
		<dc:creator>dmiller</dc:creator>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[ECM]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=1249</guid>
		<description><![CDATA[A: To uncover my hidden assumptions! Let me tell you a story about SharePoint, Alfresco, design choices, and downloading files. My Java-based application uses SharePoint 2010 to store files.  CMIS is the obvious tool for my app to talk to SP 2010, and in fact, CMIS and SP2010 work just fine together, as you may [...]]]></description>
			<content:encoded><![CDATA[<p>A: To uncover my hidden assumptions!</p>
<p>Let me tell you a story about SharePoint, Alfresco, design choices, and downloading files.</p>
<p>My Java-based application uses SharePoint 2010 to store files.  <a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=cmis">CMIS </a>is the obvious tool for my app to talk to SP 2010, and in fact, CMIS and SP2010 work just fine together, as you may have gathered from my colleague Tim Lisko&#8217;s <a href="http://www.armedia.com/blog/2011/05/how-to-accessing-sharepoint-2010-from-java-application/">last</a> <a href="http://www.armedia.com/blog/2011/05/how-to-sharepoint-2010-%E2%80%93-implementing-cmis/">few</a> articles.</p>
<p>So it came time for me to write the download feature, thus allowing users to download the files stored in SP2010 from my application.  Chemistry makes it very easy to retrieve a file object by ID:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">@Override<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">InputStream</span> getFileContentStream<span style="color: #009900;">&#40;</span>Session session, <span style="color: #003399;">String</span> objectId<span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">try</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #003399;">Document</span> file <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Document</span><span style="color: #009900;">&#41;</span> session.<span style="color: #006633;">getObject</span><span style="color: #009900;">&#40;</span>objectId<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
ContentStream csFile <span style="color: #339933;">=</span> file.<span style="color: #006633;">getContentStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003399;">InputStream</span> retval <span style="color: #339933;">=</span> csFile.<span style="color: #006633;">getStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">return</span> retval<span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>CmisBaseException cbe<span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> AcmRepositoryException<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Could not get file contents&quot;</span>,<br />
cbe<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>So I said to myself: OK, I&#8217;ll just construct a URL including the CMIS object ID, then I&#8217;ll pass that object ID straight through to my Java method.</p>
<p>All you guys that have used CMIS against both Alfresco and SharePoint (hi <a href="http://www.armedia.com/blog/2011/05/cmis-sharepoint-2010-and-file-checkouts/comment-page-1/#comment-1385">Colin</a>!) know what&#8217;s coming next.</p>
<p>SP2010&#8242;s object ID looks like this: 42-512.  So my URL&#8217;s looked like this:</p>
<p>http://&lt;host&gt;/&lt;context&gt;/docs/download/2316/42-512</p>
<p>No problems here!  A nice valid URL, and my download code worked great!</p>
<p>So yesterday, I had an idea (actually, my boss had the idea). Let&#8217;s stand up the app against Alfresco!</p>
<p>Alfresco&#8217;s object IDs turn out to look like this:</p>
<p>workspace://SpacesStore/ecd60ff9-adbb-45fb-824d-9bc93aa61b0f</p>
<p>Which turned my download URL into this grim-looking thing:</p>
<p>http://&lt;host&gt;/&lt;context&gt;/docs/download/2316/workspace://SpacesStore/ecd60ff9-adbb-45fb-824d-9bc93aa61b0f</p>
<p>I&#8217;ll leave what happened when I clicked that link to your imagination (hint: it wasn&#8217;t pretty!).</p>
<p>Since I wanted to be up and running on Alfresco pretty quickly, I applied a short-term fix: I replace the colons and slashes in the object ID with strings that should not be part of any real object ID, and my download controller reverses the process.  Now my URLs look like this:</p>
<p>http://&lt;host&gt;/&lt;context&gt;/docs/download/2316/workspace-c!&#8211;s!&#8211;s!-SpacesStore-s!-ecd60ff9-adbb-45fb-824d-9bc93aa61b0f</p>
<p>The good: the download code works again.  The bad: I shouldn&#8217;t have to encode and decode my own download URL this way!  The ugly: as you can see, the aesthetics of the above URL leave a lot to be desired.</p>
<p>The long-term fix (by &#8220;long-term&#8221; I mean &#8220;by Monday&#8221;) is to not place the object ID in the URL in the first place, and use an opaque sequence-driven numeric database ID instead.  Then all my URLs will look like this, no matter what repository is in use at the moment:</p>
<p>http://&lt;host&gt;/&lt;context&gt;/docs/download/2316/42</p>
<p>Why didn&#8217;t I do this in the first place?  Well, I certainly should have.  For the most part I would never use a natural key such as the CMIS object ID in this situation.  I&#8217;m pretty sure I was trying to avoid a database lookup.  In the end I needed to do a database lookup anyway, but it never occurred to me to rethink my earlier design choices.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2011/05/q-why-should-i-test-my-cmis-application-against-multiple-repositories/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Software Development and the Perils of Barrel-Dropping Niagara Falls</title>
		<link>http://www.armedia.com/blog/2011/01/software-development-and-the-perils-of-barrel-dropping-niagara-falls/</link>
		<comments>http://www.armedia.com/blog/2011/01/software-development-and-the-perils-of-barrel-dropping-niagara-falls/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 15:08:36 +0000</pubDate>
		<dc:creator>dbock</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Quality Assurance]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=668</guid>
		<description><![CDATA[How do we avoid what philosopher George Santayana warned of when he said, &#8220;Those who cannot remember the past are condemned to repeat it”. Today&#8217;s platforms, frameworks and methodologies all help us learn from the past and can go a long way to help assure our optimum success, but what would your approach be if [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://armedia.com/blog2/wp-content/uploads/2011/01/AnnieTaylorNiagaraFallsBarrel.jpg"><img class="alignright size-medium wp-image-892" src="http://armedia.com/blog2/wp-content/uploads/2011/01/AnnieTaylorNiagaraFallsBarrel-300x152.jpg" alt="" width="300" height="152" /></a>How do we avoid what philosopher <a title="armedia_blog" href="http://en.wikipedia.org/wiki/George_Santayana" target="_blank">George Santayana</a> warned of when he said, &#8220;Those who cannot remember the past are condemned to repeat it”. Today&#8217;s platforms, frameworks and methodologies all help us learn from the past and <em>can</em> go a long way to help assure our optimum success, but what would your approach be if your life depended on it? Should it, does it, differ from your current approach, and what about the rest of your team. Is everyone on board? Is there a shared vision?</p>
<p>Consider this&#8230;do the following kinds of statements mean the same thing to everyone involved in your projects?</p>
<p><em>“We&#8217;re a RUP shop” ”They are CMMI level four”, ”This is an ITIL project”, “Our team is Agile”, “This client RFP specifies a Waterfall approach”. </em></p>
<p><a title="armedia_blog" href="http://en.wikipedia.org/wiki/RUP" target="_blank">RUP</a> is a process framework whose creators intended it to be extended and individualized. <a title="armedia_blog" href="http://en.wikipedia.org/wiki/CMMI" target="_blank">CMMI</a> levels are attained with great effort, but there is no assurance that they are adhered to or even appropriate in each project. <a title="armedia_blog" href="http://en.wikipedia.org/wiki/ITIL" target="_blank">ITIL</a> is a vast collection of codified practices across multiple disciplines. “Agile” can just mean “we&#8217;re flexible” or it can suggest a strict adherence to <a title="armedia_blog" href="http://en.wikipedia.org/wiki/Scrum_(development)" target="_blank">SCRUM</a>.  A <a title="armedia_blog" href="http://en.wikipedia.org/wiki/Waterfall_development" target="_blank">Waterfall</a> approach, one iteration and you’re done. Really? You and your team are all in the same boat, but are you sure you are all on the same page?</p>
<p>Danger sharpens the senses. What would our approach be if our lives depended on it? How would we heed Mr. Santayana&#8217;s warning? Would we all be in it together?</p>
<p><strong>The Challenge:</strong></p>
<p>Imagine this Associate Press headline:  <em>First Team to ‘Barrel Drop’ Niagara Falls in Homemade Vessel Wins $1m</em>. Maybe not even that far-fetched given the proclivities of today&#8217;s uber wealthy eccentric!  We may also find stories of some of the early Niagara barrel drop pioneers. Both tragic and fascinating. But what might we learn from them. Do they apply to us? And do we really need to go all the way to Niagara Falls to get it?</p>
<p><em>In October 1829, </em><a title="armedia_blog" href="http://en.wikipedia.org/wiki/Sam_Patch" target="_blank">Sam Patch</a><em>, who called himself “the Yankee Leapster”, jumped from a high tower into the Niagara gorge below the falls and survived; thus began a long tradition of </em>daredevils<em> trying to go over the Falls. On October 24, 1901, 63-year-old </em>Michigan<em> school teacher </em><a href="http://en.wikipedia.org/wiki/Annie_Edson_Taylor">Annie Edson Taylor</a><em> was the first person to go over the Falls in a </em>barrel<em> as a publicity stunt; she survived, bleeding, but virtually unharmed. Soon after exiting the barrel, she said, <strong>“No one ought ever do that again.”</strong></em></p>
<p>Does Annie Taylor’s warning sound familiar? By the way, several later daredevils did not fare so well, and it wasn’t until 1989 that a team of two successfully made the plunge, and by successful I mean they lived to tell about it, once they paid their fines and were sprung from jail.</p>
<p>How dissimilar is this fictitious challenge to the last internal project or RFP your team agreed to take on, knowing full well of the perils that await you, and of the rule bending you might engage, in order to assure your team&#8217;s success? In both cases success depends largely on user and sponsor acceptance of the project deliverable.  The aforementioned eccentric uber wealthy provocateur  will only pay up if your team goes down together and is the first to successfully live to tell the story! What approach would you take? Would you take lessons, learned and not learned, from Sam Patch, Annie Edson Taylor, and those who followed them over the waterfall?</p>
<p>As I studied the fate of many a Niagara daredevil (I blame the History Channel!), I marveled at how <em>dissimilar</em> each of their designs were, and wonder how closely each of their approaches mimicked current software development methodologies. From pictures I studied of actual “barrels” used in both successful and unsuccessful attempts, it appears none of them borrowed or learned much from those before them. In one tragic example, a daredevil attempted to repeat his successful Niagara plunge elsewhere, but he failed to adjust his requirements properly to the new environment.</p>
<p><em>On July 2, 1984, Canadian </em><a title="armedia_blog" href="http://en.wikipedia.org/wiki/Karel_Soucek" target="_blank">Karel Soucek</a><em> from </em>Hamilton, Ontario<em> successfully plunged over the Horseshoe Falls in a barrel with only minor injuries. Soucek was fined $500 for performing the stunt without a license. In 1985, he was fatally injured while attempting to re-create the Niagara drop at the </em><a title="armedia_blog" href="http://en.wikipedia.org/wiki/Houston_Astrodome" target="_blank">Houston Astrodome</a><em>. His aim was to climb into a barrel hoisted to the rafters of the Astrodome and to drop 180 feet (55 m) into a water tank on the floor. After his barrel released prematurely, it hit the side of the tank and he died the next day from his injuries.</em></p>
<p>I learned many of these daredevils had used the non-iterative one shot “waterfall approach” that <a title="armedia_blog" href="http://en.wikipedia.org/wiki/Winston_Royce" target="_blank">Winston Royce</a> first described and warned us about in a software development article he wrote in 1970. He neither endorsed <em>nor</em> named this approach, but only observed that it had become prevalent as software started being used by people other than those who had written it. Winston thought it was a bad idea, instead favoring an iterative approach, but waterfall non-the-less became the adopted standard of the United States Military, and later, the standard of Governments, consultancies, and companies throughout the world.</p>
<p><strong>An “If your life depends upon it” approach:</strong></p>
<p>If it is <em>your</em> team chasing the $1m, or even $3m for doing the plunge three times in a row, would you use a pure waterfall approach to go over the waterfall, or would you gather all of the collective knowledge of your team and do something else?</p>
<p>My money, and life, is on an Open, Agile, ITIL, RUP Waterfall hybrid approach. So&#8230;this does sound like an attempt to string together as many buzz words as possible in an effort to sound clever. But&#8230;you maybe surprised to recognize that even if your most successful projects fall squarely in one camp, they do borrow from the rest, even waterfall.</p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>Open: </strong>No romance for “not invented here, or by Microsoft, etc”. An open source approach frees a team to borrow well documented and rigorously tested code from the community and use it without the burden of procurement or finance. There is little or no hard cost to trying multiple options, and creating solutions using open source projects as tools and building blocks.</p>
<p>There are currently over 250,000 projects available on <a title="armedia_blog" href="http://sourceforge.net/" target="_blank">Sourceforge</a>, complete with user generated reviews and adoption metrics giving the user helpful information about each project, and world class commercial support available for most enterprise offerings.</p>
<p>Similarly, there are numerous options for canisters [barrels] that could be dug out of salvage yards and re-purposed for the barrel drop “application”. How about old brewers casks or refinery tanks that could be fortified and made habitable? They are already built and readily available, I bet we could even get a bunch of specifications regarding strength and durability that would give us clues as to which is most suitable. Think “<a title="armedia_blog" href="http://www.tv.com/junkyard-wars/show/6391/summary.html" target="_blank">Junk Yard Wars</a>”.</p>
<p>This might not be a direct correlation to the open source movement, but it’s close. How many web applications are out there that are “pure Microsoft”, yet leverage the open source Hibernate project for persistence? Uh, pretty much all of them.</p>
<p><strong> </strong></p>
<p><strong>Agile: </strong>We could study the successes and failures of previous Niagara drops, treating those as initial iterations, and continuing with an iterative approach, tossing a few of our own iteratively developed designs over the Niagara after having equipped them with crash test dummies and sensors borrowed from nearby abandoned automotive plants. Unless it is a complete failure, our first prototype eventually becomes our production model, presumably with minor changes and additions in subsequent test iterations all the way up until “production”, and then perhaps even between  drop [iteration] two and three.</p>
<p>This notion was first explained to me by an old friend and colleague, <a title="armedia_blog" href="http://en.wikipedia.org/wiki/Agile_software_development" target="_blank">Jon Kern</a>, who in 2001 co-authored the Agile Manifesto. He and that cadre have come a long way since, and we owe them a great deal. Words to live and work by, and in this case, literally. Reprinted below verbatim.</p>
<p><strong><em>We are uncovering better ways of developing software [barrels]by doing it and helping others do it. Through this work we have come to value:</em></strong></p>
<p><strong><em> </em></strong></p>
<p><strong><em>Individuals and interactions over processes and tools</em></strong></p>
<p><strong><em>Working software [barrels] over comprehensive documentation</em></strong></p>
<p><strong><em>Customer [inhabitant] collaboration over contract negotiation</em></strong></p>
<p><strong><em>Responding to change over following a plan</em></strong></p>
<p><strong><em>That is, while there is value in the items on the right, we value the items on the left more.</em></strong></p>
<p>And regarding testing, and the Agile/”<a title="armedia_blog" href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">Extreme</a>” notion of build the test before the code, well, Niagara Falls itself is the test, and it certainly is already built.</p>
<p><strong>ITIL: </strong>The Information Technology Infrastructure Library delves into some pretty specific managed service delivery disciplines with a collection of well documented practices, but at its core it is a simple framework for producing repeatable results. ITIL prescribes an approach where one enters and addresses lowest hanging fruit in a continuous cycle of Strategy, Design, Transition, Operation, and Continuous Improvement.</p>
<p>Just makes too much darn sense not to use the ITIL foundational framework to approach this challenge. Keep in mind we are planning for a second and third drop. ITIL owes much to <a title="armedia_blog" href="http://en.wikipedia.org/wiki/W._Edwards_Deming" target="_blank">W. Edwards Deming</a>.</p>
<p><strong> </strong></p>
<p><strong>RUP: </strong>Rational Unified Process is an iterative process framework which supports a one size and shape does <em>not</em> fit all approach to process, but does provide a standardized language around which groups can define and communicate their approach. We owe the term “Use Cases” to, <a title="armedia_blog" href="http://en.wikipedia.org/wiki/Ivar_Jacobson" target="_blank">Ivar Jacobson</a>, one of the “Three Amigos” of RUP. He once told me that he blamed the term on his poor English skills, stating that what he really meant to say was “usage” cases. Creating a shared understanding the desired usage of a deliverable is central to success in delivery, and is a central element of RUP, and if RUP is not “Agile”, it is certainly iterative, and with RUP, everyone agrees on what the definition of “is” is.</p>
<p><strong>Waterfall: </strong>One shot at requirements analysis, design, implementation, testing (validation), integration, and maintenance? No thank you. But on the other hand, how much iteration is required? Seems in this case the requirements are fairly binary. A reasonably safe and reusable Niagara barrel suited for five occupants and built on a low budget. Hence the statement which I have heard often repeated has some validity here, “a waterfall approach is best in situations where the requirements are well defined and unlikely to change”.</p>
<p>We think Annie Taylor took a pure waterfall approach (pun unavoidable) as no evidence to the contrary exists.  But would you?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2011/01/software-development-and-the-perils-of-barrel-dropping-niagara-falls/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>More Thoughts on Data</title>
		<link>http://www.armedia.com/blog/2011/01/more-thoughts-on-data/</link>
		<comments>http://www.armedia.com/blog/2011/01/more-thoughts-on-data/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 13:53:31 +0000</pubDate>
		<dc:creator>jschivera</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[ECM Industry]]></category>
		<category><![CDATA[Enterprise Content Management]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=624</guid>
		<description><![CDATA[In my previous blog on data I discussed the importance of structured data within a content management system. Getting a good structured data design to compliment the design of the overall content management solution can be dirty work; not quite Mike Rowe &#8220;Dirty Jobs&#8221; dirty, but to some in our profession it might as well [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous blog on data I discussed the importance of structured data within a content management system. Getting a good structured data design to compliment the design of the overall content management solution can be dirty work; not quite <a title="armedia_blog" href="http://dsc.discovery.com/fansites/dirtyjobs/bio/bio.html" target="_blank">Mike Rowe</a> &#8220;Dirty Jobs&#8221; dirty, but to some in our profession it might as well be.</p>
<p>Why? Because you have to get right down to the user level and find out what they need and the context about how they think about the information.</p>
<p>So, let&#8217;s think about structured data and how it affects the user&#8217;s ability to locate and use the information in the content management system; in other words the search function. The textbook approach is to define the search precision and recall ratios for the system. Search precision being defined as the ratio of relevant (as judged by the user) items retrieved to the total number of items displayed in the search results list. And recall being defined as the ratio of relevant items retrieved to the total number of relevant items in the area being searched.</p>
<p>I mention these terms and definitions because I know many of my traditionally IT trained professionals like to follow the textbook and have their workshops and whiteboard sessions and generate flow maps and UML diagrams. But, in projects I&#8217;ve been involved with, the terms search precision and recall are never mentioned. However, here is the typical search discussion I&#8217;ve witnessed:</p>
<ul>
<li><em>Interviewer</em> &#8211; Ok, how do you want to search for these documents?</li>
<li><em>Interviewee</em> &#8211; Well I search all the time for data A, data B and data C and it sure would be nice to search on data D and data E.</li>
<li><em>Interviewer</em> &#8211; Ok, great, we already have identified attributes for data A, C and E, we&#8217;ll make them searchable for you. And we&#8217;ll add searchable attributes for data B and D.</li>
<li><em>Interviewee</em> &#8211; You know sometimes I don&#8217;t really know the data to search on but I am looking for some text inside the document, is there any way I can search on text?</li>
<li><em>Interviewer</em> &#8211; Oh yes this system has the ability to do text searches on any documents added to the system.</li>
<li><em>Interviewee</em> &#8211; Great!</li>
</ul>
<p>One of the critical success factors of a content management system is user satisfaction with the search and retrieval. Research consistently indicates that most users won&#8217;t make more than two or three attempts at finding the information they need. (Think about your own experiences using Google.) Search is typically driven by structured data. Fail to pay attention to the structured data driving the search functionality and you&#8217;re already placed one of the critical success factors at risk.</p>
<p>I never use the terms search precision and recall anywhere in the design criteria. The terms are just too hard to use quantitatively and what&#8217;s relevant to one user may not be relevant to another user. But the concepts need to be firmly in mind when users are being interviewed about their search preferences and habits. Users are remarkably tolerant of search as long as they get the expected results. Unless searching using a unique ID field like document number, users expect to sift through a results list to find the document of interest. How big result listings are they willing to sift through to find the document they are looking for? 10, 50, 100 results? That&#8217;s the blend of precision and recall you&#8217;re looking for in the interviews.</p>
<p>Much of my work has been in the area of engineering information in the utilities and oil and gas sectors. A favorite attribute that everyone wants to search is the equipment tag number. Drawings show equipment tags; procedures describe operation, maintenance and testing of equipment; specifications and calculations provide design information for equipment; vendor information tells how to maintain and order spare parts for equipment and so on. Lots of great indexing options! Great let&#8217;s add those attributes into the data model.</p>
<p>Stop! This is where the dirty works kicks in.</p>
<p>Does anyone index that information now? No, then how will the information get into the new system? What&#8217;s the source of the equipment tags? Is it validated? Who will be responsible for the information? When will it be complete and how will it be maintained up to date?</p>
<p>Users will tolerate the search feature up to a point. But, when an attribute is available for searching that sets the expectation of a high search precision it should be fully functional. If there&#8217;s little indexing or controls to support the search attribute then two bad things can happen. User frustration starts to set in or worse, a business decision is made without a possibly key piece of information. It is our responsibility as the content management professionals to do the dirty work and let the client know the possible implications of adding this attribute.</p>
<p>So let&#8217;s say the user community is ok with a low search precision % but high recall % listing for the equipment id search example. (Or in other words a result listing of 50.) How does a good structured data design support this result?</p>
<p>See my next blog entry: structured data and a business classification scheme in support of search and other design features&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2011/01/more-thoughts-on-data/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Software design is in crisis</title>
		<link>http://www.armedia.com/blog/2010/07/software-design-is-in-crisis/</link>
		<comments>http://www.armedia.com/blog/2010/07/software-design-is-in-crisis/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 22:38:18 +0000</pubDate>
		<dc:creator>A.J. McClary</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Enterprise Content Management]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Web Content Management]]></category>
		<category><![CDATA[user centered design]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=503</guid>
		<description><![CDATA[In the 90’s, when ECM solutions were rare, we could get away with designing solely toward requirements, but there is too much at stake nowadays. A recent study sampling various IT projects reported that: 62% percent of projects fail to meet their schedules 49% are over budget 47% have higher than expected maintenance costs And [...]]]></description>
			<content:encoded><![CDATA[<p>In the 90’s, when ECM solutions were rare, we could get away with designing solely toward requirements, but there is too much at stake nowadays. A <a href="http://advice.cio.com/remi/two_reasons_why_it_projects_continue_to_fail" target="_blank">recent study</a> sampling various IT projects reported that:</p>
<ul>
<li>62%      percent of projects fail to meet their schedules</li>
<li>49% are      over budget</li>
<li>47% have      higher than expected maintenance costs</li>
<li>And      get this—<strong>25% are canceled</strong> before they are ever deployed!</li>
</ul>
<p>If you’ve been in the software industry long enough, you’ve probably seen all of these things happen. The funny thing is, it doesn’t really come down schedule, cost, or requirements—it comes from bad design. When software companies think design, they&#8217;re thinking about contractual obligations and meeting commitments with their stakeholders. Here is a typical scenario:</p>
<blockquote><p>Company wins contract. Client provides requirements. Company builds a solution, meeting the requirements. Testers validate requirements and application is deployed to a set of users. The users hate it and the client makes new requirements, company builds to those requirements, and the users hate the next iteration…and so on.</p></blockquote>
<p>This can be resolved by utilizing user-centered design principles in your system development life-cycle. Software is not about code, it’s about people. Instead of our clients telling us what they want, we should be telling them what they need. As engineers, we can do a much better job building solutions then they can—that’s what they hire us for. To be successful, we need to incorporate user research, information architecture, interaction design, and usability testing into our process.</p>
<h2>“Iteration 0” – 10 Tasks to Guarantee a Slammin’ User Experience</h2>
<p><img class="alignnone size-medium wp-image-523" style="float: right; padding: 10px;" title="lifecycle" src="http://armedia.com/blog2/wp-content/uploads/2010/07/lifecycle-290x300.png" alt="" width="290" height="300" />Let’s start with “Iteration 0”. This sprint is completely devoted to user experience. The point is to get out of habit of thinking of Java Beans and database schemas and start thinking about people. Here are tasks that need to be accomplished:</p>
<ol>
<li><strong>Gather assumptions and requirements.</strong> Take some time to get acquainted with the requirements and begin to make assumptions      based on your experience with the technology.</li>
<li><strong>Analyze competition.</strong> Familiarize      yourself with the way your competition handles things. This is not      necessarily the solution you should be striving for, but is excellent to      have in your back pocket to show how your solution is better or to compare      solutions to initiate change.</li>
<li><strong>Understand goals &amp; tasks</strong>. Comprehensive      user research, interviews, card sorting exercises, and contextual      inquiries help identify user needs</li>
<li><strong>Develop personas and scenarios. </strong>Evangelize      these with everyone on your team. They can be in the form of user stories,      posters, work-flow diagrams, and profiles.</li>
<li><strong>Build a content strategy. </strong>Find out      what content you have, what needs to be developed, what needs to be      expanded, and what can be cut. Also create a schedule for delivering those      missing gaps. <strong></strong></li>
<li><strong>Information architecture. </strong>It’s      more than figuring out what content goes where. It’s also what information      is most important to your users. Identify those needs and incorporate them      into your design.<strong></strong></li>
<li><strong>Prioritize features.</strong> One of the      greatest advantages of user centered design is that you often find some      requirements barely impact your users. Those requirements can be re-prioritized so you can focus on what’s really important.</li>
<li><strong>Build wireframes and interaction      designs. </strong>Setting expectations on functionality, how it should look,      and how it should behave reduces future UI defects.  <strong></strong></li>
<li><strong>Design a prototype. </strong>Build something      you can take with you to road shows that incorporates both visual and      functional design. Update the prototype during future iterations so you      always have an accurate portrayal of what the product will look like at launch.<strong></strong></li>
<li><strong>Validate usability. </strong>There are hundreds      of techniques, including a usability inspection, paper prototyping, and      eye tracking, but put <strong><em>something</em></strong> in front of your users frequently. <strong></strong></li>
</ol>
<p>Points 8, 9, and 10 should be repeated throughout all future iterations until the project’s completion. When user experience drives design, you build products people love to use.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2010/07/software-design-is-in-crisis/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Doneness!</title>
		<link>http://www.armedia.com/blog/2010/02/doneness/</link>
		<comments>http://www.armedia.com/blog/2010/02/doneness/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 01:38:37 +0000</pubDate>
		<dc:creator>Jim Nasr</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Quality Assurance]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Consistency]]></category>
		<category><![CDATA[Doneness]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=300</guid>
		<description><![CDATA[‘Tis the season for the big sales kickoffs, goal communication, quota setting and the inevitable fudding and jockeying that goes with that. We at Armedia are, of course, not much different and have been dutifully working our list for a while. All roads therefore lead to “Are we done yet?!” Well, some things may never [...]]]></description>
			<content:encoded><![CDATA[<p>‘Tis the season for the big sales kickoffs, goal communication, quota setting and the inevitable fudding and jockeying that goes with that. We at Armedia are, of course, not much different and have been dutifully working our list for a while. All roads therefore lead to “Are we done yet?!” Well, some things may never be completely done. And, sometimes, you just don’t know if you’re done or how done is done. That’s kind of like dreaming about having a dream about having a dream…will it ever end! As intriguing as such enigma could be chances are you don’t want to deal with it when it comes to software development. In fact, unless you plan on becoming further fodder for <a title="JimNasr_Blog" href="http://dilbert.com/strips/comic/2008-11-09/" target="_blank">Dilbert</a>, that’s about the last thing you want to do.</p>
<p><a href="http://dilbert.com/strips/comic/2008-11-09/" target="_blank"><img class="alignnone size-full wp-image-309" title="Dilbert_software_development" src="http://armedia.com/blog2/wp-content/uploads/2010/02/Dilbert_software_development.gif" alt="Dilbert_software_development" width="640" height="287" /></a></p>
<p>So, how can you achieve &#8220;doneness&#8221; in software development? There are, presumably, lots of ways…and likely at least one or two not based on divine intervention! Based on our experience, doneness in development (particularly in large projects) is not as much to do with having a cadre of stud developers but having a thorough, systematic and review-laden process that is consistently adhered to. Who knew?!</p>
<p>Here is the gist of our approach to doneness (formal review steps are highlighted in brackets—cannot proceed to subsequent step unless review passes successfully):</p>
<p>Code Design</p>
<ol>
<li>Document requirements (or change to requirements) to scope level</li>
<li>Get client signoff (FORMAL REVIEW)</li>
<li>Document code design, changes to object model, peer review</li>
<li>Review design (FORMAL REVIEW)</li>
<li>Update system design document</li>
</ol>
<p>Implementation</p>
<ol>
<li>Implement test cases</li>
<li>Implement compiled stubs</li>
<li>Review Stubs (FORMAL REVIEW)</li>
<li>Implement services</li>
<li>Integration code</li>
<li>Code review (FORMAL REVIEW)</li>
<li>Update documentation</li>
<li>Documentation review (FORMAL REVIEW)</li>
<li>Implement review changes</li>
<li>Final commit and addition to main build</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2010/02/doneness/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Other People of Case Management</title>
		<link>http://www.armedia.com/blog/2010/02/other-people-of-case-management/</link>
		<comments>http://www.armedia.com/blog/2010/02/other-people-of-case-management/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 03:38:45 +0000</pubDate>
		<dc:creator>James Bailey</dc:creator>
				<category><![CDATA[Case Management]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Records Management]]></category>
		<category><![CDATA[case management]]></category>
		<category><![CDATA[evidence management]]></category>
		<category><![CDATA[records management]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=296</guid>
		<description><![CDATA[A couple more roles although tangential come to mind – evidence administrator and records administrator.  Again, neither role may be primary to closing the case; however both can be critical in ensuring that the case is compliant.  The case management system may not and probably should not be the evidence management system; however it should [...]]]></description>
			<content:encoded><![CDATA[<p>A couple more roles although tangential come to mind – evidence administrator and records administrator.  Again, neither role may be primary to closing the case; however both can be critical in ensuring that the case is compliant. </p>
<p>The case management system may not and probably should not be the evidence management system; however it should integrate with the evidence management system.  At a minimum, the case agent(s) need to understand the chain of custody of evidence associated with their case.  It would be better if it provided richer features like allowing the case agent to request evidence for charge out, reporting on state of evidence within case, electronic representation of evidence (i.e. picture) or etc.  The evidence administrator ensures that the evidence can be found when it is needed for whatever reason. </p>
<p>The case management system should provide records management services. If deigned correctly, this will be transparent to the case agent.  As you clearly stated in “<a title="The People of Case Management" href="http://www.armedia.com/blog/2010/02/the-people-of-case-management/" target="_blank">The People of Case Management</a>”, the system has to make it easy for officers to document their investigation.  The records management system will ensure that the case adheres to the organization’s retention and disposition policies.  The records administrator maintains the file plan with its associated policies and enforces them during the lifecycle of the case. </p>
<p>The evidence and records administrator supports the case agent by ensuring that physical and electronic material is tracked and available during the lifecycle of the case.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2010/02/other-people-of-case-management/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

