<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0AAQXs_fip7ImA9WhRaFEk.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752</id><updated>2012-02-17T03:29:00.546+01:00</updated><category term="candidate pattern" /><category term="service coordination" /><category term="core service logic" /><category term="fail soa strategy" /><category term="shared services" /><category term="service data forward cache" /><category term="david chappell" /><category term="throttling" /><category term="soa" /><category term="technical exceptions" /><category term="separation of concerns" /><category term="recomposability" /><category term="privacy" /><category term="functional exceptions" /><category term="configurable contract" /><category term="Reference Architecture" /><category term="rules normalization" /><category term="vertical scaling" /><category term="travel" /><category term="rotterdam" /><category term="tactical" /><category term="implementation-to-contract coupling" /><category term="rule layers" /><category term="granularity" /><category term="horizontal scaling" /><category term="naming standards" /><category term="intrinsic interoperability" /><category term="strategical" /><category term="strategic" /><category term="reference data distribution" /><category term="consistency control pattern" /><category term="utility service" /><category term="ACID" /><category term="off-shore" /><category term="negative coupling type" /><category term="reference data observer" /><category term="price" /><category term="scalability" /><category term="compensation" /><category term="security" /><category term="commit" /><category term="runtime governance" /><category term="economy" /><category term="proven solution" /><category term="soaschool" /><category term="policy" /><category term="non-agnostic" /><category term="time-to-market" /><category term="common problem" /><category term="BASE" /><category term="cloud" /><category term="traffic management service" /><category term="silo" /><category term="service naming" /><category term="rollback" /><category term="autonomy" /><category term="integration" /><category term="consistency" /><category term="process design" /><category term="on-shore" /><category term="process improvement" /><category term="governance" /><category term="technical strategy" /><category term="architecture" /><category term="evolutionary refinement" /><category term="context normalization standardization" /><category term="paul brown" /><category term="logical exceptions" /><category term="logic centralization" /><category term="soa symposium" /><category term="legislation" /><category term="soa manifesto" /><category term="steve pope" /><category term="auxiliary service logic" /><category term="toufic boubez" /><category term="cache" /><category term="flexibility" /><category term="fail soa design paradigms" /><category term="normalization" /><category term="soa architect" /><category term="roger stoffers" /><category term="soa strategic goals" /><category term="grid" /><category term="design pattern" /><category term="exception handling" /><category term="reusability" /><category term="enterprise" /><category term="pattern candidate" /><category term="job security" /><category term="task service" /><category term="entity service" /><category term="business value" /><category term="agnostic" /><category term="ROI" /><category term="evil soa" /><category term="transaction" /><category term="cloud computing" /><category term="law" /><category term="process" /><category term="service orchestration" /><category term="masking" /><category term="soa pattern" /><category term="soa failure" /><category term="Certified SOA Architect" /><category term="anne thomas manes" /><category term="return on investment" /><category term="thomas erl" /><category term="paul buhler" /><category term="over-specialization" /><category term="consistency pattern" /><category term="naming conventions" /><category term="service capability naming" /><category term="management buy-in" /><category term="abstraction" /><category term="architect" /><category term="silver bullet" /><category term="ov-chipkaart" /><category term="soa design principles" /><category term="standards" /><category term="composability" /><category term="pci compliance" /><category term="forward cache" /><category term="soa is no disease" /><category term="reuse" /><category term="transportation" /><title>SOA is not a disease!</title><subtitle type="html">SOA can deliver strategic value to companies willing to change (part of) their enterprise, not just their IT systems! Many companies however have tried and failed delivering SOA with the promised reduced IT burden and ROI. Some companies are even treating SOA like a disease. This is not fair. SOA is a way of thinking applied to supporting tools and not a tool on itself.

