<?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>geek scrap &#187; performance</title>
	<atom:link href="http://geekscrap.com/tags/performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://geekscrap.com</link>
	<description>there is at least one way to do it</description>
	<lastBuildDate>Tue, 12 Apr 2011 10:14:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>What Enterprise-grade really means</title>
		<link>http://geekscrap.com/2010/02/what-enterprise-grade-really-means/</link>
		<comments>http://geekscrap.com/2010/02/what-enterprise-grade-really-means/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 11:30:24 +0000</pubDate>
		<dc:creator>geekscrap</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[code reuse]]></category>
		<category><![CDATA[disaster recovery]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[fault tolerance]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[reliability]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://geekscrap.com/?p=766</guid>
		<description><![CDATA[Recently S. Lott published a post on what&#8217;s a clear definition of Enterprise-level applications. Even though I agree with him that &#8220;Enterprise-scale&#8221; definition has been streched by marketing to mean about anything, I have to disagree with his conclusions: The fact that an enterprise running a mission-critical piece of software can actually survive to bad [...]]]></description>
			<content:encoded><![CDATA[<p>Recently S. Lott published <a rel="nofollow" href="http://slott-softwarearchitect.blogspot.com/2010/02/enterprise-applications.html">a post</a> on what&#8217;s a clear definition of Enterprise-level applications. Even though I agree with him that &#8220;Enterprise-scale&#8221; definition has been streched by marketing to mean about anything, I have to disagree with his conclusions:</p>
<ol>
<li>The fact that an enterprise running a mission-critical piece of software can actually survive to bad things(tm) by other means (falling short on their obligations?), doesn&#8217;t mean that the mission wasn&#8217;t critical, after all. Anyways, mission-critical is just a typical requisite for enterprise applications, not the definition of.</li>
<li>If the test is &#8220;if installer is next-next-done, then it&#8217;s not Enterprise&#8221;, it can be easily falsified by examples like Oracle database or Oracle business applications, which are definitely into the Enterprise set but are rather easy to install. Obviously you can achieve complex redundancy setups with Oracle DB or MySQL DB, and both of them require special configuration activities not provided by installer.</li>
</ol>
<p><span id="more-766"></span>Now, I think software quality evaluation for this purpose shouldn&#8217;t consider single pieces of software by themselves: CPython is just a component, not a complete solution for any Enterprise task, so any analysis on what&#8217;s exactly suitable for a task should take into account at least a group of components that compose a framework for task execution. At most, I can say that some languages foster more software quality than others: for instance, Perl&#8217;s CPAN repository shows how difficult it is to achieve a common coding standard with Perl.</p>
<p>IMHO, a definition of Enterprise-grade application should take into account the following features:</p>
<ol>
<li>Processes should respect the <a rel="nofollow" href="http://en.wikipedia.org/wiki/ACID">ACID</a> principles: wether your application does financial transactions, message delivery or any other kind of workflow, users need to trust on <strong>process reliability</strong>. This also means that application and protocol modeling should give clear information on what to expect as outcome of a certain operation.</li>
<li><strong>Fault tolerance</strong> should guarantee that in a closed environment, if prerequisites are respected and maitenance is carried out regularly, the software can accomplish its tasks without interruption, despite technical faults in single components of the underlying hardware.</li>
<li><strong>Security best practices</strong> (crytography, coding standards, risk management, extensive ACLs, etc.) should be applied to minimize unauthorized access to data and the application should support security features of the underlying system. While everyone claims to be secure today, I think that <strong>historical tracking</strong>, <strong>open-sourceness</strong> and quickness of <strong>response to threats</strong> are good ways to measure safety.</li>
<li>System configuration and development practices should follow <strong>standards</strong> that allow turnover of human resources and market should offer enough <strong>qualified personnel</strong> and <strong>paid support services</strong> to guarantee that once the system is up and running, someone exists that can actually keep it running and possibly extend it. Furthermore, market should offer <strong>training services</strong> and <strong>books</strong> to save your internal know-how value.</li>
<li>New software versions should be released when they&#8217;re <strong>mature</strong> and major releases should keep up with <strong>evolution of the market</strong>.</li>
<li>Software architecture should make performance and TCO grow at most linearly and have an <strong>upgrade path</strong> that can make your infrastructure serve <strong>huge numbers</strong> (thousands-to-millions of users) in a modular way (cloud computing is an example of this). <strong>Profilation</strong> and <strong>stress testing</strong> should ensure that the application has been engineered to avoid failures under peak usage due to performance hogs. Public independent benchmarks can help estimate processing rate, durability and resources consumption variability.</li>
<li>Considering that most Fortune 500 employ Enterprise-grade applications for production management and business management, Enterprise-grade application should offer more <strong>complex problem-solving</strong> and <strong>environment adaptation</strong> features than their <em>small-business </em>or<em> consumer </em>counterparts.</li>
<li><strong>Documentation</strong> and knowledge base should be adequate and up-to-date for most day-to-day needs from users and developers and should match an exact version of the software.</li>
<li>Usage <strong>data collection</strong> and analysis features are an important factor to allow management to plan for resource allocation and to take action upon anomalies.</li>
<li>It should be possible to declare in advance a <strong>disaster recovery plan</strong> to get back on track in a defined timeframe, given a <a rel="nofollow" href="http://en.wiktionary.org/wiki/TEOTWAWKI">TEOTWAWKI</a> event or subsets of it.</li>
</ol>
<p>Okay, my definition is really longer than S. Lott&#8217;s, but if it was simpler than that, it wouldn&#8217;t be Enterprise <img src='http://geekscrap.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>At the current state of software industry, products rarely back up their <a href="/2010/01/what-evil-lurks-in-ocfs2/">marketing claims</a> of being Enterprise-ready and application obsolescence has become really high-paced, so CIOs approach is more focused on agility than long-term reliability (how many SaaS products never get out of beta these days?). In reality, companies that make profits out of Agile lifestyle are just building on top of strong Enterprise foundations and are avoiding well-known <a rel="nofollow" href="http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html">Bad Agile</a> pitfalls. According to <a rel="nofollow" href="http://www.virtualschool.edu/cox/">Brad Cox</a>&#8216;s interview in <a href="http://www.amazon.com/gp/product/0596515170?ie=UTF8&amp;tag=geekscrap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596515170">Masterminds of Programming</a> book (see my <a href="http://geekscrap.com/2010/01/masterminds-of-programming/">review</a>):</p>
<blockquote><p><strong>Why is computer science not a real science?</strong></p>
<p>Each time you encounter a new piece of of software, you encounter something completely new and unique. How can you have a science where everything is unique?</p>
<p>If you study gold or lead from day to day, you can measure the properties and employ scientific methods to study them. With software, there is none of that.</p></blockquote>
<p>Enterprise-grade, reausable and reliable components may be one strategy to make software industry a real industry. That&#8217;s what Brad Cox thinks and I agree with him. What do you think? Please share your comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://geekscrap.com/2010/02/what-enterprise-grade-really-means/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
