<?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>Just Enough Technology &#187; Architecture and Design</title>
	<atom:link href="http://justenoughtechnology.com/topics/architecture-and-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://justenoughtechnology.com</link>
	<description>The passion to see business leverage technology both powerfully and economically</description>
	<lastBuildDate>Thu, 20 May 2010 00:18:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Create Singleton in C#</title>
		<link>http://justenoughtechnology.com/create-singleton-in-csharp/</link>
		<comments>http://justenoughtechnology.com/create-singleton-in-csharp/#comments</comments>
		<pubDate>Tue, 11 May 2010 04:02:57 +0000</pubDate>
		<dc:creator>Dave Ranck</dc:creator>
				<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Code Sample]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://justenoughtechnology.com/?p=309</guid>
		<description><![CDATA[One of the most basic and most useful object patterns is the Singleton design pattern. A Singleton is a class of which there will only be one instance created at any time. All users of the Singleton class will all use the same instance. This is great for a wide range of applications such as [...]


Related posts:<ol><li><a href='http://justenoughtechnology.com/find-a-string-between-2-strings/' rel='bookmark' title='Permanent Link: Find a String Between 2 Strings'>Find a String Between 2 Strings</a></li>
<li><a href='http://justenoughtechnology.com/restore-sql-database/' rel='bookmark' title='Permanent Link: Restore SQL Database'>Restore SQL Database</a></li>
<li><a href='http://justenoughtechnology.com/title-case-csharp/' rel='bookmark' title='Permanent Link: Title Case in C#'>Title Case in C#</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>One of the most basic and most useful object patterns is the Singleton design pattern. A Singleton is a class of which there will only be one instance created at any time. All users of the Singleton class will all use the same instance. This is great for a wide range of applications such as cached values and lookups or utilities that execute quickly. The Design Patterns book by Gamma et al . describes the structure of a basic Singleton. We&#8217;ll describe how to create one in C#. </p>
<p> <span id="more-309"></span>
<p>The classic approach to creating a Singleton looks like this:    </p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> SingletonGamma
 {
      <span class="kwrd">private</span> <span class="kwrd">static</span> SingletonGamma instance;
      <span class="kwrd">private</span> SingletonGamma()  { }

      <span class="kwrd">public</span> <span class="kwrd">static</span> SingletonGamma Instance
     {
         get </pre>
<pre class="csharpcode">         {
            <span class="kwrd">if</span> (instance == <span class="kwrd">null</span>) { instance = <span class="kwrd">new</span> SingletonGamma(); }
            <span class="kwrd">return</span> instance;
         }
     }
 } </pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>
  </p>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>The basic approach is&#160; to create a private constructor and an Instance method that returns the current instance if available, or returns a new instance if there is no current instance. We call that &quot;lazy instantiation&quot;. The problem with this approach in C# is that it is not strictly thread-safe. That is, it is possible for 2 threads to create separate instances is some circumstances. This is not what we are looking to do. This approach does have an advantage in that there is a hook-point to do post-instantiation processing if required. In .Net though, this is not the approach usually recommended</p>
<p>The following example takes advantage of the better handling of variable ambiguity in .Net (vs. C++) to create a thread-safe Singleton:</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">sealed</span> <span class="kwrd">class</span> SingletonCSharp
    {
        <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">readonly</span> Singleton instance = <span class="kwrd">new</span> SingletonCSharp();

        <span class="kwrd">private</span> SingletonCSharp() { }

        <span class="kwrd">public</span> <span class="kwrd">static</span> SingletonCSharp Instance
        {
            get
            {
                <span class="kwrd">return</span> instance;
            }
        }
    }</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>
  <br />This is the preferred approach in C# and is adequate for most programs. There are other approaches that allow for more flexibility and still maintain thread safety, but they introduce unnecessary complexity for most programs. Note the read only instance property that can only be set during instantiation and the sealed keyword that prevents inheritance of the class which could introduce unwanted side effects, such as secondary instances. This is a simple and straightforward approach to the design pattern. The only downside is the lack of flexibility to have non-standard constructors. For most applications, that will not be an issue.</p>


<p>Related posts:<ol><li><a href='http://justenoughtechnology.com/find-a-string-between-2-strings/' rel='bookmark' title='Permanent Link: Find a String Between 2 Strings'>Find a String Between 2 Strings</a></li>
<li><a href='http://justenoughtechnology.com/restore-sql-database/' rel='bookmark' title='Permanent Link: Restore SQL Database'>Restore SQL Database</a></li>
<li><a href='http://justenoughtechnology.com/title-case-csharp/' rel='bookmark' title='Permanent Link: Title Case in C#'>Title Case in C#</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://justenoughtechnology.com/create-singleton-in-csharp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is an open web?</title>
		<link>http://justenoughtechnology.com/what-is-an-open-web/</link>
		<comments>http://justenoughtechnology.com/what-is-an-open-web/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 19:46:00 +0000</pubDate>
		<dc:creator>Dave Ranck</dc:creator>
				<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[Business and Technology]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://justenoughtechnology.com/what-is-an-open-web/</guid>
		<description><![CDATA[The following challenge was on my Firefox homepage today:
Creating an open web is at the heart of the Mozilla project. And you&#8217;re a part of that. As one of thousands of people in the project, you have worked tirelessly to keep the Internet open, participatory and full of life.
The question is: why? Why do you [...]


Related posts:<ol><li><a href='http://justenoughtechnology.com/choosing-between-java-and-net/' rel='bookmark' title='Permanent Link: Choosing Between Java and .Net'>Choosing Between Java and .Net</a></li>
<li><a href='http://justenoughtechnology.com/why-just-enough-technology/' rel='bookmark' title='Permanent Link: Why Just Enough Technology?'>Why Just Enough Technology?</a></li>
<li><a href='http://justenoughtechnology.com/craftsmanship-and-software-development/' rel='bookmark' title='Permanent Link: Craftsmanship and Software Development'>Craftsmanship and Software Development</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The following challenge was on my Firefox homepage today:</p>
<blockquote><p>Creating an open web is at the heart of the Mozilla project. And <strong>you&#8217;re a part of that</strong>. As one of thousands of people in the project, you have worked tirelessly to keep the Internet <strong>open, participatory and full of life</strong>.</p>
<p><strong>The question is: </strong>why? Why do you participate? Why does the open web matter so much to you?</p>
<p>As we work to grow the Mozilla community, we want to explain what you&#8217;re feeling to everyone — <strong>your neighbours, your co-workers, your grandparents</strong>. We want them to <strong>understand the open web</strong>.</p></blockquote>
<p>I just shared my definition of what an Open Web means to me. Why don&#8217;t you share yours?</p>
<p><a href="http://mozilla.org/open">http://mozilla.org/open</a><br />
#mozopen</p>
<p>Click read more to see my response</p>
<p><span id="more-286"></span></p>
<p>I&#8217;m a software architect, specializing in business web apps. Years ago, when the web was young, I attended a technical seminar at which the speaker spoke excitedly about how the web would change the world through freedom of information. It has. Knowledge is indeed power. Never before in human history has so much knowledge been available to many at so little cost. An open web means freedom from those who would control access to information. An open web can literally change and even save lives.</p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f80eb56b-cc2f-4ede-a880-9bc2a5d7e092" class="wlWriterEditableSmartContent" style="margin: 0px; display: inline; float: none; padding: 0px;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/Open+Web">Open Web</a>,<a rel="tag" href="http://technorati.com/tags/Mozilla">Mozilla</a>,<a rel="tag" href="http://technorati.com/tags/Freedom+of+Information">Freedom of Information</a></div>


<p>Related posts:<ol><li><a href='http://justenoughtechnology.com/choosing-between-java-and-net/' rel='bookmark' title='Permanent Link: Choosing Between Java and .Net'>Choosing Between Java and .Net</a></li>
<li><a href='http://justenoughtechnology.com/why-just-enough-technology/' rel='bookmark' title='Permanent Link: Why Just Enough Technology?'>Why Just Enough Technology?</a></li>
<li><a href='http://justenoughtechnology.com/craftsmanship-and-software-development/' rel='bookmark' title='Permanent Link: Craftsmanship and Software Development'>Craftsmanship and Software Development</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://justenoughtechnology.com/what-is-an-open-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Good Azure Video from PDC09</title>
		<link>http://justenoughtechnology.com/good-azure-video-from-pdc09/</link>
		<comments>http://justenoughtechnology.com/good-azure-video-from-pdc09/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 03:04:30 +0000</pubDate>
		<dc:creator>Dave Ranck</dc:creator>
				<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[Business and Technology]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Cost Benefit Analysis]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[TCO]]></category>

		<guid isPermaLink="false">http://justenoughtechnology.com/?p=247</guid>
		<description><![CDATA[Here&#8217;s a great intro to Azure from PDC 09. If you have not looked at Azure or Cloud computing in general, take a look at this video for an introduction. Cloud Computing is here and in use. It will only grow in the near future.
PDC Video on Cloud Computing with Azure
J9SYRP3G9ZUC


Related posts:Windows Azure Now Available
Windows [...]


Related posts:<ol><li><a href='http://justenoughtechnology.com/windows-azure-now-available/' rel='bookmark' title='Permanent Link: Windows Azure Now Available'>Windows Azure Now Available</a></li>
<li><a href='http://justenoughtechnology.com/146/' rel='bookmark' title='Permanent Link: Windows Azure Videos'>Windows Azure Videos</a></li>
<li><a href='http://justenoughtechnology.com/java-vs-net-another-blast-from-the-past/' rel='bookmark' title='Permanent Link: Java vs. .Net &ndash; Another Blast From the Past'>Java vs. .Net &ndash; Another Blast From the Past</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a great intro to Azure from PDC 09. If you have not looked at Azure or Cloud computing in general, take a look at this video for an introduction. Cloud Computing is here and in use. It will only grow in the near future.</p>
<p><a title="Cloud Computing with Azure Video" href="http://gallery.live.com/liveItemDetail.aspx?li=195af345-360c-4411-aa24-f1bd90dd5655&amp;bt=1&amp;pl=1" target="_blank">PDC Video on Cloud Computing with Azure</a></p>
<p>J9SYRP3G9ZUC</p>


<p>Related posts:<ol><li><a href='http://justenoughtechnology.com/windows-azure-now-available/' rel='bookmark' title='Permanent Link: Windows Azure Now Available'>Windows Azure Now Available</a></li>
<li><a href='http://justenoughtechnology.com/146/' rel='bookmark' title='Permanent Link: Windows Azure Videos'>Windows Azure Videos</a></li>
<li><a href='http://justenoughtechnology.com/java-vs-net-another-blast-from-the-past/' rel='bookmark' title='Permanent Link: Java vs. .Net &ndash; Another Blast From the Past'>Java vs. .Net &ndash; Another Blast From the Past</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://justenoughtechnology.com/good-azure-video-from-pdc09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java vs. .Net &#8211; Another Blast From the Past</title>
		<link>http://justenoughtechnology.com/java-vs-net-another-blast-from-the-past/</link>
		<comments>http://justenoughtechnology.com/java-vs-net-another-blast-from-the-past/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 19:28:10 +0000</pubDate>
		<dc:creator>Dave Ranck</dc:creator>
				<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[Business and Technology]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Cost Benefit Analysis]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[TCO]]></category>

		<guid isPermaLink="false">http://justenoughtechnology.com/java-vs-net-another-blast-from-the-past/</guid>
		<description><![CDATA[Here’s another ancient article I wrote that I recently reread. It is interesting to see what has changed since this was first published on SearchSOA almost 8 years ago (see link at end of article). There are also many things that have not changed in those years. Companies continue to be faced with the question [...]


Related posts:<ol><li><a href='http://justenoughtechnology.com/choosing-between-java-and-net/' rel='bookmark' title='Permanent Link: Choosing Between Java and .Net'>Choosing Between Java and .Net</a></li>
<li><a href='http://justenoughtechnology.com/craftsmanship-and-software-development/' rel='bookmark' title='Permanent Link: Craftsmanship and Software Development'>Craftsmanship and Software Development</a></li>
<li><a href='http://justenoughtechnology.com/windows-azure-now-available/' rel='bookmark' title='Permanent Link: Windows Azure Now Available'>Windows Azure Now Available</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Here’s another ancient article I wrote that I recently reread. It is interesting to see what has changed since this was first published on <a href="http://searchsoa.techtarget.com/" target="_blank">SearchSOA</a> almost 8 years ago (see link at end of article). There are also many things that have not changed in those years. Companies continue to be faced with the question of what technology platform to choose for their Line of Business (<a href="http://en.wikipedia.org/wiki/Line_of_Business" target="_blank">LOB</a>) applications. Often decisions are made based on criteria that have not been properly matched to business objectives. Sometimes the result is that the new technology platform is abandoned in the not so distant future, with a corresponding loss of investment dollars.</p>
<p>With a <strong>Just Enough Technology</strong> approach, a company evaluates technology against its core problem or objectives. I work with business and technology leaders within a company to define their true objectives and then weigh the technology decisions with their business objectives as the main criteria. Read through this article on choosing between the Java and Microsoft platforms. Both technologies have evolved quite a bit since this was first published, but some of the core arguments remain to this day.</p>
<p><span id="more-241"></span></p>
<p><strong>The article:<br />
A user asks Dave, &#8220;Assume that we have a new mission critical Web application that we need to develop over the next six months. How would you recommend we compare &amp; contrast the pros/cons of J2EE vs. .NET as the platform (assuming we have the proper skills)?&#8221; </strong></p>
<p>There are many, many factors that come into play when deciding between J2EE and .NET. As a foundational statement, let me state that I personally believe you can build (and I have built) mission critical Web applications on both platforms. Sun Microsystems commissioned a white paper (see links at the end of this post) that states the theoretical scalability of each platform is unlimited. I say this because your decision should not based on whether or not you *can* build a more robust application in one or the other. It can be done.</p>
<p>As far as developing Web services, either platform offers a great foundation. Of course there are intrinsic advantages to each platform which I&#8217;ll list later. Web services and .NET are tightly integrated. It is *very* easy to create a basic Web service in .NET. It is simply a matter of placing a directive on each method you want exposed as a Web method. The compiler does the rest for you. Deployment is also a breeze. For the most part, you simply copy your files to the server and you&#8217;re done. Visual Studio .NET is also a development environment that has no peers, in my opinion. I still believe Microsoft has the edge in getting a project out the door as fast as possible.</p>
<p>J2EE on the other hand also has some good tools for creating Web services. IBM&#8217;s WebSphere Studio Application Developer 4 offers some great work-saving features for creating Web services. Basically you choose a Java bean or other object to &#8220;WebServicefy&#8221; and step through the wizard. When you are done, WebSphere Studio has created a wrapper for your object and all the SOAP, WSDL, etc. code needed. It also has created a JSP application to test your new Web service. It works and it is straightforward. I was able to create a simple Web service within 30 minutes of opening the environment for the first time. Pretty impressive for a Java IDE.</p>
<p>If you have developers skilled in one or the other platforms, then lean strongly toward that platform. The cost of training is high. Leveraging existing skills should be a priority.</p>
<p>That said then, what are the decision points one would consider when choosing between J2EE and .NET? Here are a few considerations and who I think has the advantage in each:</p>
<p><strong>Multi-Platform: J2EE</strong><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Currently if you need to create applications that run on more than one platform, Java is your only choice. This may change in future as .NET is ported to other platforms &#8211; we&#8217;ll see.</p>
<p><strong>Legacy Integration: J2EE?</strong><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
If you need to integrate legacy systems you may have an easier time in J2EE. IBM for example, provided the iron for many of these systems and has very workable solutions to connect to mainframes through WebSphere. On the other hand, you *could* create a Web service on the legacy platform, making this point moot.</p>
<p><strong>Multi-Language: .NET</strong><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
If you have developers in VB, C++, Java and want a unified environment for them to work in, .NET is your choice. All languages are created equal and work together, including cross-language inheritance.</p>
<p><strong>Choice of Vendors: J2EE</strong><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Is a choice of vendors important to you? There are advantages to a multi-vendor solution &#8211; you can choose the best-of-breed for each component of your system. There are also advantages to a single vendor solution, which include better interoperability between components. For example, .NET and SQL Server 2000 working together are a powerful, easy to use (relatively) combination.</p>
<p><strong>Vertical Scalability: J2EE</strong><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
If scaling up by buying bigger iron is your organizations preferred method, than lean toward J2EE.</p>
<p><strong>Horizontal Scalability: .NET</strong><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
If your organization likes the idea of a greater number of cheaper servers than there is probably an edge with .NET.</p>
<p>Finally, after all is said and done, many decisions are in reality based on shall we say, non-scientific criteria such as:</p>
<p>Like Microsoft: .NET<br />
Don&#8217;t: J2EE</p>
<p>I say this only partly tongue-in-cheek. Prejudice against Microsoft and the underlying technology goes deep with many technical folks and some business folks. It is a real factor in making this decision. There is also a prejudice in the Microsoft community against Java that is also based on less than scientific findings.</p>
<p><strong>LINKS</strong>:</p>
<p>Original Article:<br />
( <a title="http://searchsoa.techtarget.com/news/article/0,289142,sid26_gci819020,00.html" href="http://searchsoa.techtarget.com/news/article/0,289142,sid26_gci819020,00.html">http://searchsoa.techtarget.com/news/article/0,289142,sid26_gci819020,00.html</a> )</p>
<p><a href="http://www.theserverside.com/resources/article.jsp?l=J2EE-vs-DOTNET">J2EE vs. Microsoft .NET:</a> (Copyright2001 The Middleware Company Prepared for Sun Microsystems, Inc.<br />
<a href="http://www.tpc.org/">Transaction Processing Performance Council</a><br />
<a href="http://www.objectwatch.com/FinalJ2EEandDotNet.doc">Roger Sessions&#8217; comparison of .NET to J2EE</a><br />
<a href="http://www.sdmagazine.com/articles/2001/0103/0103a/0103a.htm">Software Dev Magazine article</a><br />
<a href="http://java.oreilly.com/news/farley_0800.html">O&#8217;Reilly article comparing J2EE and .NET</a></p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2164beb6-222a-4558-9129-4b0d931cf8d0" class="wlWriterEditableSmartContent" style="margin: 0px; display: inline; float: none; padding: 0px;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/SOA">SOA</a>,<a rel="tag" href="http://technorati.com/tags/Java">Java</a>,<a rel="tag" href="http://technorati.com/tags/.Net">.Net</a>,<a rel="tag" href="http://technorati.com/tags/Web+Services">Web Services</a>,<a rel="tag" href="http://technorati.com/tags/Scalability">Scalability</a>,<a rel="tag" href="http://technorati.com/tags/ROI">ROI</a>,<a rel="tag" href="http://technorati.com/tags/TCO">TCO</a></div>


<p>Related posts:<ol><li><a href='http://justenoughtechnology.com/choosing-between-java-and-net/' rel='bookmark' title='Permanent Link: Choosing Between Java and .Net'>Choosing Between Java and .Net</a></li>
<li><a href='http://justenoughtechnology.com/craftsmanship-and-software-development/' rel='bookmark' title='Permanent Link: Craftsmanship and Software Development'>Craftsmanship and Software Development</a></li>
<li><a href='http://justenoughtechnology.com/windows-azure-now-available/' rel='bookmark' title='Permanent Link: Windows Azure Now Available'>Windows Azure Now Available</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://justenoughtechnology.com/java-vs-net-another-blast-from-the-past/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Just Enough Technology?</title>
		<link>http://justenoughtechnology.com/why-just-enough-technology/</link>
		<comments>http://justenoughtechnology.com/why-just-enough-technology/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 01:35:42 +0000</pubDate>
		<dc:creator>Dave Ranck</dc:creator>
				<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[Business and Technology]]></category>
		<category><![CDATA[Process (SDLC)]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Planning]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Project Success]]></category>

		<guid isPermaLink="false">http://justenoughtechnology.com/?p=149</guid>
		<description><![CDATA[Just Enough Technology means providing the right technology to solve the right problem at the right cost. Not too much, not too little. The objectives of the business must be prioritized and kept in mind from concept to design to implementation to maintenance. Every decision made along the way must map to a business objective. [...]


Related posts:<ol><li><a href='http://justenoughtechnology.com/test-pm/' rel='bookmark' title='Permanent Link: A Programmer&#8217;s Bill of Rights?'>A Programmer&#8217;s Bill of Rights?</a></li>
<li><a href='http://justenoughtechnology.com/choosing-between-java-and-net/' rel='bookmark' title='Permanent Link: Choosing Between Java and .Net'>Choosing Between Java and .Net</a></li>
<li><a href='http://justenoughtechnology.com/why-do-we-need-software-architects/' rel='bookmark' title='Permanent Link: Why Do We Need Software Architects?'>Why Do We Need Software Architects?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<blockquote><p>Just Enough Technology means providing the right technology to solve the right problem at the right cost. Not too much, not too little. The objectives of the business must be prioritized and kept in mind from concept to design to implementation to maintenance. Every decision made along the way must map to a business objective. Every software requirement must map to a business objective. This is the foundation of Just Enough Technology – clear and concise business objectives. Those objectives drive the requirements, and the requirements drive the design and implementation.</p>
</blockquote>
<p>This is how I ended a short article about Just Enough Technology a while back. I’ve reproduced here for your reading pleasure. Differing opinions are invited <img src='http://justenoughtechnology.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p> <span id="more-149"></span>I’ve worked with many Fortune 500 and 100 clients, as well as small and mid-size companies. While there are many differences between the big guys and the smaller guys, they share one thing in common: the bottom line is their bottom line. Any business is in business ultimately to do one thing: make a profit. True, there are other drivers that individual companies may have, whether it is being a market leader or providing a service for the betterment of humanity. No business can stay in business unless they achieve a positive bottom line. I’m sure everyone understands this basic truth and yet, when it comes to creating, purchasing and maintaining software and perhaps to a lesser extent, hardware, this principle is often left by the wayside. One case in point I’m reminded of was a project for a national company (a household name you would recognize). This company undertook an integration project several years ago and engaged a large consulting firm to create a design and to do the implementation. The project began and the company spent over $20M over a period of perhaps one year. During this time, the company’s major web site was having daily stability issues and was going down frequently. No code was yet written to address these pressing problems. After a year, the only artifact from the project was a mountain of documentation, which included an architectural design. I was brought in to analyze the technical issues with the web site and servers, which I did in about 1 week of effort. At the end of the week, I produced an 18 point recommendation which included a rewrite of the application. Shortly thereafter, I was retained to lead the rebuilding effort and was shown the design that had been produced by the previous $20M effort. Frankly I was shocked. First of all, it was extremely complicated and over-architected and used bleeding edge (for then) technologies that no one at the company knew how to use. Second, the effort the design&#160; must have actually taken was minuscule compared to the mountain of paper it took to produce. I could not believe that they had spent such a large sum of money (lost profit) on what amounted to nothing. Had they implemented the design, it would have been a failure. It would likely have had serious performance issues.. We put a team together consisting of consultants from various firms and paired with employees, and produced our own design. We concentrated on solving the business problem in an efficient manner using technology the company could maintain once the development team was gone. The first thing we did was to shore up the current application so they could function properly. Only then did we begin work on the redesign. The project was completed – design and implementation &#8211; in much less than one year, with 1/4 of the price tag of the previous effort. The project was a great success and remained in production until it was upgraded to new technology. I can’t say who the client was, but if you are an IT professional, it is likely you have used the product at one time or another. That story illustrates the need for Just Enough Technology. <strong>Technology should drive business, it should enable business</strong>. Technology can provide savings or it can provide opportunities that would be difficult to take advantage of without it. That is, if it is used appropriately. When misused it can become an enormous profit-sink that consumes vast amounts of money with little to show for the cost and effort. Software can’t be seen or touched and it can be difficult to appraise a project’s real value or its real cost. Well-meaning tech-types convince business people that they need “the latest and greatest” or bad things will happen. To be fair, most of time I do think their intentions are good, but the truth is the average software architect or developer doesn’t know a thing about the bottom line. They know what is best in a pure sense, but they struggle with what is Good Enough. Since technology seems like witchcraft to many business people, they are hard-pressed to make decisions about how much is too much in regard to software and technology. The outcome many times is overspending and under-delivering. The wrong problem is solved and it is solved in a highly complex manner. Just Enough Technology means providing the right technology to solve the right problem at the right cost. Not too much, not too little. The objectives of the business must be prioritized and kept in mind from concept to design to implementation to maintenance. Every decision made along the way must map to a business objective. Every software requirement must map to a business objective. This is the foundation of Just Enough Technology – clear and concise business objectives. Those objectives drive the requirements, and the requirements drive the design and implementation. Too often this process is short-circuited and a company jumps right to design, resulting in an application that does not provide maximum benefit and probably is over-priced for the needs of the business.
<div class="bjtags"><a href="http://technorati.com/tag/CBA" rel="tag"></a></div>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d4b15b0b-74ad-4476-9688-6add0c0b19cc" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Project" rel="tag">Project</a>,<a href="http://technorati.com/tags/CBA" rel="tag">CBA</a>,<a href="http://technorati.com/tags/ROI" rel="tag">ROI</a>,<a href="http://technorati.com/tags/TCO" rel="tag">TCO</a>,<a href="http://technorati.com/tags/Ranck" rel="tag">Ranck</a></div>


<p>Related posts:<ol><li><a href='http://justenoughtechnology.com/test-pm/' rel='bookmark' title='Permanent Link: A Programmer&#8217;s Bill of Rights?'>A Programmer&#8217;s Bill of Rights?</a></li>
<li><a href='http://justenoughtechnology.com/choosing-between-java-and-net/' rel='bookmark' title='Permanent Link: Choosing Between Java and .Net'>Choosing Between Java and .Net</a></li>
<li><a href='http://justenoughtechnology.com/why-do-we-need-software-architects/' rel='bookmark' title='Permanent Link: Why Do We Need Software Architects?'>Why Do We Need Software Architects?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://justenoughtechnology.com/why-just-enough-technology/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Azure Videos</title>
		<link>http://justenoughtechnology.com/146/</link>
		<comments>http://justenoughtechnology.com/146/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 17:34:50 +0000</pubDate>
		<dc:creator>Dave Ranck</dc:creator>
				<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[Business and Technology]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://justenoughtechnology.com/?p=146</guid>
		<description><![CDATA[Here are the videos of the Windows Azure sessions at PDC09.  Lots of useful content, the sessions were well attended and well received.


Related posts:<ol><li><a href='http://justenoughtechnology.com/windows-azure-now-available/' rel='bookmark' title='Permanent Link: Windows Azure Now Available'>Windows Azure Now Available</a></li>
<li><a href='http://justenoughtechnology.com/good-azure-video-from-pdc09/' rel='bookmark' title='Permanent Link: Good Azure Video from PDC09'>Good Azure Video from PDC09</a></li>
<li><a href='http://justenoughtechnology.com/java-vs-net-another-blast-from-the-past/' rel='bookmark' title='Permanent Link: Java vs. .Net &ndash; Another Blast From the Past'>Java vs. .Net &ndash; Another Blast From the Past</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Here are the videos of the Windows <a title="Azure Services Platform - Wikipedia, the free encyclopedia" rel="nofollow" href="http://en.wikipedia.org/wiki/Azure_Services_Platform" target="_blank">Azure </a>sessions at PDC09.  Lots of useful  content, the sessions were well attended and well received.</p>
<p><span id="more-146"></span><a title="Azure Videos" href="http://blogs.msdn.com/jnak/archive/2009/11/19/videos-of-the-windows-azure-sessions-at-pdc09.aspx" target="_blank">http://blogs.msdn.com/jnak/archive/2009/11/19/videos-of-the-windows-azure-sessions-at-pdc09.aspx</a></p>
<p>In preparation for some discussion on <a title="Cloud computing - Wikipedia, the free encyclopedia" rel="nofollow" href="http://en.wikipedia.org/wiki/Cloud_computing" target="_blank">Cloud Computing</a> and Windows Azure in particular, here is a link to a set of videos on Azure from PDC09.</p>
<div>
<blockquote><p>Windows Azure™ is a cloud services operating system that serves as the <strong>development, service hosting and service management environment</strong> for the Windows Azure platform. Windows Azure provides developers with on-demand compute and storage to host, scale, and manage web applications on the internet through Microsoft® datacenters.</p>
<p>Windows Azure is a flexible platform that supports multiple languages and integrates with your existing on-premises environment. To build applications and services on Windows Azure, developers can use their existing <strong>Microsoft Visual Studio®</strong> expertise. In addition, Windows Azure supports popular standards and protocols including SOAP, REST, XML, and PHP.</p></blockquote>
</div>


<p>Related posts:<ol><li><a href='http://justenoughtechnology.com/windows-azure-now-available/' rel='bookmark' title='Permanent Link: Windows Azure Now Available'>Windows Azure Now Available</a></li>
<li><a href='http://justenoughtechnology.com/good-azure-video-from-pdc09/' rel='bookmark' title='Permanent Link: Good Azure Video from PDC09'>Good Azure Video from PDC09</a></li>
<li><a href='http://justenoughtechnology.com/java-vs-net-another-blast-from-the-past/' rel='bookmark' title='Permanent Link: Java vs. .Net &ndash; Another Blast From the Past'>Java vs. .Net &ndash; Another Blast From the Past</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://justenoughtechnology.com/146/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cloud Computing Introduction</title>
		<link>http://justenoughtechnology.com/cloud-computing-introduction/</link>
		<comments>http://justenoughtechnology.com/cloud-computing-introduction/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 22:58:40 +0000</pubDate>
		<dc:creator>Dave Ranck</dc:creator>
				<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[Business and Technology]]></category>

		<guid isPermaLink="false">http://justenoughtechnology.com/cloud-computing-introduction/175/</guid>
		<description><![CDATA[If you have not lived in a technological box for the past few years, you&#8217;ve heard the term &#8220;Cloud Computing&#8220;. &#8220;It&#8217;s become the phrase du jour&#8221; according to Gartner senior analyst Ben Pring. How does the idea of Cloud Computing fit in with the idea of Just Enough Technology? To answer that question, we&#8217;ll need [...]


Related posts:<ol><li><a href='http://justenoughtechnology.com/146/' rel='bookmark' title='Permanent Link: Windows Azure Videos'>Windows Azure Videos</a></li>
<li><a href='http://justenoughtechnology.com/good-azure-video-from-pdc09/' rel='bookmark' title='Permanent Link: Good Azure Video from PDC09'>Good Azure Video from PDC09</a></li>
<li><a href='http://justenoughtechnology.com/windows-azure-now-available/' rel='bookmark' title='Permanent Link: Windows Azure Now Available'>Windows Azure Now Available</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://justenoughtechnology.com/wp-content/uploads/2010/02/cloud_xsm.jpg"><img class="alignleft size-full wp-image-181" title="Cloud Computing - What Is It? Should I Adopt It?" src="http://justenoughtechnology.com/wp-content/uploads/2010/02/cloud_xsm.jpg" alt="What is Cloud Computing?" width="90" height="58" /></a>If you have not lived in a technological box for the past few years, you&#8217;ve heard the term &#8220;<a title="Cloud computing - Wikipedia, the free encyclopedia" rel="nofollow" href="http://en.wikipedia.org/wiki/Cloud_computing" target="_blank">Cloud Computing</a>&#8220;. &#8220;It&#8217;s become the phrase du jour&#8221; according to Gartner senior analyst Ben Pring. How does the idea of Cloud Computing fit in with the idea of Just Enough Technology? To answer that question, we&#8217;ll need to come to an understanding of what Cloud Computing is. In this article, we&#8217;ll go over the basics of Cloud Computing at a very high level. Later, we&#8217;ll delve into more specific aspects. First, we&#8217;ll define Cloud Computing, then we&#8217;ll look at its basic components and finally we&#8217;ll take a peek at its potential benefits. <span id="more-175"></span></p>
<h3>Definition</h3>
<p>The definition of <a title="Cloud computing - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/Cloud_computing" target="_blank">Cloud Computing</a> can sometimes seem rather, well, nebulous. Some have characterized it as &#8220;everything we are doing now&#8221;. While I agree that there are aspects of what we have been doing that relate to &#8220;the cloud&#8221;, Cloud Computing is much more. In the broadest sense, Cloud Computing involves abstracting various components of software systems so that the business and development team need not be concerned with the details. These components can include hardware, infrastructure, services and integration points. You can divide Cloud Computing into 3 broad categories:</p>
<ul>
<li>Software as a Service (SaaS)</li>
<li>Infrastructure as a Service (IaaS)</li>
<li>Platform as a Service (PaaS)</li>
</ul>
<p>There are other offerings such as Managed Service Providers (MSP), but for this introduction, we&#8217;ll concentrate on the 3 main components.</p>
<h3>Components of Cloud Computing</h3>
<h4>Basic Characteristics</h4>
<p>Cloud Computing customers do not own the physical infrastructure or in many cases the software utilized. Instead these resources are “rented”. This model is similar to the Utility Provider model upon which we purchase electricity and other services. Computing services are “consumed” in a like manner to electricity and the customer is charged a consumption fee. For example, Cloud Servers customers can be charged a usage fee based on actual computing cycles used instead of a flat server rental fee. Since there is no single server on which a company’s application is installed, redundancy is built in, as is scalability.</p>
<h4>Software as a Service (<a title="Software as a service - Wikipedia, the free encyclopedia" rel="nofollow" href="http://en.wikipedia.org/wiki/Software_as_a_service" target="_blank">SaaS</a>)</h4>
<p>SaaS is probably the component with the broadest market appeal. The SaaS provider allows its clients to use its applications, but not directly interact with its services or hardware. A simple example of SaaS might be web-based email services or something like Twitter. This component of Cloud Computing is in wide use today and is rapidly increasing in adoption. For example, some businesses are moving to Gmail from internally hosted mail solutions.</p>
<h4>Infrastructure as a Service (<a title="Infrastructure as a service - Wikipedia, the free encyclopedia" rel="nofollow" href="http://en.wikipedia.org/wiki/Infrastructure_as_a_service" target="_blank">IaaS</a>)</h4>
<p>IaaS provides things like block storage or virtual servers. This area has a high potential for savings for many companies. Like SaaS, companies are weighing the benefits of foregoing the cost and headache of self-managed hardware for buying a piece of the cloud.</p>
<h4>Platform as a Service (<a title="Platform as a service - Wikipedia, the free encyclopedia" rel="nofollow" href="http://en.wikipedia.org/wiki/Platform_as_a_service" target="_blank">PaaS</a>)</h4>
<p>PaaS is where the provider offers a platform upon which developers or end-users can create applications using the provider’s APIs. An example today would be Google Apps.</p>
<h3>Benefits of Cloud Computing</h3>
<p>Cloud Computing has many potential benefits including better scalability, better availability, lower overall cost and TCO. Companies may be able to save on Capital Expenditures by not having to purchase and maintain hardware. This can result in significant savings over time. The general idea is for the company to concentrate on the things that directly affect their bottom line such as product development and marketing, while allowing a service provider to deal with things that do not directly affect income. Of course, it must be economical for the company to “rent” hardware and software services and in many cases Cloud Computing can result in real savings. But like most technologies, the applicability of Cloud Computing must be evaluated on a case by case basis. There are obviously other factors, such as data security&#8217;, that must be addressed.</p>
<h3>Should We Adopt Cloud Computing?</h3>
<p>There are many factors involve in answering this question and each company’s answer will be unique to their needs and situation. Before undertaking any technological change, especially on as fundamental as adopting Cloud Computing, all important options and factors should be carefully considered. The objectives of the company must be clear and factored into the equation. Technology is a tool and it must fit the job. My advice? Get some advice when making a decision about Cloud Computing. Don’t be afraid to adopt Cloud Computing, but weigh the benefits carefully against the cost and your company’s objectives.</p>


<p>Related posts:<ol><li><a href='http://justenoughtechnology.com/146/' rel='bookmark' title='Permanent Link: Windows Azure Videos'>Windows Azure Videos</a></li>
<li><a href='http://justenoughtechnology.com/good-azure-video-from-pdc09/' rel='bookmark' title='Permanent Link: Good Azure Video from PDC09'>Good Azure Video from PDC09</a></li>
<li><a href='http://justenoughtechnology.com/windows-azure-now-available/' rel='bookmark' title='Permanent Link: Windows Azure Now Available'>Windows Azure Now Available</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://justenoughtechnology.com/cloud-computing-introduction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enable Joins WebSiteSpark</title>
		<link>http://justenoughtechnology.com/enable-joins-websitespark/</link>
		<comments>http://justenoughtechnology.com/enable-joins-websitespark/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 05:26:56 +0000</pubDate>
		<dc:creator>Dave Ranck</dc:creator>
				<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[Business and Technology]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Enable]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://justenoughtechnology.com/?p=100</guid>
		<description><![CDATA[1/12/2010 &#8211; Today Enable Web Technologies has been selected to join the Microsoft WebSiteSpark program.  Enable Web Technologies (www.enablewebtech.com) is the consulting company owned by myself and Victoria, my wife. We recently joined the Microsoft WebSiteSpark program.

From the FAQ on the WebSiteSpark partner site:
The program helps Web Pros drive new business opportunities through increased visibility [...]


Related posts:<ol><li><a href='http://justenoughtechnology.com/choosing-between-java-and-net/' rel='bookmark' title='Permanent Link: Choosing Between Java and .Net'>Choosing Between Java and .Net</a></li>
<li><a href='http://justenoughtechnology.com/java-vs-net-another-blast-from-the-past/' rel='bookmark' title='Permanent Link: Java vs. .Net &ndash; Another Blast From the Past'>Java vs. .Net &ndash; Another Blast From the Past</a></li>
<li><a href='http://justenoughtechnology.com/craftsmanship-and-software-development/' rel='bookmark' title='Permanent Link: Craftsmanship and Software Development'>Craftsmanship and Software Development</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="border: 0pt none; margin: 0px 6px; display: inline;" title="WebSiteSpark" src="http://enablewebtech.com/Portals/0/wssBannerLogo_200.jpg" border="0" alt="WebSiteSpark" width="200" height="88" align="left" />1/12/2010 &#8211; Today Enable Web Technologies has been selected to join the Microsoft WebSiteSpark program.  Enable Web Technologies (<a href="http://www.enablewebtech.com" target="_blank">www.enablewebtech.com</a>) is the consulting company owned by myself and Victoria, my wife. We recently joined the Microsoft WebSiteSpark program.</p>
<p><span id="more-100"></span></p>
<p>From the FAQ on the WebSiteSpark partner site:</p>
<blockquote><p><em>The program helps Web Pros drive new business opportunities through increased visibility and connections with partners (including Web Hosters) and customers around the world; WebsiteSpark also provides Web Pros with Microsoft tools and hosting solutions, as well as support and training</em>.</p></blockquote>
<p>WebSiteSpark gives Enable access to emerging technologies from Microsoft and a network of complementary professional service companies in the web space. This program and our nomination for participation provides a strong foundation on Microsoft technologies for our clients.</p>


<p>Related posts:<ol><li><a href='http://justenoughtechnology.com/choosing-between-java-and-net/' rel='bookmark' title='Permanent Link: Choosing Between Java and .Net'>Choosing Between Java and .Net</a></li>
<li><a href='http://justenoughtechnology.com/java-vs-net-another-blast-from-the-past/' rel='bookmark' title='Permanent Link: Java vs. .Net &ndash; Another Blast From the Past'>Java vs. .Net &ndash; Another Blast From the Past</a></li>
<li><a href='http://justenoughtechnology.com/craftsmanship-and-software-development/' rel='bookmark' title='Permanent Link: Craftsmanship and Software Development'>Craftsmanship and Software Development</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://justenoughtechnology.com/enable-joins-websitespark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is Software Engineering Dead?</title>
		<link>http://justenoughtechnology.com/test-dev/</link>
		<comments>http://justenoughtechnology.com/test-dev/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 19:23:35 +0000</pubDate>
		<dc:creator>Dave Ranck</dc:creator>
				<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[Business and Technology]]></category>
		<category><![CDATA[Process (SDLC)]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://justenoughtechnology.com/?p=56</guid>
		<description><![CDATA[A new article by Tom Demarco states: I’m gradually coming to the conclusion that software engineering is an idea whose time has come and gone. I still believe it makes excellent sense to engineer software. But that isn’t exactly what software engineering has come to mean.


Related posts:<ol><li><a href='http://justenoughtechnology.com/craftsmanship-and-software-development/' rel='bookmark' title='Permanent Link: Craftsmanship and Software Development'>Craftsmanship and Software Development</a></li>
<li><a href='http://justenoughtechnology.com/why-do-we-need-software-architects/' rel='bookmark' title='Permanent Link: Why Do We Need Software Architects?'>Why Do We Need Software Architects?</a></li>
<li><a href='http://justenoughtechnology.com/using-rational-xde-with-visual-studio-net/' rel='bookmark' title='Permanent Link: Using Rational XDE with Visual Studio .Net'>Using Rational XDE with Visual Studio .Net</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>A new article by Tom Demarco states: I’m gradually coming to the conclusion that software engineering is an idea whose time has come and gone. I still believe it makes excellent sense to engineer software. But that isn’t exactly what software engineering has come to mean.<span id="more-56"></span></p>
<p>When I first read this article I was taken aback. As I thought about it, I think I agree for the most part anyway. I found the article on <a href="http://www.codinghorror.com/blog/archives/001288.html" target="_blank">Coding Horror</a> and his thoughts about it as well.</p>
<p>One of the guys that I work with had the following well though out comments:</p>
<blockquote><p>I like how they use the term &#8220;Craftsman&#8221; to describe what we do.  It actually makes me think, if I were a knight getting ready to invade some castle in the dark ages, would I buy armor from an &#8220;Engineer&#8221; or a &#8220;Craftsman&#8221;?  Sure I would expect it to have been designed at some point by an engineer, but designs are re-usable.  I would think that occasionally someone would come back from wearing a similar, earlier design with specific flaws and maybe have things re-designed by engineers, and those tweaks perfected through practice and applied to other designs.  When it comes down to it, those designs and tweaks become patterns and practices.  I want my plate folded and shaped by a craftsman who knows those things, but more importantly, how to work with the tools and the different types of metal.  One who&#8217;s reputation, and thus livelihood, hinged not on how sound a design it was but rather on how well it was executed.  One who is meticulous and makes sure no impurities make their way to the critical pieces, making them prone to shatter or crack.</p>
<p>I don&#8217;t believe &#8220;Software Engineering&#8221; is dead, but I wouldn&#8217;t want to buy a piece of software from a shop full of them.  In theory, they might solve every aspect of the design perfectly, but in reality, it would only work perfect in IE 5.5.3216 running Java 3.2.439.  Data integrity might be protected, but how about the user experience.  The ones I want writing software for me are the ones that take pride in the experience their software provides and make sure its practical and usable.  The ones who have taken the time to master the tools that have been made available to them to assist in their craft.</p>
<p>You get the idea.</p>
<p>~Jeff</p></blockquote>
<p><a href="http://www2.computer.org/cms/Computer.org/ComputingNow/homepage/2009/0709/rW_SO_Viewpoints.pdf" target="_blank">Tom Demarco&#8217;s article is here</a></p>


<p>Related posts:<ol><li><a href='http://justenoughtechnology.com/craftsmanship-and-software-development/' rel='bookmark' title='Permanent Link: Craftsmanship and Software Development'>Craftsmanship and Software Development</a></li>
<li><a href='http://justenoughtechnology.com/why-do-we-need-software-architects/' rel='bookmark' title='Permanent Link: Why Do We Need Software Architects?'>Why Do We Need Software Architects?</a></li>
<li><a href='http://justenoughtechnology.com/using-rational-xde-with-visual-studio-net/' rel='bookmark' title='Permanent Link: Using Rational XDE with Visual Studio .Net'>Using Rational XDE with Visual Studio .Net</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://justenoughtechnology.com/test-dev/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Craftsmanship and Software Development</title>
		<link>http://justenoughtechnology.com/craftsmanship-and-software-development/</link>
		<comments>http://justenoughtechnology.com/craftsmanship-and-software-development/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 22:31:56 +0000</pubDate>
		<dc:creator>Dave Ranck</dc:creator>
				<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[Business and Technology]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://justenoughtechnology.com/craftsmanship-and-software-development/197/</guid>
		<description><![CDATA[In a previous post I quoted a colleague who stated :
I like how they use the term “Craftsman” to describe what we do….[the craftsmen are] the ones who have taken the time to master the tools that have been made available to them to assist in their craft.
Craftsmanship in the manner used above,  refers to [...]


Related posts:<ol><li><a href='http://justenoughtechnology.com/test-dev/' rel='bookmark' title='Permanent Link: Is Software Engineering Dead?'>Is Software Engineering Dead?</a></li>
<li><a href='http://justenoughtechnology.com/why-do-we-need-software-architects/' rel='bookmark' title='Permanent Link: Why Do We Need Software Architects?'>Why Do We Need Software Architects?</a></li>
<li><a href='http://justenoughtechnology.com/choosing-between-java-and-net/' rel='bookmark' title='Permanent Link: Choosing Between Java and .Net'>Choosing Between Java and .Net</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>In a previous post I quoted a colleague who stated :</p>
<blockquote><p>I like how they use the term “Craftsman” to describe what we do….[the craftsmen are] the ones who have taken the time to master the tools that have been made available to them to assist in their craft.</p></blockquote>
<p>Craftsmanship in the manner used above,  refers to an attention to detail and a pride in one’s work product. A craftsman is more than a worker – he or she truly cares that they do things right and to the best of their ability. I agree with this thought in principle, but I want to expand on it a bit and speak to one difficulty with software craftsmanship as a methodology.<span id="more-197"></span></p>
<p>In today’s technological world we need craftsmen, but we also need more than craftsmen. As an allegory, look at home building. We care about the quality of construction in homes that we buy. We certainly want to make sure everything is up to code and if we live in an area subject hurricanes, we want to know the proper standards and materials have been used in construction. We want to be sure that the workers who raise the frame, do the plumbing and electrical work and do the interior finish work are adequately skilled in their craft. That said, we would not hire a cabinet maker to do the framing, an electrical engineer to run the wiring or a rocket scientist to handle the plumbing. We choose the right skills and tools for the job at hand.</p>
<p>Software development is still in large part a craft, an art. We are not yet at the stage where every aspect of software development is reduced to a kind of binary assembly line, where unskilled workers assemble programs from software “parts”. True, there are some benefits we can receive from using prebuilt libraries or components, saving development, testing and maintenance costs as we will discuss below. But we still need good, skilled developers to do the heavy lifting. Software is not like machinery. For the most part, you design and build a machine to do one thing. Software on the other hand is much more multi-faceted and when starting a software design, there really are almost unlimited options available. A problem can be solved in many, many ways. A craftsman is needed to help choose an appropriate solution.</p>
<p>But we are also beyond the time when every piece of software must be built from the ground up. There are many commercial and <a title="Open source - Wikipedia, the free encyclopedia" rel="nofollow" href="http://en.wikipedia.org/wiki/Open_source" target="_blank">open source</a> solutions available that can jumpstart projects or that can provide the backbone for common application functionality. These solutions include things like <a title="NHibernate - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/NHibernate" target="_blank">nHibernate</a>, Spring, and other persistence libraries that handle common operations in a manner that has been well-tested and which meets the needs of many projects. The Java community has made very good use of open source projects and libraries, some of which are now included in core Java. Why then aren’t these types of libraries used more frequently in Line of Business (LOB) applications? I believe business is often missing out on long and short term cost savings by not leveraging these open source or 3rd party solutions. One reason these solutions are sometimes not adopted (certainly not the only reason) is the inherent craftsman mentality of developers and architects. I call it the “<em>But we can do better</em>” syndrome.</p>
<p>You are probably familiar with the <a href="http://en.wikipedia.org/wiki/Pareto_principle" target="_blank">Pareto principle</a>, also know as the 80-20 rule. In  the cost-benefit analysis of software projects this rule can be stated as “80% of the benefit comes from 20% of the development effort”. What this means in practice: IT needs to concentrate on that 20% of the time and effort which provides the most benefit and spend a lot less time and effort on the remaining 80%. In reality, it is often difficult for technical people to do this. Why? The 20% tends to be more mundane from a technical perspective and there is a lot of interesting design and coding to be done in the 80%. There’s an old story programmers tell about the a programmer who said “I can write that function in 10 lines of code”. Another programmer said, “I can do it in 5 lines of code”. Finally, a third said “Well, I can do it only one line of code” and he proceeded to spend hours upon hours writing and rewriting the function until it worked with only one line of code. What is the problem with this story? The first programmer could have written the function in minutes, the second in an hour or two but it took the third programmer many hours to complete the task. On top of that, the third programmer’s code was so complicated and used so many programming “tricks&#8217;” that very few other programmers could understand how it worked.</p>
<p>The “We can do better” syndrome is difficult for business to fight. Better after all is well, better. If we can reduce the time it takes to execute a function by 500%, it should be worth the effort because of the performance savings. Right? What if it only took .5 milliseconds for the function to run before it was optimized? End users would see zero benefit from the added effort to increase performance.* But from the third programmer’s perspective, he did the right thing. He made the application more efficient according to his definition.</p>
<p>Programmers also tend to distrust code that came from an unknown source (or even from one of their colleagues). In the early days of distributed computing we had the grand notion of creating object libraries full of reusable code. The greatest obstacle we faced to reaching this goal was the unwillingness of developers to use another programmer’s code. They would rather create it themselves. There was always something that the library didn’t do or didn’t do “well enough” in their opinion.</p>
<p>The moral of the story is this: we must apply the same logic for selecting software solutions that we would in other areas of business. Good enough is good enough. If there is an open source library or 3rd party library available that meets the 80-20 rule and which will truly deliver on the project’s requirements, it should be strongly considered as an alternative to developing everything from scratch. In order to know when to use an existing library and when to build a new library, business and IT must work together, and IT must keep the business objectives as the first priority. On the other hand business must be clear about their objectives with IT. Those objectives are the measuring stick for evaluating software design alternatives.</p>
<p style="padding-left: 30px;"><em>* I am aware that in some instances such as recursive calls, .5 milliseconds can be a performance bottleneck. That isn’t the scenario I am using here.</em></p>


<p>Related posts:<ol><li><a href='http://justenoughtechnology.com/test-dev/' rel='bookmark' title='Permanent Link: Is Software Engineering Dead?'>Is Software Engineering Dead?</a></li>
<li><a href='http://justenoughtechnology.com/why-do-we-need-software-architects/' rel='bookmark' title='Permanent Link: Why Do We Need Software Architects?'>Why Do We Need Software Architects?</a></li>
<li><a href='http://justenoughtechnology.com/choosing-between-java-and-net/' rel='bookmark' title='Permanent Link: Choosing Between Java and .Net'>Choosing Between Java and .Net</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://justenoughtechnology.com/craftsmanship-and-software-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
