<?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>Frank &#38; Michelle&#039;s Blog &#187; Software Architecture</title>
	<atom:link href="http://frank.dutchmonkey.com/blog/category/software-architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://frank.dutchmonkey.com/blog</link>
	<description>A Cursory Look at The Life of a Dutchman and Those Who Have to Deal With It.</description>
	<lastBuildDate>Mon, 02 Jan 2012 03:28:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Software Architecture</title>
		<link>http://frank.dutchmonkey.com/blog/technology/software-architecture/</link>
		<comments>http://frank.dutchmonkey.com/blog/technology/software-architecture/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 21:09:04 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.frank.dutchmonkey.com/blog/?p=30</guid>
		<description><![CDATA[<p>Software reliability is a major problem. In an effort to improve the integrity of a software application, the software industry <img src="http://www.frank.dutchmonkey.com/blog/wp-content/uploads/2007/04/sa.jpg" title="sa.jpg" alt="sa.jpg" align="right" border="0" />has struggled to find a reliable way to approach software development and design. There is a strong trend in the industry to mimic engineering when designing and building software. In principle, this is a good idea because there is a lot of experience in that area, and the process of having one expert build the plans from a high level all the way down to the smallest detail has seemed to work well in producing buildings and bridges that don&#8217;t fall down. In this case, a Civil Engineer is responsible for the integrity of a bridge-building project and will develop the plans for the bridge, down to the placement and size of each bolt and rivet. The construction worker, who is considered not to have been trained as an engineer, is expected to follow these plans to the letter without exhibiting any creative thought in the process. If an error in the plans is found, it is brought to the attention of the engineer, who is responsible for finding a workable solution.</p>
<p>The problem with applying this model to Software Engineering is that software developers are creative people trained in many of the same disciplines as the software architects; in fact, in most cases only experience distinguishes a software developer from a software architect. When presented with a problem, each software developer will have a unique way to approach it, and is very capable of managing the details of how to implement that approach. To ignore this fact and to have an individual build software designs down to the last detail comes at the expense of allowing a team of highly intelligent, creative problem-solvers to contribute to and improve the design. And, when there are competing, workable solutions to the same problem, and developers are given the freedom to decide which is best, the integrity of each piece will improve, and thus the integrity and reliability of the application on a macro level continues to improve.</p>
<p>See Also: <a href="http://www.frank.dutchmonkey.com/blog/?p=31">Web 2.0 Best Practices</a></p>
]]></description>
		<wfw:commentRss>http://frank.dutchmonkey.com/blog/technology/software-architecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web 2.0 Best Practices</title>
		<link>http://frank.dutchmonkey.com/blog/technology/web-20-best-practices/</link>
		<comments>http://frank.dutchmonkey.com/blog/technology/web-20-best-practices/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 21:08:23 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.frank.dutchmonkey.com/blog/?p=31</guid>
		<description><![CDATA[<p><em>The following is a piece I wrote for a response to a Request for Proposal on identifying customer needs in a Web 2.0 environment.  No portion of this article may be reproduced in any form, or by any means, without prior written permission.<br />
</em></p>
<p><strong>Overview</strong></p>
<p>In the internet era, in which users think in terms of services rather than packaged software, services are <a href="http://www.frank.dutchmonkey.com/blog/wp-content/uploads/2007/04/webdesign.jpg" target="_blank" title="webdesign_tmb.jpg"><img src="http://www.frank.dutchmonkey.com/blog/wp-content/uploads/2007/04/webdesign_tmb.jpg" title="webdesign_tmb.jpg" alt="webdesign_tmb.jpg" align="right" border="1" /></a>expected to be available on-demand and improve over time.  Web-based services typically have no versions, no installations, and no upgrades that the user interacts with.  The traditional software development lifecycle of design-develop-test-ship-install is becoming less common as software has increasingly become a service which is always on, always improving.</p>
<p>For development of these services, this shift impacts the entire software development model and delivery process.  Success now relies on the adoption of an iterative development model in which software is continuously improved and the users become key contributors to the development process and ongoing support of the online service becomes a core competency</p>
<p>This greatly improves the time to market of an application, reduces the risk of all parties involved, builds a closer relationship between the users and developers and ultimately produces a product that is not only more stable but more closely matches what the users require from the service.</p>
<p><!--more--><strong>Best Practices</strong></p>
<p><em>Release Early, Release Often.</em>  A critical success factor for web-based services development is the Release Early, Release Often edict developed by the open-source software development community.  Using an iterative software development model such as Agile or RUP allows for effective packaging of bug fixes and enhancements into incremental releases that respond to user feedback.  Another key element is to use automated testing to perform regression tests on each release, continually building to the test repository to test all existing features as well as past bugs and issues.</p>
<p><em>Engage Users as Co-Developers and Testers.</em>  Real-world user behavior provides much more accurate assessment of new product features than relying solely on requirements specifications, prototypes, or other artifacts that have not been collaboratively developed with the end users.  Through effective use of developer-user collaboration, developers are able to accurately monitor how the software will be used in production, allowing the use of statistics and experimentation to make informed product feature decisions.</p>
<p><em>Capture User Data that Measures the Product’s Objective.</em>  In the development process, it is possible to implement not only the customer-facing web-based service but also a framework for capturing how customers are using the product.  More can be learned from what users do than from what users say.  Capturing user activity data must be planned as carefully as the planning of the web-based services themselves; data captured must answer specific questions in order to accurately measure how well business objectives are being met.</p>
<p><em>Incrementally Add Features.</em> New and existing features should evolve through rapid releases, user collaboration, and instrumentation.  Experiment with new features through planned but incremental processes.</p>
<p><em>Requirements Management. </em>With the shortened release cycle, continuous change of requirements and features requires a robust requirements management process.  In order to effectively manage requirements, there must be in place a documentation model capable of tracking and documenting tradeoffs and decisions as well as easily capturing and communicating business requirements.  Typically, the use of Use Case and User Scenarios have proven to be an excellent way to capture functional requirements and to ensure that these drive the design, implementation and testing of software.  These documents also provide traceable threads through both the development process and the delivered system.</p>
<p><em>Change Control.</em> The ability to make certain that each change is acceptable and being able to track changes is essential in an environment in which change is inevitable is essential.  The disciplined adherence to a process that describes how to control, track and monitor changes throughout each iteration is critical to enable successful iterative development.</p>
<p><strong>Agile Requirements</strong></p>
<p>Agile development is not for every project or for every development team.   Due to the collaborative nature between the developers and the business users, the ability of the teams to work well within themselves as well as with each other is essential.  Agile development requires excellent team collaboration and leadership; it requires motivated members across all groups; slackers in the development or business teams can upset the momentum and productivity of the team.   Further, developers need to be adept at gathering requirements from the users in addition to being able to intuitively build well designed systems &#8211; simplicity is key.  Constantly changing requirements and system code exposes an application&#8217;s architectural and design weaknesses and flaws.  Finally, due the short release cycle, agile development works best in distributed environments such as with Web Services and Web Applications; frequent releases work better when the client doesn&#8217;t  doesn&#8217;t need to be involved in deploying releases.</p>
<p><strong>Pitfalls</strong></p>
<p><em>User Testing Can Never Replace Quality Assurance.</em> A common pitfall of adopting an iterative development process is the notion that the short release cycling which includes both features and bug fixes is an excuse for poor quality or a lack of accountability.  Engaging users as real-time testers is about validating and refining functionality, not quality.</p>
<p><em>Versions No Longer Exist. </em>Although users no longer interact directly in the release cycle as they did in the traditional design-develop-test-ship-install model, versions are as vital as ever.  More frequent release cycles require disciplined design, build, test, deploy, and support processes.</p>
]]></description>
		<wfw:commentRss>http://frank.dutchmonkey.com/blog/technology/web-20-best-practices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