I hope this collective set of topics will help companies decide whether this SOA thing is blessing or burden.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://soa-ind.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/SoaIsNotADisease" /><feedburner:info uri="soaisnotadisease" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C0cFRXY9eCp7ImA9WhRbEEU.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-855946251173871258</id><published>2012-02-01T08:23:00.003+01:00</published><updated>2012-02-01T08:23:34.860+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-01T08:23:34.860+01:00</app:edited><title>Published the Centralized Event Consumer candidate pattern</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Hi all,&lt;br /&gt;
&lt;br /&gt;
I just published the &lt;a href="http://soapatterns.org/centralized_event_consumer.php"&gt;Centralized Event Consumer&lt;/a&gt; SOA Pattern. The pattern increases autonomy of underlying resources in large event architectures, thereby increasing the event consumer autonomy.&lt;br /&gt;
&lt;br /&gt;
You can view the pattern by following the link.&lt;br /&gt;
&lt;br /&gt;
I would like to ask everyone to review &amp;amp; give feedback on the soapatterns.org website. Also in case you have used the pattern yourself successfully, please testify this at soapatterns.org using the feedback form, so the pattern candidate might be qualified as a real pattern.&lt;br /&gt;
&lt;br /&gt;
- Roger&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-855946251173871258?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mItM0yF5a66R7_z_z1YNRvFuNUM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mItM0yF5a66R7_z_z1YNRvFuNUM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mItM0yF5a66R7_z_z1YNRvFuNUM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mItM0yF5a66R7_z_z1YNRvFuNUM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/lWzsQHZ_ruk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/855946251173871258/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2012/02/published-centralized-event-consumer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/855946251173871258?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/855946251173871258?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/lWzsQHZ_ruk/published-centralized-event-consumer.html" title="Published the Centralized Event Consumer candidate pattern" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2012/02/published-centralized-event-consumer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAAR3s6eip7ImA9WhRUFUg.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-6203161036299233510</id><published>2012-01-26T06:45:00.002+01:00</published><updated>2012-01-26T06:45:46.512+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T06:45:46.512+01:00</app:edited><title>Published an article in Service Technology Magazine</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Hi all,&lt;br /&gt;
&lt;br /&gt;
I just published an article in &lt;a href="http://www.servicetechmag.com/"&gt;Service Technology Magazine&lt;/a&gt; - the January 2012 edition.&lt;br /&gt;
&lt;br /&gt;
For those of you who read my blog it might be familiar text as I took one of my posts as basis for the published article. For those of you who want to check it out you can &lt;a href="http://www.servicetechmag.com/I58/0112-2"&gt;see it here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
- Roger&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-6203161036299233510?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WccRYPMuqFfzfaylxi770g3IFQE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WccRYPMuqFfzfaylxi770g3IFQE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WccRYPMuqFfzfaylxi770g3IFQE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WccRYPMuqFfzfaylxi770g3IFQE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/f9MOQ_TXSSQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/6203161036299233510/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2012/01/published-article-in-service-technology.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/6203161036299233510?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/6203161036299233510?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/f9MOQ_TXSSQ/published-article-in-service-technology.html" title="Published an article in Service Technology Magazine" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2012/01/published-article-in-service-technology.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkINQHs8fSp7ImA9WhZWFks.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-9112300916086094873</id><published>2011-04-20T22:50:00.004+02:00</published><updated>2011-05-17T21:29:51.575+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-17T21:29:51.575+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="process" /><category scheme="http://www.blogger.com/atom/ns#" term="ov-chipkaart" /><category scheme="http://www.blogger.com/atom/ns#" term="transportation" /><category scheme="http://www.blogger.com/atom/ns#" term="process design" /><title>Coupling processes loose - a mess if not done right</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Another great example how processes can sometimes be coupled in such a way that you can create a mess for the people in the process (tight coupling):&lt;br /&gt;
&lt;br /&gt;
As posted in my previous post, I am using a chip-card for the Dutch Public Transport. This card acts as a travel pass and allows loading products onto it which act as tickets for public transport. More information can be found &lt;a href="http://www.ov-chipkaart.nl/?taal=en"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
One of the ways for travelling with the card is by loading credit products onto the card which act as a virtual wallet. You can do this manually, or you can load a product onto it which behaves in such a way that if your credit on the card drops below a certain threshold, it automatically does a debit transaction on your bank account and recharges the travel card. For this to work you need to purchase the product online and link it to the bank account of your choice.&lt;br /&gt;
&lt;br /&gt;
I had almost activated the product on my card until I noticed the following phrase in the description of the product: "Always make sure sufficient money is in your bank account. If we cannot obtain the money from your account the card will be blocked. Unblocking the card can be done at a service desk."&lt;br /&gt;
&lt;br /&gt;
Now here's the problem: two processes exist which are mixed incorrectly here:&lt;br /&gt;
- travel authorization&lt;br /&gt;
- debit transactions&lt;br /&gt;
&lt;br /&gt;
Specifically the scenario when travelling with insufficient credit on the card and a low bank account balance causes issues: why would anyone want to block the entire travel card if I had insufficient balance?&lt;br /&gt;
&lt;br /&gt;
There are a number of reasons why this is wrong and additionally there is one specific reason why this is fundamentally wrong:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;- Travelling is registered/credit is consumed by checking in and out of the travel registration system by keeping the card close to a registration point (the card uses near-field-communication to communicate with the travel management system&lt;/div&gt;- Insufficient credit for this travel does not mean that there is insufficient credit for all travel. It should be sufficient to deny check-in for this travel only.&lt;br /&gt;
- Insufficient bank balance still allows me to recharge the card from another bank account - so why block the entire card?&lt;br /&gt;
&lt;br /&gt;
Fundamentally wrong:&lt;br /&gt;
- Many train stations and most bus stations do not have a service desk. To get to one I would need to travel!? Blocking the card does effectively restrict me from getting to a service desk.&lt;br /&gt;
&lt;br /&gt;
What is documented here is an unnecessarily tight coupling between two distinctly different processes with distinctly different purposes. A better solution would have been to check at every check-in time anew whether or not I had to recharge the card. If the bank account balance was insufficient I would be denied that particular check-in.&lt;br /&gt;
&lt;br /&gt;
Needless to say I did not activate that auto-recharge-card-credit-product on my card. You never know what happens and I do not intend to get stuck in the middle of nowhere just because an architect made a mistake (imho) by tightly coupling two disparate processes and by doing so shuts me down completely (travel-wise).&lt;br /&gt;
&lt;br /&gt;
Wonder how long this situation will exist now that the government and the transportation companies are trying to get rid of the paper travel tickets...&lt;br /&gt;
&lt;br /&gt;
- Roger&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-9112300916086094873?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Fo2qOOQHL2qpq8CMWV0Ti4eDYv4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fo2qOOQHL2qpq8CMWV0Ti4eDYv4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Fo2qOOQHL2qpq8CMWV0Ti4eDYv4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fo2qOOQHL2qpq8CMWV0Ti4eDYv4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/IHkqCseHh24" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/9112300916086094873/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2011/04/mixing-processes-mess-if-not-done-right.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/9112300916086094873?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/9112300916086094873?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/IHkqCseHh24/mixing-processes-mess-if-not-done-right.html" title="Coupling processes loose - a mess if not done right" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2011/04/mixing-processes-mess-if-not-done-right.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMBSHk5eSp7ImA9WhZRFk4.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-1096782668494616721</id><published>2011-04-01T22:17:00.004+02:00</published><updated>2011-04-12T20:20:59.721+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-12T20:20:59.721+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="non-agnostic" /><category scheme="http://www.blogger.com/atom/ns#" term="ov-chipkaart" /><category scheme="http://www.blogger.com/atom/ns#" term="agnostic" /><category scheme="http://www.blogger.com/atom/ns#" term="over-specialization" /><category scheme="http://www.blogger.com/atom/ns#" term="transportation" /><title>Transportation service compared to SOA service (over)specialization</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Sometimes service over-specialization can&amp;nbsp;truly&amp;nbsp;hinder reuse in a sense that multiple implementations of similar logic are necessary to achieve the same functional goal for another purpose (agnostic).&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I live in the Netherlands where recently an electronic public transportation ticket system was&amp;nbsp;introduced&amp;nbsp;to manage travel tickets electronically. A chip card with NFC is used to 'carry' digital tickets while travelling. You could see the travel pass as a digital purse in which you can keep single/return trips, monthly and yearly subscriptions as well as some money to use while travelling.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Now I'm new to this system and finally I decided to try the 'ticket recharged' way of travelling: the public transportation chip card instead of a paper ticket.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;In order to be able to travel, I need to meet a number of preconditions:&lt;/div&gt;&lt;div&gt;1. I need a (personalized) travel card - this is the actual chip card with NFC communications&lt;/div&gt;&lt;div&gt;2. I need to put money on it&lt;/div&gt;&lt;div&gt;3. I need to activate "travel" on it with the appropriate transportation company.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Ad 1): I already had the card a little while, so I did not need to worry about it: precondition 1 is met.&lt;/div&gt;&lt;div&gt;Ad 2): For charging the card with money intended for travelling, a two-step approach must be followed:&lt;/div&gt;&lt;div&gt;a. Purchase travel credit - this would perform a direct debit on my bank account&lt;/div&gt;&lt;div&gt;b. Load the credit product onto the card&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Ad 3): Similar two-step approach:&lt;/div&gt;&lt;div&gt;a. Order the "travel by virtual travel money" product with the dutch railway company&lt;/div&gt;&lt;div&gt;b. Load the product onto the card that allows using the credit on the card if available&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Step 2a can be done via the public transportation chip card web site&lt;/div&gt;&lt;div&gt;Step 3a can be done via the dutch railways web site&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;So now I needed to find an NFC charging point so I found one of the terminals for public transportation at the train station.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Now here's the problem:&lt;/div&gt;&lt;div&gt;The machine to load products onto the card would only allow me to find the pending product for step 3a. This &amp;nbsp;means I can load the product to spend the virtual money with, but I cannot find the product that represents the virtual money I had ordered to spend in the first place.........?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;So the "Load product" service on the terminal was only able to load travel products but no credit products. What was wrong with building a load "product"???&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I ended up finding another machine outside the railway station to load the money product onto the chip card...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;So I had to load products in two physically separate (and distant!) places...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Typical example of a non-agnostic service... :(&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-1096782668494616721?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZcUT4-jZt7DPZglV8ws_1BdNmMY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZcUT4-jZt7DPZglV8ws_1BdNmMY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZcUT4-jZt7DPZglV8ws_1BdNmMY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZcUT4-jZt7DPZglV8ws_1BdNmMY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/r4TOMFVk5vI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/1096782668494616721/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2011/03/transportation-service-compared-to-soa.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/1096782668494616721?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/1096782668494616721?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/r4TOMFVk5vI/transportation-service-compared-to-soa.html" title="Transportation service compared to SOA service (over)specialization" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2011/03/transportation-service-compared-to-soa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAMQX4_fSp7ImA9WhZTE0w.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-5537417650963024436</id><published>2011-03-16T22:26:00.000+01:00</published><updated>2011-03-16T22:26:20.045+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-16T22:26:20.045+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="soa pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="candidate pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="context normalization standardization" /><title>Published the Context Normalization Standardization pattern candidate</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Hi all,&lt;br /&gt;
&lt;br /&gt;
I just posted the pattern candidate for (Process) &lt;a href="http://soapatterns.org/context_normalization_standardization.php"&gt;context normalization standardization&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If you have done this before and agree this is a good approach to solve cross-company process and technology alignment, please testify on the &lt;a href="http://soapatterns.org/"&gt;soapatterns.org&lt;/a&gt; web site using the candidate pattern feedback form.&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
&lt;br /&gt;
Roger&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-5537417650963024436?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cJSbrn2xmPSnpPbK0kH6-bjWWDk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cJSbrn2xmPSnpPbK0kH6-bjWWDk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cJSbrn2xmPSnpPbK0kH6-bjWWDk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cJSbrn2xmPSnpPbK0kH6-bjWWDk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/XIgvXz9xPdk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/5537417650963024436/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2011/03/published-context-normalization.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/5537417650963024436?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/5537417650963024436?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/XIgvXz9xPdk/published-context-normalization.html" title="Published the Context Normalization Standardization pattern candidate" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2011/03/published-context-normalization.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcCQn06fCp7ImA9Wx9bE0U.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-7446514492272768882</id><published>2011-02-18T20:14:00.002+01:00</published><updated>2011-02-22T16:21:03.314+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-22T16:21:03.314+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="reuse" /><category scheme="http://www.blogger.com/atom/ns#" term="non-agnostic" /><category scheme="http://www.blogger.com/atom/ns#" term="reusability" /><category scheme="http://www.blogger.com/atom/ns#" term="agnostic" /><title>Agnostic/non-agnostic revisited</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I got the feedback that the previous article I wrote on what agnostic/non-agnostic is was too complex. So I am revisiting the subject to make sure that I explain a lot simpler than in the post I described last year.&lt;br /&gt;
&lt;br /&gt;
To explain as easily as possible what agnostic/non-agnostic is:&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;agnostic services are not aware of the context in which they are being called, nor are they aware of how the service is implemented, which platform, technology etc.&lt;/li&gt;
&lt;li&gt;non-agnostic services can have one or more forms of coupling or context (ie. process functional context).&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;Result of these two statements is that agnostic services have more reuse potential than non-agnostic services.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;An example of the difference can be identified by discussing a "PrintInvoice" service capability.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-bslzouKCRxs/TV6LtM2SNvI/AAAAAAAAAhI/yJws2fuMGJI/s1600/printinvoicenonagnostic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-bslzouKCRxs/TV6LtM2SNvI/AAAAAAAAAhI/yJws2fuMGJI/s1600/printinvoicenonagnostic.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;This is a service capability which can be described as the logic exposed to print an invoice. When trying to classify the service it is pretty obvious that this is a non-agnostic service, as it has capabilities to print invoices and nothing else.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;When applying the principles of service design, we should give a service a defined logical (functional) boundary, which defines the context in which the service operates.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;When redesigning the implementation of this service, we could split the service into two services:&lt;/div&gt;&lt;div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Print&lt;/li&gt;
&lt;li&gt;Invoice&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;
These are two agnostic services: print service capabilities are bothered with the capability to print "stuff" and Invoice service capabilities deal with invoice related "stuff".&lt;br /&gt;
&lt;br /&gt;
Having made this separation, I just lost my capability to print invoices. To resolve this problem I can create a third service which combines the two services in one service capability which can deal with the mechanics of printing invoices, which results in the following service-inventory:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-DMQSqgms5OU/TV6Lygd49DI/AAAAAAAAAhM/bRvFeAXUSLA/s1600/printinvoiceagnostic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-DMQSqgms5OU/TV6Lygd49DI/AAAAAAAAAhM/bRvFeAXUSLA/s1600/printinvoiceagnostic.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
As you can see the agnostic services are being composed by the non-agnostic PrintInvoice service. This allows for the invoice and the print service to be used for other purposes, of which I have depicted a few potential examples below:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CHsE8YGGQZU/TV6L6L4f7ZI/AAAAAAAAAhQ/QS9mfN-9u0E/s1600/printinvoicereuse.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="144" src="http://2.bp.blogspot.com/-CHsE8YGGQZU/TV6L6L4f7ZI/AAAAAAAAAhQ/QS9mfN-9u0E/s320/printinvoicereuse.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
As we can see, it's the agnostic services which are being reused, not the non-agnostic services.&lt;br /&gt;
&lt;br /&gt;
If this separation of concerns would not have been applied, instead of ie. reusing the print functionality, for the printletter functionality, the printing part would have been redeveloped and tailored for the printing of letters. This would have created some unnecessary/redundant/duplicate logic.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-7446514492272768882?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PrwhiMpsxQwcKhuUfzgfCzDhdcY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PrwhiMpsxQwcKhuUfzgfCzDhdcY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PrwhiMpsxQwcKhuUfzgfCzDhdcY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PrwhiMpsxQwcKhuUfzgfCzDhdcY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/TXPYTunO0zc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/7446514492272768882/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2011/02/agnosticnon-agnostic-revisited.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/7446514492272768882?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/7446514492272768882?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/TXPYTunO0zc/agnosticnon-agnostic-revisited.html" title="Agnostic/non-agnostic revisited" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-bslzouKCRxs/TV6LtM2SNvI/AAAAAAAAAhI/yJws2fuMGJI/s72-c/printinvoicenonagnostic.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2011/02/agnosticnon-agnostic-revisited.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QEQXw7eip7ImA9Wx9VFkU.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-5799666874268022830</id><published>2011-02-02T22:15:00.003+01:00</published><updated>2011-02-02T22:15:00.202+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-02T22:15:00.202+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="design pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="soa pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="consistency control pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="rule layers" /><category scheme="http://www.blogger.com/atom/ns#" term="normalization" /><title>Published Rule Layers candidate pattern</title><content type="html">&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Hi all,&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;I just published the&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://soapatterns.org/rule_layers.php"&gt;Rule&amp;nbsp;Layers&lt;/a&gt;&amp;nbsp;candidate pattern. I'm looking for people to testify that they have applied this pattern to get it promoted from the candidate to the pattern status. Check it out&amp;nbsp;&lt;a href="http://soapatterns.org/rule_layers.php"&gt;here&lt;/a&gt;&amp;nbsp;at&amp;nbsp;&lt;a href="http://soapatterns.org/" style="color: #445566;"&gt;soapatterns.org&lt;/a&gt;.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;- Roger&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-5799666874268022830?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/N0EVBoOFaTdvRGKvyk8pHhhkkec/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N0EVBoOFaTdvRGKvyk8pHhhkkec/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/N0EVBoOFaTdvRGKvyk8pHhhkkec/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N0EVBoOFaTdvRGKvyk8pHhhkkec/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/Te24of0gbqQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/5799666874268022830/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2011/02/published-rule-layers-candidate-pattern.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/5799666874268022830?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/5799666874268022830?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/Te24of0gbqQ/published-rule-layers-candidate-pattern.html" title="Published Rule Layers candidate pattern" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2011/02/published-rule-layers-candidate-pattern.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAESH8zcSp7ImA9Wx9WEkQ.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-6980256424960523683</id><published>2011-01-17T21:05:00.000+01:00</published><updated>2011-01-17T21:05:09.189+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-17T21:05:09.189+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="design pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="soa pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="rules normalization" /><category scheme="http://www.blogger.com/atom/ns#" term="normalization" /><title>Published Rules Normalization candidate pattern</title><content type="html">&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Hi all,&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;I just published the&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://soapatterns.org/rules_normalization.php"&gt;Rules Normalization&lt;/a&gt;&amp;nbsp;candidate pattern. I'm looking for people to testify that they have applied this pattern to get it promoted from the candidate to the pattern status. Check it out&amp;nbsp;&lt;a href="http://soapatterns.org/rules_normalization.php"&gt;here&amp;nbsp;&lt;/a&gt;at&amp;nbsp;&lt;a href="http://soapatterns.org/" style="color: #445566;"&gt;soapatterns.org&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;- Roger&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-6980256424960523683?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bsShbF1FWEwg4jON52HBurI-VCk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bsShbF1FWEwg4jON52HBurI-VCk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bsShbF1FWEwg4jON52HBurI-VCk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bsShbF1FWEwg4jON52HBurI-VCk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/QFnkBuiaIlA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/6980256424960523683/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2011/01/published-rules-normalization-candidate.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/6980256424960523683?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/6980256424960523683?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/QFnkBuiaIlA/published-rules-normalization-candidate.html" title="Published Rules Normalization candidate pattern" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2011/01/published-rules-normalization-candidate.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYASXgyfSp7ImA9Wx9WE0s.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-3952075110182395807</id><published>2011-01-09T22:06:00.002+01:00</published><updated>2011-01-18T16:05:48.695+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-18T16:05:48.695+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="law" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="policy" /><category scheme="http://www.blogger.com/atom/ns#" term="legislation" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud computing" /><category scheme="http://www.blogger.com/atom/ns#" term="privacy" /><title>Make sure it's not too CLOUDy...</title><content type="html">This post addresses some of the concerns that companies might have when dealing with cloud services in general, specifically when dealing with sensitive data in a hosted environment. Where cloud computing in intended to increase the quality of service, the quality of "privacy" is not a generally recognized factor when services are hosted. The environment naturally protects its applications because that's what the hosting environments provide.&lt;br /&gt;
&lt;br /&gt;
With cloud computing, the deal changes with respect to traditional hosted services in ie. a colocated hosting environment for which you know where it is hosted. When services are hosted in a cloud, ie. the service's storage resource is hosted in redundant locations, you can not be sure with a (public) cloud where a service or its resources are hosted. In fact, some of the more innovative cloud service providers have dynamically hosted resources in 'cooler' locations on the planet to save cost by requiring less power for cooling. This means that the services are hosted across multiple continents and in many countries, which naturally leads to the conclusion: what happens with my customer data, what happens with my client data?&lt;br /&gt;
&lt;br /&gt;
Businesses or governments storing data in a cloud may inherently be exposing the data into countries which have different privacy policies or legislation than required for their purpose. For example, if data of a European company is stored outside the European Union, which means that data of customers may not be protected by the privacy laws of Europe.&lt;br /&gt;
&lt;br /&gt;
In the example, a cloud consumer should stick to cloud providers for which he knows the privacy policy, and for which the hosting environments are only located in Europe. Alternatively a cloud consumer should build a private cloud or use a community cloud which has controlled access.&lt;br /&gt;
&lt;br /&gt;
Similar approaches apply for different reasons and for different countries, but the essence stays the same: make sure it's not too &lt;i&gt;cloud&lt;/i&gt;y...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-3952075110182395807?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NvQwdQDtwWHUFEaDrEYugQGjG2M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NvQwdQDtwWHUFEaDrEYugQGjG2M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NvQwdQDtwWHUFEaDrEYugQGjG2M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NvQwdQDtwWHUFEaDrEYugQGjG2M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/yL37VbSX8d0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/3952075110182395807/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2011/01/make-sure-its-not-too-cloudy.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/3952075110182395807?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/3952075110182395807?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/yL37VbSX8d0/make-sure-its-not-too-cloudy.html" title="Make sure it's not too CLOUDy..." /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2011/01/make-sure-its-not-too-cloudy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAGQXo4fCp7ImA9Wx9RFkw.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-8978221508654382773</id><published>2010-12-17T21:12:00.009+01:00</published><updated>2010-12-17T21:12:00.434+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-17T21:12:00.434+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="core service logic" /><category scheme="http://www.blogger.com/atom/ns#" term="separation of concerns" /><category scheme="http://www.blogger.com/atom/ns#" term="policy" /><category scheme="http://www.blogger.com/atom/ns#" term="auxiliary service logic" /><category scheme="http://www.blogger.com/atom/ns#" term="utility service" /><title>Core service logic and auxiliary service logic</title><content type="html">Here's a nice scenario I have encountered recently:&lt;br /&gt;
&lt;br /&gt;
Customer management wants &lt;i&gt;every&lt;/i&gt; activity performed by a customer and every customer contact logged in the customer data store.&lt;br /&gt;
&lt;br /&gt;
For this purpose, every relevant service and process in the service inventory is fitted with auxiliary logic to create customer logs in the CRM system.&lt;br /&gt;
&lt;br /&gt;
Historically, this has worked for several years, but recently the system administrators started complaining about the sheer amount of data in the system and how it is becoming very hard to keep the system displaying these logs to the CM agent without running expensive (long-running) queries.&lt;br /&gt;
&lt;br /&gt;
To cut a long story short, they want to reduce the amount of data logged for a customer by creating a new policy which only logs significant activities on a customer record.&lt;br /&gt;
&lt;br /&gt;
For this to work, the initial request was to remove the logging logic from certain service capabilities.&lt;br /&gt;
&lt;br /&gt;
In the service inventory, a whole bunch of services has, besides the relevant core service logic, some hard coded auxiliary CRM logging logic which will use a utility service to push the logged data to the CRM system.&lt;br /&gt;
&lt;br /&gt;
As it is impacting many different services which are used in different contexts, removing the auxiliary logic as requested may not be the best way to go about this. Not only does this cost a lot of effort and regression testing, but also does it not solve the issue that the same service should log to the CRM system in one context, but not in another.&lt;br /&gt;
&lt;br /&gt;
An alternative, perhaps more flexible way of changing the system's logging logic, is to change the utility service or apply a policy to this service which acts as a filter, deciding for all services whether or not to execute the actual CRM system update.&lt;br /&gt;
&lt;br /&gt;
This means that the logging logic can still stay in the services as auxiliary logic, and the decision whether or not to perform the actual update will happen in the CRM system can be managed (declaratively), external to the core service logic of the services needing the logging, and external to the actual logging service itself.&lt;br /&gt;
&lt;br /&gt;
This can work only if the context of the service call is also recorded with the logging message.&lt;br /&gt;
&lt;br /&gt;
An alternative to this approach can be that all services log messages to the CRM system per default, but publish the message into a queue or topic and selectively process messages based on business rules in a business rules engine or similar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-8978221508654382773?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/a8oR012CHpw9_lDeonVh4b8jO68/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/a8oR012CHpw9_lDeonVh4b8jO68/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/a8oR012CHpw9_lDeonVh4b8jO68/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/a8oR012CHpw9_lDeonVh4b8jO68/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/CJh1noPutGc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/8978221508654382773/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/12/core-service-logic-and-auxiliary.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/8978221508654382773?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/8978221508654382773?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/CJh1noPutGc/core-service-logic-and-auxiliary.html" title="Core service logic and auxiliary service logic" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/12/core-service-logic-and-auxiliary.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUCQX0yfCp7ImA9Wx9REko.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-7462773311615886815</id><published>2010-12-13T23:11:00.016+01:00</published><updated>2010-12-13T23:11:00.394+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-13T23:11:00.394+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="common problem" /><category scheme="http://www.blogger.com/atom/ns#" term="proven solution" /><category scheme="http://www.blogger.com/atom/ns#" term="pattern candidate" /><category scheme="http://www.blogger.com/atom/ns#" term="soa pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="candidate pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="soa" /><title>SOA Pattern Publishing - why?!</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
Recently I have been posting a lot of candidate patterns on &lt;a href="http://soapatterns.org/"&gt;soapatterns.org&lt;/a&gt;, the pattern-related site of &lt;a href="http://soasystems.com/"&gt;soasystems.com&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I was a matter of time before someone might ask "what are you doing and why are you doing it?". Well, it happened. Anyway, the reason why I wrote this post is because people ask why use soa patterns, why document soa patterns and there's only one simple reason for me doing this.&lt;br /&gt;
&lt;br /&gt;
SOA patterns are &lt;u&gt;proven solutions&lt;/u&gt; for &lt;u&gt;common problems&lt;/u&gt;. Some of the candidate patterns I have documented may seem like open doors or a shot at an empty goal - but that's a good thing actually. What it means is that people recognize a certain solution for a problem, to actually be a good or at least a viable solution. And if people recognize the structure of the solution, does that not mean that they have just recognized a pattern in what they are seeing?&lt;br /&gt;
&lt;br /&gt;
SOA patterns are not rocket science. SOA patterns are not smart or unique solutions. They are merely a common way of fixing a problem that we've encountered more than just once.&lt;br /&gt;
&lt;br /&gt;
Does that mean it should not be documented? I don't think so. By documenting it, I hope to save other people's time and effort; because if someone recognized a documented soa pattern as something that can be applied to their problem, with or without modifications, that particular goal is reached.&lt;br /&gt;
&lt;br /&gt;
Why am I publishing candidate patterns and not patterns? Well, it's in the definition of the soa pattern. For it to be a pattern it must be proven - as in - used in the field by more than one person. A site like &lt;a href="http://soapatterns.org/"&gt;soapatterns.org&lt;/a&gt; manages exactly that. This is also why I'm asking with every candidate pattern published by myself, to get others to testify that they have used the same pattern or a similar approach for real too. Because only if a group of people would testify they use it, it can be considered a pattern instead of a candidate pattern.&lt;br /&gt;
&lt;br /&gt;
Keep watching this blog for a couple of more patterns to come. Presently finalizing patterns on rules normalization and rule layers and a couple of more service inventory related patterns. And if you've done something similar to what's described in one of my pattern candidates - or any others in the list - be sure to let the people at soapatterns.org know that you did. This way you, the community, can contribute to the field.&lt;br /&gt;
&lt;br /&gt;
Regards,&lt;br /&gt;
&lt;br /&gt;
-Roger&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-7462773311615886815?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SE7Xzutwj-lBP8KdIUgz6YLySXE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SE7Xzutwj-lBP8KdIUgz6YLySXE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SE7Xzutwj-lBP8KdIUgz6YLySXE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SE7Xzutwj-lBP8KdIUgz6YLySXE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/w_y8Knw1vzM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/7462773311615886815/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/12/soa-pattern-publishing-why.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/7462773311615886815?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/7462773311615886815?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/w_y8Knw1vzM/soa-pattern-publishing-why.html" title="SOA Pattern Publishing - why?!" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/12/soa-pattern-publishing-why.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4DQHg-eyp7ImA9Wx9SFks.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-1635249152328029645</id><published>2010-12-06T20:49:00.000+01:00</published><updated>2010-12-06T20:49:31.653+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-06T20:49:31.653+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="reference data distribution" /><category scheme="http://www.blogger.com/atom/ns#" term="soa pattern" /><title>Published Reference Data Distribution candidate pattern</title><content type="html">&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Hi all,&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;I just published the&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://soapatterns.org/reference_data_distribution.php"&gt;Reference Data Distribution&lt;/a&gt; candidate pattern. I'm looking for people to testify that they have applied this pattern to get it promoted from the candidate to the pattern status. Check it out &lt;a href="http://soapatterns.org/reference_data_distribution.php"&gt;here&lt;/a&gt; at &lt;a href="http://soapatterns.org/"&gt;soapatterns.org&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;- Roger&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-1635249152328029645?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WsLc7Z6RtDfZeKG4N5njuiWRK3g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WsLc7Z6RtDfZeKG4N5njuiWRK3g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WsLc7Z6RtDfZeKG4N5njuiWRK3g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WsLc7Z6RtDfZeKG4N5njuiWRK3g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/CGLId-UQkHA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/1635249152328029645/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/12/published-reference-data-distribution.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/1635249152328029645?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/1635249152328029645?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/CGLId-UQkHA/published-reference-data-distribution.html" title="Published Reference Data Distribution candidate pattern" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/12/published-reference-data-distribution.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQCSXczeCp7ImA9Wx9SEEs.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-4838511356747636122</id><published>2010-11-29T21:59:00.000+01:00</published><updated>2010-11-29T21:59:28.980+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-29T21:59:28.980+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="throttling" /><category scheme="http://www.blogger.com/atom/ns#" term="policy" /><category scheme="http://www.blogger.com/atom/ns#" term="runtime governance" /><title>Throttling is not trivial</title><content type="html">Runtime governance tooling vendors, when they present their tools for ie. throttling, the way this is presented to potential customers is that they explain how installing these is easy and how implementing the actual behavior of the actual service agents is configuration only and this can simply be done by system administrators.&lt;br /&gt;
&lt;br /&gt;
The pitfall is that customers exist who infer from these statements that they can purchase the licenses for any required service agents, give the CD to an administrator, and ultimately let the system administrator configure the throttling agents into the service inventory. All problems solved.&lt;br /&gt;
&lt;br /&gt;
Let’s start by defining what throttling actually is from several points of view and then we can go from there to illustrate that these conclusions can be way off and can be very costly to resolve.&lt;br /&gt;
&lt;br /&gt;
In the eyes of customers, throttling is a way to manage the amount of traffic to a service or a back end system. Expectation is often that they manage the amount of throughput by restricting the access to a service to not exceed a certain metric, ie. a specific number of calls per second or per minute, depending on load.&lt;br /&gt;
&lt;br /&gt;
What does a statement like this mean, to the messages that arrive at the throttling agent and are marked to be beyond the predefined threshold?&lt;br /&gt;
&lt;br /&gt;
For a customer this could mean that the message has to wait until the measured load does not exceed the threshold anymore.&lt;br /&gt;
To a throttling agent this usually means that the service call cannot be executed, because executing this would violate the expected threshold even more.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Throttling examples&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
What should happen to a service call exceeding the threshold? This actually depends on the purpose of a service and the context in which this service call is executed. A few examples are:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;A read call for customer data intended for display in a client application&lt;/li&gt;
&lt;li&gt;A read operation in the context of an update service composition&lt;/li&gt;
&lt;li&gt;An update of an address based upon a client application request&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Let’s highlight some characteristics for each of these:&lt;br /&gt;
&lt;br /&gt;
Ad 1)&lt;br /&gt;
It seems OK to respond “too busy” to the service consumer. The consumer can retry in less busy times if it’s really important. To the throttling agent it means it’s ok to discard the message and respond “too busy”.&lt;br /&gt;
&lt;br /&gt;
Ad 2)&lt;br /&gt;
This scenario is distinctly different from the first one. Discarding the read message to be executed in the context of an update, will most likely trigger a retry mechanism. The retry mechanism will make the same message come back potentially even quicker than a retry attempt coordinated by a service consumer. This will significantly increase the resource load on the message infrastructure as well as on the throttling mechanism. A way to overcome this issue is to have message properties which help identify in which context the message is being executed. And on the same throttled service, but in the different context, you can decide to allow this service call although messages in the ‘regular read’ scenario would be refused. For this you can even use two different throttling statistics.&lt;br /&gt;
&lt;br /&gt;
This does however expose an issue related to throttling in service composition context. For elaborating this see the part of the article titled to “Where to throttle in the SOA”.&lt;br /&gt;
&lt;br /&gt;
Ad 3)&lt;br /&gt;
A little less easy to deal with. Discarding the message does most likely not meet the business requirements. If the front end application (service consumer) is a web application which exposes a page to submit address changes, it might even cost customers ifthe data was typed and the system would say “too busy”. But then what? It seems that storing the message and trying later in less busy times should be fine.&lt;br /&gt;
&lt;br /&gt;
One has to ask himself now whether the order in which messages are processed is significant in the context of the core service logic. This determines whether it’s fine to park requests which exceed the threshold for later execution. Even if the requests are parked for later use, this is just moving the problem to another place in the system or to another point in time. If the amount of throttled (parked) messages is big, when processing the parked messages you may face another throttling challenge. If we’re just moving the problem it does not seem like a viable solution.&lt;br /&gt;
&lt;br /&gt;
If the order of execution is to be guaranteed, the solution mentioned cannot be executed as no new messages can be executed until the one exceeding the throttling policy can be successfully processed. This is another solution which does not seem viable to solve the throttling issue.&lt;br /&gt;
&lt;br /&gt;
What other options do we have? If we look at this scenario, the throttling should do no more than manage that messages do not get lost while the availability of the service provider is not guaranteed (the throttling policy exceeded situation is the same as having an availability issue of the service provider). This can be solved by utilizing a queue to mitigate for the times of reduced availability of the service provider. This should be sufficiently supporting that (eventually) the address update is being executed.&lt;br /&gt;
&lt;br /&gt;
A way of throttling in this situation is to have messages read from a queue (the messages posted by a service consumer) at a maximum predefined rate to prevent the throttling policy from being violated. This can only be done if the consumer does not require a synchronous response to its update request message. This is a perfectly fine solution where no messages get lost, the order of execution is maintained only if messages are read from the queue one at a time which then seriously impacts the scalability of the throttled service.&lt;br /&gt;
&lt;br /&gt;
The processing order of messages is relevant if out of order execution causes data integrity issues or service failures. Some examples are: two subsequent address changes on the same customer result in the incorrect address details in the customer database if executed out of order. Or similarly, if the core service logic of a service must create subsequent service calls, and the second one cannot be completed successfully without the first one being executed successfully, this will create similar data inconsistency issues.&lt;br /&gt;
&lt;br /&gt;
A way to make the system more scalable is when messages can be skipped if a more recent one was received; this applies in certain situations only. When taking the two subsequent address changes as an example: only the most recent message for the address change is relevant to the system. This can be achieved by assigning a time based or sequence based message property or header element to a message upon receipt by the service consumer. Perhaps the service consume can already assign this to the request. If an expression can be used to identify whether a processed message can be dropped because a more recent one has been processed before. (A similar system can be used to detect replay attacks). For this to work, a form of data store must be available in the system to keep track of these requests.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Where to throttle in the SOA?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Where should throttling happen anyway? There is no single right answer to this topic. Let’s consider the following layered service inventory:&lt;br /&gt;
&lt;br /&gt;
a - Public services controlling the access to services inside the service inventory, acting as an endpoint for all external access to the service inventory&lt;br /&gt;
b - Orchestration services (orchestrated task services) controlling all centralized and long-running processes&lt;br /&gt;
c - Business services (ie. task services, utility services) which are the sole access point to any underlying layer&lt;br /&gt;
d - Data Services (ie. entity services, utility services) controlling all back end access.&lt;br /&gt;
&lt;br /&gt;
What happens if we throttle on services in each of these layers?&lt;br /&gt;
&lt;br /&gt;
Ad a)&lt;br /&gt;
This can control the amount of traffic allowed into the service inventory but what does that achieve? It would only achieve throttling on that level in the infrastructure. It would be good for controlling specific service consumer policies and indirectly keep the load on the underlying system manageable but in the end, many public services can access the same business services or back end services in complex compositions resulting in a significantly greater amount of requests to the back end which can be a multitude of the amount of client requests. Furthermore, not all business service would need to be exposed on public level, meaning that load can exist on the lower layers inside the service inventory that the throttling mechanism would not be measuring.&lt;br /&gt;
&lt;br /&gt;
Ad b)&lt;br /&gt;
A system can hardly be throttled on this level, as process starters are often inside the orchestration engine and cannot be exposed to service agents. This means that if a process must be controlled, it’s probably best to throttle externally to the process, ie. in the layers ‘above’ or ‘below’ the orchestration layer. Or by controlling the flow of messages to and from the process in general.&lt;br /&gt;
&lt;br /&gt;
Ad c)&lt;br /&gt;
Business services might seem to be the best place to control throttling because they see all the traffic coming into the system has to pass by a business services. They see the traffic from the top layers and the traffic from the layers below. But multiple business services may be composed together in complex compositions, resulting in a throttling nightmare when the need to throttle arises on these kinds of services. For example, if I had an order service which is used in a composition which should also invoice the customer and schedule an electronic payment, on which of these elements (functional business service areas) do I throttle? On one of the composed services? On the service composition controller? On all? Even here a single answer is not possible because it all depends on the purpose of the throttling and potentially this differs per throttled service.&lt;br /&gt;
&lt;br /&gt;
Ad d)&lt;br /&gt;
This can control the back end load probably best, but as the data access services usually do not know the context in which they are being called, applying the throttling on this level has its restrictions. Referring back to 2) if the read of underlying data is relevant for an update operation on the same service composition, then what kind of an effect does refusing the read operation have on the service composition, and what is the consequence of that to the bus infrastructure? This is not easy to answer as it is probably different for many services.&lt;br /&gt;
&lt;br /&gt;
In the end I think it all comes down to &lt;i&gt;why &lt;/i&gt;the throttling happens from business or technology point of view. Sometimes the throttling happens to protect the legacy and back end systems, which should allow for throttling on data service level. Sometime the throttling happens to protect the middleware from excessive load, which can probably best be manages at business service level. Sometimes it’s one specific consumer which can threaten the entire system’s availability and then a throttling policy for selected relevant service capabilities exposed to that particular consumer may be used to protect other consumers from the load caused in the middleware by the throttled one.&lt;br /&gt;
&lt;br /&gt;
Each method has it’s pros and cons. When looking at the overall picture, it may be perfectly fine to throttle on two or three levels. Although a combined throttling policy may not be the most easy to comprehend and it may not be using the system resources to the best extent, it still remains a popular method as it guards a number of key parameters of the system. This results in a solution which is still manageable without the need for capacity enhancements.&lt;br /&gt;
&lt;br /&gt;
Of course throttling policies can be used in other ways, for example to give priority to certain messages, or messages from certain consumers or customer requests on the system, and many other ways exist, but this post is just an example and I can never convey all the issues and opportunities of throttling in one single post.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Dealing with throttled services in a reference architecture.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
I hope that this post conveys that throttling is not trivial. In fact it’s crucial to have an up-front analysis done for your throttling architecture before any policy is applied. This can be formalized by documenting specific approaches for specific situations in a reference architecture document.&lt;br /&gt;
&lt;br /&gt;
A well-respected colleague of mine once said: the throttled message can be discarded and the service consumer can be thrown a technical exception. Although this may be fine for many messages and throttling implementations, please be aware that more options exist and can be addressed by having a throttling (reference) architecture.&lt;br /&gt;
&lt;br /&gt;
A throttled service may throw a technical exception. Usually technical exceptions are treated by consumers as a permanent failure for a service call. If the call was a read operation, probably it may not happen again, but if it’s a write operation, the consumer may have retry mechanisms in place which might immediately result in another call with the same message, This however is the easiest and most straight-forward implementation and can be introduced without really big implementation issues in the system. Most initial implementations may be using this method. Some caution with this statement: if the consumer treats this as an invalid message call to another system, some elaborate log analysis sessions may come from this, since people cannot tell the difference between a back end availability issue and a throttled message response. To make this difference, you may not be able to avoid customization of the services.&lt;br /&gt;
&lt;br /&gt;
A throttled service may throw a technical or functional status (“not now”) but in the end this means that the service consumers must be able to understand this message. What it means is that at present the message cannot be completed. Probably it does not make sense to retry the message at this point in time but a retry at a later time may work perfectly well. This means that a delayed retry may succeed after all, whereas an immediate retry would not.&lt;br /&gt;
&lt;br /&gt;
Once a reference architecture exists, it should be easier for system administrators to think about and implement new policies, and fine-tune throttled entities. But be aware that, depending on how elaborate the throttling architecture is, the complexity of throttling may dramatically increase. Even if current throttling parameters are understood perfectly well, a dependency analysis must be conducted to be able to fully assess and understand the implementation of a new throttling policy.&lt;br /&gt;
&lt;br /&gt;
A similar risk may apply for making changes to an existing throttling policy. As soon as you tune the throttling policy to switch close to a point near “typical load”, or the typical load increases to a value near the configured throttling policy, dramatic changes in system performance and behavior can be expected.&lt;br /&gt;
&lt;br /&gt;
My advice would be to have and changes or new policies investigated by a team which consists of administrators (system current knowledge), architects (system dependencies and consequences) and capacity planners (system future load). &lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Throttling is not trivial; it's as simple as that!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-4838511356747636122?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rgWYE-DU_rQnTJAtxs_O-Q4I1yk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rgWYE-DU_rQnTJAtxs_O-Q4I1yk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rgWYE-DU_rQnTJAtxs_O-Q4I1yk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rgWYE-DU_rQnTJAtxs_O-Q4I1yk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/wD8D9Cduifk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/4838511356747636122/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/11/throttling-is-not-trivial.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/4838511356747636122?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/4838511356747636122?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/wD8D9Cduifk/throttling-is-not-trivial.html" title="Throttling is not trivial" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/11/throttling-is-not-trivial.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8HQn04fip7ImA9Wx9TF0w.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-283059283120218699</id><published>2010-11-25T21:55:00.007+01:00</published><updated>2010-11-25T22:00:33.336+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-25T22:00:33.336+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="soa pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="reference data observer" /><title>Published the Reference Data Observer candidate pattern</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
I just published the &lt;a href="http://soapatterns.org/reference_data_observer.php"&gt;Reference Data Observer&lt;/a&gt;&amp;nbsp;candidate pattern. I'm looking for people to testify that they have applied this pattern to get it promoted from the candidate to the pattern status. Check it out &lt;a href="http://soapatterns.org/reference_data_observer.php"&gt;here&lt;/a&gt; at &lt;a href="http://soapatterns.org/"&gt;soapatterns.org&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
- Roger&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-283059283120218699?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0e0Bqd4KeLQQ3vJAGeQ8MliHpEA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0e0Bqd4KeLQQ3vJAGeQ8MliHpEA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0e0Bqd4KeLQQ3vJAGeQ8MliHpEA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0e0Bqd4KeLQQ3vJAGeQ8MliHpEA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/2G4kDKNWHWE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/283059283120218699/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/11/published-reference-data-observer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/283059283120218699?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/283059283120218699?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/2G4kDKNWHWE/published-reference-data-observer.html" title="Published the Reference Data Observer candidate pattern" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/11/published-reference-data-observer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIHRH89cCp7ImA9Wx5bGU0.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-5845641634290522558</id><published>2010-11-02T23:31:00.003+01:00</published><updated>2010-11-04T21:28:55.168+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-04T21:28:55.168+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="forward cache" /><category scheme="http://www.blogger.com/atom/ns#" term="service data forward cache" /><category scheme="http://www.blogger.com/atom/ns#" term="soa pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="cache" /><title>Published the Service Data Forward Cache candidate pattern</title><content type="html">Hi everyone,&lt;br /&gt;
&lt;br /&gt;
I just published the candidate pattern &lt;a href="http://soapatterns.org/service_data_forward_cache.php"&gt;Service Data Forward Cache&lt;/a&gt;. Looking for people to testify that they have applied this pattern to get it promoted from the candidate to the pattern status. Check it out &lt;a href="http://soapatterns.org/service_data_forward_cache.php"&gt;here&lt;/a&gt;&amp;nbsp;at &lt;a href="http://www.soapatterns.org/"&gt;www.soapatterns.org&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
-Roger&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-5845641634290522558?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ono7fttwywkPK5_PCnhVdywCzfo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ono7fttwywkPK5_PCnhVdywCzfo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ono7fttwywkPK5_PCnhVdywCzfo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ono7fttwywkPK5_PCnhVdywCzfo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/WFPo6cVmKy8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/5845641634290522558/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/11/published-service-data-forward-cache.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/5845641634290522558?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/5845641634290522558?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/WFPo6cVmKy8/published-service-data-forward-cache.html" title="Published the Service Data Forward Cache candidate pattern" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/11/published-service-data-forward-cache.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0INRXoyfip7ImA9Wx5UFUk.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-1031443797398934958</id><published>2010-10-20T06:38:00.001+02:00</published><updated>2010-10-20T06:39:54.496+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-20T06:39:54.496+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="soa pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="configurable contract" /><title>Published the Configurable Contract SOA Design Pattern Candidate</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
I just published the &lt;u&gt;Configurable Contract&lt;/u&gt; SOA Design Pattern Candidate on &lt;a href="http://www.soapatterns.org/configurable_contract.php"&gt;www.soapatterns.org&lt;/a&gt;.&lt;br /&gt;
I'm looking for people who can verify that they have successfully applied this pattern to be able to get it promoted to a recognized SOA pattern.&lt;br /&gt;
&lt;br /&gt;
-Roger&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-1031443797398934958?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yO5JMFiZ5UGV1IlKHWK8Yl_Ckrc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yO5JMFiZ5UGV1IlKHWK8Yl_Ckrc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yO5JMFiZ5UGV1IlKHWK8Yl_Ckrc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yO5JMFiZ5UGV1IlKHWK8Yl_Ckrc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/CyEgE-lXvhE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/1031443797398934958/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/10/published-configurable-contract-soa.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/1031443797398934958?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/1031443797398934958?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/CyEgE-lXvhE/published-configurable-contract-soa.html" title="Published the Configurable Contract SOA Design Pattern Candidate" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/10/published-configurable-contract-soa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcDSHk_fip7ImA9Wx5UFE4.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-6879161693541258766</id><published>2010-10-18T22:32:00.001+02:00</published><updated>2010-10-18T22:34:39.746+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-18T22:34:39.746+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Certified SOA Architect" /><title>Certified SOA Architect</title><content type="html">Finally managed to make some time and get the SOA Architect Certification done. For more info see &lt;a href="http://www.soaschool.com/certifications/architect"&gt;www.soaschool.com&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
-Roger&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-6879161693541258766?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bgbq6avycvK8_9BWBF9VhALH9m0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bgbq6avycvK8_9BWBF9VhALH9m0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bgbq6avycvK8_9BWBF9VhALH9m0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bgbq6avycvK8_9BWBF9VhALH9m0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/8llfaJepRg4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/6879161693541258766/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/10/certified-soa-architect.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/6879161693541258766?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/6879161693541258766?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/8llfaJepRg4/certified-soa-architect.html" title="Certified SOA Architect" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/10/certified-soa-architect.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcGRng8eyp7ImA9Wx9REko.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-2648540576899090847</id><published>2010-09-20T21:03:00.003+02:00</published><updated>2010-12-13T22:50:27.673+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-13T22:50:27.673+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="entity service" /><category scheme="http://www.blogger.com/atom/ns#" term="process" /><category scheme="http://www.blogger.com/atom/ns#" term="non-agnostic" /><category scheme="http://www.blogger.com/atom/ns#" term="masking" /><category scheme="http://www.blogger.com/atom/ns#" term="task service" /><category scheme="http://www.blogger.com/atom/ns#" term="pci compliance" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="agnostic" /><category scheme="http://www.blogger.com/atom/ns#" term="logic centralization" /><title>Agnostic / Non agnostic</title><content type="html">&lt;div class="MsoNormal"&gt;Recently I had a conversation with a customer who did not understand the difference between agnostic and non agnostic.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;An example from PCI compliance pov could elaborate which I would like to share.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;In service orientation one of the guiding principles is to separate agnostic and non-agnostic service logic. This can be done by separating agnostic service logic into one service and any non-agnostic parts into (an) other service(s).&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;The definition of agnostic/non agnostic did not help him onto the right track so we used PCI compliance to allow for an appropriate example.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;To check the definition of agnostic/non-agnostic, check it at &lt;a href="http://www.soaglossary.com/agnostic_logic.php"&gt;SOAGlossary.com&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Summarized, agnostic logic is supposed to be more reusable than non-agnostic logic. Separating agnostic logic from non-agnostic logic is done to increase the reuse potential of a service.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;In PCI compliance, one of the scenarios is where customer management representatives view customer details. The business rules dictate that unless explicitly necessary, a card number should not be readable. In this example, the method of making a card number not readable is by masking parts of the number when displayed.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Several places for masking can be identified:&lt;/div&gt;1.&amp;nbsp;In the service which retrieves the customer details including payment data (as the customer had requested)&lt;br /&gt;
2. In the front end(s) which use this service to display the payment details are changed where necessary&lt;br /&gt;
3. Somewhere else?&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Regarding 1)&amp;nbsp;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Introduces the issue that when the service mask the payment details all the time, the service can never be used in other scenario’s ie. when requirements for viewing unmasked details or when the service is used on other service compositions and unmasked data is necessary. Since the service is agnostic, it does not know the reason as to why the details are retrieved.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Regarding 2)&amp;nbsp;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Introduces the issue that during the initial implementation one might catch all the scenarios, but as new screens and applications (front ends) are built, no guarantees exist that these comply with the PCI requirements. Furthermore, if the amount of front ends or screens is large, the effort to incorporate the masking logic may be considerable, resulting in an expensive implementation.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Regarding 3)&amp;nbsp;&lt;/div&gt;&lt;div class="MsoNormal"&gt;This is where the agnostic/non-agnostic can be explained more easily and this is what the remainder of this post will elaborate on.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Agnostic logic should not be aware of the reason why it’s used. This means it would lack functional or process context. If the knowledge like reason or process context must not be in the service which retrieves the customer’s details we can move that knowledge and corresponding logic into a separate service which is non-agnostic. In fact, the task service type as defined by Thomas Erl et al is intended to do exactly this: encapsulate non-agnostic logic. &lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;So we’ve ended up with a customer details service which is agnostic and will retrieve unmasked credit card number data. This can be considered an entity services as per Thomas Erl et al definition.&lt;/div&gt;&lt;div class="MsoNormal"&gt;And we’ve ended up with one or more task service(s) which should be able to distinguish from the agnostic service in the sense that it knows whether or not to mask credit card details.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;As indicated the customer details service is agnostic and will not perform the masking logic. If we use the contract centralization pattern and the logic centralization pattern, we have created an official end point pattern. This means we can force users in the service inventory to not use the agnostic service directly but force them to use the non-agnostic task services.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;A task service can then deal with the non-agnostic context. A task service is built in a certain context, ie. it retrieves the customer details for sales process purposes. A sales process should typically not be interested in the credit card number. The non-agnostic service, intended for the sales process would always mask the card data.&lt;br /&gt;
&lt;br /&gt;
In the context of a billing process, another task service could expose the unmasked number so that particular service support the actual act of making payment with the card number.&lt;br /&gt;
&lt;br /&gt;
The end result is that:&lt;/div&gt;&lt;div class="MsoNormal"&gt;- the reusable agnostic entity service is not publicly exposed&lt;/div&gt;&lt;div class="MsoNormal"&gt;- one or more non-agnostic task services are publicly exposed, managing the masking logic depending on the context it's called in.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
Note that the two task services could be replaced by one task service that could perform masking of card holder data, based upon additional parameters, ie. a reason code, which represents the context in which the service is called. The task service would then decide, based upon the reason code, whether or not to mask any data.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Hope this one helps a bit - I know it's a bit over-simplified but this should paint the picture.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-2648540576899090847?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A0i6nMLBQw6r8H3X9VPvjWeQ1HA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A0i6nMLBQw6r8H3X9VPvjWeQ1HA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A0i6nMLBQw6r8H3X9VPvjWeQ1HA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A0i6nMLBQw6r8H3X9VPvjWeQ1HA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/8xhGPHNAdDs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/2648540576899090847/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/09/agnostic-non-agnostic.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/2648540576899090847?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/2648540576899090847?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/8xhGPHNAdDs/agnostic-non-agnostic.html" title="Agnostic / Non agnostic" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/09/agnostic-non-agnostic.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ABRHY6fSp7ImA9Wx9REEQ.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-2229422885347653315</id><published>2010-07-02T22:56:00.007+02:00</published><updated>2010-12-11T19:22:35.815+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-11T19:22:35.815+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="consistency pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="consistency" /><category scheme="http://www.blogger.com/atom/ns#" term="compensation" /><category scheme="http://www.blogger.com/atom/ns#" term="horizontal scaling" /><category scheme="http://www.blogger.com/atom/ns#" term="ACID" /><category scheme="http://www.blogger.com/atom/ns#" term="commit" /><category scheme="http://www.blogger.com/atom/ns#" term="transaction" /><category scheme="http://www.blogger.com/atom/ns#" term="rollback" /><category scheme="http://www.blogger.com/atom/ns#" term="scalability" /><category scheme="http://www.blogger.com/atom/ns#" term="consistency control pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="BASE" /><category scheme="http://www.blogger.com/atom/ns#" term="vertical scaling" /><title>ACID vs. BASE</title><content type="html">We all know that ACID and BASE are opposites, both in the chemical world, as well as in the IT world. They are used for different purposes and should not be confused with each other as they are distinctly different. In the IT world, ACID and BASE can be used complementary, similar to the chemical world.&lt;br /&gt;
&lt;br /&gt;
In IT-land, both mechanisms are intended to make sure the end result of an operation leaves a system in a consistent state. The way they do it however, are radically different. And which one you need, depends on your needs, or better, your business's needs. Default reaction of almost everyone at business level would be "I need ACID". In my entire&amp;nbsp;career&amp;nbsp;I have only ever met one business principal who was fine with BASE after I had suggested it. Everyone always wanted to see 'the full monty' regarding consistence, no-one was willing to do any trade-offs to free up some system resources, even if this meant purchasing more powerful hardware resources.&lt;br /&gt;
&lt;br /&gt;
The difference for a person applying the patterns, between ACID and BASE, are concentrated around the amount of effort required to implement (design-time), and the amount of effort for systems to execute the pattern, also known as scalability (runtime). Where nowadays, most&amp;nbsp;middle-ware&amp;nbsp;has support for ACID making life for designers a lot easier, there is no such thing for BASE. Find out why in this article.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;ACID - Atomic, Consistent, Isolated, Durable&lt;/blockquote&gt;&lt;br /&gt;
A transaction must be explicitly committed or fully rolled back (sometimes the environment or middleware automates part of this concern). In principle, as long as a transaction is not committed or rolled back, it can keep or lock huge amounts of resources, like memory, disk space etcetera). While in progress, the system resources consumed keep the overall solution from being scalable, as smaller resource consumption makes more operations fit the same machine. The bigger volume of resources a transaction comprises, the less scalable the system becomes, as less operations fit the same machine, or same group of machines.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;If&lt;/u&gt; it is really required, the approach is a (often standardized - for example "XA" distributed transactions) method to ensure a system is consistent at all times. The concept of a distributed transaction spans across multiple (parts of) a system and has those parts participating in this transaction. Any participating (service) logic will be eventually entirely committed, or fully rolled back.&lt;br /&gt;
Note that committed is not always analogous to successfully executed to the fullest extent; it rather means that the system is left in a consistent state. It could be that in order to make things 'committable', or consistent, an intermediate valid system state is reached which also allows committing but does not reach the ultimate intended goal - yet. An example is where logic has a state deferral mechanism in place which is used to make the system consistent and to break up the transaction in manageable parts. This is by the way an excellent mechanism to make transactions more scalable. Because the spanned logic, hence consumed resources, are broken into smaller pieces, the individual parts become more manageable and inherently makes them more scalable. Furthermore, if the transaction coordination mechanism is a 'generic' implementation, typically it has safeguards built-in to make sure that everything is fine, like a double-commit pattern. This all costs time and resources and can be counter-productive if your system architects, designers and developers do not know what they are doing.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;BASE - Basically Available, Soft state, Eventually consistent&lt;/blockquote&gt;&lt;br /&gt;
In a BASE pattern, the need to commit does not exist. If things happen according to plan, they are done. No need to confirm when they are done, to anyone, if you don't want to, contrary to a pattern like XA-transactions. There is a downside to the BASE pattern: there is no (explicit) rollback mechanism. If does not exist, the architect/designer is responsible for creating so-called compensation algorithms. These are pieces of logic which handle specific exception scenarios. It is easy to forget one or two so it requires more than ample planning and design to make sure all crucial scenarios are covered. The pattern coordinator (the implemented consistency control mechanism of this pattern) must manage its own state and progress in the process. This means that it must track what it did, and based on when and where things went wrong, explicitly execute compensation activities for undoing the parts of the work which &lt;i&gt;did &lt;/i&gt;go OK until that moment. There is however one big advantage: because the system generally does not need to keep track of your process's status -you manage that for the system in a tailored-to-the-need way- less resources are consumed, which would have a very positive influence on your system's performance and scalability. Also, as the architect or designer can choose to selectively or strategically apply checkpoint logic, potentially less logic is executed. This allows a service designer to focus more on the actual core service logic.This is because the architect is in full control of the "when and how" of any applied core logic as well as supporting logic. Since no standardized method to ensure consistency of the system exists, temporary inconsistency is a almost-certain consequence. It is not only a consequence; it is the actual foundation why this pattern is so much more scalable. Temporary inconsistency is allowed in a BASE pattern to make matters more manageable. The information and core service capability is "basically available". Contrary to an ACID managed consistence, some&amp;nbsp;inaccuracy&amp;nbsp;is temporarily allowed and data may change while being used (must be known and accepted by the consumer of the service) to reduce the amount of consumed resources (soft state). Eventually, when all service logic is executed, the system is left in a consistent state (eventually consistent). Presumably, as the core service logic executes relatively quickly, the amount of occasions where the service logic is required but only available in inconsistent state should be generally manageable.&lt;br /&gt;
&lt;br /&gt;
Scalability and consistency patterns&lt;br /&gt;
&lt;br /&gt;
As ACID resources are generally larger groups of resources, the easiest way of scaling up, is scaling vertically, also known as purchasing larger machines. As there is a limit to the physical size of a machine - you can only get them 'this big', this is not a very future-proof approach. Also, when increasing hardware capacity this way, quite often a certain amount of capacity is wasted to make room for the new hardware (ie. by replacing the current machine with the next bigger model, or by replacing smaller memory modules by bigger ones: what happens to the old hardware?).&lt;br /&gt;
&lt;br /&gt;
Horizontal scaling, also known as deploying -concurrently- more machines to process more data, is far more extensible and typically cheaper, as you always can add capacity without wasting the capacity you already have. By having more machines, two methods of horizontal scaling can be applied: functional scaling or sharding.&amp;nbsp;Functional scaling is distributing pieces of logic of the same capability to a certain group of hardware nodes, and another group of functionality to another group of hardware nodes. This is -ie in the database world- known as partitioning. Sharding is the act of deploying the same functionality/capability across multiple nodes. By nature, horizontal scaling is more complex than vertical scaling, but the benefits may outweigh the cost of the design and architecture.&lt;br /&gt;
&lt;br /&gt;
BASE resources are typically a lot smaller and inherently less hardware nodes are required, or smaller nodes are required to reach the necessary system capacity.&lt;br /&gt;
&lt;br /&gt;
In a SOA, it is because of the nature of the comprised distributed service capabilities and the availability of standards, or better the lack thereof, for implementing consistency patterns, extremely difficult to reach 'transactional integrity' across service boundaries. By nature, the ACID approach is difficult to implement, if not impossible with certain platforms. The BASE approach is, especially outside service boundaries more easily implementable. If we look at task services and certainly orchestrated task services, the BASE approach is the default approach and anything 'better' must be custom-built. This is why it's such a good idea to offer BASE approach more often than the ACID approach. Offering BASE is more easily if it's known what the accepted margin-of-error is by the business or project principal. This can be discovered during requirements clarification phase, a very important phase of every service delivery effort. Without a proper requirements and business process investigation (discovery, clarification, refinement), it's virtually impossible to see whether you need ACID or BASE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-2229422885347653315?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QpYTDwe8TegfTz99kRB6GVdbfZ0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QpYTDwe8TegfTz99kRB6GVdbfZ0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QpYTDwe8TegfTz99kRB6GVdbfZ0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QpYTDwe8TegfTz99kRB6GVdbfZ0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/wZzxKReHkjk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/2229422885347653315/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/07/acid-vs-base.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/2229422885347653315?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/2229422885347653315?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/wZzxKReHkjk/acid-vs-base.html" title="ACID vs. BASE" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/07/acid-vs-base.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMARHY5cCp7ImA9WxFbEU0.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-1556215794222224842</id><published>2010-06-28T22:58:00.000+02:00</published><updated>2010-07-02T23:00:45.828+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-02T23:00:45.828+02:00</app:edited><title>It's been a while</title><content type="html">Every now and again there is a period of extreme business in one's work and mine is definitely the past 6 months. It has been a while since I have been able to post new messages but I may have a fair chance of posting a new article on ACID and BASE which has been on my mind for quite some time now - please bear with me...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-1556215794222224842?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sl4mDwOsEb7bo6wL-6b2y_g0UeI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sl4mDwOsEb7bo6wL-6b2y_g0UeI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sl4mDwOsEb7bo6wL-6b2y_g0UeI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sl4mDwOsEb7bo6wL-6b2y_g0UeI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/x8iHaRlw4hU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/1556215794222224842/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/06/its-been-while.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/1556215794222224842?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/1556215794222224842?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/x8iHaRlw4hU/its-been-while.html" title="It's been a while" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/06/its-been-while.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QEQX0yfCp7ImA9WxFQF00.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-8225491749051412580</id><published>2010-05-12T23:55:00.001+02:00</published><updated>2010-05-12T23:55:00.394+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-12T23:55:00.394+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="time-to-market" /><category scheme="http://www.blogger.com/atom/ns#" term="on-shore" /><category scheme="http://www.blogger.com/atom/ns#" term="off-shore" /><category scheme="http://www.blogger.com/atom/ns#" term="price" /><category scheme="http://www.blogger.com/atom/ns#" term="job security" /><category scheme="http://www.blogger.com/atom/ns#" term="economy" /><title>How off-shoring work affects economy.</title><content type="html">This one is on my mind for a long time now... How off-shoring reduces the capability of the local people. How reduced capabilities of local people affects the economy of our country. How this effect in many countries affects world economy...&lt;br /&gt;
&lt;br /&gt;
I live in a wealthy country. No doubt about that! And I don't regret living here. The Netherlands&amp;nbsp;is a nice country to live in and the climate is OK-ish :) - I noticed on a recent visit to India and Egypt that the weather can be better - but I'm not complaining at all!&lt;br /&gt;
&lt;br /&gt;
Here's the deal: current economic climate in our country sort of dictates that price and time to deliver is what you need to be able to compete. If you are too expensive you won't deliver services to other companies. And the companies want time-to-market to preferably be yesterday. Competitive&amp;nbsp;planning and cost can only be achieved with resources outside of our country - simply because the rates are lower. Because of the lower rates, we can plan for more resources hence reducing the time to deliver. I know that this is a statement from utopia but generally you should get the picture.&lt;br /&gt;
&lt;br /&gt;
Initially one starts off-shoring test work. This would reduce the investments in testing. Still you would need local resources, but less. Next, you figure out that perhaps the build work could be off-shored as well. So you create a reference architecture (don't forget!) and off-shore the build activities. Yes you need local resources but again, less. Other competitors do the same so in order to stay competitive you need to off-shore more. You train the most senior resources in off-shore locations to do the design work for you and let them work locally for a while. In the end you let them go back again and more work is done from off-shore. You have a few local resources to manage the off-shore resources, but far less than initially. Now the issue becomes apparent: the design work is off-shored too. A designer can only do "so much" in splendid isolation before he needs to go back to the delivery organisation and get re-educated on current technology and architectural frameworks. Now this is a lot harder as the resources to learn from are not local. So this will happen less and less. Next step is that the architects see that the effectiveness of the local resources reduces. They cannot rely on them as much as they could when all the resources, from testers, developers and designers were still locally available. Less and less knowledge resides in the heads of local people and more knowledge resides in the heads of remote people.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;On large scale, this movement is threatening to our current economic climate. Change is good but I have my doubts about this one.&amp;nbsp;What's the end state? That the local "architect" resources are nothing more but project managers, or perhaps even program managers, when they start off-shoring the local project managers too? Where does this end? Do we still have local jobs? I know that the off-shore resources will become more expensive and a balance will be the result, but before the balance is reached, the more expensive off-shore resources will be replaced by cheaper off-shore resources from another country. And this will most likely be repeated in a wave-like pattern with it ups and downs...&lt;/div&gt;&lt;br /&gt;
Don't get me wrong - It's not that I begrudge other people having better times but it still feels threatening to me. I guess it is that I'm afraid for what I, or especially my kids will notice: we will become dependent on other countries. And because of that, they will have a harder time living. Now I know that's also what my parents thought and their parents -our kids will live in a much harder world to live in- but I still can't say that I am comfortable with it. One always wishes the best for their kids, and this one is not putting my mind at ease...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-8225491749051412580?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2G4EMg487_3RPD3GMHy-9XHAabw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2G4EMg487_3RPD3GMHy-9XHAabw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2G4EMg487_3RPD3GMHy-9XHAabw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2G4EMg487_3RPD3GMHy-9XHAabw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/FPAOjwbSnQs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/8225491749051412580/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/05/how-off-shoring-work-affects-economy.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/8225491749051412580?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/8225491749051412580?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/FPAOjwbSnQs/how-off-shoring-work-affects-economy.html" title="How off-shoring work affects economy." /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/05/how-off-shoring-work-affects-economy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYEQ3o5eyp7ImA9WxFQEU8.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-8475185998514802217</id><published>2010-04-23T22:31:00.011+02:00</published><updated>2010-05-06T08:41:42.423+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-06T08:41:42.423+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="intrinsic interoperability" /><category scheme="http://www.blogger.com/atom/ns#" term="ROI" /><category scheme="http://www.blogger.com/atom/ns#" term="evolutionary refinement" /><category scheme="http://www.blogger.com/atom/ns#" term="separation of concerns" /><category scheme="http://www.blogger.com/atom/ns#" term="standards" /><category scheme="http://www.blogger.com/atom/ns#" term="business value" /><category scheme="http://www.blogger.com/atom/ns#" term="governance" /><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><category scheme="http://www.blogger.com/atom/ns#" term="soa manifesto" /><category scheme="http://www.blogger.com/atom/ns#" term="composability" /><category scheme="http://www.blogger.com/atom/ns#" term="abstraction" /><title>Thoughts on the SOA Manifesto 2/2</title><content type="html">&lt;h1 style="font-size: 20px;"&gt;Guiding Principles, important statements to make when thinking about SOA in general.&lt;/h1&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"&gt;&lt;b&gt;Respect the social and power structure of the organization.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="width: 100%;"&gt;&lt;div style="line-height: 19px; margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: normal;"&gt;We need to know that since every organization is different, and a SOA is business-driven, every SOA implementation is different. By respecting the social and power structure in the organization, we are allowed to continue developing a SOA architecture and implementation, whereas "rowing upstream" significantly reduces our productivity, as well as it may kill the entire SOA initiative.&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Recognize that SOA ultimately demands change on many levels.&lt;/b&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="line-height: normal;"&gt;Since a SOA is business-driven and also aligning business / business and IT, a number of changes can be expected, not only in the IT landscape. For example, since processes are shared, processes and organizational departments must be aligned. Since infrastructure, service provided etc. are also shared, this requires different ways of funding projects, as well as new roles and responsibilities to be defined ie. for governance of the SOA, project and program management, program alignment, clear distinction for who is responsible for which aspects of the SOA and the organization etc. This has impact on all levels of the organization.&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;The scope of SOA adoption can vary. Keep efforts manageable&amp;nbsp;and within &amp;nbsp;meaningful boundaries.&lt;/b&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="line-height: normal;"&gt;Well, keep it small and simple (K.I.S.S.) I guess... Try, when starting with SOA adoption define a meaningful boundary for the SOA adoption. Start small, start simple. Not only with the SOA implementation, but also when defining the scope. Try a proof of concept; try experiencing implementation of a few (sharable) services in production. Get your experience with them, and try to see how you can learn. Only then you should be ready to grow from there, in what is probably a multi-year effort, towards the intended initial scope. The scope itself - how far you adopt SOA - can be increased incrementally in a programme approach. In SOA, the big-bang approach is recipe for failure. It may be better to start off small and iteratively see how you can 'grow your garden' towards the 'end state'. But please remember, a garden is never finished and constantly needs maintenance and attention. In a garden usually there is also some waste; sometimes a bit more and sometimes a bit less: don't hesitate to discard some of your investments if there is no more clear business value in them.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Products and standards alone will neither give you SOA nor apply&amp;nbsp;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;the service orientation paradigm for you.&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;SOA is not a tool, nor a silver bullet that you can buy, install and you have lift-off. It takes planning and skill to create a SOA. Actually, it is not something you build, but the way you do things. If you live by the service orientation principles, you have a fair chance of getting there. Buying tools without guidelines how to use them, without a proper plan in the appropriate programme, lacking management buy-in and governance to regulate, the product implementation will be ill-spent money.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;SOA can be realized through a variety of technologies and standards.&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;As long as you stick to the principles of service orientation, you can realize any flavour of service orientation. Every technology and standard has its pros and cons. It all boils down to how you use them. That's why SOA can be implemented using most technologies and standards. SOAP is not the implementation of a SOA, but a SOA can be implemented using SOAP. And SOAP can be used on various transports like JMS, HTTP etc. But SOAP on itself, nor the transports mentioned are mandatory when "going SOA". Any middleware you use which allows utilizing the principles of SOA will suffice. And technologies can be mixed if it makes sense.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Establish a uniform set of enterprise standards and policies based&amp;nbsp;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;on industry, de facto, and community standards.&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Enterprise standards and policies help defining SOA elements in a consistent way. By applying the same guidelines, chances of (intrinsic) interoperability increase and this is key to a SOA foundation. Standards, policies and guidelines are not a necessary evil: without them there would not be a SOA. This implies that these must be properly enforced and governance is required to ensure they are applies consistently.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Pursue uniformity on the outside while allowing diversity on the inside.&lt;/b&gt;&lt;br /&gt;
This one is a bit more difficult and less obvious than the rest. By introducing uniformity on the outside (standardization at the interface level) you make interoperability easier, because more diversity increases a learning curve which reduces the achievable reuse. This is because when things get harder (to comprehend), the potential for reuse decreases. Having said that, internally, anything should be possible. Diversity should be allowed to be able to deliver effective core service logic. Effective core service logic contributes to the attractiveness of services and would inherently increase reuse potential. The one size fits all approach does not work on the inside as well as the outside. Some balancing and fair trade-offs may be required to make it work.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Identify services through collaboration with business and&amp;nbsp;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;technology stakeholders.&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;No-one&amp;nbsp;can understand an entire business. Noone can design a service or a system without understanding why he is doing it. That's where the business stakeholders come in. Also no-one can understand all the technology requirements and implementation consequences. This required technology stakeholders to participate. On the other hand, cooperation requires trust working both ways. The business participants should realize that in order to maximize enterprise effectiveness, the scope for the SOA architect can be larger than their own scope, and allow the technology people to design services which support the business as a whole.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Maximize service usage by considering the current and&amp;nbsp;future scope of utilization.&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Plan ahead. See how a service fits into the programme of projects and initiatives to shape the SOA. Try to predict how the SOA evolves and see how the service can be of greater benefit by predicting how the programme and long term plans affect the consumption of the service. Try to see how the potential of the service can be increased ie. by extrapolating how this service can be useful for other types of consumers, channels etcetera. This would ultimately result in a increased return on investment (ROI).&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Verify that services satisfy business requirements and goals.&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Obviously, business requirements drive a SOA. Without business requirements, there would not be a need for a SOA and services would probably not be the best approach as the effective implementation of services creates certain overhead which would cost a lot of money, resulting in decreased performance of the architecture. Without a goal, pursuing business requirements may result in a&amp;nbsp;majority&amp;nbsp;of tactical decisions preventing to reach the actual enterprise goals. So while implementing services from tactical point of view, try to never loose the strategic goals out of sight.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Evolve services and their organization in response to real use.&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Let me come back to the gardening analogy I made earlier. When creating a garden, everything makes perfect sense. All plants and flowers look great together and everything is tuned. But no garden can survive without gardening (maintenance). In the course of time, taste (requirements) changes. Also sometimes, things that looked great initially, may seem trivial after a while, or may even explicitly be undesired (change of enterprise goals). Be prepared to review and maintain the (service) garden and make sure it's always aligned with the actually expected use. When a garden (SOA) is not aligned with the expectations, use decreases and in the end, has no right to survive and may even be replaced by something else.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Separate the different aspects of a system that change at different rates.&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I feel this statement is a bit narrowing the actual potential it could have had. If the statement would be "Separate concerns" I could have better agreed with it. When separation of concerns, as a principle, is properly applied, this greatly increases the comprehensibility and decreases complexity (learning curve). Separation of aspects of a system that change at different rates would be a special version (implementation) of the statement to separate concerns.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Reduce implicit dependencies and publish all external dependencies to increase robustness and reduce the impact of change.&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Reduction of implicit dependencies actually refers to the principle of abstraction. Abstraction leads to loose coupling. Loose coupling is key to a SOA as it increases flexibility and consequently the ability to change. When the ability to change increases, the impact of change is lower.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;At every level of abstraction, organize each service around a cohesive&amp;nbsp;and manageable unit of functionality.&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Abstract each functional group of logic into a self-contained, isolated, cohesive logical unit. This makes the functionality more manageable by the separation of concerns principle. A group of related logical units can be encapsulated into a service. A service can have many capabilities it ultimately encapsulates a manageable unit of functionality. By having isolated units of work, autonomy and composability increases contributing to the (re)use of services.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="line-height: normal;"&gt;&lt;i&gt;Perhaps it's wise to make the following statement: Thomas Erl already described the principles for service orientation. The statements in these posts do not attempt to redefine these principles. If you want to review them, take a look at the&amp;nbsp;&lt;a href="http://soabooks.com/"&gt;soabooks.com&lt;/a&gt;&amp;nbsp;website where you should find lots of information on the Prentice Hall SOA Books by Thomas Erl et al.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="line-height: normal;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;i&gt;Phew... this is it for now. I hope this gives food for thought. If you agree or especially if you disagree with the statements made here, please be invited to drop me a line and explain your point of view. Perhaps I have to change my insights and way of thinking :)&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-8475185998514802217?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Zawu5hcqu-K0k8uO0rRRfluzDI8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zawu5hcqu-K0k8uO0rRRfluzDI8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Zawu5hcqu-K0k8uO0rRRfluzDI8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zawu5hcqu-K0k8uO0rRRfluzDI8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/8qo_nqbl8uM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/8475185998514802217/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/04/thoughts-on-soa-manifesto-22.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/8475185998514802217?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/8475185998514802217?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/8qo_nqbl8uM/thoughts-on-soa-manifesto-22.html" title="Thoughts on the SOA Manifesto 2/2" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/04/thoughts-on-soa-manifesto-22.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUDQ384eip7ImA9WxFSF0Q.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-3719704340656253538</id><published>2010-04-04T18:58:00.003+02:00</published><updated>2010-04-20T21:37:52.132+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-20T21:37:52.132+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="intrinsic interoperability" /><category scheme="http://www.blogger.com/atom/ns#" term="evolutionary refinement" /><category scheme="http://www.blogger.com/atom/ns#" term="business value" /><category scheme="http://www.blogger.com/atom/ns#" term="technical strategy" /><category scheme="http://www.blogger.com/atom/ns#" term="soa strategic goals" /><category scheme="http://www.blogger.com/atom/ns#" term="soa manifesto" /><category scheme="http://www.blogger.com/atom/ns#" term="shared services" /><category scheme="http://www.blogger.com/atom/ns#" term="flexibility" /><title>Thoughts on the SOA Manifesto 1/2</title><content type="html">October 2009 I was at the 2nd SOA Symposium in Rotterdam where the final efforts were made and the actual presentation of the "SOA Manifesto" happened.&lt;br /&gt;
&lt;br /&gt;
This post is how I interpret the SOA Manifesto statements and I would like to encourage people to post their concerns / remarks on this vision.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;blockquote&gt;&lt;b&gt;Business value&lt;/b&gt; over technical strategy&lt;/blockquote&gt;&lt;/blockquote&gt;While having a planned technical strategy is extremely important, it's also the business who pays the bills. The cost of projects is often not really aligned with the expected business value, so we have to make a trade-off between our strategy and make tactical decisions to keep the business happy. When we keep the business happy, we are most likely allowed to continue our planned path to destiny and in the end get close to our technical strategy goals. If we push too much on the technical strategy end, we risk loosing our customer's commitment which may blow the entire SOA architecture efforts, since they invest in things that do not generate the appropriate business value.&lt;br /&gt;
&lt;blockquote&gt;&lt;blockquote&gt;&lt;b&gt;Strategic goals&lt;/b&gt; over project-specific benefits&lt;/blockquote&gt;&lt;/blockquote&gt;Traditionally, project point of view would strive for short term gains, to reach the project goals. But sometimes the project goals are not in the right direction of the strategic goals. Although the project manager has all interest and most value to gain from meeting the project benefits, some restraint must be taken in order to pursue these at all cost, especially when they are not aligned with the strategic goals. Usually a project is aligned with the strategic goals of the company, but sometimes these goals are not the way to deliver the project easiest. This is where mixed concerns get in the way of everyone. One should not allow project goals more significant than the strategic goals, the latter typically being the reason why the project was started in the first place. As SOA delivers enterprise strategic value, the projects should implement this value on a project-by-project basis whilst inside those projects, never loosing the enterprise strategic goals out of sight.&lt;br /&gt;
&lt;blockquote&gt;&lt;blockquote&gt;&lt;b&gt;Intrinsic interoperability&lt;/b&gt; over custom integration&lt;/blockquote&gt;&lt;/blockquote&gt;Although often a custom integration may be quicker to implement, it is typically as the name says, custom work - it cannot be reused somewhere else, give or take a few exceptions. By using standards and standardized interface definitions, it is easier to use and reuse these interfaces. This statement means that both the standardized technical interfaces as well as a shared data definition model can help. Particularly the latter helps in a semantic way - understanding the interface is made a lot easier. This results in quicker adoption of the interface and hence its used standards. Even the shared data model can be according to industry &amp;nbsp;standards. Using these industry standard data models typically requires a lot more ramp-up time and implementation time due to the learning curve, but once understood, they can be discussed about with people from ie. other companies, without their prior knowledge of your company - this could even make it easier to hire external help to finish your projects.&lt;br /&gt;
&lt;blockquote&gt;&lt;blockquote&gt;&lt;b&gt;Shared services&lt;/b&gt; over specific-purpose implementations&lt;/blockquote&gt;&lt;/blockquote&gt;When focussing on specific-purpose implementations, these often very easily delivered. Issue with the approach is that for every new business functionality requested, a new tailored service is created. This causes that no reuse happens: services are not shared. A typical approach is where service logic is copied, and adapter for a slightly different service. Although quicker to develop, the use is minimal if not negligible, you still increase the problem operational complexity whereas a shared service typically requires no modification at all, hence must be managed only once. Note that to work with shared services, considerable extra design/development time must be incorporated to cope for service&amp;nbsp;discoverability&amp;nbsp;and description of the service interaction in the context of new functionality. Then you have the issue of "i'm special", "not invented by me" syndrome. These are often symptoms of arrogance or distrust and are killing to any organization. When getting over these issues organizations allow for use of shared services, reducing the total cost of ownership as no custom designed implementations have to be managed.&lt;br /&gt;
&lt;blockquote&gt;&lt;blockquote&gt;&lt;b&gt;Flexibility&lt;/b&gt; over optimization&lt;/blockquote&gt;&lt;/blockquote&gt;What happens very often, is that logic is optimized for the current scope. This would typically be the case for any project-based approach. Any service or capability delivered often is a service with limited scope from project point of view. However from enterprise point of view it may be very wise to add some flexibility (at the cost of project budget and timelines). Don't think this will come for free. Issues like up-front planning and rethinking design from multi-use point of view may take extra time during design. Often the implementation time is not too severely impacted. For example, a service may be built to perform work for an online shop application. But this typically locks the service to be useful for the online shop channel only. If we were to foresee that this service can be used by other channels, or in other service compositions, we could cope for the future flexible use by ie. as simple as adding channel ID as a parameter, even though we do not need it for the current project. Any next project or service composition could use the service in a channel-aware fashion.&lt;br /&gt;
&lt;blockquote&gt;&lt;blockquote&gt;&lt;b&gt;Evolutionary refinement&lt;/b&gt; over pursuit of initial perfection&lt;/blockquote&gt;&lt;/blockquote&gt;Reaching initial perfection is probably utopia. Most SOA implementations are complex systems and all the ins and outs are learned over time. Trying to reach it when starting with a new solution will delay projects, cost a lot of money and ultimately may not fly at all because the cost of this is so high, that the business forces us to look for other alternatives. Remember, the business pays the bills :). Initial perfection is hard to reach anyway, if not unrealistic because it would require that all requirements, including future requirements, must be known at the start of the SOA initiative. As requirements change over time, the 'perfect' solution would grow out of sync with requirements soon. This would mean you spent a lot of effort on things that may never happen. Perhaps a better approach is to use KISS: "Keep It Small And Simple". Start small and be pragmatic. Do what you can now and leave what you can't until you can resolve in future iterations or projects. This is what is being referred to as &lt;i&gt;evolutionary refinement&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;------------------------------------------------&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
As you can see the value statements in the SOA manifesto are not defined in a "SMART" way. They are not measurable and this causes confusion and leaves room for discussion. Discussion is good however. As long as it does not stop us in our tracks because we cannot resolve our differences, there is progress and it forces us to think about what we are doing. Not one implementation of a SOA will be the same. There is no "one size fits all" solution. If this were the case we would be out of jobs. Use the statements made here to your own benefit when you need them and make up your own mind if you need to. Nothing stated here is "the unified truth for all", just use these statements as best practices whenever you find fit.&lt;br /&gt;
------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;h1 style="font-size: 20px;"&gt;&lt;br /&gt;
&lt;/h1&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-3719704340656253538?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/icz0Ce-z5Oe7Ch75rvCLmj0sgo0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/icz0Ce-z5Oe7Ch75rvCLmj0sgo0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/icz0Ce-z5Oe7Ch75rvCLmj0sgo0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/icz0Ce-z5Oe7Ch75rvCLmj0sgo0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/pwYW3Ez5CHI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/3719704340656253538/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2009/12/thoughts-on-soa-manifesto.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/3719704340656253538?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/3719704340656253538?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/pwYW3Ez5CHI/thoughts-on-soa-manifesto.html" title="Thoughts on the SOA Manifesto 1/2" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2009/12/thoughts-on-soa-manifesto.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IERXgzeCp7ImA9WxBaF0Q.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-4028612406864453612</id><published>2010-03-19T22:55:00.004+01:00</published><updated>2010-03-28T20:05:04.680+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-28T20:05:04.680+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="service coordination" /><category scheme="http://www.blogger.com/atom/ns#" term="service orchestration" /><category scheme="http://www.blogger.com/atom/ns#" term="traffic management service" /><category scheme="http://www.blogger.com/atom/ns#" term="recomposability" /><category scheme="http://www.blogger.com/atom/ns#" term="autonomy" /><category scheme="http://www.blogger.com/atom/ns#" term="granularity" /><title>Services in real life: Traffic Management Service: How Granularity affects service behaviour and efficiency</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;SOA Service concepts can be found in real life too. Some time ago, outside my office, road workers were replacing and reprogramming the traffic lights at a roundabout. When I saw the result of what they were doing I realized that the traffic light services and corresponding traffic management system can illustrate how a (SOA) service approach affects many of the service orientation design principles.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;a href="http://4.bp.blogspot.com/_3Q3TdFXhk5g/SvUloqomPLI/AAAAAAAAAUM/xX_7J9aJ3Os/s1600-h/ilfiore-maastricht.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/SvUloqomPLI/AAAAAAAAAUM/xX_7J9aJ3Os/s320/ilfiore-maastricht.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: 13px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;My office in Maastricht, Netherlands&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;For years I have watched the traffic light sequence outside my office. When walking across the street I did not need to press the button for pedestrians because I knew the sequence of the traffic lights by heart. I also remember that at any given time, only one lane of cars would be allowed and one group of pedestrians would be allowed to cross. Also, all traffic must stop before a new configuration was activated. This had resulted in small traffic jams all centered around this roundabout during busy hours and at times of sudden bursts of traffic.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Take a look at this street plan:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;a href="http://2.bp.blogspot.com/_3Q3TdFXhk5g/SvU6f0y_W1I/AAAAAAAAAVc/xW_TlGsE1D4/s1600-h/avenue-ceramique-maastricht_txt.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_3Q3TdFXhk5g/SvU6f0y_W1I/AAAAAAAAAVc/xW_TlGsE1D4/s320/avenue-ceramique-maastricht_txt.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: 13px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The roundabout&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: 13px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;The actual situation is a bit more complex with bus and cab lanes, bicycle roads etc. but for illustrating this schematic should suffice. It's a Dutch roundabout so the traffic moves counterclockwise as indicated. (The&amp;nbsp;dark surface in the top right corner is part of my office :))&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;A ... E are the car traffic lights.&amp;nbsp;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;R ... X are pedestrian crossing traffic lights&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The old situation as mentioned, would be that at any given time, only one lane can drive the roundabout. ie. lights ABF is green, or CFE etc. Also, the pedestrian lights would only be green at one street at a time, ie. RS, TU, or VWX. Sometimes, all traffic has to stop in order to allow pedestrians to cross. This describes a very inflexible way of managing traffic. The reason for allowing all traffic to pass from a certain point of view, was optimisation: if a traffic stream is moving, make sure all of it moves. Because no real-time feedback was given to the system, the system would be in a certain configuration for a long period of time. This same configuration would be applied over and over again, endlessly without any change due to traffic load or time of day. Because the system is not interlinked with the rest of the infrastructure in the neighborhood, it was an optimized system from the local perspective, but not at all optimized to operate in the bigger picture. This is a typical example of a situation where optimization on micro level is counter-productive on macro level.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Assuming the TMS would be an SOA Service, the following observations can be made:&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;Autonomy of a certain traffic light was poor as it would only be allowed to operate in specific sequences of configurations&amp;nbsp;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;A "Stop all" configuration was necessary between all configuration changes. This restricted the maximum switching frequency&amp;nbsp;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Granularity of the service composition (TLS) was poor as complete road paths would be switched at any given time, not individual lanes or lights.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Overall throughput would be low because of the dead time in the 'stop all' configuration and the time when a specific configuration was active with no or a low volume of cars present. After replacing the lights, a number of important improvements were made:&lt;/div&gt;&lt;ol&gt;&lt;li style="text-align: justify;"&gt;the system would allow partial pedestrian crossings (ie. only T or U instead of 'all or nothing')&amp;nbsp;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;the system would allow for individual control of two lanes at the same insertion point (ie. one lane for straight ahead and one for right turn)&amp;nbsp;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;the system would measure traffic load to accommodate for bursts in traffic coming from a certain direction&amp;nbsp;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;the system would be linked into the network of traffic lights in the surrounding infrastructure a 'green wave' to allow for traffic to leave the part of town fairly unhindered by the network of traffic lights.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;Because the granularity is increased (smaller parts which are individually configurable) the system allows for greater controllability:&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;optimized configurations are possible to allow for the throughput of traffic stressed lanes&amp;nbsp;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;empty lanes do not unnecessarily get 'green' time&amp;nbsp;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;special configuration sequences are allowed for busy hour traffic flow improvement&amp;nbsp;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;pedestrians can be allowed to cross half of the lane without impacting the flow of traffic in that lane; shortly after the pedestrians are allowed to cross half-way, the remaining part is given a green light.&amp;nbsp;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;timing the macro-level optimized configurations with the rest of the surrounding infrastructures' traffic lights.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;When making the &lt;u&gt;&lt;b&gt;analogy to service orientation&lt;/b&gt;&lt;/u&gt;, we see that the same concepts apply:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The overall road infrastructure can be considered a service inventory: all relevant infrastructure elements are managed in the same (domain) service inventory. We are assuming a domain service inventory here as all service configurations are probably limited to a certain geographic area in town. Potentially other service inventories exist with different rules, principles and configurations to manage different kinds of traffic.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;a href="http://2.bp.blogspot.com/_3Q3TdFXhk5g/SvhSGzUEAaI/AAAAAAAAAVk/cRTZJ1prjyw/s1600-h/TrafficManagementServices.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_3Q3TdFXhk5g/SvhSGzUEAaI/AAAAAAAAAVk/cRTZJ1prjyw/s400/TrafficManagementServices.jpg" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: 13px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Traffic Orchestration and Traffic Management services&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;The traffic management service (TMS) consists of a collection of coordinated traffic light services (TLS) each representing an individual traffic light. The traffic lights themselves are the smallest configurable service available (they can be configured red, amber or green). This is the defined service granularity (*) for this roundabout.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Because the granularity is better, more complex, optimized service compositions can be created.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The inter-intersection "infrastructure level" synchronization would probably be implemented as a service orchestration (**), the intersection or roundabout level light configurations as service compositions, managed by another service composition controlling when a certain configuration is necessary, based upon the input it receives from sensors in the road.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;(*) A note on service granularity: there is no 'rulebook' on service granularity. The 'appropriate' level of service granularity depends on many factors. Any smaller configurable service components, like on LED level - ie. a green, red or amber light consists of approx. 350 LEDs - would probably result in management chaos, as each LED must be individually controlled to comprise a certain configured color of traffic light. Any larger service components than traffic-light level granularity would probably result in the same situation which we had in the 'old traffic light' setup where ie. all traffic must stop to allow pedestrians to cross the roundabout at configuration TU, a case of poor service autonomy.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Conclusion: Because all traffic lights can be controlled individually the autonomy and composability of the services are higher when compared to the old setup.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;(**) Note: The example mentions orchestration, although the term choreography would probably be better suitable here. The orchestrated individual parts (TMS) have a certain amount of autonomy not controllable from the orchestration level. 'Despite' the orchestration level, the TMS can allow other traffic to cross the roundabouts or intersections as well, to service other consumers to using the service, even during busy times.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In the light of this post, I would like to encourage everyone to see how service orientation and real-world examples are really not that far apart. Whether it be a traffic light service or a service based economy, numerous similarities can be found. No, I'm not implying this applies at all times, but.... try :)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;a href="http://websequencediagrams.com/"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Websequencediagrams.com&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;:&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;TOS--&amp;gt;TMS: Orchestrate intersections note right of TOS: Traffic Orchestration Service:\nControls all intersections\nin a part of town note right of TMS: Traffic Management Service:\ncontrols at the intersection level TMS--&amp;gt;TLS: Control Service Compositions TLS--&amp;gt;TLS: Red(), Amber() or Green() note right of TLS: Traffic Light Services:\ncontrols at individual\ntraffic light level opt   note right of TMS: one for every extra\ntraffic light in a composition   TMS--&amp;gt;TLS: Control Service Compositions   TLS--&amp;gt;TLS: Red(), Amber() or Green() end&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: 12px; line-height: 13px; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-4028612406864453612?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/L-GfmuJ-AYkX3rGw-R6hBL89Lb8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L-GfmuJ-AYkX3rGw-R6hBL89Lb8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/L-GfmuJ-AYkX3rGw-R6hBL89Lb8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L-GfmuJ-AYkX3rGw-R6hBL89Lb8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/6QL8q4XhJEQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/4028612406864453612/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2009/11/services-in-real-life-traffic.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/4028612406864453612?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/4028612406864453612?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/6QL8q4XhJEQ/services-in-real-life-traffic.html" title="Services in real life: Traffic Management Service: How Granularity affects service behaviour and efficiency" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3Q3TdFXhk5g/SvUloqomPLI/AAAAAAAAAUM/xX_7J9aJ3Os/s72-c/ilfiore-maastricht.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2009/11/services-in-real-life-traffic.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4ASHw6fCp7ImA9WxBbGUQ.&quot;"><id>tag:blogger.com,1999:blog-7640798319190572752.post-8252575579277334306</id><published>2010-03-19T06:18:00.000+01:00</published><updated>2010-03-19T10:29:09.214+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-19T10:29:09.214+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Reference Architecture" /><title>Working on a few new posts</title><content type="html">Just a small status update. As I have returned home from my travels I'm working on a few new posts and also a series of posts on defining/creating of a SOA Reference Architecture. Shortly you should see a post about service granularity and service orchestration/composition, as well as my thoughts on the SOA Manifesto as I had promised in one of my earlier posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7640798319190572752-8252575579277334306?l=soa-ind.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Qdmh74B0TVM8CnnnXXNVamXC3eU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Qdmh74B0TVM8CnnnXXNVamXC3eU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Qdmh74B0TVM8CnnnXXNVamXC3eU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Qdmh74B0TVM8CnnnXXNVamXC3eU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SoaIsNotADisease/~4/o7Ep46SkfdA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://soa-ind.blogspot.com/feeds/8252575579277334306/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://soa-ind.blogspot.com/2010/03/working-on-few-new-posts.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/8252575579277334306?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7640798319190572752/posts/default/8252575579277334306?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoaIsNotADisease/~3/o7Ep46SkfdA/working-on-few-new-posts.html" title="Working on a few new posts" /><author><name>Roger Stoffers</name><uri>http://www.blogger.com/profile/18257182295766299860</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_3Q3TdFXhk5g/Su8vOf4JUUI/AAAAAAAAATQ/Ywpvmqee204/S220/roger_pasfoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://soa-ind.blogspot.com/2010/03/working-on-few-new-posts.html</feedburner:origLink></entry></feed>

