<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Technology Musings</title>
	
	<link>http://www.technologymusings.com</link>
	<description>A discussion of SOA, SaaS, Cloud Computing, Venture Capital and Various Other Technology Related Topics</description>
	<lastBuildDate>Tue, 22 Sep 2009 12:04:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/TechnologyMusings" /><feedburner:info uri="technologymusings" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>The New Economics of Technology Startups?</title>
		<link>http://feedproxy.google.com/~r/TechnologyMusings/~3/bU6P5kWzu2s/the-new-economics-of-technology-startups</link>
		<comments>http://www.technologymusings.com/techstartups/the-new-economics-of-technology-startups#comments</comments>
		<pubDate>Tue, 22 Sep 2009 12:04:59 +0000</pubDate>
		<dc:creator>Paul Michaud</dc:creator>
				<category><![CDATA[Technology Startups]]></category>

		<guid isPermaLink="false">http://www.technologymusings.com/?p=122</guid>
		<description><![CDATA[I have recently been reading the book &#8220;Free: The Future of a Radical Price&#8221; by Chris Anderson.  Well I am not actually reading it as I find I do not have time for reading books any more.  These days I do all of my &#8220;book reading&#8221; using audio books from Audible.com.  I find that by [...]]]></description>
			<content:encoded><![CDATA[<p>I have recently been reading the book &#8220;Free: The Future of a Radical Price&#8221; by Chris Anderson.  Well I am not actually reading it as I find I do not have time for reading books any more.  These days I do all of my &#8220;book reading&#8221; using audio books from Audible.com.  I find that by making a conscious effort to listen to a book every time I am driving a car, on a plane, in a cab, in a restaurant by myself on a business trip, etc, I can actually get about 45-60 hours per month of audio book covered using time that I cannot otherwise use all that productively.  This amounts to about 1200-1500 pages of book equivalent per month which is a lot.  Anyhow, I digress.  So I am &#8220;reading&#8221; Chris&#8217;s book and while I tend to agree with Chris on a lot of the trends and use cases cited in the book, the Financial Economist in me is screaming that there is a potential train wreck coming for the technology sector and consumer oriented Internet startups in particular.</p>
<p>For those who have not read the book, let me boil it down for you enough to understand where this article is coming from.</p>
<p>In a nut shell, Chris&#8217;s premise is that since the marginal cost of a computer program, web site, etc is close to $0 and given the expectations of Gen X and GenY that all things are available free on the Internet, that most software or web offerings will be forced in the future to have some form of Free version in order to get traction.  Furthermore the book is filled with examples and cases of how people have made a viable business by offering something for free and making money through an upsell, advertising, etc.</p>
<p>If you are in any way thinking of starting a technology company or bringing any product to market (particularly if its aimed at consumers under 35) then this book is a must read, as it makes some important points about the behaviors and mentality of today&#8217;s consumers.</p>
<p>Anyhow, what concerns me, particularly for consumer Internet apps is that it basically implies there will be only 2 viable business models going forward.</p>
<ol>
<li>The core product is offered for free and is subsidized by advertising</li>
<li>The Freemium model, where you offer a scaled down free product and hope to convert a small percentage of users to a paid premium version</li>
</ol>
<p>Now I do realize this is an over simplification but it&#8217;s sufficient for the purposes of this discussion.</p>
<p>What worries me about all of this can be broken down to the following few points:</p>
<p><strong>Scale</strong><br />
Both of these models require huge scale in order to be viable as a serious business (by that I mean supporting more than a handful of employees in the business).  While I understand that its certainly possible to achieve huge scale with consumer Internet based apps, it&#8217;s very difficult.  What portion of applications on the web get to 1 million users never mind 10 million or more?  The bottom line is that if you cannot achieve this kind of scale,  then it will be very difficult for a business which relies on advertising revenue or converting 2-5% of users to a paid product to support more than a part time income or at best a handful of employees.</p>
<p><strong>Reliance on Advertising</strong><br />
In the case of a business that relies on advertising from others to subsidize its product, I question the long term viability of this model for any one company, unless you are one of the few big success stories such as Google, and lets face it, although everyone wants to be, not all startups can be a Google.  Again, without huge scale It won&#8217;t be possible to generate enough advertising revenue to support more than few employees.  In addition,  lets do a small thought experiment (albeit one that is hopefully not too realistic or we are all in big trouble).  Imaging that all consumer oriented internet based apps eventually end up being free and that they are subsidized by advertising revenue. Who buys those ads?  If no one is making money directly through the sale of end product, then I argue that no one has money to pay for ads and the whole model fails.  The only way this model can work for more than just select point businesses within an ecosystem where at least some businesses make good money from direct sales of products, is if there is tons of external capital being pumped in to subsidize these business and to pay for those ads.  In this case its just a matter of time before that external capital dries up as its absolutely impossible for this system as a whole to make a sufficient return on investment at a systemic level.  That&#8217;s not to say some business won&#8217;t reap very good profits, My point is that as an economic sector overall using just this model,  its not possible to be profitable.  Therefore there must be at least some products for which the consumer is willing to pay for the product directly in order for this to succeed.  When you consider the average Gen Y doesn&#8217;t feel they should ever pay for anything computer software related, this is a big potential problem for the information economy in the future and the companies who hope to be successful selling to them.</p>
<p><strong>The Freemium Model</strong><br />
I actually think this model is more viable but it has its own challenges.  Firstly,  you still need huge scale to support more than a handful of employees.  Lets assume we can achieve that scale for the sake of argument.  What I think is difficult here is determining what your Free product should be such that it attracts a large number of users, but still leaves them wanting more.  If the product is feature light, you will not attract a large enough user base.  If the free product has too many features, then people will feel no need to upgrade to the paid premium version.  This is a very fine line in my opinion and one which is very hard to discern.  To make matters worse I suspect that over time as more and more gets offered in free versions, the level of features that will need to be in the Free versions will constantly increase making it harder and harder to get people to convert to the premium product.  If this turns out to be the case this business model will also collapse in time as conversion rates will constantly be in decline and will eventually approach zero.</p>
<p>I guess the bottom line here is that if you are planning to build a consumer oriented internet application,  you need to think long and hard about your business model.  Are you doing this as a hobby, in which case you may not care if it makes money or are you hoping to make a living off of this effort, in which case you need to think about this long and hard before you begin or you will fail to be successful.</p>
<p>Anyhow, as always, comments are welcome both here and on Twitter (<a title="@TechMusings" href="http://twitter.com/Techmusings">@TechMusings</a>)</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.technologymusings.com%2Ftechstartups%2Fthe-new-economics-of-technology-startups&amp;linkname=The%20New%20Economics%20of%20Technology%20Startups%3F"><img src="http://www.technologymusings.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a><img src="http://feeds.feedburner.com/~r/TechnologyMusings/~4/bU6P5kWzu2s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.technologymusings.com/techstartups/the-new-economics-of-technology-startups/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.technologymusings.com/techstartups/the-new-economics-of-technology-startups</feedburner:origLink></item>
		<item>
		<title>Here is my hammer.  Show me your screw!</title>
		<link>http://feedproxy.google.com/~r/TechnologyMusings/~3/DfJvM3GDaXg/here-is-my-hammer-show-me-your-screw</link>
		<comments>http://www.technologymusings.com/solutiondesign/here-is-my-hammer-show-me-your-screw#comments</comments>
		<pubDate>Thu, 17 Sep 2009 22:21:41 +0000</pubDate>
		<dc:creator>Paul Michaud</dc:creator>
				<category><![CDATA[Solution Design]]></category>

		<guid isPermaLink="false">http://www.technologymusings.com/?p=156</guid>
		<description><![CDATA[Well I have been traveling out of the country a lot these past few weeks so its been a while since I posted.  I will try and do better in the future.  During my travels I had a lot of interesting discussions with people about a wide range of technology issues, solutions, and technology acquisitions [...]]]></description>
			<content:encoded><![CDATA[<p>Well I have been traveling out of the country a lot these past few weeks so its been a while since I posted.  I will try and do better in the future.  During my travels I had a lot of interesting discussions with people about a wide range of technology issues, solutions, and technology acquisitions and one theme kept coming up again and again which is the misalignment of problems and solutions.  This got me thinking about a blog post Dave McClure did a while back titled &#8220;<a title="Your Solution Is Not My Problem" href="http://500hats.typepad.com/500blogs/2009/08/your-solution-is-not-my-problem.html">Your Solution Is Not My Problem</a>&#8221; .</p>
<p>In this article, Dave discusses one of his pet peeves about pitches that he and other VC&#8217;s receive.  The net of his beef is that people always start off by describing their solution without having first defined the problem that the solution is intended to solve.  Dave&#8217;s point is that if he doesn&#8217;t understand or believe in the problem,  then telling him about your solution to it, is meaningless and a waste of time.  If you really think about this, you will come to realize that this is a really profound concept that applies not just to assessing an elevator pitch, but to many other areas as well.</p>
<p>Unfortunately,  I find that too often we go around saying &#8220;Here is my hammer.  Show me your screw!&#8221;</p>
<p>I can&#8217;t tell you how many times I see people selling their solution to clients without having identified if the client even believes they have a problem never mind whether your solution fits that problem.  It drives me crazy to have to constantly play the bad guy stopping sales reps from pitching a misaligned solution to a client or explaining how a proposed or worse yet newly developed product or solution doesn&#8217;t address a client problem and thus won&#8217;t sell.  Then, if and only if, the product or solution truly does address a well articulated, painful problem to which we can associate a dollar value, do we get to examine whether the solution we propose is truly able to solve the problem better than the alternatives.  If you cannot do that then you are in big trouble and you solution will fail to be successful.</p>
<p>The process, whether you are selling a product, solution or your company needs to be as follows:<br />
1) Define the problem.  You and the target audience need to agree on what the problem to be solved is or else there is no common ground on which to have the rest of the discussion that&#8217;s needed to result in a transaction.<br />
2) Once you have agreement on the problem to be solved, then and only then can you define your solution, and you better make sure that your solution is truly aligned with the problem as defined in step 1 or you are wasting everyone&#8217;s time<br />
3) You need to convince the target audience that your solution is the best solution to the agreed problem.  Remember its more that just the software or product that is being assessed.  Your solution includes you, your credibility and the credibility and viability of your company to support, maintain and improve the solution for the time horizon the client intends to use it for.</p>
<p>So if you want to have a successful solution, you need to make sure you know its a screw,  whether its a Philips or a Robertson and that your solution is the right screw driver and not a Hammer.  Even better, convince them your solution is a powered screw driver.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.technologymusings.com%2Fsolutiondesign%2Fhere-is-my-hammer-show-me-your-screw&amp;linkname=Here%20is%20my%20hammer.%20%20Show%20me%20your%20screw%21"><img src="http://www.technologymusings.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a><img src="http://feeds.feedburner.com/~r/TechnologyMusings/~4/DfJvM3GDaXg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.technologymusings.com/solutiondesign/here-is-my-hammer-show-me-your-screw/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.technologymusings.com/solutiondesign/here-is-my-hammer-show-me-your-screw</feedburner:origLink></item>
		<item>
		<title>Consideration For The Technical Implementation of an SOA</title>
		<link>http://feedproxy.google.com/~r/TechnologyMusings/~3/biUw_rxUGMU/consideration-for-the-technical-implementation-of-an-soa</link>
		<comments>http://www.technologymusings.com/softwaredesign/consideration-for-the-technical-implementation-of-an-soa#comments</comments>
		<pubDate>Sun, 06 Sep 2009 20:35:42 +0000</pubDate>
		<dc:creator>Paul Michaud</dc:creator>
				<category><![CDATA[Service Oriented Architecture (SOA)]]></category>
		<category><![CDATA[Software Design]]></category>

		<guid isPermaLink="false">http://www.technologymusings.com/?p=152</guid>
		<description><![CDATA[I had a lot of questions from people after my last post on BPM and SOA about the layered SOA I proposed and whether it would be slow performance wise.  The answer I gave people was &#8220;It depends&#8221;.  In this post I will outline in more detail some of the considerations needed around performance when [...]]]></description>
			<content:encoded><![CDATA[<p>I had a lot of questions from people after my last post on <a title="BPM approach to SOA" href="http://www.technologymusings.com/softwaredesign/why-a-business-process-modeling-bpm-approach-to-soa-usually-fails">BPM and SOA</a> about the layered SOA I proposed and whether it would be slow performance wise.  The answer I gave people was &#8220;It depends&#8221;.  In this post I will outline in more detail some of the considerations needed around performance when implementing an SOA or any system for that matter.</p>
<p>Firstly, I find over the last 10-15 years system architects and programmers often don&#8217;t consider the performance needs of their system enough when designing it.  The process most people follow is typically:</p>
<ol>
<li>Code the system up (or at least a prototype)</li>
<li>Run a small performance benchmark</li>
<li>Size the hardware to get the desired performance</li>
</ol>
<p>To be honest this drives me crazy as it often yields a very non-performent system and if the performance is not achieved with hardware at step 3 then its too late in most cases to do anything about it without going back and severely refactoring the code or worse yet rewriting it all together.</p>
<p>Years ago this was not the case because the hardware was too slow to assume you could easily find a big enough box to ensure you achieved your performance goals.  As a result programmers pre about 1993 thought very carefully about how they designed and implemented their code with performance front of mind before even a single function got coded.  But once the bigger SMP UNIX boxes started coming out, programmers got sloppy to the point where today most of the younger programmers (those who started commercial programming post say 1997 <img src='http://www.technologymusings.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ) I come across, have not been taught how to evaluate the effects of their technology or programming decisions, when it comes to impacting performance.</p>
<p>In the old days programmers were taught that when implementing any function or procedure to consider the Order &#8220;O&#8221; of their algorithm.  We worried about whether it was Order N, N Log N, N^2 or God forbid N^3 or worse.  If we could replace an O(N^2) algorithm with one that was O(N Log N) we did.  The same mind set should be employed today as well when writing code, but more importantly it should be employed at a higher level when deciding the language, interface types, message formats, I/O pattern, network topology and database design.</p>
<p>Let me explain:</p>
<p>Consider our Layered SOA from the last post (shown again here for reference):</p>
<p><img class="aligncenter size-full wp-image-153" title="Point Of Sale" src="http://www.technologymusings.com/wp-content/uploads/2009/09/Point-Of-Sale1.JPG" alt="Point Of Sale" width="1371" height="561" /></p>
<p>This is in principle a logical architecture which we can choose to realize in a number of ways and with a range of languages, interface protocols, hardware choices, network topologies, etc.</p>
<p>So the first thing you need to consider at a high level is whether you are designing the system for throughput, latency/response time or both.  This is important, because depending on what the system needs to achieve, you should be making potentially dramatically different technology choices.  For example, if I am building an ultra high performance stock exchange system that does 5 million transactions per second and has a response time target end to end of 100 microseconds, then certain technologies are out right off the bat They include but are not limited to:</p>
<ul>
<li>I can&#8217;t use Java or c# as the languages themselves and the implementations of the base language libraries do not lend themselves to low latency.  I could use them to achieve the high throughput but I will not get to 100 microseconds as a rule (there are some ways to get close by using Java like C, pre-compiling, ensuring no garbage collection is used, etc but its a pain)</li>
<li>I can&#8217;t build it on windows at all, because of the overhead and the slow network stack</li>
<li>I can&#8217;t use persistent queue based messaging</li>
<li>No traditional database transactions in the critical path (in fact no on disk I/O at all)</li>
<li>No XML anywhere</li>
<li>And definitely no REST or SOAP Web Service Interfaces</li>
</ul>
<p>The key is that while all of these technologies can be used in a high throughput system,  they are inherently not fast from a latency or response time perspective, so if you choose to use them for a system that needs ultra fast response times, you are dead from the word go because no amount of hardware will fix it.<br />
It is important to keep in mind the time it takes for basic operations as well so that you can roughly gauge in advance what your system will be capable of.  Here is a list of rough performance measures for common operations.  Your mileage will vary based on specifics such as hardware, compiler, database, etc but the order of magnitude &#8220;O&#8221; will be about right regardless. These are approximations based on say a 2.8 GHz Xeon. Newer Nehalems, etc will do better.  Also these are for a single thread on a single core.  Most won&#8217;t benefit from multithreading.  Also keep in mind that to an extent the lower the latency or response time of the system the higher throughput it can handle per core as CPU&#8217;s free up faster, so getting this right is important for all systems.   So here they are:</p>
<ul>
<li>Network hop from desktop to remote web server                                              50-500 milliseconds</li>
<li>Persistent Message (small) per hop                                                                       15-30 milliseconds</li>
<li>Non-Persistent Queue based messaging (small) per hop                                2-5 milliseconds</li>
<li>Database Insert (Complex)                                                                                     15-30 milliseconds</li>
<li>Database Insert (Simple)                                                                                        3-10 milliseconds</li>
<li>Database Select (Complex)                                                                                    10+ milliseconds</li>
<li>Database Select (Simple)                                                                                       500 microseconds-3 milliseconds</li>
<li>Binary Write to Traditional Disk                                                                        2-5 milliseconds</li>
<li>Binary write to SSD                                                                                                25 microseconds</li>
<li>Screen Refresh                                                                                                          10-15 milliseconds</li>
<li>Web Service Call inside a Web Server (Small Payload Java or C#)         1-5 milliseconds</li>
<li>Web Service Call using GSOAP or Systinet (C no server)                           200-400 microseconds</li>
<li>Binary RPC Call (small payload Java or C#)                                                 50-100 microseconds (local machine plus network roundtrip if remote)</li>
<li>Binary message based function call (Small, C , Infiniband)                     1-2 microseconds in shared memory space, 5-10 microseconds remote through a switch</li>
</ul>
<p>Anyhow this list is by no means exhaustive.  Response times will increase with the size of the message payload, amount of XML to serialize/deserialize, complexity of the database query, etc.  What&#8217;s important to the system designer is the order of magnitude of the performance given the non-functional targets for the system.  Knowing what is possible for a given operation or technology should shape both your design and technology selection.</p>
<p>So armed with this,  lets revisit the questions I got re the performance impact of the layered approach vs a non-layered one to see what happens.  Let assume the following:</p>
<ul>
<li>We implemented the physical architecture exactly as the Logical one is laid out with each service component on a separate machine</li>
<li>We used SOAP web services for every public function call</li>
<li>Assume 1 Gigabit Ethernet networking in the data center (worst case)</li>
</ul>
<p>So lets look at the effects of layering on the Customer Service which adds an extra layer in the proposed design.</p>
<p>Lets assume we just want to retrieve a basic customer record.  In a single layer design with one database behind the service we have the following main costs:<br />
Network Hop Application to Customer Service                                                                  200-500 microseconds<br />
Find Customer Web Service Call                                                                                            1-5 milliseconds<br />
Complex query doing a join across multiple tables for name, addresses, etc           10 milliseconds<br />
Internal Logic Code execution                                                                                                Implementation and Process dependant</p>
<p>Now lets look at the layered costs:<br />
Network Hop Application to Customer Service                                                                200-500 microseconds<br />
Find Customer Web Service Call                                                                                          1-5 milliseconds<br />
Parallel Network round trips                                                                                                200-500 microseconds<br />
Second Layer Parallel Web Service Calls                                                                          1-3 milliseconds<br />
Parallel Simple Queries                                                                                                          500usec &#8211; 3 milliseconds<br />
Internal Logic Code execution                                                                                              Implementation and Process dependant</p>
<p>And I would contend that you can do better by using a binary call for internal Component to Component calls, reducing the 1-5 milliseconds down to more like 50-100 microseconds.</p>
<p>So if you add it up,  you will see that not only did the layered approach potentially improve total end to end latency but it definitely improved throughput of the system.  You should now be scratching your head wondering how that happened.  There is at least one major assumption here and that is that each Service Component had its own independent database.  This allowed the queries in the Layered approach to happen in parallel and the queries are themselves dramatically simpler with potentially no joins, etc.  If we still have one single database,  then performance will be bottlenecked there are we won&#8217;t see as much gain.  Even then at worst, if the queries take the same 10 milliseconds, we added about 1-3 milliseconds to the total end to end time.  Depending on the amount of time spent in the implementation specific code, that&#8217;s about 10-20% slower latency worst case (and still less than the cost of a single screen refresh so a user won&#8217;t notice it unless its enough to cause the total system to queue up throughput wise) but in return we got much better throughput and much more reuse.</p>
<p>Anyhow,  the point is, when designing a system and coding it,  you really should think about these types of things before you get so far down the road that you realize you have a problem only when you&#8217;re in it up to your neck and can&#8217;t easily do anything about it.</p>
<p>Feel free to fire away with the questions here or on Twitter (<a title="@TechMusings" href="http://twitter.com/techmusings">@TechMusings</a>)</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.technologymusings.com%2Fsoftwaredesign%2Fconsideration-for-the-technical-implementation-of-an-soa&amp;linkname=Consideration%20For%20The%20Technical%20Implementation%20of%20an%20SOA"><img src="http://www.technologymusings.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a><img src="http://feeds.feedburner.com/~r/TechnologyMusings/~4/biUw_rxUGMU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.technologymusings.com/softwaredesign/consideration-for-the-technical-implementation-of-an-soa/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.technologymusings.com/softwaredesign/consideration-for-the-technical-implementation-of-an-soa</feedburner:origLink></item>
		<item>
		<title>Why a Business Process Modeling (BPM) Approach to SOA Usually Fails</title>
		<link>http://feedproxy.google.com/~r/TechnologyMusings/~3/oJq63A2AvCw/why-a-business-process-modeling-bpm-approach-to-soa-usually-fails</link>
		<comments>http://www.technologymusings.com/softwaredesign/why-a-business-process-modeling-bpm-approach-to-soa-usually-fails#comments</comments>
		<pubDate>Thu, 03 Sep 2009 13:16:39 +0000</pubDate>
		<dc:creator>Paul Michaud</dc:creator>
				<category><![CDATA[Service Oriented Architecture (SOA)]]></category>
		<category><![CDATA[Software Design]]></category>

		<guid isPermaLink="false">http://www.technologymusings.com/?p=143</guid>
		<description><![CDATA[I was having a Twitter conversation with Brenda Michelson (@bmichelson) and Todd Biske (@toddbiske) about the tight coupling in peoples minds between BPM and SOA, and why I find that when people take a BPM centric approach to SOA, it usually ends up not delivering the goods.  So today&#8217;s post is about how to properly [...]]]></description>
			<content:encoded><![CDATA[<p>I was having a Twitter conversation with Brenda Michelson (@bmichelson) and Todd Biske (@toddbiske) about the tight coupling in peoples minds between BPM and SOA, and why I find that when people take a BPM centric approach to SOA, it usually ends up not delivering the goods.  So today&#8217;s post is about how to properly layer your SOA to include BPM while still yielding all the flexibility and reuse that is the promise of a well done SOA.</p>
<p>For this discussion I will build on the terminology defined in the post entitled &#8220;Anatomy of a Service Oriented Architecture&#8221;.  I will also use 2 simplified application examples to illustrate some of the pitfalls.</p>
<p>So here is our base example.  Imagine that you need to build  a very simplified Point of Sale System.  It needs to be able to log people in, update customer records and perform a transaction, including updating inventory.  For the sake of argument, I will propose it should look something like this (not 100% accurate but best I could do in 20 minutes).  Sorry the pictures are a bit hard to read.  I need to change templates to get something wider.</p>
<p><img class="aligncenter size-full wp-image-144" title="Point Of Sale" src="http://www.technologymusings.com/wp-content/uploads/2009/09/Point-Of-Sale.JPG" alt="Point Of Sale" width="1148" height="561" /></p>
<p>Furthermore, I will contend that people following a BPM centric approach to SOA are usually likely to design it like this:</p>
<p><img class="aligncenter size-full wp-image-145" title="Point Of Sale-BPM" src="http://www.technologymusings.com/wp-content/uploads/2009/09/Point-Of-Sale-BPM.JPG" alt="Point Of Sale-BPM" width="869" height="461" /></p>
<p>and that too often with SOA design we see something like this (which is really bad)</p>
<p><img class="aligncenter size-full wp-image-146" title="Point Of Sale-BAD" src="http://www.technologymusings.com/wp-content/uploads/2009/09/Point-Of-Sale-BAD.JPG" alt="Point Of Sale-BAD" width="428" height="478" /></p>
<p>So lets look at these starting from the bottom one which, sad to say represents about 75+% of &#8220;SOA&#8221; implementations I tend to see.</p>
<p><strong>Point of Sale &#8211; Badly Done Case:</strong><br />
This last example is what you get when people decide they need to be SOA, but frankly have no idea how to decompose a problem or do component based design.  It is also what you get when people decide SOA means you just slap a web service interface onto a monolithic legacy app so you can call it SOA to please senior management who have heard all the buzz, and decided they just have to have an SOA by next week to save cost, etc.  This approach buys the company absolutely nothing and in fact only slows down the performance of the existing system and certainly provides no flexibility and reuse at all.</p>
<p><strong>Point of Sale BPM Centric Case:</strong><br />
In the BPM case we will have identified our main processes:</p>
<ol>
<li>Customer Lookups, etc</li>
<li>Authenticating a User</li>
<li>Processing a Transaction</li>
</ol>
<p>We would then set about to design service interfaces which align to those and they would look something like this:</p>
<p><strong>1. Customer Service:</strong></p>
<p>1.1 Create Customer<br />
1.2 Update Customer<br />
1.3 Lookup Customer<br />
<strong>2. Authentication:</strong></p>
<p>2.1 Create User<br />
2.1 Update User<br />
2.3 Delete User<br />
2.4 Login<br />
3. <strong>Transaction:</strong></p>
<p>3.1 Record Transaction<br />
3.2 Void Transaction</p>
<p>Each of those service interfaces more often than not end up being tightly coupled to a back end database which exposes stored procedures which are also tightly aligned to those process services. Its basically a client server design behind the service interfaces, and while I drew them as 3 separate databases supporting each service,  more often then not I will see no decoupling under the covers and it will be one big database.<br />
Now, in this case we have a better design (but still not good) which shows some process orientation and some componentization. This design will offer some reuse, albeit limited.  In addition this system will suffer from some data duplication (consider Paul Michaud as User and Paul Michaud as Customer.  This design would store the records twice for Paul Michaud) which is not desirable in a good SOA.</p>
<p><strong>Point of Sale &#8211; Layered Case:</strong><br />
I will contend that this design is optimal (or at least as optimal as I could draw in 20 minutes).  It provides for the same level of BPM support,  but does not require any data duplication and allows for the maximum reuse.  I am not going to go into details on how one would come up with this design in this post but I will come back to that in another post soon.</p>
<p>To prove the point, lets now consider the need to create a second application to do simple contact management.  We would ideally like to reuse our SOA and layer the new application on top of what we already built.  I will contend that for this second application only the layered design would offer any reusable components for this second application.  I will propose the following simple design for the Contact Management Application using SOA.</p>
<p><strong>Contact Management:</strong></p>
<p><img class="aligncenter size-full wp-image-147" title="Contact Management Simple" src="http://www.technologymusings.com/wp-content/uploads/2009/09/Contact-Management-Simple.JPG" alt="Contact Management Simple" width="500" height="450" /></p>
<p>Notice that we are using the party service not a Customer Service or anything else.  A contact may be a Company, Organization, Church, Personal friend, etc.  If we had only build Customer Services as in design 2 &amp; 3, which is what the BPM approach would have identified we would not have had a foundation on which to build this second application (unless that second application was very similar to the first one).</p>
<p>Anyhow,  the point is that by focusing on the process we usually fail to identify the necessary Foundation Services or the Fundamental Data Objects on which the SOA should be operating.  I will elaborate on this further in a later post.</p>
<p>As always feel free to leave comments here or on Twitter.com (@techmusings).</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.technologymusings.com%2Fsoftwaredesign%2Fwhy-a-business-process-modeling-bpm-approach-to-soa-usually-fails&amp;linkname=Why%20a%20Business%20Process%20Modeling%20%28BPM%29%20Approach%20to%20SOA%20Usually%20Fails"><img src="http://www.technologymusings.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a><img src="http://feeds.feedburner.com/~r/TechnologyMusings/~4/oJq63A2AvCw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.technologymusings.com/softwaredesign/why-a-business-process-modeling-bpm-approach-to-soa-usually-fails/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.technologymusings.com/softwaredesign/why-a-business-process-modeling-bpm-approach-to-soa-usually-fails</feedburner:origLink></item>
		<item>
		<title>Enterprise 2.0 Needs To Stop Being So Naive</title>
		<link>http://feedproxy.google.com/~r/TechnologyMusings/~3/6mBP5-DckdA/enterprise-2-0-needs-to-stop-being-so-naive</link>
		<comments>http://www.technologymusings.com/techstartups/enterprise-2-0/enterprise-2-0-needs-to-stop-being-so-naive#comments</comments>
		<pubDate>Tue, 01 Sep 2009 03:38:21 +0000</pubDate>
		<dc:creator>Paul Michaud</dc:creator>
				<category><![CDATA[Enterprise 2.0]]></category>

		<guid isPermaLink="false">http://www.technologymusings.com/?p=138</guid>
		<description><![CDATA[You know I really struggle to get excited about Enterprise 2.0.  Not because I don&#8217;t think IT needs to undergo change, but because I feel that Enterprise 2.0 as we seem to be defining it, and covering it in the press and the blogosphere just doesn&#8217;t seem to be solving the key issues that either [...]]]></description>
			<content:encoded><![CDATA[<p>You know I really struggle to get excited about Enterprise 2.0.  Not because I don&#8217;t think IT needs to undergo change, but because I feel that Enterprise 2.0 as we seem to be defining it, and covering it in the press and the blogosphere just doesn&#8217;t seem to be solving the key issues that either IT or the business units face. Let me explain why I have a problem with this.</p>
<p>I deal with CXO level execs all the time in my job and the ones I deal with all seem to have similar issues when it comes to IT Systems for the most part. While each firm and/or project will have some unique issues, they generally tend to fall into the following buckets:</p>
<ul>
<li>Reduce cost in the IT organization</li>
<li>Improve efficiency in the IT organization (measured as cost reduction, responsiveness, improved time to market for projects, etc)</li>
<li>Improve user satisfaction (which usually happens if you get the first two right)</li>
</ul>
<p>If you think about it,  pretty much everything we do in IT boils down to one of these.  Now clearly there are a whole lot of sub-bullets to each of those buckets some of which are listed here:</p>
<ul>
<li>How do you fit more servers into the existing data centers</li>
<li>How do you improve server utilization</li>
<li>How do you consolidate legacy applications</li>
<li>How do you get new applications to market faster</li>
<li>How do you improve the usability and user experience of new and existing applications</li>
<li>How do you do all of this with a leaner and more productive organization</li>
</ul>
<p>and most importantly (and in my opinion the one that if not managed correctly is the single biggest cause of failure in major IT projects) how do I get my existing staff which has a personal vested interest in maintaining the status quo to execute the vision efficiently.  Because, lets face it,  radical change in the existing IT organization along the lines of reducing costs and improving efficiency is going to result is potentially dramatically reduced head count one way or another.  By that I don&#8217;t just mean offshoring IT, but literally a permanent reduction in the numbers of IT staff across the board (on, off or near shore).</p>
<p>So, the questions one needs to pose when evaluating Enterprise 2.0 (or any other technology or movement, and lets face it Enterprise 2.0 is more movement than tech) are as follows:</p>
<p>1) What is the compelling reason to act, or significant problem, for the target users (in this case the enterprise itself)?<br />
2) How is the proposed technology or solution going to solve that problem better than the alternatives?</p>
<p>Now I don&#8217;t think there is much disagreement around #1 in general.  I think the Enterprise 2.0 movement and I see eye to eye here on the problem and the compelling reason to act (which we defined at the top of the article re cost, efficiency and satisfaction).</p>
<p>Where I have real issue is with #2.</p>
<p>In general I am going to boil this down to my belief that the suggestions of the Enterprise 2.0 movement are in general naive when it comes to how to apply both technology and technique to large enterprises.  Lets look at some examples:</p>
<p>1)    I had a customer who has 500 applications running in part of their business.  The systems had a lot of overlapping functionality and it took 200 people full time just manually fixing errors in data replication from the nightly ETL processes.  I cannot see how cloud, mashups, social networking technology and the like would have addressed this issue.<br />
2)  Recently I was doing a design for a client and we explained to them that the only way to hit their target go live was to use Agile methods and cut functionality to deliver a minimum viable product.  The client nodded and agreed. Then after we spent time cutting down the 150+ use cases to the bare minimum, the clients Business Analysts committee went through every line item we cut and demanded it back because they were apparently all super critical in their view (not one item was allowed to be cut)<br />
3)  A while ago we did a complete SOA design for a client.  The business was excited, the budget was approved, etc and we were ready to start executing on the build.  Then IT middle management got involved.  Their people decided that if they supported this project then some of their existing pet projects would be shut down and the improvement in efficiency would mean job losses in IT.  They didn&#8217;t outright rebel, they just passively resisted, stalled, etc until the business gave up and the project died.  As a result it never got built and the bank ended up losing Billions when the credit markets collapsed and those same IT people got fired anyhow.  This system had been to manage risk more effectively in the banks credit portfolio, which the business knew in 2004 was an issue, and would have been online in 2006.  We actually proposed to run this on a cloud environment at that time and the IT people refused to allow it even though the business wanted it.</p>
<p>These are but a few examples I have seen just in the past few years.  I could go on all day with items like this.  The bottom line is this, none of this would be helped by Social Networking, Mashups, Cloud Computing, Enterprise Search, etc. and these are the kinds of problems big enterprise IT shops face every day.  When we talk Enterprise 2.0 I can&#8217;t help feeling all the discussion is really aimed at the SMB sector and not the Fortune 500 types.  That Enterprise 2.0 it is focused solely on the GUI side of the Applications, which frankly is almost never the problem.</p>
<p>From my perspective, I think the Enterprise 2.0 crowd needs to come down to earth and get a large dose of reality.  The world of Big Enterprise IT is not the same as a tech startup in the valley.  Not every application is about Web and related tools, collaboration, mashups, etc.  The apps where that stuff applies are frankly trivial and if that was the state of the world app complexity wise we wouldn&#8217;t have the issues we have and we wouldn&#8217;t even be talking about Enterprise 2.0.  The reality is real Enterprises have issues with Organizational Structure and that same structure fights changes.  I can&#8217;t tell you how many times I have seen attempts to redesign IT Org&#8217;s go down in flames or the result be just as bad as where they started.  They have issues with tons of legacy apps that continue to need to be supported, integrated, updated,etc.  Think Y2K people.  Those Cobol apps are still going strong (as much as the thought of that gives me a rash) and they cannot support mashups or social computing, or be run in a cloud. How do you deal with putting Paul Michaud&#8217;s contact information into 500-1000 applications which are scattered around the firm globally and no two of which store and address or a middle name the same.  These are boring mundane problems bu they are the real issues that keep CIO&#8217;s awake at night,  not whether their employees can change the color of the GUI background on the latest app or have better internal chat facilities, or Tweet from their desk.</p>
<p>Now don&#8217;t get me wrong, I am the biggest proponent of wholesale change being needed in both the technology and organization within today&#8217;s Enterprises.  I am a huge fan of new RAD tools, SOA, SaaS, Cloud, etc.  My point is simply that we need to wake up and not be so naive about Enterprise 2.0.  Changing big enterprises with 100&#8242;s of thousands of employees, is not trivial and just having lots of conferences about it, articles, etc and even getting CIO&#8217;s excited about it will not get it done.  Its the rare CIO who can drive through the kinds of wholesale changes needed to make an Enterprise truly Enterprise 2.0.  Remember it not sufficient to just use E 2.0 approaches and technologies for a single departmental application we need to do it across the board.  And remember, this is like the old saying,  we need to change the tires on this formula 1 race car while it continues going around the track.  We can&#8217;t shut the place down and start from scratch.   Managing the change process is the biggest challenge these efforts face.</p>
<p>Please feel free to comment either here on the blog or reach out to me on Twitter at <a title="@techmusings" href="http://twitter.com/techmusings">@techmusings</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.technologymusings.com%2Ftechstartups%2Fenterprise-2-0%2Fenterprise-2-0-needs-to-stop-being-so-naive&amp;linkname=Enterprise%202.0%20Needs%20To%20Stop%20Being%20So%20Naive"><img src="http://www.technologymusings.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a><img src="http://feeds.feedburner.com/~r/TechnologyMusings/~4/6mBP5-DckdA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.technologymusings.com/techstartups/enterprise-2-0/enterprise-2-0-needs-to-stop-being-so-naive/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.technologymusings.com/techstartups/enterprise-2-0/enterprise-2-0-needs-to-stop-being-so-naive</feedburner:origLink></item>
		<item>
		<title>The Need For Speed</title>
		<link>http://feedproxy.google.com/~r/TechnologyMusings/~3/GHrBw2CDZaI/the-need-for-speed</link>
		<comments>http://www.technologymusings.com/softwaredesign/highperformancecomputing/the-need-for-speed#comments</comments>
		<pubDate>Wed, 26 Aug 2009 19:12:58 +0000</pubDate>
		<dc:creator>Paul Michaud</dc:creator>
				<category><![CDATA[High Performance Computing]]></category>

		<guid isPermaLink="false">http://www.technologymusings.com/?p=131</guid>
		<description><![CDATA[Yesterday was a busy day for me.  It started at 4:30 AM when I had to do an interview with a reporter from Bloomberg who covers the European Stock Exchanges.  There was then coverage of the goings on with some of my clients in the Wall Street Journal, Financial Times, and many other papers, which [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday was a busy day for me.  It started at 4:30 AM when I had to do an interview with a reporter from Bloomberg who covers the European Stock Exchanges.  There was then coverage of the goings on with some of my clients in the Wall Street Journal, Financial Times, and many other papers, which kept me fielding questions most of the day (and I have more reporter interviews today as well).  This interest in the exchanges spilled over onto Twitter as a result of people commenting on the coverage on CNBC.  As a result of that,  I thought I would talk a bit about the trends and challenges faced by the World&#8217;s Investment Banks, Hedge Funds and Exchanges as they grapple with their Need For Speed as their seemed to be interest by many of my followers both here and on Twitter.</p>
<p>So what&#8217;s driving the system designs at today Financial Market firms.  Well, amongst other factors such as cost reduction, operational efficiency, and the other usual IT issues, is an ever increasing need for speed.  Let me give you some background.</p>
<ul>
<li>If you&#8217;re Twitter, you handle about 6 million Tweets per day and peak out at about 200 or so Tweets per second based on what info I have seen.</li>
<li>If your a Stock Exchange 10 years ago, you did a peak of a few thousand transactions per second</li>
<li>A big credit card processor handles a few tens of thousands of transactions per second at peak</li>
<li>Today&#8217;s Stock exchanges are building systems capable of handling millions of transactions and quotes per second</li>
</ul>
<p>Not only are the throughput requirements exploding, but the response times or latency tolerance is approaching Zero at an alarming rate.  Again for comparison:</p>
<ul>
<li>A Telecom system handles a few hundred thousand calls per second but can take a few seconds until the first ring without people complaining</li>
<li>Twitter, which is considered &#8220;real time&#8221; also takes a few seconds to acknowledge and publish a Tweet (at best)</li>
<li>A credit card processor also can be a few seconds to respond</li>
<li>5 Years ago the NYSE would take about 40 milliseconds to process a trade</li>
<li>Today cutting edge exchanges are building systems which can process a trade in under 100 microseconds (yes that&#8217;s micro, not milli and definitely not seconds).</li>
</ul>
<p>On the flip side,  Banks and Hedge Funds with their algorithmic trading systems are sending trades into these exchanges at volumes which for stocks is increasing at over 50% per year and for options at well over 100% per year, so these system need to scale.  In addition those same firms are monitoring the response times of each exchange and if they see one being slower than another, the trade gets routed to the faster exchange wherever possible.  The drive toward zero latency is causing a lot of traditional exchanges who had legacy systems such as the New York Stock Exchange, London Stock Exchange and Deutsche Boerse (three of the biggest), to lose market share and as a result they are all undergoing radical redesigns and deploying new cutting edge systems.</p>
<p>In addition to all of this speed,  keep in mind that the reliability levels on these systems are ultra high as well.  We design for 99.9999% uptime with absolutely zero loss of messages.  Its that need for high reliability levels coupled with the speed that makes building these systems such a challenge.  Making things fast without being reliable is easy. Making things reliable without being fast is also easy.  Bringing them both together is very difficult and requires radical new system designs.</p>
<p>Just think of some of the challenges you face.</p>
<ul>
<li>How do you log transactions to a database when a physical hard drive takes 2 milliseconds to do a write</li>
<li>You can&#8217;t do database transactions in the critical transaction path because any database operations kill you for throughput and latency</li>
<li>You need to be highly horizontally scalable to handle the constant growth in transaction volume</li>
<li>You need to be running redundant hot/hot configurations for failover because the system reliability target is higher than that of any single component, components will fail,  but the system must stay up and not lose a beat</li>
<li>After 9/11 the Disaster Recovery mechanism has to keep the system up and running even during and after a 9/11 type event with no loss of messages or down time</li>
<li>How do you record all the trades.  A trade record is typically pretty small, between 120 and 400 bytes, not much bigger than a Tweet on Twitter.  People are always seem amazed that Twitter needs to store a few 10&#8242;s of GB per day.  Well with a modern exchange system we log about 1.2 TB per day and we need to keep 5 years of that searchable on main storage without going to tape, etc.</li>
</ul>
<p>In these systems every microsecond counts.  As such even network path length is measurable and directly impacts trading profits for banks and hedge funds.  As a result firms will move their trading systems directly into Collocation facilities offered by the exchanges so as to have the absolute minimum latency as a result of the network itself.  Networks in these facilities are going from 1GigE networks to 40 Gig Infiniband and/or 10GigE (which is slower than IB for both throughput and latency).  The NYSE is putting in 100GB Fibre Optic Switches for their WAN.  They use ultra high speed messaging software on top of that network, solid state disks with SAN backups, the fastest processors with the highest I/O.  Every line of code needs to be extra tight, with Matching Engines in the exchanges typically being single threaded and using an MPP design instead of SMP because even the cost of a thread context switch is measurable and impacts profits.</p>
<p>Its a very tough set of criteria to meet and poses some very unique challenges.  I&#8217;m proud to say that currently the fastest of the new systems coming to market are ones I helped design and using technology I helped IBM develop, so I guess we&#8217;re doing something right.</p>
<p>If people have any questions on this or any of my other posts, please use the comments or reach me on Twitter at <a title="@TechMusings" href="http://twitter.com/techmusings">twitter.com/techmusings</a> (@techmusings)</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.technologymusings.com%2Fsoftwaredesign%2Fhighperformancecomputing%2Fthe-need-for-speed&amp;linkname=The%20Need%20For%20Speed"><img src="http://www.technologymusings.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a><img src="http://feeds.feedburner.com/~r/TechnologyMusings/~4/GHrBw2CDZaI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.technologymusings.com/softwaredesign/highperformancecomputing/the-need-for-speed/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.technologymusings.com/softwaredesign/highperformancecomputing/the-need-for-speed</feedburner:origLink></item>
		<item>
		<title>“At Age 35, Mozart Was Dead”</title>
		<link>http://feedproxy.google.com/~r/TechnologyMusings/~3/vyrXSh-iV0k/at-age-35-mozart-was-dead</link>
		<comments>http://www.technologymusings.com/techstartups/at-age-35-mozart-was-dead#comments</comments>
		<pubDate>Mon, 24 Aug 2009 07:35:44 +0000</pubDate>
		<dc:creator>Paul Michaud</dc:creator>
				<category><![CDATA[Technology Startups]]></category>

		<guid isPermaLink="false">http://www.technologymusings.com/?p=124</guid>
		<description><![CDATA[The title of this blog is a quote from Mike Moritz of Sequoia Capital during a Fireside Chat with Guy Kawasaki of Garage Technologies, Paul Graham of YCombinator and Mike at the Revenue Bootcamp held last July.  If your an entrepreneur and haven&#8217;t watched the video for this, I encourage you to watch it, as [...]]]></description>
			<content:encoded><![CDATA[<p>The title of this blog is a quote from Mike Moritz of Sequoia Capital during a Fireside Chat with Guy Kawasaki of Garage Technologies, Paul Graham of YCombinator and Mike at the Revenue Bootcamp held last July.  If your an entrepreneur and haven&#8217;t watched the video for this, I encourage you to watch it, as well some of the other sessions from the Bootcamp.  They are available online <a title="Fireside Chat at Revenue Bootcamp" href="http://www.building43.com/videos/2009/08/07/fireside-chat-money-and-passion/">here</a>.  I had the opportunity this weekend to watch a number of them and they were quite enlightening and this probably won&#8217;t be the last blog article I write that was spurred by them.</p>
<p>Anyhow the discussion was mostly around how Paul, Mike and the VC industry as a whole view the investment process for startups, etc and there was some great insight and advice provided by Mike, Paul and Guy over the course of the session, which I personally found very interesting.  About two thirds of the way into the session there was a question about the profile of a typical entrepreneur they were funding and they were asked specifically if it was mostly young grads fresh out of college.  Paul answered first, and said that while this was more common, they fund the full age spectrum.</p>
<p>When it came to Mike to answer, he jokingly said as his answer &#8220;By age 35, Mozart was dead.&#8221;  This of course offended most of the older entrepreneurs in the room, and has resulted in this quote being circulated all over twitter and other social media where startups are discussed.  Now in Mike&#8217;s defense,  he then went on to say much as Paul had, that while the young entrepreneur under 35 was more common today, that they have funded firms spanning the spectrum including people who were grandparents.  I also personally have no doubt that someone of Mike&#8217;s reputation and ability would never let a few grey hairs stop him from investing in a good idea.</p>
<p>Nevertheless, the comment struck a particular cord with me.  Not just because, at age 40 and with 25 years of commercial systems development under my belt, I fall into the Dead bucket, but for two other reasons:</p>
<ol>
<li>This comment is a complete 180 from the advice and belief of the Venture Capitalists 20 years ago when I launched my first company</li>
<li>Because I think the comment, although it was in jest, reflects a subtle truth and a bias in the current startup community, which I am not sure I agree with.</li>
</ol>
<p>So at this point your probably thinking to yourself, why am I reading this?  Paul&#8217;s a technology geek not a startup expert or VC, etc.  He doesn&#8217;t know anything about this stuff.  Well you might be surprised. In fact, people always think of me as a highly technical person, and I guess I am at that, but to be honest I always tell people I am a business person first who just happens to know a hell of a lot about technology.</p>
<p>To understand why this comment struck me the way it did, it is necessary to provide you with a rare but mind numbingly dull view into the early career of Paul Michaud.  In my life I have started and ran one profitable technology company, 2 web sites, and pitched for venture capital for 3 completely different businesses (failed the first, declined the capital the second and missed the window the third time in 2002, but did get job offers to work for some portfolio companies).  I have also been on the other side of things in my career in Investment Banking.  I have advised on M&amp;A&#8217;s, private equity investments, and general stock acquisitions of technology companies for hedge funds, corporate raiders, Wall Street Investment Banks and large asset managers.</p>
<p><strong>Why I Think VC Attitude Has Done A 180</strong><br />
If this was a movie, we would now fade into the memory shot going way back&#8230;back&#8230;back&#8230;</p>
<p>Like most entrepreneurs, I was what you would call a highly driven individual even at an early age.  By age 11 I had been invited by the Montreal Canadians to come and play hockey in front of some scouts in the Montreal Forum.  By 14, I was quarterback of the football team, captain of the track team and ranked 7th in the country in national mathematics competition (The combination Jock and Nerd made high school, shall we say, interesting).  I was also a member of a small Aeronautical Design Team building a prototype amphibious push prop airplane for which I wrote code on DEC PDP-11&#8242;s to simulate drag envelopes, stress on spars, etc.  By 15, I had been asked by a Canadian Investment Bank to write programs to try and automate what some of their investment managers did manually for trading S&amp;P 500 Equities and Equity Options. I continued to write these types of programs for the next 12 years. At 16, I won first place in all five categories I was entered in at the McMaster University Science and Engineering Competition and was the youngest member of my starting Engineering Class by two years.  By age 18, I had dropped out to pursue my first Internet Startup.</p>
<p>So if today&#8217;s startups are Web 2.0 companies and the late 90&#8242;s was Web 1.0,  I guess we could call my first company a Web 0.1 Alpha company, except that when I started it in late 1988, the term World Wide Web and Marc Andreessen&#8217;s Netscape were still more than 5 years away. Anyhow,  the company was an information brokerage which specialized in providing access to electronic information to investors, banks and senior executives for a wide array of uses.  For those who have not heard the term Information Brokerage (which is probably just about everyone) think of a cross between a Yahoo like portal and Google with a lot of manual process in the middle.  Even in those days, we had access to 3500 electronic sources of business related data of all kinds, from news to financials, legal, etc.  The data was very expensive and was hard to find and access.  In 1989, I worked with Charles Schwab to design some of the first information packages ever provided to investors by discount brokerages and learned my first hard business lesson from them about how to get completely screwed if you don&#8217;t cover your legal ass.  By late 1989, we had gotten some traction and started to pursue funding so that we could accelerate growth.</p>
<p>This is where I am finally getting to why Mike&#8217;s comment struck me as a 180 from what VC&#8217;s were saying 20 years ago.  In 1989 I designed software to allow us to automate searching those 3500 computer systems, so that we could remove the manual intervention in the Information Brokerage business, thus allow us to cut cost and increase volume.  Now remember this is still 5 years before Netscape and well before Google or Yahoo were a twinkle in anyone&#8217;s eye.  In addition we had offers of multi-year contracts on the table from various firms including the predecessor to TD Ameritrade.  Armed with this, we went looking for funding &#8230;&#8230; and failed.  Now there were a couple of reasons for that failure, including:</p>
<ol>
<li>There was a recession going on in 1990-1992 so timing sucked</li>
<li>We were a new idea that people didn&#8217;t really understand and couldn&#8217;t evaluate and we were about 5-6 years too early, so timing sucked again</li>
</ol>
<p><strong>But more importantly, we got told time and time again by VC&#8217;s and bankers to go hire ourselves a 55 year old front man, because no one was ever going to fund a couple of 21 year old kids.</strong></p>
<p>So now, here we are 20 years later and Mike&#8217;s comment (and the general view of the industry) would imply that a 55 year old should go get himself a couple of 21 year old&#8217;s to front him.  It just struck me as ironic, how the world of the startup has changed so dramatically over that time.<br />
<strong><br />
Why Mike&#8217;s Comment Makes Me Worry About The State Of The Industry</strong></p>
<p>So the irony aside,  Mike&#8217;s comment also got me thinking about the state of the startup industry, the perceptions of the average VC and what Mike really meant.  Lets start with the latter.</p>
<p>What I think Mike really meant by his comment is analogous to a comment I once had from an early mentor (the person who ran that Aeronautical Design Team).  He told me once that if I was ever going to accomplish something great in my life, that if I hadn&#8217;t accomplished it by age 25, I likely never would.  I almost made it.</p>
<p>The reality is, that at a young age,  you are usually more driven, more creative, and have new fresh ideas compared to the average Dead person (over 35).  That said, this is a general, statistical statement.  It is not a hard fast truth.  The reality is that while there is a higher percentage of driven, creative, entrepreneurialy inclined 25 year olds, there are also many who are just as driven, creative and entrepreneurial in the Dead Zone, just not as many as a percentage.  In addition, us Dead people are more hampered by family, commitments and life in general and are often unable to take the plunge into a startup.</p>
<p>I think that is what Mike meant.  Not that a talented person with the right idea, drive, creativity, etc in the over 35 bracket couldn&#8217;t get funded, but more that it is unlikely that someone in that bracket is going to pitch a great idea (or any idea for that matter) to a VC in the first place.  It does happen, but I suspect its more rare.</p>
<p>What concerns me more is the fact that I think Mike&#8217;s comment does represent a general bias, that young entrepreneurs are more likely to succeed than others with more life experience, and I am not sure I agree with that.  If I looked back at that 18 year old Paul Michaud, what we had then and where I could have taken it.  If I knew then what I know now (god I do sound like an old fart don&#8217;t I), I truly believe the story would have been very different.  For one,  I would have changed the business model we were using at the time,  bootstrapped the search engine and continued to organically grow the business, instead of getting discouraged and shutting down (we were actually making money but shut down anyhow because we couldn&#8217;t grow it the way we wanted to without the capital).  Imagine it we would have been there before Google or Yahoo and we were profitable already by 1990.</p>
<p>I guess if I look at myself as representative of those in the Dead Pool, with that entrepreneurial spark (and maybe I&#8217;m not typical), I would argue the following:</p>
<ul>
<li>If you had the spark at 25, you likely have just as much entrepreneurial passion today as you did years ago, circumstance just might not allow you to act on it</li>
<li>The experiences, both successes and moreso the failures, have likely made the older entrepreneur a wiser founder than the 25 year old.  Maybe a little more cautious, maybe not, but almost always wiser and more street smart.</li>
</ul>
<p>I could be wrong, but if I was the VC, given two entrepreneurs with equal passion, drive, creativity, technical skills and an equally good idea,  I would fund the older entrepreneur almost every time.</p>
<p>I look forward to your comments.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.technologymusings.com%2Ftechstartups%2Fat-age-35-mozart-was-dead&amp;linkname=%26%238220%3BAt%20Age%2035%2C%20Mozart%20Was%20Dead%26%238221%3B"><img src="http://www.technologymusings.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a><img src="http://feeds.feedburner.com/~r/TechnologyMusings/~4/vyrXSh-iV0k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.technologymusings.com/techstartups/at-age-35-mozart-was-dead/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.technologymusings.com/techstartups/at-age-35-mozart-was-dead</feedburner:origLink></item>
		<item>
		<title>How To Build an SOA Based, High Performance, Scalable and Reliable Twitter on Steroids</title>
		<link>http://feedproxy.google.com/~r/TechnologyMusings/~3/gyKn61SPS3w/how-to-build-an-soa-based-high-performance-scalable-and-reliable-twitter-on-steroids</link>
		<comments>http://www.technologymusings.com/softwaredesign/how-to-build-an-soa-based-high-performance-scalable-and-reliable-twitter-on-steroids#comments</comments>
		<pubDate>Thu, 20 Aug 2009 17:30:07 +0000</pubDate>
		<dc:creator>Paul Michaud</dc:creator>
				<category><![CDATA[High Availability (HA)]]></category>
		<category><![CDATA[Service Oriented Architecture (SOA)]]></category>
		<category><![CDATA[Software Design]]></category>

		<guid isPermaLink="false">http://www.technologymusings.com/?p=109</guid>
		<description><![CDATA[Over the past few days I have been having some issues with my Twitter account.  Beyond the well known pauses in the service, outages, etc there are some less known but more annoying problems with twitter search.  It turns out that many accounts don&#8217;t show up in search at all.  Therefore, if you are one [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past few days I have been having some issues with my Twitter account.  Beyond the well known pauses in the service, outages, etc there are some less known but more annoying problems with twitter search.  It turns out that many accounts don&#8217;t show up in search at all.  Therefore, if you are one of those lucky accounts, no one other than direct followers can see your tweets and no one can find you or any of your Tweets.  This makes the accounts pretty useless.  It also turns out its been a know issue with no fix for over a year other than to create a new account and tweet with that.  Well it turns out that my account was one such account which needless to say was very annoying and cost me 2 days of my time trying to figure out a viable work around.  As a result, Twitter earned the place of honor in today&#8217;s blog.</p>
<p>Now in the defense of Evan Williams, Biz Stone and the rest of the gang at Twitter, they find themselves in the enviable position of having a hugely successful product on their hands which has no doubt outpaced their wildest growth projections over the past few years and thus put stress on their design and everything else.  I on the other hand have the advantage of 20/20 hindsight and thus in this blog we can design Twitter on Steroids from scratch using technology that was not even available when Twitter was conceived.  I know the Team at twitter is busting their butts to keep up with their phenomenal growth and my hats of to them for their success.</p>
<p>So for those who have not read my Bio, I have been designing and building ultra high performance systems for the World&#8217;s Largest Banks and Stock Exchanges for about 25 years.  Just this June a couple of colleagues of mine and I designed and ran a stock exchange prototype system capable of 4.5 million transaction per second with round trip response time as low as 15 microseconds (yes that&#8217;s microseconds for multiple network hops, I/O, parsing, matching and the whole shebang, everything the NYSE does to tell you that you just bought 100 shares of IBM).  We also showed this system can scale linearly for throughput by adding hardware, was fully fault tolerant and could do dynamic load balancing if traffic at the exchange spiked.  In this design, I will be leveraging the lessons learned over that 25 years and the technologies used for the system above.</p>
<p>So lets dive in.</p>
<p><strong>Requirements:</strong><br />
So what does our Twitter on Steroids need to do.  Here is my overly simplistic list of requirements (I am only going to deal with the big ones):</p>
<p><strong>Functional Requirements:</strong><br />
The system shall allow users to create accounts.<br />
The system must provide a means for users to submit Tweets<br />
The System must persist those Tweets<br />
Users shall be able to follow other users Tweets<br />
The system shall provide a mechanism to search Tweets</p>
<p><strong>Non-Functional Requirements:</strong><br />
The system shall be highly responsive<br />
The system shall maintain response times even under load<br />
The system shall be highly scalable<br />
The system shall be highly available with 99.999% or better uptime (its doable)</p>
<p><strong>Where Do We Start?</strong></p>
<p>First some design principles:</p>
<ul>
<li>We will use a componentized SOA design</li>
<li>The Twitter Web Site will use the same Service API that is exposed publicly</li>
<li>The System will use a Hot/Hot High Availability Model based on component replication for reliability</li>
<li>All Service Components will be implemented in a manner that ensure deterministic behaviour (Easiest way to do that, but not the only way, is to make it single threaded which is what we do for most exchange systems.  Thread context switches are expensive at speed and multithreading can result in coherency issues which Twitter seems to be suffering from based on the comments on their support site)</li>
<li>To the maximum extent possible all I/O, remote Service calls, etc will be asynchronous</li>
<li>All internal communication will be message based using multicast for efficiency</li>
</ul>
<p><strong>About the Technology</strong><br />
I don&#8217;t normally like to reference specific technologies in my blog but in this case I am going to as there are a couple which provide unique capabilities to implement this system design, and which people are probably not familiar with.  Apologies in advance for the product plug.  They are as follows:</p>
<p><strong>Websphere MQ Low Latency Messaging (LLM):</strong><br />
LLM is a unique high performance messaging product that has some purpose built capabilities specifically designed for ultra high throughput, low latency, transactional systems.  For one it&#8217;s the fastest messaging available on the market, capable of throughput in excess of 9 million Tweets per second per connection, and latency application to application across a switch as low as 3 microseconds with Infiniband Networking and about 12 microseconds with 10Gbe.<br />
More important than its speed for this type of application though is its unique high availability mechanisms.  LLM provides a unique mechanism that allows me to deliver messages to a primary and secondary Service Component at speed, while maintaining total order across all receivers.  In addition it provides unique mechanisms to perform failure detection, failover, state synchronization and component replication all at speed.  In exchange systems,  LLM has detected and failed over from a primary system to a backup in as little as 7 milliseconds, with no loss of messages or duplication and no system level down time even though a component failed.</p>
<p><strong>Datapower XM70:</strong><br />
This is an appliance that was originally designed for Web Service and Web Edge Security.  This model is specifically enabled to work with LLM above.  It will allow us to expose REST or SOAP based services and convert them to message based for internal consumption.  The XM70 can also do content based routing, parsing and transformation for us on the fly at wire speed taking load of the back end Service Components.</p>
<p><strong>XIV Storage:</strong><br />
This is a low cost storage appliance that has great throughput and reliability.  I have been able to sustain write speeds with this in excess of 5.5 Gb per second per intel box writing to it.</p>
<p>The rest we can use pretty commodity stuff.  The disk above can also be easily swapped for your preferred flavour,  this one just has great price performance.</p>
<p><strong>What Does Twitter on Steroids Look Like?</strong></p>
<p>My version of Twitter on Steroids would look like this (except I didn&#8217;t have room on the drawing to add the Account Management Service Componets or the Follower Service Components, so just imagine they are in the diagram and follow the same pattern <img src='http://www.technologymusings.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ):</p>
<div id="attachment_111" class="wp-caption aligncenter" style="width: 631px"><img class="size-full wp-image-111" title="Twitter On Steroids" src="http://www.technologymusings.com/wp-content/uploads/2009/08/TwitterOnSteroids.jpg" alt="Twitter on Steroids" width="621" height="839" /><p class="wp-caption-text">Twitter on Steroids</p></div>
<p>So let&#8217;s walk through this diagram.</p>
<ol>
<li>Firstly we are using Big IP to load balance across the Web Servers and also across the Datapower appliances.  This is pretty standard Web design no surprises.  The BIG IP could also do this to a remote backup site as well if configured correctly, where we could twin this setup for failover or load balancing.  Or we could put the Instance 2&#8242;s in the second site.  It just depends on the SLA&#8217;s you are trying to meet.  The logical design and coding would not change regardless.</li>
<li>The Web Servers are making calls through the Datapower to the back end Services Components just like the external API calls.  This ensures consistent behaviour and reduces the need to test and maintain two API&#8217;s</li>
<li>Datapower is converting all REST and SOAP payload into messages on top of LLM</li>
<li>This is important.  Datapower is multicasting all messages out of the appliance using LLM&#8217;s high availability mechanisms.  It is also putting those messages on different topics based on the content of the message.  I am suggesting partitioning the incoming Tweets based on the first few letters of the Tweeter&#8217;s ID.  The first 2 letters will do to start giving us 676 topics to work with for load balancing.  We can add more topics for finer partitioning later if need be.</li>
<li>LLM is delivering the messages throughout the systems and also providing all the reliability.  It handles NAK&#8217;s and ACK&#8217;s automatically, retransmissions, etc to asssure messages get where they need to be without any additional work by the application.</li>
<li>Tweets are first picked up by the Tweet Capture Service Components.  Each partition subscribes to and handles a subset of the topics in order to provide load balancing.  It is possible to add an external system which monitors load per topic and dynamically changes the subscriptions to adjust load.  Also by partitioning, we can use multiple databases in parallel thus eliminating the databases as a bottleneck, throughput wise.</li>
<li>I/O, in the Tweet Capture Service Components, is Asynchronous providing very fast response times.  We can batch write the tweets for higher throughput and because we do compoent replication using LLM,  if the primary Instance 1 fails, Instance 2 just takes over where it left off with no loss of messages or duplication.</li>
<li>The Tweet Capture rebroadcasts (multicast) all messages to the Tweet Indexing Service Component.  These are also twinned for High Availability and Partitioned for Scalability.  The indexing component does as the name says and indexes into the tweets and stores a record in a database.  I would recommend an in memory database be used with a traditional database behind it, with bi-directional synchronization of current data between the two.  SolidDB/DB2 is one pair or possibly TimesTen/Oracle is another (but the latter pair is slower).  I/O would be batched and asynchronous again for speed.</li>
<li>When a search request comes in, it would be routed by Datapower to the Search Service Components, which would then query the Indexing Service and receive back the matching records for each key word in the search.  A fast parallel algorithm would then be used to handle any &#8220;or&#8221; or &#8220;and&#8221; statements in the search</li>
<li>These results would be returned to the caller via the datapower box as a response to the original service call.</li>
</ol>
<p><strong>So how fast would this be and how big could it scale?</strong></p>
<p>Well this is just a guess based on my experience and without ever having looked at any specific search algorithms that might be used by Twitter.  Lets assume we write everything in C behind the Datapower for speed and stability and that we use 1Gbe for networking which is the slowest at about 27 microseconds per hop.  All latencies are round trip to and from the Datapower Box.</p>
<ol>
<li>I think for Tweet Capture, we could achieve round trip latency per tweet of about 50-60 microseconds with throughput per partition somewhere in the 100,000-200,000 thousand Tweets per second range if using a fast database and some solid state disk for the database log files, etc.  Even higher if a custom binary file system is used (15,000,000+ Tweets per second which have done with stock orders with similar sized messages)</li>
<li>Similar performance is possible for the Tweet Indexing per partition to that of the Capture</li>
<li>For Tweet Search it a bit tougher to gauge, but I woudl guess it would be about 100-150 microseconds per search depending on the algorithm used.  Throughput should also be well into the 100&#8242;s of thousands per second if in mkemory databases are used.</li>
<li>Response times could be reduced by as much as 25 microseconds per network hop by using Infiniband networking instead of 1Gbe</li>
<li>From a scaling poerspective,  this should be able to scale linearly by adding hardware almost without limit (only limited by the avilable network bandwidth)</li>
</ol>
<p>Now clearly,  this is a simplified case and I am sure there are lots of design details we are missing but I think you get the idea.  A bigger, badder Twitter (or any other app for that matter) is definately possible and by using the SOA pattern, Async I/O, component replication, etc we can do this to almost anything.  So if anyone from Twitter (or any one else for that matter) wants to talk specifics or other examples feel free to leave a comment or reach me on Twitter (@techmusings) any time.</p>
<p>Sorry for picking on Twitter they just seemed like a good example given my struggles.  We all wish we had the &#8220;problems&#8221; that come with such a huge success.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.technologymusings.com%2Fsoftwaredesign%2Fhow-to-build-an-soa-based-high-performance-scalable-and-reliable-twitter-on-steroids&amp;linkname=How%20To%20Build%20an%20SOA%20Based%2C%20High%20Performance%2C%20Scalable%20and%20Reliable%20Twitter%20on%20Steroids"><img src="http://www.technologymusings.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a><img src="http://feeds.feedburner.com/~r/TechnologyMusings/~4/gyKn61SPS3w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.technologymusings.com/softwaredesign/how-to-build-an-soa-based-high-performance-scalable-and-reliable-twitter-on-steroids/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.technologymusings.com/softwaredesign/how-to-build-an-soa-based-high-performance-scalable-and-reliable-twitter-on-steroids</feedburner:origLink></item>
		<item>
		<title>What’s in a Cloud (or Not)</title>
		<link>http://feedproxy.google.com/~r/TechnologyMusings/~3/L8byLdDESxw/whats-in-a-cloud-or-not</link>
		<comments>http://www.technologymusings.com/softwaredesign/whats-in-a-cloud-or-not#comments</comments>
		<pubDate>Tue, 18 Aug 2009 20:17:36 +0000</pubDate>
		<dc:creator>Paul Michaud</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Service Oriented Architecture (SOA)]]></category>
		<category><![CDATA[Software Design]]></category>

		<guid isPermaLink="false">http://www.technologymusings.com/?p=106</guid>
		<description><![CDATA[I read a lot of articles on technology and it always amazes me the degree of heated debate that goes on in the blogosphere, social media and elsewhere over simple definitions.  What caught my attention today was the number of posts and comments on Twitter about what was or was not Cloud. So the question [...]]]></description>
			<content:encoded><![CDATA[<p>I read a lot of articles on technology and it always amazes me the degree of heated debate that goes on in the blogosphere, social media and elsewhere over simple definitions.  What caught my attention today was the number of posts and comments on Twitter about what was or was not Cloud.</p>
<p><strong>So the question is: What is Cloud? </strong></p>
<p>The reality is there is no agreement on this point, so I offer up my own view on this matter for debate.  Feel free to flame away.</p>
<p><strong>The Paul Michaud Definition of Cloud Computing</strong><br />
Any application which can be deployed and scaled (preferably dynamically) against a, potentially globally, distributed cluster of, homogeneous or heterogeneous, compute resources is a Cloud based application.</p>
<p>So what&#8217;s my point?  The point is that almost anything is potentially Cloud based by that definition.  Let&#8217;s look at some examples that were being tossed about today on Twitter and the Blogosphere.</p>
<p>They were:</p>
<ul>
<li>JPMC&#8217;s internal server cluster</li>
<li>Google&#8217;s Cluster</li>
<li>Facebook&#8217;s Clusters</li>
</ul>
<p>James Watters in his &#8220;<a title="Not So Fast Public CLoud: Big Players Still Run Provately" href="http://siliconangle.com/ver2/2009/08/17/not-so-fast-public-cloud-big-players-still-run-privately/">Not So Fast Public Cloud: Big Players Still Run Privately</a>&#8221; contends that&#8217;s JPMC&#8217;s cluster of servers represent an internal Cloud.  James then took some heat from others claiming that a dedicated internal cluster is not Cloud.  The argument then extended to bring in Google and the argument was that it is also a dedicated internal cluster and not cloud, but that Facebooks cluster is a Cloud because they openly admitted to using Hadoop to some extent.</p>
<p>For the record, I think this whole Internal Cluster/ External Cloud debate is all nonsense.  To be honest all of the systems listed above are Cloud in my opinion.  All of them allow for dynamic deployment of processing load against a distributed cluster of compute resources.  From the perspective of the company owning the cluster, its an Internal Cloud.  Once they open it up by providing a public interface into those resources, then its a public cloud resource from the standpoint of an external user of those resources.</p>
<p>Cloud is not the sole property of our latest Web 2.0 startups.  It&#8217;s not a function of some particular piece of software that we collectively decide is &#8220;Cloud&#8221; like Hadoop.  Cloud is a design pattern and a business choice to allow us to take advantage of vast compute resources of all kinds in a more dynamic, efficient and cost effective manner, period.  Furthermore, to effectively use Cloud resources I think you ideally need to be SOA.</p>
<p>Let the Flaming begin.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.technologymusings.com%2Fsoftwaredesign%2Fwhats-in-a-cloud-or-not&amp;linkname=What%26%238217%3Bs%20in%20a%20Cloud%20%28or%20Not%29"><img src="http://www.technologymusings.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a><img src="http://feeds.feedburner.com/~r/TechnologyMusings/~4/L8byLdDESxw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.technologymusings.com/softwaredesign/whats-in-a-cloud-or-not/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.technologymusings.com/softwaredesign/whats-in-a-cloud-or-not</feedburner:origLink></item>
		<item>
		<title>An Anatomy of a Service Oriented Architecture (SOA)</title>
		<link>http://feedproxy.google.com/~r/TechnologyMusings/~3/TCqcZzgkFXg/an-anatomy-of-a-service-oriented-architecture-soa</link>
		<comments>http://www.technologymusings.com/softwaredesign/an-anatomy-of-a-service-oriented-architecture-soa#comments</comments>
		<pubDate>Tue, 18 Aug 2009 05:33:46 +0000</pubDate>
		<dc:creator>Paul Michaud</dc:creator>
				<category><![CDATA[Service Oriented Architecture (SOA)]]></category>
		<category><![CDATA[Software Design]]></category>

		<guid isPermaLink="false">http://www.technologymusings.com/?p=96</guid>
		<description><![CDATA[This is the first in a series of articles on Service Oriented Architecture (SOA) that I will be doing over the coming weeks.  Given that every middleware vendor defines SOA differently and every Systems Architect seems to have their own definitions for various aspects of an SOA, I am going to use this first article [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first in a series of articles on Service Oriented Architecture (SOA) that I will be doing over the coming weeks.  Given that every middleware vendor defines SOA differently and every Systems Architect seems to have their own definitions for various aspects of an SOA, I am going to use this first article to present a sample of what I personally think an SOA stack should be comprised of and I will define the major components using a set of consistent terminology that I will use in the coming articles.  I will focus on the technical part of the stack and not items such as Governance (which I personally feel a lack of is one of the major causes for SOA project failure in large corporations), Infrastructure, etc.  We can discuss those in future articles.</p>
<p>So for most of you who have done some rigorous SOA, I apologize in advance for the SOA 101 Tutorial, but I am always amazed at how much people define the pieces of an SOA (or anything else architecture wise) differently, so this next section is purely to provide us with a common set of definitions on which to base further discussion.</p>
<p>Lets look at the following stack which depicts the typical application stack for a single service component.</p>
<div id="attachment_98" class="wp-caption aligncenter" style="width: 385px"><img class="size-full wp-image-98" title="A Simple SOA Stack" src="http://www.technologymusings.com/wp-content/uploads/2009/08/SOA-Stack.JPG" alt="A Simple SOA Stack" width="375" height="750" /><p class="wp-caption-text">A Simple SOA Stack</p></div>
<p>So what are the main parts to this stack, and what is their role.<br />
<strong><br />
Service Component:</strong><br />
This is the true heart of the SOA (not the service interfaces which most people focus on).  The Service Component is that logical unit of code which implements the functionality to support the Service.  The Service Component exposes one or more Services.  A Service Component (at least a foundational one, which I will define shortly) is also usually associated with a data store of some kind.  This can contain data about a fundamental data type (defined below), control data, process, data, etc depending on the nature of the particular service component.</p>
<p><strong>Service:</strong><br />
The Service is a public interface which is exposed by a Service Component.  It can be exposed in a wide array of protocols and need not be just SOAP Web Services.  In fact I will argue that even 20 years ago, that good systems were designed as SOA even though we exposed Services on a socket.</p>
<p><strong>Legacy System Adapter:</strong><br />
It is my personal opinion that any time a Service Component needs to interface to a legacy system, that an Adapter Pattern should be used.  This Adapter performs a number of tasks.  Its primary function is to convert to/from data formats spoken by the legacy system and the common data formats used by the Foundational Service Components.  In order to perform the conversions, it may be necessary for an adapter to interface with many Service Components in order to perform data enrichment or break data apart into its fundamental data types.<br />
<strong><br />
Enterprise Service Bus:</strong><br />
Its common for people to use an ESB, at least on paper.  The definition of the ESB is a bit amorphous in my opinion.  Many middleware vendors will tell you that the ESB contains everything including the kitchen sink functionality wise or else it&#8217;s not an ESB.  Typically people expect the ESB to provide abstraction, dynamic content based routing, optionally process choreography, Security and a boat load of other features.  Personally, if I am going to use an ESB at all, its most likely not much more than an ultrafast messaging layer with none of these bells and whistles, but that is more a function of the fact that most of what I build needs to be ultra high performance (systems capable of millions of transactions per second with response times as low as 20 microseconds, so no room for overhead).</p>
<p><strong>Application:</strong></p>
<p>So no surprise here.  On top of it all is an Application.  An Application is going to combine the functionality which is exposed by many Service Components.  More importantly, if and only if, the SOA is done well, then many Applications can aggregate the functionality provided through the Services, by those same Service Components to meet completely different end user requirements, without change to any component, except those which need to support a specific process or function for a specific Application.  This should be the goal of any SOA.</p>
<p>Here is one more diagram to consider.</p>
<div id="attachment_99" class="wp-caption aligncenter" style="width: 610px"><img class="size-full wp-image-99" title="Layering Service Components" src="http://www.technologymusings.com/wp-content/uploads/2009/08/Composite-Component.jpg" alt="Layering Service Components" width="600" height="550" /><p class="wp-caption-text">Layering Service Components</p></div>
<p>In this diagram I am going to contend that the Role Service Component and the Party Service Component are what I will call Foundational Service Components and that the Customer Service Component is a Composite Service Component.</p>
<p><strong>Foundational Service Component:</strong><br />
I am going to define this in a controversial manner.  I am going to content that a Foundational Service Component has one and only one job and that is to support all actions related to a Fundamental Data Type.  So in the case of the Party Service Component it&#8217;s job is to provide a Service interface and a supporting implementation in the Component which allows a user to Create, Read, Update and Delete Party Data.  That&#8217;s all it should do</p>
<p><strong>Fundamental Data Type:</strong><br />
A Fundamental Data Type is a basic data type, or business object which is typically common across a wide array of applications.</p>
<p><strong>Composite Service Component:</strong><br />
A Composite Service Component is a component which combines the functionality of one or more other Foundational or Composite Service Components.  It may also encapsulate additional functional and data enrichment, business process, etc. In some cases, a Composite Service Component may be purpose built to support one and only one business process or application, where it makes sense to encapsulate a piece of reusable functionality on the server side instead of in the application.</p>
<p>Well this ends our discussion of the basic Anatomy of an SOA.  For those who made it to the end without their brain dripping from their ears, I congratulate you.</p>
<p>Now that we have this common framework and terminology, the next topic will be about &#8220;The Importance of Enterprise Data Modeling for Service Oriented Architecture&#8221;, and will discuss why starting with the service definition without having identified the Fundamental Data Types or the Foundational Service Components leads to an SOA with little to no reusability.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.technologymusings.com%2Fsoftwaredesign%2Fan-anatomy-of-a-service-oriented-architecture-soa&amp;linkname=An%20Anatomy%20of%20a%20Service%20Oriented%20Architecture%20%28SOA%29"><img src="http://www.technologymusings.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a><img src="http://feeds.feedburner.com/~r/TechnologyMusings/~4/TCqcZzgkFXg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.technologymusings.com/softwaredesign/an-anatomy-of-a-service-oriented-architecture-soa/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.technologymusings.com/softwaredesign/an-anatomy-of-a-service-oriented-architecture-soa</feedburner:origLink></item>
	</channel>
</rss>
