<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2120400492278270391</id><updated>2011-12-17T12:40:40.946-08:00</updated><category term='happy path'/><category term='Architecture'/><category term='scalability'/><category term='subscriber'/><category term='waste'/><category term='Value'/><category term='information'/><category term='Uncertainty'/><category term='change'/><category term='VPEC-T'/><category term='government'/><category term='solution architecture'/><category term='Decision'/><category term='Zachman'/><category term='communication'/><category term='cloud'/><category term='listener'/><category term='Trust'/><category term='SOA'/><category term='blog'/><category term='complexity'/><category term='data base'/><category term='Systems'/><category term='Enterprise Architecture'/><category term='publisher'/><category term='Framework'/><category term='twitter'/><category term='EDA'/><category term='Process'/><category term='EA'/><category term='Event'/><category term='management'/><title type='text'>Enterprise Architecture - A Practitioner's View</title><subtitle type='html'>In this blog, I will be writing about aspects of Enterprise Architecture that straddle the boundary between the business and the technology realms.
The views that I express on here are mine. They aren't filtered, controlled, managed, refined, doctored, censored, or intended to represent any views that my employer has.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>62</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-4345034961317346786</id><published>2011-12-15T07:50:00.000-08:00</published><updated>2011-12-15T09:26:08.003-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><title type='text'>Clouds and scalability</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;This post comes from an online exchange with Roger Sessions (@rsessions on twitter) Leo de Sousa (@leodesousa) and Chris Potts (@chrisdpotts).&lt;br /&gt;&lt;br /&gt;Roger makes the point that the various cloud vendors make their case on "scalability" without defining the term sufficiently. As marketing (almost) always does. So he has a point. The question for me then is, "What scales?". It is my firm commitment that when using terms that you intend to quantify, you had better get the dimensions correct. Is scalability a benefit? Of course that depends on what it means. It feels good, hits us in the unthinking (or as Daniel Kahneman calls it "System1") area. It's only when we look more deeply we realize that we have no idea what it means. Yes I'll have 7kg of scalability please.&lt;br /&gt;&lt;br /&gt;It all gets to the economics of what you think you want to do. Here are some examples:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I want to be able to increase the workload that my system is capable of without having to buy, provision, manage a bunch of servers - Scaling for workload&lt;/li&gt;&lt;li&gt;I want to be able to add lots of new users without having to.....- Scaling for users&lt;/li&gt;&lt;li&gt;I want my system to be available and priced according to the actual usage. Kinda like electricity. So when all my users are signing in, I want to allocate lots of capacity because that's intensive. But when it is running along smoothly I need less. Scaling for peak demand&lt;/li&gt;&lt;li&gt;I want to empower a demonstration team so they can bring up new instances of a standardized template and demonstrate something to a customer/prospect and then tear it down while incurring as little cost as possible. - Scaling for efficiency of people&lt;/li&gt;&lt;li&gt;I want to be able to add new functionality with less effort/cost than previously. Scaling for functionality&lt;/li&gt;&lt;li&gt;I want to reduce the burden on in house departments (finance, legal, HR or other "overhead" departments) in the deployment of equipment. - Scaling for organizational effectiveness&lt;/li&gt;&lt;/ul&gt;While I am about it, I wonder what the effective scaling order looks like. For example, maybe I want to scale linearly for workload. In other words as demand increases, supply increases at the same rate. No effective reduction in cost/transaction.&lt;br /&gt;&lt;br /&gt;Or I might be prepared for slightly more - the ratio is for each increase in demand, I get a 1.1 increase in cost of supply.&lt;br /&gt;&lt;br /&gt;Or I might want to see a reduction - for each increase in demand, my cost goes down .&lt;br /&gt;&lt;br /&gt;So as Roger observed, make the vendors of the cloud services be specific about what they are selling when selling scalability&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-4345034961317346786?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/4345034961317346786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=4345034961317346786&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4345034961317346786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4345034961317346786'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2011/12/clouds-and-scalability.html' title='Clouds and scalability'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3777333303194105114</id><published>2011-09-09T05:11:00.000-07:00</published><updated>2011-09-09T05:11:43.065-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='waste'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='government'/><title type='text'>We call that government</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I was reading &lt;a href="http://www.ausbt.com.au/low-on-fuel-qantas-flight-qf8-from-dallas-diverts-to-noumea"&gt;this post&lt;/a&gt; about QANTAS having to stop on the way from Dallas to Brisbane to refuel several times since starting the "nonstop" service. The service is "direct" from DFW to Sydney - which in the strained parlance of the travel industry means it isn't direct, it just means that you have the same flight number all the way, regardless of the number of stops. But I digress...&lt;br /&gt;&lt;br /&gt;The posting got me to thinking about the diminishing returns when you add overhead. To fly further, you have to add more fuel. But adding more fuel doesn't give you a linear increase. You have to add more fuel to compensate for the fuel you had added to make you fly further... At the limit, all you do is fly a plane with just fuel and the necessary flight crew. Nothing useful comes of it - except the corner cases where you are testing limits on purpose. The focus is wrong. It isn't about getting the plane there (again some corner cases like getting the plane to a warzone), it's about getting the passengers and freight there. &lt;br /&gt;&lt;br /&gt;The mission gets mangled if the focus on the plane not the passengers or freight.&lt;br /&gt;Similarly in many corporations, if we consider the "running of the compnay" to be equivalent to the fuel, then as we add more "running the company" "resources" so we get&amp;nbsp;diminishing returns. &lt;br /&gt;&lt;br /&gt;Eventually we have a company that is dedicated to just running itself, does nothing useful, but everyone is busy.&lt;br /&gt;&lt;br /&gt;We call that government&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3777333303194105114?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3777333303194105114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3777333303194105114&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3777333303194105114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3777333303194105114'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2011/09/we-call-that-government.html' title='We call that government'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3507781670286424409</id><published>2011-08-17T16:28:00.000-07:00</published><updated>2011-08-17T16:28:20.161-07:00</updated><title type='text'>Social Media and CRM</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I am pretty late to the blogosphere about the differences between social media and CRM. But in customer meetings I see this kind of confusion all the time. So here goes. Oh, and since I mainly work in the travel industry, my examples come from there.&lt;br /&gt;&lt;br /&gt;So first what are the goals of CRM? Knowing the customer. Being able to have enough insight into the customer to persuade the customer to buy more, become more intimate - generally increase their direct value. Maybe to right wrongs - by providing compensation if bad things happen. So CRM tends to foster a set of&amp;nbsp;1:1 exchanges. Necessary but not sufficient.&lt;br /&gt;&lt;br /&gt;In contrast social media is about somehow leveraging an network of relationships. It's one stage on from CRM (or maybe many stages beyond CRM!). So if I have a bad experience on an airline, I need the airline to do what t needs to do for compensation. But the social aspect doesn't stop there. I am heavily armed with well connected devices, a network of acquaintances and friends and time - especially on the flight. So in some ways the Social Network space is a competition between the airline provider, and the customer. Rach trying to get "the story" out to their social network orbits. The magic happens when the stories coincide - when the CRM aspect of looking after me is also told by the airline and by me. The double dip of great publicity. &lt;br /&gt;&lt;br /&gt;But when things go badly for a customer (e.g. my luggage misconnected) then the bad story needs to be acknowledged. Through the social channels - posting on the passenger's FB wall for example, and some compensation placed at the same time. Otherwise the annoyed passenger with lots of time will send out a stream of invective to any/all who may listen.&lt;br /&gt;&lt;br /&gt;So when thinking about Social Media realize:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It's a conversation&lt;/li&gt;&lt;li&gt;It's about the whole orbit&lt;/li&gt;&lt;li&gt;Don't forget to do CRM blocking and tackling&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3507781670286424409?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3507781670286424409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3507781670286424409&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3507781670286424409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3507781670286424409'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2011/08/social-media-and-crm.html' title='Social Media and CRM'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3486760871622074567</id><published>2011-08-17T12:55:00.000-07:00</published><updated>2011-08-17T12:55:11.545-07:00</updated><title type='text'>Microphone ready events</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I was working with some customers this week, and the topic of "how do you generate events?" comes up. Not how as in the dirty mechanics, but how when something is done manually today, getting that systematized. So, please bear with me on the following example.&lt;br /&gt;&lt;br /&gt;Most airlines board their passengers in some kinds of groups. So, announcements are made to get the people in the correct groups to board. A common way to do this is for the gate agent to announce that "Group n" is to board now. Perhaps it would be cool to page all the people in the appropriate group and have them rock up to board. Sounds like fun (and remember folks this is just an illustration). So if you were delivering messages to the smartphone or whever, you would simly send the message. Easy in an event based system?&lt;br /&gt;&lt;br /&gt;Not so fast. Current systems probably don't recognize a legitimate event for this. It is procedure and policy (+ experience, queue monotoring, temperature on the jet bridge, screaming children,....) that actually triggers announcement - the what I call the "Microphone event". So how would we systematize that?&lt;br /&gt;&lt;br /&gt;Change the gate agent system to do this - and think about the complexity involved, and the myriad of other delivered messages?&lt;br /&gt;Automate the system to do something really clever, like start the boarding process clock at t-30 minutes, monitor the number of boarding pases lifted/scanned (as a proxy for queue depth), and when that number approximates the number of people in the group, then release the next group....&lt;br /&gt;Other thoughts?&lt;br /&gt;&lt;br /&gt;This brings up the point, that where we have humans sensing and responding to situations, they will raise events and deliver them through a variety of ways. Sometimes shouting throughh the mic is best of all. But if it does become desirable to do these kinds of things automatically, then use what the people do as cues for the kinds of events that the system needs to generate, sense and respond.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3486760871622074567?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3486760871622074567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3486760871622074567&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3486760871622074567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3486760871622074567'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2011/08/microphone-ready-events.html' title='Microphone ready events'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-1243278920447704801</id><published>2011-07-28T09:27:00.000-07:00</published><updated>2011-07-28T09:27:33.735-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EA'/><title type='text'>Enterprise Architects - With apologies to Buffy Sainte-Marie</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;In her great song - Universal Soldier (sung &lt;a href="http://www.youtube.com/verify_age?next_url=http%3A//www.youtube.com/watch%3Fv%3DQLzUNDaF00U"&gt;here&lt;/a&gt; by Donovan), Buffy Sainte-Marie describes an impossible ideal for a soldier. Sometimes I think we enterprise architects have to have a similar set of impossible and conflicting attributes. We have to be (as discussed in other posts) archivists and activists), but then we also have to be good listeners (not a common trait among activists), understand the business in totality and yet have a reasonable (whatever that is) understanding of the technology that powers it. We have to be agents of change, and stewards of stability. We have to understand the patterns of interactions and their implications. We have to understand systems concepts (systems of record/systems of reference) and we have to understand the financials. We have to understand some of the legal implications of our decisions and we have to understand risk. We have to understand how to negotiate and when to strongarm.&lt;br /&gt;&lt;br /&gt;All in all quite a difficult and conflicting set of characteristics&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-1243278920447704801?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/1243278920447704801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=1243278920447704801&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/1243278920447704801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/1243278920447704801'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2011/07/enterprise-architects-with-apologies-to.html' title='Enterprise Architects - With apologies to Buffy Sainte-Marie'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-4809151124042381879</id><published>2011-07-22T10:24:00.000-07:00</published><updated>2011-07-22T10:24:24.600-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='solution architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='happy path'/><title type='text'>Irregular is the new regular</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;That's a bit of a mouthful - but it is the synthesis of a lot of material from the SITA technology conference held near Brussels in June this year.&lt;br /&gt;So, I'll put in context and then see where it leads us. The context is that in the airline industry, cost cutting has become so critical (tiny profit margins flying planes) and the global situation has become so complex that we see more and more disruption. Then the clod-footed governments step in and put excessive fines onto the airlines for delays and the whole schedule becomes a crap shoot. Airlines have rarely actually operated the flifght schedule they publish - something always seems to go wrong, but with the ever decreasing tolerances, the ripple effects of tiny perturbations can be huge. Layer in larger events (weather, volcanoes, strikes, terrorism..) and we have an unholy mess.&lt;br /&gt;&lt;br /&gt;Now in many systems development approaches and methods, we are encouraged to do the "happy path" stuff first. Work on the "normal" cases, deliver those and then do the abnormal things on subsequent iterations. That's great if the normal cases truly are normal. And by that I mean deliver most of the value, and absorb the least cost. But what if there is no "normal"? Then how do we prioritize?&lt;br /&gt;&lt;br /&gt;Clearly the "customer" - the stakeholder paying for the solution or on whose behalf the system is being developed will have input to that. But therein lies the rub. There's all sorts of stuff that can go wrong that will potentially affect the architecture and design. And no this isn't enterprise architecture - this is much smaller than that. This is solution architecture - and a classic source of tension in development.&lt;br /&gt;&lt;br /&gt;The solution architect has the responsibility for ensuring that the solution is fit for purpose - but the main purpose is in understanding the degree to which change will stress the system. If this weren't necessary then every solution would be a simple client/server solution (yeah, tongue firmly in cheek here).&lt;br /&gt;&lt;br /&gt;So understanding what's normal/what isn't. What change stressors will be taken into consideration and still not get all crystal-bally is what makes solution architecture hard. It's also what makes it fun!&lt;br /&gt;&lt;br /&gt;Don't be seduced by quick wins on the happy path when the need for the system to absorb change stress is paramount. Don't get all wrapped up in clever system integrity and cunning architecture when you are simply managing transactions - e.g. a recipe file! &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-4809151124042381879?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/4809151124042381879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=4809151124042381879&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4809151124042381879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4809151124042381879'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2011/07/irregular-is-new-regular.html' title='Irregular is the new regular'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-8223940563549702902</id><published>2011-03-21T06:50:00.000-07:00</published><updated>2011-03-21T06:50:58.826-07:00</updated><title type='text'>Intellectual Honesty, Ivory Towers, pragmatism and other emotive phrases</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;This isn't just enterprise architecture. It's about architecture at lots of levels.&lt;br /&gt;&lt;br /&gt;Like many posts, this all started with an innocent (hah, likely!) tweet and then became richer as people joined in. Here's the original. &lt;em&gt;RT @SLSingh Bad Science by @BenGoldacre asks "Why don’t journalists link to primary sources?"&lt;/em&gt;&amp;nbsp; originally posted by &lt;span class="screen-name screen-name-frodedanielsen pill"&gt;&lt;span style="font-family: inherit;"&gt;@frodedanielsen (someone I have never met). At which point the irrepressible Alkes Buterman and Doug Newdick chimed in.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="screen-name screen-name-frodedanielsen pill"&gt;&lt;a class="tweet-screen-name user-profile-link" data-user-id="21202376" href="http://twitter.com/#!/aleksb6" title="Aleks Buterman"&gt;&lt;strong&gt;&lt;span style="color: #333333;"&gt;aleksb6&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;span class="tweet-full-name"&gt;&lt;span style="color: #999999; font-size: x-small;"&gt;Aleks Buterman&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="tweet-corner"&gt;&lt;div class="tweet-meta"&gt;&lt;br /&gt;&lt;span class="icons"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="tweet-row"&gt;&lt;div class="tweet-text"&gt;RT @&lt;a class="  twitter-atreply" data-screen-name="seabird20" href="http://twitter.com/seabird20" rel="nofollow"&gt;&lt;span style="color: #2d76b9;"&gt;seabird20&lt;/span&gt;&lt;/a&gt; RT @&lt;a class="  twitter-atreply" data-screen-name="SLSingh" href="http://twitter.com/SLSingh" rel="nofollow"&gt;&lt;span style="color: #2d76b9;"&gt;SLSingh&lt;/span&gt;&lt;/a&gt; Bad Science by @&lt;a class="  twitter-atreply" data-screen-name="BenGoldacre" href="http://twitter.com/BenGoldacre" rel="nofollow"&gt;&lt;span style="color: #2d76b9;"&gt;BenGoldacre&lt;/span&gt;&lt;/a&gt; asks "Why don’t journalists link to primary sources?" &lt;a class="twitter-timeline-link" href="http://bit.ly/hkcuY4" rel="nofollow" target="_blank"&gt;&lt;span style="color: #2d76b9;"&gt;http://bit.ly/hkcuY4&lt;/span&gt;&lt;/a&gt; &amp;gt;&amp;gt;+1 &amp;lt; +42&lt;/div&gt;&lt;/div&gt;&lt;div class="tweet-row"&gt;&lt;a class="tweet-timestamp" href="http://twitter.com/#!/aleksb6/status/49087970296340481" title="7:40 AM Mar 19th"&gt;&lt;span class="_old-timestamp" data-long-form="true" data-time="1300538458000"&gt;&lt;span style="color: #999999; font-size: x-small;"&gt;19 Mar&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="tweet-actions" data-tweet-id="49087970296340481"&gt;&lt;a class="favorite-action" href="http://twitter.com/#" title="Favorite"&gt;&lt;i&gt;&lt;/i&gt;Favorite&lt;/a&gt;&lt;a class="retweet-action" href="http://twitter.com/#" title="Retweet"&gt;&lt;i&gt;&lt;/i&gt;Retweet&lt;/a&gt;&lt;a class="reply-action" data-screen-name="aleksb6" href="http://twitter.com/#" title="Reply"&gt;&lt;i&gt;&lt;/i&gt;Reply&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="tweet-row"&gt;&lt;/div&gt;&lt;div class="conversation-last-ancestor-tweet"&gt;&lt;div class="stream-item"&gt;&lt;div class="stream-item-content tweet stream-tweet simple-tweet " data-item-id="49213116881448960" data-screen-name="dougnewdick" data-tweet-id="49213116881448960" data-user-id="24663153"&gt;&lt;div class="tweet-image simple-tweet-image"&gt;&lt;img alt="Doug Newdick" class="user-profile-link" data-user-id="24663153" height="32" src="http://a1.twimg.com/profile_images/97526984/Doug_bruges_normal.jpg" width="32" /&gt;&lt;/div&gt;&lt;div class="tweet-content simple-tweet-content"&gt;&lt;div class="tweet-row"&gt;&lt;span class="tweet-user-name"&gt;&lt;a class="tweet-screen-name user-profile-link" data-user-id="24663153" href="http://twitter.com/#!/dougnewdick" title="Doug Newdick"&gt;&lt;strong&gt;&lt;span style="color: #333333;"&gt;dougnewdick&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;span class="tweet-full-name"&gt;&lt;span style="color: #999999; font-size: x-small;"&gt;Doug Newdick&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="tweet-corner"&gt;&lt;div class="tweet-meta"&gt;&lt;span class="icons"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="icons"&gt;&lt;div class="extra-icons"&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="extra-icons"&gt;@&lt;a class="  twitter-atreply" data-screen-name="aleksb6" href="http://twitter.com/aleksb6" rel="nofollow"&gt;&lt;span style="color: #2d76b9;"&gt;aleksb6&lt;/span&gt;&lt;/a&gt; @&lt;a class="  twitter-atreply" data-screen-name="seabird20" href="http://twitter.com/seabird20" rel="nofollow"&gt;&lt;span style="color: #2d76b9;"&gt;seabird20&lt;/span&gt;&lt;/a&gt; how many &lt;a class="  twitter-hashtag" href="http://twitter.com/#!/search?q=%23entarch" rel="nofollow" title="#entarch"&gt;&lt;span style="color: #2d76b9;"&gt;#entarch&lt;/span&gt;&lt;/a&gt; are @&lt;a class="  twitter-atreply" data-screen-name="SLSingh" href="http://twitter.com/SLSingh" rel="nofollow"&gt;&lt;span style="color: #2d76b9;"&gt;SLSingh&lt;/span&gt;&lt;/a&gt;  and @&lt;a class="  twitter-atreply" data-screen-name="BenGoldacre" href="http://twitter.com/BenGoldacre" rel="nofollow"&gt;&lt;span style="color: #2d76b9;"&gt;BenGoldacre&lt;/span&gt;&lt;/a&gt; fans?&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="tweet-row"&gt;&lt;a class="tweet-timestamp" href="http://twitter.com/#!/dougnewdick/status/49213116881448960" title="3:58 PM Mar 19th"&gt;&lt;span class="_old-timestamp" data-long-form="true" data-time="1300568296000"&gt;&lt;span style="color: #999999; font-size: x-small;"&gt;19 Mar&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="tweet-actions" data-tweet-id="49213116881448960"&gt;&lt;a class="favorite-action" href="http://twitter.com/#" title="Favorite"&gt;&lt;i&gt;&lt;/i&gt;Favorite&lt;/a&gt;&lt;a class="retweet-action" href="http://twitter.com/#" title="Retweet"&gt;&lt;i&gt;&lt;/i&gt;Retweet&lt;/a&gt;&lt;a class="reply-action" data-screen-name="dougnewdick" href="http://twitter.com/#" title="Reply"&gt;&lt;i&gt;&lt;/i&gt;Reply&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But then Aleks posed the hard question... &lt;em&gt;@seabird20 @dougnewdick I'm a big fan of intellectual honesty (#popper) but isn't that easily confused for "academic" #entarch?&lt;/em&gt; &lt;br /&gt;&lt;br /&gt;That's what got me to this point - and it made me reflect on framing - using language that manages to demean an "opponent" while at the same time boosting your own value. "academic" is just one such word. Often used by teams that are under great pressure to meet a deadline and seeing that deep analysis could extend the time to delivery, demolish some closely held beliefs, make them look stupid because they forgot something. Use in context, "oh you are architects are so academic, that isn't a&amp;nbsp;concern". While others will be thinking ("yet but it will become one..."). Of course the opposite word, used by those not wishing to do deep analysis is "pragmatic". We have a pragmatic solution.... Thus cutting off possible debate/discussion.&lt;br /&gt;Architects can (and should) find themselves in a difficult position here. They (we) must be seen to be taking the side of pragmatism, and yet ensure that the teams are not taking on excessive technical debt. We need to be asking the important questions around operability of the system, its performance and availability envelope, its need for flex when it is used in unanticpated ways. remembering of course that solutions get used in unexpected ways and in unanticipated quantities.&lt;br /&gt;Make sure we use data and data values to describe the system envelope. How many users? How many transactions? How many transactions per second? What is the reliability/bandwidth of the communication path? What does it cost per transaction to use an external service? What if that service is not available? Can the system be unavailable for 1 minute, 5 minutes, 1 hour...? What does it cost to use a "pet" technology? and so on. Otherwise known as the -ilities. Sometimes called non-functional requirements, but I would argue that they are quivalent to functional requirements. If these are not met you don't have a functional system.&lt;br /&gt;&lt;br /&gt;In VPEC-T terms this is a classic conflict of values. The EAs are charged with the rather nebulous protection of the future. The project teams are charged with getting value out there fast. Those value systems are fundamentally at odds. So as architects we have the responsibility to be scrupulous in our questioning, demand the data that supports the project's assertions of cost/risk/time to market. Finally those that write the checks have to decide.&lt;br /&gt;What we architects must not do is put up wooly, ivory towered thinking to prove how clever we are, how stupid everyone else is, how the world will come to an end if the solutions are not developed the way we dictate. We must not be sowers of fud, but analysts of relevant data.&lt;/div&gt;&lt;/div&gt;&lt;/div&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/2120400492278270391-8223940563549702902?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/8223940563549702902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=8223940563549702902&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/8223940563549702902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/8223940563549702902'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2011/03/intellectual-honesty-ivory-towers.html' title='Intellectual Honesty, Ivory Towers, pragmatism and other emotive phrases'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-5726980872150244333</id><published>2011-03-03T05:05:00.000-08:00</published><updated>2011-03-03T05:05:14.940-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Value'/><category scheme='http://www.blogger.com/atom/ns#' term='Uncertainty'/><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><category scheme='http://www.blogger.com/atom/ns#' term='Trust'/><category scheme='http://www.blogger.com/atom/ns#' term='Decision'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><title type='text'>Decisions under uncertainty</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;What data do we use to make decisions? Do we rely on the most up to date information possible? Do we use rough approximations? How do we reason about our decision thinking. Taking a concrete example first, I will then look for further insights and, of course, solicit comment.&lt;br /&gt;My favorite example of decision under uncertainty is when I am making a purchasing decision and paying for the purchase by check (cheque!). I want to have some degree of certainty that the check will clear, so I have several strategies at my disposal.&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Call the bank, tell the bank that I have a particular purchase to make, give the intended cheque number and amount and get some kind of a gurantee that the check will clear (even if my expected paycheck deposit bounces).&lt;/li&gt;&lt;li&gt;Call the bank/go to an ATM or whatever, get the current (available) balance, find out which payments/deposits have already cleared and satisfy myself that there is enough for the check I am about to write&lt;/li&gt;&lt;li&gt;Call the bank/go to the ATM or whatever and get the currrent balance, ensure it is enough to cover the check I am about to write&lt;/li&gt;&lt;li&gt;Look in the check ledger (or home accounting system) and satisfy myself that the balance is sufficient.&lt;/li&gt;&lt;li&gt;Assume that because I have checks left, I must have money.&lt;/li&gt;&lt;/ol&gt;Well I was just kidding about #5. These choices all have some degree of risk (from very little risk in #1 to significant risk in #5). But which one do we choose, and why? I suspect it has a great deal to do with how we perceive the risks. So, for example, if I were working for a large company with a great history of making payroll, the likelihood of a pay check bouncing is very low, so I will act confidently and perhaps take any of the choices 2, 3, 4. However working for an underfunded startup, I may well choose 1. There are lots of other variables in here too. How much does the bank charge for bouncing a check - vs the value of the check. How much reputation (aka credit report) damage might I suffer, etc. So I make a decision. But except in case 1, the decision is somewhat uncertain.&lt;br /&gt;&lt;br /&gt;In our daily lives, we constantly act on imperfect data, but we use our experiences to guide us. I am pretty sure that my socks will be in the sock drawer, so will go there first. But if they are in the laundry - I might have to take a corrective action, the risk is low, the actual impact is low, so I will go to the drawer first. Oh, and no, I don't consciously do the risk analysis of every small thing - that would be very counter productive. That's why we have experience! We can act without consciously managing trivial risk.&lt;br /&gt;&lt;br /&gt;Now moving into information systems, things look a little different - but should they? We attempt to limit risk of doing the wrong things (including being gamed by clever risk expoitation) by using tight centralized control (aka databases of record, single points of truth, etc.) However, these kinds of systems are inherently fragile. They are also more unreliable than we think. The value of any piece of data&amp;nbsp; is only valid &lt;em&gt;at the time we request it&lt;/em&gt; unless we wrap the request with explicit transaction boundaries. But then if we have to serialize access to data every time we want to use any of it, everything would gum up and come to a grinding halt. So we always use approximations&lt;br /&gt;&lt;br /&gt;The "trick" is to realize that you are always retrieving an approximation, realize that much decision making can be relegated to a system of reference, but that when making changes you must affect the system of record. And when affecting the system of record we do need transactions! Transactions give us the "truth" at that moment. The decision to change the "truth" is however very often made on approximations. This isn't bad - it's reality. Of course we can contrive situations where we have to have "truth" just as in my example 1 above, but those cases are more rare than we imagine.&lt;br /&gt;&lt;br /&gt;It then becomes an architectural and design principle - what source do we we use in order to make decisions? How does the system of record react when attempts are made to update it based on out of date information? That all plays into the Values and Trust axes relevant to that decision making.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-5726980872150244333?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/5726980872150244333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=5726980872150244333&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5726980872150244333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5726980872150244333'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2011/03/decisions-under-uncertainty.html' title='Decisions under uncertainty'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3446213545242994624</id><published>2011-02-28T08:13:00.000-08:00</published><updated>2011-02-28T08:13:29.739-08:00</updated><title type='text'>Requirements "gathering"</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;This makes it sound as if requirements are like mushrooms in the forest - you take a small basket, go to some secret place and pick all the things that you hope are edible, bring them home, cook them, eat them and, you hope, not die of food poisoning.&lt;br /&gt;&lt;br /&gt;But there is a lot that has to go into the creation of a "proper" set of requirements. This post was inspired by some observations from Nigel Green (@taotwit), Alec Sharp (@alecsharp) with Color commentary from Anne Manes (@atmanes), Kristof Dierckxsens (@kdierc) and Doug Newdick (@dougnewdick). All those @ signs give the twitter ids of the people involved. Mine is @seabird20.&lt;br /&gt;&lt;br /&gt;The riff all started with this, innocuous little tweet from Alec... &lt;br /&gt;&lt;br /&gt;&lt;span class="status-content"&gt;&lt;strong&gt;&lt;a class="tweet-url screen-name" href="http://twitter.com/alecsharp"&gt;&lt;span style="color: #2276bb;"&gt;alecsharp&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt; &lt;span class="entry-content"&gt;@&lt;a class="tweet-url username" href="http://twitter.com/seabird20" rel="nofollow"&gt;&lt;span style="color: #2276bb;"&gt;seabird20&lt;/span&gt;&lt;/a&gt; My point - I see far too many cases where BAs gather literally 1000s of requirements but never synthesize them into a solution.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This of course led me to thinking - we have people who have analyst in their title, but almost always need to do some level of synthesis. Analysis and synthesis are often presented as opposites, so what gives? Here, the &lt;a href="http://expertchoice.blogspot.com/2007/07/analysis-vs-synthesis-or-analysis-and.html"&gt;expertchoice team&lt;/a&gt;&amp;nbsp;point out that you can't have a solutiion from analysis alone! Well that's kinda obvious, but still well put.&lt;br /&gt;&lt;br /&gt;We typically associate analysis and design (with design taking the sysnthesis role in this counterpoint but it really isn't). &lt;br /&gt;&lt;br /&gt;Now back to requirements, why do we have thousands of detailed requirements listed on powerpoints, in word docs, in Excel spreadsheets or wherever? Does it really help us to create so much "electronic concrete?"&lt;br /&gt;&lt;br /&gt;The Agile movement has been very helpful in helping is do a much lighter weight job of handling the requirements, but I think that many agile practices also miss the boat.&lt;br /&gt;So what matters?&lt;br /&gt;&lt;br /&gt;First off, if I have my architect hat on (not necessarily EA hat), I am interested &lt;em&gt;in those requirements that will make a difference to the &lt;strong&gt;structure &lt;/strong&gt;of the functioning system.&lt;/em&gt; House analogy time, what it's going to be made of, and how it will be put together not the color of the curtains. And that plays right back into the excellent book, "How buildings learn" by Stewart Brand. Being concerned with the shearing forces, the forces of change.&lt;br /&gt;&lt;br /&gt;(Aside):One golden rule, if stuff is going to change a lot don't spend inordinate time documenting it. A mocked up screen is a much quicker/cleaner artifact than a page of documentation. But that also misses the big point.&lt;br /&gt;&lt;br /&gt;Counting things might help you to estimate them...Counting things doesn't tell you some of the essential things that will determine the structure. So let's think about some examples:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You are getting together the "requirements" for an accounting system. Do the following make a difference to the structure? (and therefore have got to be right early)?&lt;/li&gt;&lt;ul&gt;&lt;li&gt;It has to be multi-currency&lt;/li&gt;&lt;li&gt;We have to support monetary amounts in the 10s of billions and 3 decimal places&lt;/li&gt;&lt;li&gt;Connectivity to remote users is intermittent&lt;/li&gt;&lt;li&gt;The users don't all speak the same language&lt;/li&gt;&lt;li&gt;We have thousands of accounts to manage&lt;/li&gt;&lt;li&gt;We want to consolidate data entry onto a single screen for account master data&lt;/li&gt;&lt;li&gt;We need to be able to drill down from summary data into the details&lt;/li&gt;&lt;li&gt;The system has to be available for transaction posting from 0600 until midnight&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Of course these aren't real requirements. Some of them make a big difference to our lives. Multi-currency??? Well if you have ever had to convert a single currency system to a multi-currency you understand those implications. So yeah, pay attention. Size of numeric fields? Not so much. It's pretty much a nit. Pain to change in the formal documentation&amp;nbsp;if you have carefully mocked up a screen&amp;nbsp;layout showing (8,2) and you now need &amp;nbsp;(11,3), that's a lot of editing if you have specified every screenshot. So don't! &lt;br /&gt;&lt;br /&gt;Drill down? Well that can be huge because it exposes a level of functinality different from just posting transactions.&lt;br /&gt;&lt;br /&gt;Do all of the "requirements" appear at the same time? - Definitely not. Looking at a simple mock up showing postings doesn't show that I have multi-currency. We have to do analysis to discover the individual postings need&amp;nbsp;- and then synthesis to put it back together fully in context.&lt;br /&gt;&lt;br /&gt;Story telling is vital here - our analysts have to tell stories, they have to understand the business future state that is being proposed, they have to understand the constraints, and then put all the ingredients together at the right time. The switch for analysts to synthesists - and maybe have to all the time. However as Alec said in a tweet:&lt;br /&gt;&lt;br /&gt;"&lt;span class="status-content"&gt;&lt;strong&gt;&lt;a class="tweet-url screen-name" href="http://twitter.com/alecsharp"&gt;&lt;span style="color: #2276bb;"&gt;alecsharp&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;:&amp;nbsp; &lt;span class="entry-content"&gt;@&lt;a class="tweet-url username" href="http://twitter.com/taotwit" rel="nofollow"&gt;&lt;span style="color: #2276bb;"&gt;taotwit&lt;/span&gt;&lt;/a&gt; @&lt;a class="tweet-url username" href="http://twitter.com/seabird20" rel="nofollow"&gt;&lt;span style="color: #2276bb;"&gt;seabird20&lt;/span&gt;&lt;/a&gt; I often say a better job title would be "Business Synthesist" but a) hard to say after pints and b) terrible acronym&lt;/span&gt; " &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="status-content"&gt;and another&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="status-content"&gt;"&lt;span class="status-content"&gt;&lt;strong&gt;&lt;a class="tweet-url screen-name" href="http://twitter.com/alecsharp"&gt;&lt;span style="color: #2276bb;"&gt;alecsharp&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt; &lt;span class="entry-content"&gt;@&lt;a class="tweet-url username" href="http://twitter.com/seabird20" rel="nofollow"&gt;&lt;span style="color: #2276bb;"&gt;seabird20&lt;/span&gt;&lt;/a&gt; @&lt;a class="tweet-url username" href="http://twitter.com/taotwit" rel="nofollow"&gt;&lt;span style="color: #2276bb;"&gt;taotwit&lt;/span&gt;&lt;/a&gt; Without synthesis, you end up with reams and reams of disparate "context-free" requirements."&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We are often led to incredibly detailed specifications by our large consulting brethren. They do this as means to managing their profitability not the customer's value. "Oh the risk is too great unless we gather these requirements in excruciating detail, so pay us to do that." And then, "Well YOU didn't tell us so now let's have a change order, so pay for that too." &lt;br /&gt;&lt;br /&gt;Requirements might be gathered as discrete little pieces of functional capability,&amp;nbsp; But we need the cookery of synthesis to turn them into a non-toxic meal.. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3446213545242994624?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3446213545242994624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3446213545242994624&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3446213545242994624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3446213545242994624'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2011/02/requirements-gathering.html' title='Requirements &quot;gathering&quot;'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-1549184922659914036</id><published>2011-01-18T11:44:00.000-08:00</published><updated>2011-01-18T11:44:40.732-08:00</updated><title type='text'>More on what event models can learn from database models</title><content type='html'>One of my earliest posts was entitled, &lt;a href="http://businessanditarchitecture.blogspot.com/2008_06_01_archive.html"&gt;"What can SOA learn from RDBMS?"&lt;/a&gt;&amp;nbsp;In that posting I was arguing for "Event Triggers" that fire when "interesting" business objects change. Of course, "interesting" needs further definition and so for tha matter does "change". However that isn't where I am going in this post.&lt;br /&gt;&lt;br /&gt;Historically in the database world, most systems implemented "pessimistic" locking mechanisms. In a pessimistic approach, access&amp;nbsp;(with possible intent to update)&amp;nbsp;to a data resource could not be obtained unless the requestor were able to get exclusive control of the resource. More recent systems employ an "optimistic" approach whereby the data resource is only locked while it is actually being updated. The semantics are quite different, but the intent is the same - makle sure that we don't have conflicting updates. &lt;br /&gt;&lt;br /&gt;In general pessimistic locking delivers absolute guarantees, but may cause throughput reductions or excessive resource consumption. Optimistic locking assumes that there will be little contention and therefore doen't consume resources not hold locks "until it has to". In a system with optimistic locks the update requestor may have to deal with the contention behavior (retrying operations or whatever). In the pessimistic scenario, the requesting application can't proceed unless it is safe to do so.&lt;br /&gt;&lt;br /&gt;In eventing models, we have similar trade offs that we need to make. No, they aren't lock based, but they do have implications on throughput. These are all focussed around guranteed sequence and guaranteed delivery. Both of these impose throughput limitations on an event based system. Guaranteed sequence isn't really any kind of guarantee however. It is a guarantee that over a certain time frame, messages will arrive in sequence. However this unpacks into not applying events in consuming systems until the guarantee period has expired in some cases. &lt;br /&gt;&lt;br /&gt;Why you might ask? Imagine that you have timestamped events coming in, you may not know that an event that comes in does not have an earlier predecessor that has somehow been held up. So you might choose to wait for the appropriate time interval "just to make sure nothing is coming in later" and then apply all events in proper sequence. Set the event sequence window to 5 minutes and in the worst case you are processing 5 minute batches. That doesn't sound very friendly.&lt;br /&gt;&lt;br /&gt;So maybe you think about applying sequence numbers to the events. That's fine (well kind of) unless the sequence number calculator is a central shared resource, in which case there may be contention for that. At least however, you can detect that events are out of sequence because if a receiving system perceives a gap in sequence numbers, then it can wait for the "time out period" or the appearance of the missing sequence number(s) whichever happens first and then apply the updates. This is a bit intrusive to the event creators - managing sequence numbers was probably not in their original plan.&lt;br /&gt;&lt;br /&gt;In neither of the above scenarios do we get maximal throughput. They are both intrusive and will deliver quite inconsistent throughput. They are rather akin to the pessimistic locking approach taken in database systems.&lt;br /&gt;&lt;br /&gt;Looking at it a different way, we can perhaps detect (externally to the applications) that things have happened out of sequence. maybe using an out of band control infrastructure. Thus if a sender identifies when something was sent (using a messaging infrastructure), the receiver's act of receiving will identify when it was received. If the receipts are out of sequence the infrastructure can alert and trigger actions. The assumptions are that:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sequence errors are few and far between&lt;/li&gt;&lt;li&gt;It is OK to recognize that the sequence has been violated &lt;/li&gt;&lt;li&gt;The infrastructure is capable of re-delivering the events in an appropriate sequence&lt;/li&gt;&lt;li&gt;There have been no irrevocable side effects as a result of the out of sequence receipt.&lt;/li&gt;&lt;/ul&gt;Attempting to detect post-hoc is likely (and I have not done the work to prove this yet) to deliver mmore consistent (and higher) throughput than attempting to guarantee, with a slight increase in risk.&lt;br /&gt;&lt;br /&gt;This looks to be a fruitful area of research (or if the research has already been done, a fruitful area for some best practice patterns) as we treat 2011 as "The Year of the Event" as &lt;a href="http://www.biske.com/blog/?p=810"&gt;Todd Biske&lt;/a&gt; proposes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-1549184922659914036?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/1549184922659914036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=1549184922659914036&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/1549184922659914036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/1549184922659914036'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2011/01/more-on-what-event-models-can-learn.html' title='More on what event models can learn from database models'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-2416071892008446233</id><published>2011-01-13T09:20:00.000-08:00</published><updated>2011-01-13T09:20:21.475-08:00</updated><title type='text'>ROI Based Business Cases and Long Range Value</title><content type='html'>In a series of interesting twitter posts @taotwit(Nigel Green), @erikproper, @oscarberg, @jdevoo have been discussing modelling Value - other than monetary value. In &lt;a href="http://www.lithandbook.com/"&gt;VPEC-T&lt;/a&gt; (modeling based on Values, Policy, Events, Contents and Trust) the abstract concept of Value recognizes things other than monetary value.&lt;br /&gt;&lt;br /&gt;In other posts, I have seen reference (and I am sorry that I cannot cite the references) to &amp;nbsp;a primary role of Enterprise Architecture as the team/approach for encouraging project funding across siloes. It was expressed more elegantly in the other posts, I admit!&lt;br /&gt;&lt;br /&gt;These various posts and thoughts about Value led me to thinking about entrapreneurial organizations and risk averse organizations. Some of these arguments are kind of old hat, but in companies where innovation is a core driver (eg apple) the introduction of products isn't based (entirely) on ROI. Compare and contrast with very "mature" organizations where business as usual (in the sense that the company delivers the same products, with the same methods, with the same focus on return) because of shareholder or other leadership demands.&lt;br /&gt;&lt;br /&gt;Architects are also sometimes thought to be ivory tower/"build it and they will come" kinds of people. This is an accusation that does have merit - we have been guilty of such sins, but it is also used as a weapon for politcal/organizational purposes. The Trust relationships are key here - because architects are likely to be destabilizers (of the status quo and current power bases) means that there will be a failure to Trust the EAs by those who will be affected/disempowered by innovation.&lt;br /&gt;&lt;br /&gt;We see this happening frequently in enterprises where there is a process or organization for innovation. "Innovation will be handled only in the xxx organization". Anyone else onnovating outside that organization will be ignored. That's an intersection along the Value/Trust axes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-2416071892008446233?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/2416071892008446233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=2416071892008446233&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2416071892008446233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2416071892008446233'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2011/01/roi-based-business-cases-and-long-range.html' title='ROI Based Business Cases and Long Range Value'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3230432060358430583</id><published>2011-01-12T15:52:00.000-08:00</published><updated>2011-01-12T15:53:38.395-08:00</updated><title type='text'>2011 The year of the event</title><content type='html'>Todd Biske, on his excellent Blog has offereed the imperative, &lt;a href="http://www.biske.com/blog/?p=810"&gt;"Let's make 2011 the year of the event"&lt;/a&gt;&amp;nbsp;That is a truly wonderful cause. I am shamelessly taking the idea and adding some of my own thinking here. I urge you to read Todd's original post, though.&lt;br /&gt;&lt;br /&gt;I think we have had misgivings about eventing models since the early EAI days. With the advent of EAI we worked with events as integration mechanisms. Without attempting to do anything about the underlying systems, and without a sensible taxonomy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now perhaps as we think seriously about events and event models there are 2 big ideas that we need to consider. &lt;br /&gt;&lt;br /&gt;The first is that when some business object changes state, it should let "the world" know. Think Business Object trigger - here's a link back to &lt;a href="http://businessanditarchitecture.blogspot.com/2008/06/what-can-soa-learn-from-rdbms.html"&gt;2008 on that&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;The second is situational awareness, Here we really need to have a proper mechanism for understanding the effects of an event across a rabge of "observers" might be. It becomes a question of responsibility. When multiple "observers" see the same event they may all choose to handle it. However they are likely to be inconsistent (not necessarily any harm in that), some might claim ignorance (you never told me that), some might have taken different action knowing how another observer behaved...&lt;br /&gt;&lt;br /&gt;Using human communications and human triggered interactions as a model, we need to look at the "situational awareness" aspect and decide what to do about conflicts in understanding, conflicts in behavior&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3230432060358430583?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3230432060358430583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3230432060358430583&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3230432060358430583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3230432060358430583'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2011/01/2011-year-f-event.html' title='2011 The year of the event'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3439495138377697821</id><published>2011-01-01T15:38:00.000-08:00</published><updated>2011-01-01T15:38:26.608-08:00</updated><title type='text'>Time Part 2 - Januray 1, 2011</title><content type='html'>This post follows on from the introduction to thinking about time posted &lt;a href="http://businessanditarchitecture.blogspot.com/2010/12/time-part-one-posted-dec-31-2010.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In the previous post, I introduced a few of the nuanaces of time. It isn't about the obvious things like format, timezone, precision, calendar, etc. Those are important and can be the source of errors in coding, but they aren't the worst issues by any means. Of more importance is the meaning of time in a specific context. So to start with. let's look at the kinds of time we might be concerned with. I like to think of time as either a"point in time" or duration. Then associated with times there are various "operations" that are to be applied - dealing with relative time. &lt;br /&gt;&lt;br /&gt;So thinking about the common "kinds" of time we see, we might classify this way:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Points in time&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Real time - coincident (to a fine tolerance) with something else&lt;/li&gt;&lt;li&gt;Near real time - within the same "transaction" scope as something else&lt;/li&gt;&lt;li&gt;Actual time - When something happened&lt;/li&gt;&lt;li&gt;Notification time - When an event was notified. This may or not be the time the event happened&lt;/li&gt;&lt;li&gt;Observation time - when an observer receives notification that something happened&lt;/li&gt;&lt;li&gt;Effective time - a point in time when something becomes effective&lt;/li&gt;&lt;li&gt;Expiry time - a point in time when something is no longer valid&lt;/li&gt;&lt;li&gt;Cut off time - a point in time when changes are no longer accepted (may behve like an expiry time)&lt;/li&gt;&lt;li&gt;?&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Durations&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Validity period - a time duration where something is valid&lt;/li&gt;&lt;li&gt;Length of time - a time duration where something is happening &lt;/li&gt;&lt;li&gt;Relative duration - a duration that is defined without there being an actual start time. For example, a half in soccer. A type level concept and not an instance level concept.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Clearly in this intial writing there are some quite nebulous words like "something" or "transaction" or "Event". Perhaps happening would be a more useful word.&lt;br /&gt;&lt;br /&gt;Anyhow much of the difficulty in systems comes about because of ambiguity related to time. Something may "happen" causing the place at which it happens to think that the happening has occurred, but it has yet to be observed by other entities. Until it does the other entities cannot know that the state has changed. &lt;br /&gt;&lt;br /&gt;This is not just a systems phenomenon, but a physics phenomen too. Light moves at a finite speed, so when we see an object (eg a star) that has emitted light, we are seeing the object &lt;em&gt;as it was at the time the light was emitted, &lt;/em&gt;and not as it is "now" - or in the frame of reference of us, the observers. We don't (and cannot) know whether the object even still exists. We make assumptions, of course, but in reality we don't know. In other words there is considerable ambiguity.&lt;br /&gt;&lt;br /&gt;The big question then is how to handle such ambiguities/inconsistencies of existence. We could take the "GOD" view. There is only one view of the truth, all questions must be asked of that view and there shall be&amp;nbsp; no other views. &amp;nbsp;That's fine, except it does take finite time to ask questions, so even if there is a "GOD" view there is and always will be inconsistency.&lt;br /&gt;&lt;br /&gt;We can take a view that allows each observer to have its own "correct" view. But that doens't feel any better. We can never be sure when asking that observer if the same set of data has been included as in another observer's set. So for example, when I am presenting some conclusions, it might be quite reasonable for a questioner to ask if I had included the research that was published in December 2010. The point is that unless we are pretty explicit about what is in and what isn't, it is hard to determine what something actually means.&lt;br /&gt;&lt;br /&gt;Ultimately we cop out and attempt to have a GOD view of our own data and then allow for other pockets of data which we "update" by taking extracts from the "GOD" view. That has sort of worked - we batch things together and know that the information was correct at midnight yesterday or other known time.&lt;br /&gt;&lt;br /&gt;All changes in systems that work in individual events, where data are not batched, where a system is as up to the moment as possible &lt;strong&gt;&lt;em&gt;because we don't know and cannot in today's systems know' &lt;/em&gt;&lt;/strong&gt;what has actually been included and what hasn't.&lt;br /&gt;&lt;br /&gt;The taxonomy of time that I presented earlier is really only useful as an analysis set. It helps us as analysts answer questions about the data as the data are purposed and repurposed in the (extended) enterprise. It gives a vocabulary to use when asking questions around a particular happening or duration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3439495138377697821?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3439495138377697821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3439495138377697821&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3439495138377697821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3439495138377697821'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2011/01/time-part-2-januray-1-2011.html' title='Time Part 2 - Januray 1, 2011'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-7693633206189560134</id><published>2010-12-31T09:33:00.000-08:00</published><updated>2010-12-31T09:33:46.669-08:00</updated><title type='text'>Time Part One -  Posted Dec 31 2010</title><content type='html'>I fear that this is going to be a difficult post. But I feel so passionately about time that I will give it a go. What&amp;nbsp;uses of Time&amp;nbsp;do we need to think about. In some ways it's pretty straightforward, there are instants and durations. But there is often complex interplay between people/systems regarding these. &lt;br /&gt;For example, when I see a program on TV, and it covers something I haven't seen before I make an assumption that it is new. But in reality it probably isn't - others will likely have seen it. I still may tweet or otherwise notify a social group that I saw this "new" programme....... So I find it annoying not to know the time context in which something is published or made available. Of course this allows for jokes like Simon Wardley made at his excellent &lt;a href="http://www.youtube.com/watch?v=5Oyf4vvJyy4"&gt;OSCON presentation&lt;/a&gt;.&lt;br /&gt;"...Opens up exciting new prospects for the employment of computers in ways and on a scale that would have seemed pure fantasy only five years ago" Simon was applying the idea to the cloud, but actually the quotation stems from 1966. Without the time context we simply don't know.&lt;br /&gt;&lt;br /&gt;And that leads to another area of time complexity - relative time - relative time words. testerday, today, five minutes ago. Of course functions that use relative time are ont idempotent. I get a different answer to "yesterday()" today than I will tomorrow.&lt;br /&gt;&lt;br /&gt;As an aside, in synchronous conversation we know what time we are talking about, but in asynch we don't but we still use synch modes. So getting a bit more concrete.&lt;br /&gt;&lt;br /&gt;Madame had a tennis game scheduled. I am absent minded. Madame needs reading glasses. On her phone there was a text message from Mary saying, "Are we playing tennis tomorrow?" &amp;nbsp; Madame asked me to read it to her on Tuesday morning. My assumption was that the tennis game was to be on Wednesday (tomorrow&amp;nbsp;viewed from my contextual frame which was Tuesday morning).&amp;nbsp; Actually the game was Tuesday because Mary sent the message&amp;nbsp;on Monday. Madame and Mary had had previous communication on the subject and so had further context.&amp;nbsp;So there are lots of different times and interpretations lurking here. There's the contextual time of each participant, there's the actual time of the event, there's the time the message was sent, there's the time Madame's phone received the message... Much scope for ambiguity.&lt;br /&gt;&lt;br /&gt;Our command and control/standardization brethren might seek to impose unambiguous temporal semantics onto tennis scheduling, our family life, our friends.... However we can see that's going nowhere. Standardizing the terms - yeah right.&lt;br /&gt;&lt;br /&gt;However as thinkers about systems these things do matter. How do we understand the temporal frames of the various participants including those participants that are systems as well as those that are humans. When do we have to worry about these differences? How do we describe them internally (so that the things that care deal properly), but not to attempt to impose an external semantics onto every participant?&lt;br /&gt;&lt;br /&gt;These are hard questions and get to the heart of interaction/integration and what happens in architecture.&lt;br /&gt;&lt;br /&gt;In subsequent posts I will lay out some starting ideas around thinking about time (something delicious here - time from someone who is often late....)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-7693633206189560134?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/7693633206189560134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=7693633206189560134&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/7693633206189560134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/7693633206189560134'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2010/12/time-part-one-posted-dec-31-2010.html' title='Time Part One -  Posted Dec 31 2010'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-6787950533753301796</id><published>2010-12-31T07:18:00.000-08:00</published><updated>2010-12-31T07:18:00.218-08:00</updated><title type='text'>What do you know and when did you know it?</title><content type='html'>In my Architect role at Sabre, I presented the following at theIATA Commercial conference in Istanbul.&lt;br /&gt;&lt;br /&gt;“The Joined UP Airline”&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.....&lt;br /&gt;I am using two major themes today when discussing the notion of the joined up airline. The first harks back to the Watergate Conspiracy in the 1970s in the USA. The President was asked repeatedly, “What do you know and when did you know it?” The second theme is even older – it is a quotation from the American Humorist and author Mark Twain, “A lie is half way around the world before the truth has its boots on”. These two themes coincide suggesting that carriers “Think like your customers”.&lt;br /&gt;&lt;br /&gt;So let’s unpack these thoughts – and I will lead with an example here. The case of the missing bag. The passenger knows the bag is missing only once all the baggage has arrived at the carousel. But you carriers knew a lot earlier. What do you know? That the bag isn’t on the proper flight. When did you know it? When it was not loaded or when it was loaded onto a different flight. That is certainly before the customer can know it. &lt;br /&gt;&lt;br /&gt;You now have an annoyed customer with a powerful weapon – the weapon of instant communication. The customer will of course send a message like, “Those idiots lost my bag….again.” That message is heard instantly – before you have had a chance to manage the message. That opinion is heard while you are still handling the problem operationally. Your “truth” is still tying its boots while the negative message is already circulating. Wouldn’t it have been better to use the passenger’s contact data to notify him or her as soon as you knew?. No matter that that the passenger is probably out of electronic communication – at least send the message so that s/he doesn’t have to wait at the carousel. Apologize and offer some kind of trip appropriate/status appropriate recompense. In other words act on the information that you have – and do it as soon as you can.&lt;br /&gt;&lt;br /&gt;This approach is at the forefront of Sabre’s SabreSonic CSS solution. That is true Customer Sales and Service. Discover the meaningful happenings and act on them immediately. It looks simple from the outside, but joining up the data is hard. It’s easy for the passenger but hard for systems. The transactional systems are simply not designed (and nor should they be) to do the necessary analysis. However they have the raw information. Making sense out of the raw information and then acting on it in an appropriate way turns the negative into a positive. You may still see the angry posting, but through proactive message management you can do something to handle the “flame”.&lt;br /&gt;&lt;br /&gt;Of course this looks like just plain good customer relationship management. And so from a practices point of view it is. Where we have been lacking up to now is to have platforms that collect data as it becomes available, organizes and standardizes it, joins it with other relevant data and delivers that joined up data to action oriented systems according to your policies. SabreSonic CSS does just that. It allows you to do things that you were unable to do before. Imagine having the freedom and flexibility to do business the way you want to. Let’s turn the previously impossible into current and probable. And remember data without action may be interesting but it isn’t useful.&lt;br /&gt;....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-6787950533753301796?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/6787950533753301796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=6787950533753301796&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/6787950533753301796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/6787950533753301796'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2010/12/what-do-you-know-and-when-did-you-know.html' title='What do you know and when did you know it?'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-5156152878364231305</id><published>2010-07-20T05:23:00.000-07:00</published><updated>2010-07-20T05:23:33.987-07:00</updated><title type='text'>The role of channels</title><content type='html'>On the &lt;a href="http://www.tnooz.com/2010/07/19/news/should-airlines-be-forced-to-disclose-equal-pricing-and-fees-in-all-channels/"&gt;tnooz&lt;/a&gt;&amp;nbsp;web site there is a whole lot of discussion about the pricing of travel through channels and what the responsibilities of the various players are. Specifically the link poses the question, "Should airlines be forced to disclose equal pricing and fees in all channels?"&lt;br /&gt;&lt;br /&gt;Now pricing is an interesting and really important part of any business/business strategy, and thence business architecture. The fundamental question of "How do we price?" affects how we market, how we sell, to some extent how we produce. So for example in a business with only a direct sales model, the systems (in the broadest sense) that deal with sales don't have to handle other channels. But businesses with multiple channels have to make the role of the channel explicit in all systems that are concerned with sales.&lt;br /&gt;&lt;br /&gt;If the channels don't control the pricing, what use are they? Surely the idea (really simplistically) is for the channels to provide the conduits for products from suppliers to consumers and thus to set the price for the product via that conduit.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To be successful as a channel, you presumably have to price items higher than what you get them for. Not all items - you can do loss leading if you wish. A pretty simple market place really.&lt;br /&gt;&lt;br /&gt;The airlines are responsible for setting the cost to the channel, not the price to the consumer - except where the airline is the channel. The role of the airline acting as its own channel is different from the airline operating its own business. The travel business is a bit different from other retail businesses where, typically the manufacturer doesn't operate its own channel. Although when we see store within a store concepts (like the cases where a makeup provider sets up shop inside a retailer) the makeup provider is acting as its own channel. The store in which the make-up provider is operating is simply another supplier and associated costs must be factored in.&lt;br /&gt;&lt;br /&gt;Purchasing is different again. In a world of competition the channels should be clamoring for the consumers' business. Through all manner of inducements. As a consumer I can choose which channel I purchase through depending on a number of factors. Just as I can choose whether to shop at Harrods (Cool, easily identifiable status symbol bag) or Walmart (Look, I am a thrifty person in the new economy). &lt;br /&gt;&lt;br /&gt;So in the travel business we really do have to separate out the responsibilities of the various parties in the transaction. There are more parties than just the airline, channel, and purchaser involved. Hotels, rental car companies, restaurants, golf clubs, credit cards,.... All have parts to play. Each may have multiple parts - the part as the supplier, the part as the purchaser, the part as a channel. If we don't separate the parts, we can create interesting opacity. In some industries that is very desirable. However in a business oriented towards consumers, the consumers want transparency.&lt;br /&gt;&lt;br /&gt;The job of the channel is to provide that transparency.&lt;br /&gt;&lt;br /&gt;So any player in the relationship that wants to be in the role of the channel (whether it be a traditional travel agent, an airline, a hotel, an online travel agent,...) has to act like a proper channel and take the proper channel responsibilities. Simply put:&lt;br /&gt;&lt;br /&gt;* Acquire "inventory" at the proper time/price&lt;br /&gt;&lt;br /&gt;* Package acquired "inventory" into offers&lt;br /&gt;&lt;br /&gt;* Offer the acquired "inventory" under terms that are attractive&lt;br /&gt;&lt;br /&gt;* Accept offers to purchase such inventory &lt;br /&gt;&amp;nbsp; &lt;br /&gt;*&amp;nbsp; Fulfill those offers &lt;br /&gt;&amp;nbsp; &lt;br /&gt;It gets a bit tricky because there are actually multiple channels involved in the end. I can purchase the basic travel through, say, Travelocity or Orbitz. But when I eventually travel, I may end up buying something directly from the airline itself (say a meal). Actually, at that point the airline is acting as a channel for a meal preparation company, so it can choose how to set its prices. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;In order really to understand a complex, network business, we architects really need to think through the roles in the ecosystem, and pay attention to, and manage business architectures that support the pricing models that matter. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;When there is turbulence, aim for flexibility. When there is stability, aim for simplicity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-5156152878364231305?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/5156152878364231305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=5156152878364231305&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5156152878364231305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5156152878364231305'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2010/07/role-of-channels.html' title='The role of channels'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-9062653896260919755</id><published>2010-07-06T06:23:00.000-07:00</published><updated>2010-07-06T06:23:06.072-07:00</updated><title type='text'>Controls and Trust</title><content type='html'>I am appalled as I look at systems in various companies with whom I have consulted, or who have employed me at the lack of system controls in key places. If you are in the data delivery business and you have agreements with your customers, wouldn't you want to know that you are meeting your service level agreements? Or better still when you are not going to (for whatever reason) and be able to issue warnings, do something about it, or whatever?&lt;br /&gt;&lt;br /&gt;Similarly when looking at flow through from one system to another, can you reasonably be assured that everything that was supposed to be processed was?&lt;br /&gt;&lt;br /&gt;Do you count your cash after going to the ATM. Maybe the machine didn't deliver correctly because a couple of notes were stuck together. Maybe a new software version caused a miscount under some weird circumstances. The ATM is a "black box" to me. That means that at its boundaries I have to decide what my trust relationship with it will be.&lt;br /&gt;&lt;br /&gt;So when I have systems which are supposed to communicate in some way (e.g. by passing data) what controls should be in place to make sure everything is properly accounted for? Should a sending system keep a count of what it has sent? Should receiving systems similarly keep track? How do we reconcile? Should the reconciliation be in-band? Should it be out-of-band? Is logging adequate? Do we have to account for the "value" of the transmission as well as just counts? What tolerances matter if we are concerned with value (perhaps one system rounds off the value differently from another so at the end of the day the total value has a discrepancy)?&lt;br /&gt;&lt;br /&gt;This need for controls is exacerbated by systems that use Events as the primary means of notification. Because at the individual event level we can indeed count, maintain value, etc. But often the controls need to be at an aggregate level. One would think in, for example, an airline boarding system that as long as every boarding event is properly received by the "flight", then the system should be in balance. Try telling that to Easyjet. There is a manual control system whereby the Flight Attendants actually count the number of passengers on the plane and attempt to reconcile that with the "expected" number. How the expected number is derived, I have no idea. It could be simply the number of boarding cards collected - but what about electronic boarding? It could be the "system's" view of how many bums there should be on seats. Whatever it is it doesn't appear to be reliable. Chris Potts (Twitter @chrisdpotts) told me the story of what happens when the count is wrong. they recount, they look for people in bathrooms, they delay the flight. It's all a mess.&lt;br /&gt;&lt;br /&gt;In the 1960s when phone phreaking was at its peak, people could make free calls because the control signals (tones) for managing the connection system were on the same band of the infrastructure as the call itself. So when a signal tone was detected (and you could get whistles to generate these tones), the system went into a signalling state. By signalling the correct sequence you could generate the sequence to make free calls. Simple fix - put the controls out of band with what you want to transmit.&lt;br /&gt;&lt;br /&gt;In a properly reliable infrastructure, the appropriate controls should be built in from the beginning. Again, you may ask, "What's this got to do with Enterprise Architecture?". I argue that it has a great deal to do with the architecture of the enterprise. Good controls make for good compliance and a high level of confidence in our business practices. Bad controls can make your corporation star in places you don't want to be - the front page of the WSJ, in anecdotes among the social networks, resulting in a loss of confidence in your organization.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-9062653896260919755?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/9062653896260919755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=9062653896260919755&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/9062653896260919755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/9062653896260919755'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2010/07/controls-and-trust.html' title='Controls and Trust'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3220800700448498550</id><published>2010-07-01T06:07:00.000-07:00</published><updated>2010-07-01T06:07:58.125-07:00</updated><title type='text'>Observations on Silos</title><content type='html'>In &lt;a href="http://rvsoapbox.blogspot.com/2010/06/what-are-silos-good-for.html"&gt;this posting&lt;/a&gt;&amp;nbsp;&lt;a href="http://twitter.com/richardveryard"&gt;Richard Veryard&lt;/a&gt; &amp;nbsp;examines the value of silos and silo thinking in organizations. In some ways silos are necessary organizational mechanisms because they place boundaries on functional activities. However they are also creatures of organizational politics - each silo is headed by "someone important". At the European &amp;nbsp;Enterprise Architecture Conference 2010, &lt;a href="http://twitter.com/alecsharp"&gt;Alec Sharp&amp;nbsp;&lt;/a&gt;&amp;nbsp;observed that silos have negative connotations and that perhaps we should use the term, "Cylinders of Excellence". That at least sounds more empowering.&lt;br /&gt;&lt;br /&gt;Often, however, the success metrics of a silo are actually in conflict with those of the organization. Well intentioned success metric/motivational policy in a sales team (e.g. "Orders taken in the last week of the quarter will pay extra commissions") will in all likelihood have exactly the wrong outcome. Commissioned sales force team members are actually incented to do the wrong thing - to sandbag until the last few days of the quarter. This has potential downstream effects. It places extra burden on finance and other back office "systems" (silos?). It doesn't allow the organization to get a true picture of sales performance through the quarter. Somehow the miracle always seems to occur and some huge deal comes in at the end of the quarter to "rescue the quarter", keep the investors happy, commission the sales team...&lt;br /&gt;&lt;br /&gt;So as architects we should look at the effects of the silos on organizational goals. Moving the silos around is likely to be a bad idea. Powerful people sit at the tops of silos and the only time to effect change at that scale is when new senior management take over. So rather than being perceived as people who are trying to undermine power, enterprise architects need to be seen as people who facilitate the planning and execution of the enterprise.&lt;br /&gt;&lt;br /&gt;A fundamental (inside out) question then is, "How do the goals/reward systems in the current silos ensure that the goals and reward systems of the enterprise? are met" In the example above, the Sales silo would argue that it is helping the enterprise meet its goals by making sure that targets are indeed met. However, there is nothing in the enterprise goals that says "at whatever cost to the rest of the enterprise".&lt;br /&gt;&lt;br /&gt;Enterprise architects are fundamentally enterprise level thinkers and thus must be thinking about the enterprise (and possibly the extended enterprise) as a whole. We must be able to understand the implications of conflicts in the enterprise - where Value systems in the silos are either at odds with each other, or at odds with the value systems of the organization as a whole.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3220800700448498550?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3220800700448498550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3220800700448498550&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3220800700448498550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3220800700448498550'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2010/07/observations-on-silos.html' title='Observations on Silos'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-8875733708405630029</id><published>2010-04-12T16:30:00.000-07:00</published><updated>2010-07-06T16:19:34.445-07:00</updated><title type='text'>Ugliness in the sink</title><content type='html'>An architectural fundamental is that things that are not related should not cause failure on each others' part. The printer breaking should not stop the processing of orders. It does stop the printing of orders (duh), but should not stop the processing.&lt;br /&gt;&lt;br /&gt;Some of the systems I deal with put me in mind of a sewage system. Bear with me here...&lt;br /&gt;&lt;br /&gt;So, imagine the following undesirable situation. You are standing at the sink after dinner washing the dishes/pots/pans etc. It had been raining very hard all day, so the drainage systems had been well overtaxed. You are startled to see stuff coming UP the drain (perhaps from your neighbors house - you can tell what they had for dinner too). This is clearly an undesirable effect.&lt;br /&gt;&lt;br /&gt;On further analysis you realize that the drainage system couldn't take the runoff fast enough, so your house, being lower than your neighbours, became the lowest point their effluent could reach. Oh dear.&lt;br /&gt;&lt;br /&gt;Of course restuarant codes (at least in the USA) have a cure. They make sure there is a buffer zone between the sewage system and any sink where food is prepared. It is an airgap and a sufficiently large gap that any attempt by effluent to rise up will be nullified. It will spread all over the floor instead. Not much better, but definitely not contaminating food in a sink.&lt;br /&gt;&lt;br /&gt;So what's the lesson here? Denial of Service through increased load on a system is something to watch out for. make sure you understand the implications and design accordingly.&lt;br /&gt;&lt;br /&gt;This is as important at a business level as it is at a technical level. Who hasn't experienced a lack of planning - perhaps an airline offering a fare sale and not scaling enough to have call center representatives. Or the &lt;a href="http://dallasmorningviewsblog.dallasnews.com/archives/2010/04/on-rebate-fiasc.html"&gt;fiasco&lt;/a&gt; in Texas where the "business" (the State) offered rebates for trading in old appliances. They underestimated demand horribly.&lt;br /&gt;&lt;br /&gt;The enterprise really has to understand its business models and take care to scale appropriately - and communicate that through to all interested and relevant parties&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-8875733708405630029?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/8875733708405630029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=8875733708405630029&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/8875733708405630029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/8875733708405630029'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2010/04/ugliness-in-sink.html' title='Ugliness in the sink'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3376556901653524184</id><published>2010-03-04T06:44:00.000-08:00</published><updated>2010-03-04T06:44:50.391-08:00</updated><title type='text'>That Can Never Happen</title><content type='html'>Some of the most ominous words I hear from development teams.&lt;br /&gt;&lt;br /&gt;I will illustrate this with a rather contrived example - but one that I hope makes the point easily. No I am not advocating the writing of yet another date handler, but the problem is neatly bounded, well understood and has sufficient complexity to make a good posting.&lt;br /&gt;&lt;br /&gt;You might also be wondering what on earth a small coding problem has to do with Enterprise Architecture. I'll get that out of the way up front. It is relevant because we well get to the core of some of the questions around reuse, system development/deployment philosophy, good practices, etc. Not your typical fare in every day EA, but viewing one of the roles of EA as influencer on "development" we have a nice teaching opportunity.&lt;br /&gt;&lt;br /&gt;So here's the situation. A team discovers that it needs to handle a variety of date formats and in its environment of choice there isn't a robust date package that has been thoroughly tested. They mostly know the rules (leap years, time zones, Daylight Savings Time, etc.). They also know the source of the data they need to convert/check. It's coming from a system where, "If the date is sent to us wrongly by the source system, then there is a whole lot more wrong than this minor blip. Those issues will have been caught elsewhere." If a statement like like doesn't make you very suspicious, then nothing will. But why is it a problem?&lt;br /&gt;&lt;br /&gt;First off, the statement is true - at least in the narrow context. If the source system gets a date "wrong" then indeed this is symptomatic of a larger problem. So far, so good. The developer doesn't do a proper job of checking error possibilities, "Because they can never happen". So if the system is expecting the month to be the three letter abbreviation (e.g. JAN for January, etc.) and it is in English then seeing FEV for February is a problem. There is no English month that starts FEV, but there is a French one. So is the error a typing error (B and V are very close on a standard US keyboard), is it a semantic one - it was supposed to be the French version, or what? Should the developer have to know every language to make sure that all possible month abbreviations are accounted for? Probably not we think. Treat it as an error and move on. But what if the code is badly written and mismatches are not caught because the programmer used some fall through logic and returned DEC for all all invalid months. DEC being the last month and a good candidate for being returned in error, "Because we can never get an invalid month string." OK, perhaps we can't.&lt;br /&gt;&lt;br /&gt;And then project #2 comes along. Developer John says to developer Chris, "Didn't you code up that weird date handling routine last year? I want to use it, can you point me to it?" "Sure it is in the project library at...."&lt;br /&gt;&lt;br /&gt;So John does some "copy/paste reuse" for a piece of trusted code. After all it has been in production for a good long time. No problems found. Inserts it into his application, all is well and about 6 months later it blows up. Turns out that application 2 was not getting the data from the same source as application 1, so it was possible for invalid data to show up. "That Can Never happen" suddenly became, "How the !@#* DID THAT HAPPEN, I THOUGHT WE HAD TESTED CODE" with recriminations from customers, senior management, Uncle Tom Cobbley and all.&lt;br /&gt;&lt;br /&gt;Long story for some short points:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Just because you reuse something doesn't mean it is tested for your situation&lt;/li&gt;&lt;li&gt;Copy/paste reuse is often worrying anyway - code handed that way is very context dependent&lt;/li&gt;&lt;li&gt;Consider the cost of hardening and making the routine a service of some sort.&lt;/li&gt;&lt;li&gt;Promotion of an item to a reusable artifact puts extra stress on development and testing because the more general corner cases have to be considered.&lt;/li&gt;&lt;li&gt;Governance and management of reusable components is an important practice&lt;/li&gt;&lt;li&gt;When something is promoted, make sure its assumptions are known and its tests are included with it - that way at least a potential user of the code can see what conditions have been explicitly tested.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;And finally, if it genuinely "Can't happen." you can be sure that someone, somewhere will make it happen! So again, make the assumptions explicit. Obvious isn't it (especially with hindsight)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3376556901653524184?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3376556901653524184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3376556901653524184&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3376556901653524184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3376556901653524184'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2010/03/that-can-never-happen.html' title='That Can Never Happen'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-5085981147496235003</id><published>2010-02-02T19:28:00.000-08:00</published><updated>2010-02-02T19:28:42.199-08:00</updated><title type='text'>Openness, opensource, lock in, the downfall of authority</title><content type='html'>In the last couple of days a few related ideas came floating by. It started when Madame was bemoaning behavior in her profession (she is a University lecturer). Then I got to thinking about Open Source - at the behest of a customer. This led down the path of no longer being able to dictate because you are the authority.&lt;br /&gt;You might wonder where this is going, so let me elaborate.&lt;br /&gt;In school there is a certain amount of concern that the students are tweeting, surfing the net, multitasking, getting dates on Facebook or something like that. The gut reaction of the authoritarians is to find a way to punish the students. Of course in some ways the lecturers have the ultimate authority - dropping a grade - but that is patently unfair. Madame, of course, came up with the practical observation - make the classes interesting enough and they won't be distracted. That does require effort on the part of the lecturer though.&lt;br /&gt;And now to open source. There is a fear that making something open will lower the switching cost and therefore customers will leave. So, the argument goes, increase the lock in by a proprietary method and tie the customers down. The Madame principal, of course, is to provide enough value so that the customers won't want to switch. That of course also requires effort.&lt;br /&gt;We have much anecdotal evidence that lock-in of any sort is despised - sometimes in the software world a reason not to buy. In the current times, where education has become dialog, where software acquisition i also a dialog, we must be prepared to engage directly as equals and not assume positions of authority "because it always worked that way."&lt;br /&gt;There are few excellent companies that actually can get away (at least for a while) with their authoritarian (aka my way or the highway) stance. That happens when the perceived value of the item is so great that the proprietary nature is&amp;nbsp;irrelevant&amp;nbsp;(Apple anyone?), but the advantage can erode quickly when another competitor enters the market (even if that competitor is no more open). The spat in the pricing model between Amazon and Apple comes to mind here. It just took MacMillan to have an alternative and to stand up to the lock in through monopoly bully and the market fractures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-5085981147496235003?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/5085981147496235003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=5085981147496235003&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5085981147496235003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5085981147496235003'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2010/02/openness-opensource-lock-in-downfall-of.html' title='Openness, opensource, lock in, the downfall of authority'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-5133970850048421833</id><published>2009-11-30T03:40:00.000-08:00</published><updated>2009-11-30T04:15:20.291-08:00</updated><title type='text'>Updates Harmful</title><content type='html'>I have written about this before, I suspect. So forgive me if this is another representation of that resource.&lt;br /&gt;&lt;br /&gt;Hanging out with Nigel Green and John Schlesinger is dangerous, so be warned. There be sacred cows being slaughtered in this post.&lt;br /&gt;&lt;br /&gt;It all started innocently enough a year or so when Nigel and I were discussing the role of databases (record keeping) vs the role of databases (transaction scheduling, message management, etc.). Faulty normalization came into the picture too. Then the harm done by data modeling (where we thought we could model the rules in data). Large scale data modeling efforts requiring significant investment and it becoming very hard to see where the return comes from. Then an aha. If we go back a bit in time, the worst office job used to be "filing clerk." An imaginary discussion when someone comes home from work, "Well dear, what did you do at work today?" "We opened a new file for Acme enterprises. That meant that our index cards were all messed up because we had run out of space for companies starting with A, so we had to rewrite some of those cards, but while we were there we saw that some cards pointed to files that no longer existed so we removed those - but only after we had added more space for the letter A &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-corrected"&gt;companies&lt;/span&gt; (which we didn't need right now anyway.)" "That's nice dear, how about a nice cold beer?"&lt;br /&gt;&lt;br /&gt;The point is that filing clerks used to be the lowliest members of the office - and yet in their electronic reincarnation they have acquired really expensive care and feeding. Of course the new clerks are the databases, the expensive care and feeding is manifested by having a group of thugs (&lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;DBAs&lt;/span&gt;) who hold everyone to &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-corrected"&gt;ransom&lt;/span&gt; with their talk of normalization, &lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;SGA&lt;/span&gt;, proper keys,.. All things which we did pretty easily with clerks. So what's going wrong? What is normalization for?&lt;br /&gt;&lt;br /&gt;Taking normalization first - it is simply for ensuring that we don't get update anomalies. That something that is to have the same value regardless of usage actually does have that value. You don't have to have a normalized database to ensure that the update anomalies aren't present. Although it is a bit easier.&lt;br /&gt;&lt;br /&gt;What is going wrong, is in many ways a harder question. One fundamental thing going wrong is that we use the "filing cabinet" as a scratch pad. So returning to the physical world for a bit. Let's imagine a filing cabinet in which we store the active accounts (perhaps bank accounts). When someone wishes to open an account, we give them a &lt;span id="SPELLING_ERROR_4" class="blsp-spelling-corrected"&gt;whole bunch&lt;/span&gt; of forms to fill in, they go off and fill them in and hand them back to us. We transcribe those forms and do some checkup on the data contained. Once we are happy with the data, we can now give the stuff to the filing clerk and have the clerk create the new file folder. So where were the forms and the checking? In some kind of "blotter" or case management pile on the clerk's desk. They &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-corrected"&gt;weren't&lt;/span&gt; in the active accounts cabinets. And nor should they be.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;No we go to a computerized system. We enter the data from the completed forms into the system and "poof" they create an active account. But actually it is more insidious than that. We go through a series of screens putting in different bits of the account - each leading us to a more perfect account, but we aren't there yet. Eventually they will be in the active accounts database (but probably with an inactive flag) so that they can sometime be transacted. This is nuts. We are using the record keeping database (aka the filing cabinet) to manage work in process. This is not a proper separation of duties.&lt;br /&gt;&lt;br /&gt;It gets worse. The company decides to "go online". Expensive consultants are hired, golf outings are scheduled, expensive dinners eaten and the "new account &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-error"&gt;workflow&lt;/span&gt;" is eventually unveiled. It, too is a sequence of steps. However, the poor schmuck filling this in has to complete each page of the form before moving on. That means that s/he cannot stop for a break - store a scratchpad version of this, do it out of sequence because they can't &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-corrected"&gt;remember&lt;/span&gt; their spouse's Social Security number or whatever. The people in charge of the design of the system understand that THE SYSTEM needs accurate record keeping, have heard that "it is ALWAYS better to validate the data at the point of capture" and other platitudes, but forget that at the end of the line there is the poor user. For these kinds of data entry systems, (and a whole host of housekeeping systems) we need to store the "process state" separately. Don't use the state of the key entity as a substitute for that. Store where I am in the account opening in the account opening process, not in the entity that represents the account.&lt;br /&gt;&lt;br /&gt;So what got this diatribe really going? The notion that updates are unnatural - and probably harmful. I posit that the reason that we do updates is mostly because the common need for retrieval of something is the most recent version of it. So it makes sense to have access to the most recent version and update in place. But that isn't always the most expedient behavior. Certainly the most recent value is often the value you need - especially in an operational system. However more and more systems really need the ability to look back. Even something as simple (looking) as you medical record is not something you want to update. Patient History is key. We don't need to know the current cholesterol level (in isolation), we need its trend. So we don't just update the "cholesterol value" in the patient record. We add a new item for the cholesterol and keep the history. We keep the record sorted in time sequence so we can see the latest. We don't just overwrite the value. Our uses of data are so unpredictable, that simply updating database arbitrarily is going to give us data loss. We don't know in advance how serious that data loss might be. Perhaps it would be better to assume that we will need everything and come up with a scheme that at some backbone level ensures that the current view can be &lt;span id="SPELLING_ERROR_8" class="blsp-spelling-corrected"&gt;reconstructed&lt;/span&gt; by replaying the operational events.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-5133970850048421833?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/5133970850048421833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=5133970850048421833&amp;isPopup=true' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5133970850048421833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5133970850048421833'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/11/updates-harmful.html' title='Updates Harmful'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-817914565417860084</id><published>2009-11-30T03:24:00.001-08:00</published><updated>2009-11-30T03:36:01.632-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='publisher'/><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='subscriber'/><category scheme='http://www.blogger.com/atom/ns#' term='complexity'/><title type='text'>Musings with John Schlesinger</title><content type='html'>John Schlesinger is an event thinker par excellence. So whenever I get the chance, I visit him in London to validate some thinking - or just to spend time with a terrific guy! So on a recent trip to London the subject turned to the rise of event thinking and the downplaying of the traditional SOA patterns. Of course the SOA traditions are being reborn to encompass the events brigade, but because SOA is so broadly and imprecisely defined that's perfectly OK. The SOA hype is over, long live the SOA hype. But that's perhaps a topic for another time.&lt;br /&gt;&lt;br /&gt;The key observation from my lunch with John was one I had suspected, but was not able to frame properly. With a few well chosen sentences John had it for me.&lt;br /&gt;&lt;br /&gt;This is all concerned with orchestration and control. So (deep breath), here goes. Where an event is raised and that event is to be processed by some subscriber, any intent to orchestrate the handling of the event by the subscriber results in a massive increase in complexity. (Roger Sessions will love this!). Naively one starts to think you have the "OK/Not OK pair" of possible responses. But then the "Not OK" responses blossom out of control. We have situations where the "Not OK" response must result in the retransmission of the event (and how does that happen?) and other cases where it must not. We have cases where the originator of the event &lt;strong&gt;&lt;em&gt;has to interpret the behavior of the recipient&lt;/em&gt;&lt;/strong&gt;. That sounds like some awfully nasty coupling to me. So instead of thinking that one has the "OK/Not OK" duality from the recipients view point actually what you have is the"OK/{set of lots of possible not OKs which the sender has to know about} multi-trality. In short that's just crappy design!&lt;br /&gt;&lt;br /&gt;Thanks John&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-817914565417860084?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/817914565417860084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=817914565417860084&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/817914565417860084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/817914565417860084'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/11/musings-with-john-schlesinger.html' title='Musings with John Schlesinger'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-9125203242614019585</id><published>2009-11-30T03:10:00.001-08:00</published><updated>2009-11-30T03:24:13.173-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zachman'/><category scheme='http://www.blogger.com/atom/ns#' term='Enterprise Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Framework'/><title type='text'>Zachman, Frameworks and EA</title><content type='html'>This post comes out of a quick, but deep, conversation with @cybersal after the first dinner of the architect irregulars twittergroup at Gopals on 20091125. Other members in attendance were: @richardveryard, @taotwit, @Rsessions, @mattdeacon,  and @hstrover. As is often the case, when a bunch of EAs get together, the subject of Frameworks comes up. And whenever we discuss frameworks, the venerable Zachman framework is mentioned. Often with much facial contortion and questions like "How do you actually build it?" or "What are in the interesting bits between the rows?"&lt;br /&gt;&lt;br /&gt;And then as @cybersal and I were hoofing it back to Charing Cross - avoiding the crowds where possible, the Framework (at least thinking about the titles of the rows) simply gives a context for discussion. You don't really need the columns. So, for example, when thinking about schemas that business services might use in communication, you are working at "row 3". This tells you as much about what you are NOT supposed to be doing as what you are supposed to be doing. It is a really nice shorthand when one is talking to another EA - since EAs have typically all read or heard John Z. So it isn't about using the Zachman Framework as a "Methodology" (whatever that means) but more of a classification system. If you like a set of membership rules.&lt;br /&gt;&lt;br /&gt;Now just because you have a set of membership rules, that doesn't mean you have to have the formal club (and if you are Groucho Marx, "I don't care to be a member of any club that would have me as a member" - but I digress). So, no you don't have to instantiate all the rows of the framework and figure out the mappings between them. However you can say to someone, "Come out of Row 4 and think in Row 3." That is in itself a powerful and useful observation, but doesn't really move EA forward much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-9125203242614019585?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/9125203242614019585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=9125203242614019585&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/9125203242614019585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/9125203242614019585'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/11/zachman-frameworks-and-ea.html' title='Zachman, Frameworks and EA'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3096388137437007479</id><published>2009-11-08T07:38:00.000-08:00</published><updated>2009-11-08T07:59:22.211-08:00</updated><title type='text'>IT Profession? I think not</title><content type='html'>Recent tweets from @&lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;rsessions&lt;/span&gt;, @&lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;richardveryard&lt;/span&gt;, @j4ngis,@cybersal have been looking at how hard various professions are. @&lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;richardveryard's&lt;/span&gt; observation that "@j4&lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;ngis&lt;/span&gt; @&lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;oscarberg&lt;/span&gt; Rocket science isn't even particularly complicated. Goes up, comes down. It is rocket technology that is complicated." in a tweet this morning reminds of a conversation had on the golf course with a very good dr. Let's call him John.&lt;br /&gt;John is, as I have said, a very good doctor. His speciality is anesthesia, but his passion is technology. He is always coming up with schemes to invent solutions to make &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;dr&lt;/span&gt;.' s live easier. So much so, that he would probably prefer to do that than what he is trained to do.&lt;br /&gt;So after a particularly inept (actually about normal for us, but inept by anyone &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-error"&gt;else's&lt;/span&gt; standards) round of golf, we were trudging &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-corrected"&gt;wearily&lt;/span&gt; back to the 19&lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;th&lt;/span&gt;. hole when John announces yet another good idea - linking wireless technology, &lt;span id="SPELLING_ERROR_9" class="blsp-spelling-error"&gt;handhelds&lt;/span&gt;, voice transcription, remote printing,.... His question to me was, "How hard can this be?".&lt;br /&gt;My response was something along the following lines.&lt;br /&gt;John you are breaking my heart. You are essentially saying that anyone without a modicum of training, experience, expertise, but just with the passion and the idea can bust into my &lt;span id="SPELLING_ERROR_10" class="blsp-spelling-corrected"&gt;field&lt;/span&gt; and take over. Have you no respect? Imagine the situation being reversed. Be me for a day, and I will be you. After all, how hard can it be to administer anesthesia to a patient. You figure out the necessary cocktail, inject it and out they go. I can imagine that there might be a few kinks along the way - like making sure that they wake up - but we can leave that to iteration 2. He was, of course horrified. He asked if I was trying to imply that my chosen line of work was as disciplined as his profession. And for the most part, it probably isn't. The key is I don't work in a profession by any normal definition.&lt;br /&gt;So while we are not in a profession, then any enthusiastic amateur can build "cool stuff".  Who cares about the error cases? Who cares about the edge conditions? It is all about the app after all. To take a phrase from the movie industry, "We can fix it in post."&lt;br /&gt;Who cares that the patient lives? Who cares that the patient suffers a quality of life decline? In medicine when we have post - it usually means post mortem. There is no fixing it in post in medicine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3096388137437007479?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3096388137437007479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3096388137437007479&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3096388137437007479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3096388137437007479'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/11/it-profession-i-think-not.html' title='IT Profession? I think not'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-6902909163731746541</id><published>2009-11-04T04:39:00.000-08:00</published><updated>2009-11-04T04:51:23.127-08:00</updated><title type='text'>A rant on "SOA Projects"</title><content type='html'>The appearance of the &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;SOA&lt;/span&gt; Manifesto has led me to look closely to the naming of projects and the implications of such names.&lt;br /&gt;Time and time again I see projects titled or described with a technology or architecture in the name. How often do we hear, "The SAP project failed?" It isn't because the software doesn't work, there are a host of other potential reasons - all having to do with the human factors. Likewise with "&lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;SOA&lt;/span&gt; Projects."&lt;br /&gt;The &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;SOA&lt;/span&gt; community (huge generalization here) talks about "&lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;SOA&lt;/span&gt; Projects." Hogwash, I say. There are very few "&lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;SOA&lt;/span&gt; Projects." There are and should be many projects where the underlying approach is Service Oriented. There are very good reasons for deploying &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;SOA&lt;/span&gt; in the enterprise/division or wherever appropriate. The deployment of &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-error"&gt;SOA&lt;/span&gt; governance, technologies, etc. might be considered a &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-error"&gt;SOA&lt;/span&gt; project, but creating a business application according to those tenets doesn't make that business application a "&lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;SOA&lt;/span&gt; Project."&lt;br /&gt;Does this really matter? Isn't calling it a &lt;span id="SPELLING_ERROR_9" class="blsp-spelling-error"&gt;SOA&lt;/span&gt; project a convenient shorthand? Isn't calling it a &lt;span id="SPELLING_ERROR_10" class="blsp-spelling-error"&gt;SOA&lt;/span&gt; Project a convenient way of getting to the right funding bucket? Well, if that's the way the business operates, I, begrudgingly, guess so.&lt;br /&gt;I think it is more insidious than that, however. By putting the technology or architecture top dead center in the name, it gives us an opportunity to make that the primary goal. Rather like hearing the requirement, "I need a database that..." Well databases are fine things, but a requirement that leads us to a "Database Project" again &lt;span id="SPELLING_ERROR_11" class="blsp-spelling-corrected"&gt;focuses&lt;/span&gt; on the wrong things.&lt;br /&gt;So next time your SAP project failed, ask yourself the question, "Is it SAP that failed? or did the business not realize the anticipated benefits for other reasons?" It's easy to blame the technology.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-6902909163731746541?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/6902909163731746541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=6902909163731746541&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/6902909163731746541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/6902909163731746541'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/11/rant-on-soa-projects.html' title='A rant on &quot;SOA Projects&quot;'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-2762546833309554305</id><published>2009-10-15T05:24:00.000-07:00</published><updated>2009-10-20T03:39:48.359-07:00</updated><title type='text'>Technical Debt</title><content type='html'>There seems to be a theme developing in these posts. I start to see &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;everyday&lt;/span&gt; situations and then relate them to everyday happenings - then attempt to do some analysis. Today's is no exception.&lt;br /&gt;&lt;br /&gt;Ward Cunningham int&lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;&lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;roduced&lt;/span&gt;&lt;/span&gt; us to the concept of technical debt in a 1992 experience report. Quoting from &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;&lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;wikipedia&lt;/span&gt;&lt;/span&gt;, "Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite.... The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as &lt;a title="Interest" href="http://en.wikipedia.org/wiki/Interest"&gt;interest&lt;/a&gt; on that debt. Entire engineering organizations can be brought to a stand-still under the debt load of an unconsolidated implementation, &lt;a title="Object-oriented programming" href="http://en.wikipedia.org/wiki/Object-oriented_programming"&gt;object-oriented&lt;/a&gt; or otherwise. " An excellent follow on blog post from Steve McConnell (at &lt;a href="http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx"&gt;http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx&lt;/a&gt; ) expands on the point.&lt;br /&gt;&lt;br /&gt;I am going to think a bit more prosaically!  I was sitting at the computer minding my own business yesterday afternoon, when from behind me I heard a crash. A picture had fallen off the wall, spreading glass shards everywhere. On closer inspection, I saw that the method of attachment to the wall was inadequate. It was a simple nail, not a proper hanger. What's this to do with technical debt you may ask? Well, presumably when the picture was hung, the hanger (perhaps me) chose a quick and dirty solution - a nail. I could perhaps have &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-corrected"&gt;used&lt;/span&gt; the proper fixture - &lt;span id="SPELLING_ERROR_3" class="blsp-spelling-corrected"&gt;but&lt;/span&gt; that may have entailed considerably more "development effort". I would have had to drive to &lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;Lowes&lt;/span&gt; or Home Depot to buy the fixture, &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-corrected"&gt;install&lt;/span&gt; it properly... you get the point. Oh and of course there was a deadline. We had a party that night and had to have the picture hung.&lt;br /&gt;&lt;br /&gt;That was about 8 years ago. Eventually the hanging approach failed and I now have to pay back the debt for my &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-corrected"&gt;slapdash&lt;/span&gt; method of 8 years ago. The repair cost will far exceed the cost of "doing it right in the first place." However, I made the decision to do it the way I did &lt;em&gt;because I didn't have a good handle on what the longer term implications would be and because I had a deadline. &lt;/em&gt;These are both key observations.&lt;br /&gt;&lt;br /&gt;When we build systems we often don't actually know what the long term implications might be. We don't for example know what "long term" actually means. We often can't explain why doing it right is more cost effective "eventually". I, for example, wasn't prepared to say to madame, "I'll need to go to the store to get the right fixture, hold the party until I come back and put up the picture." Nor was I prepared to say, "let's not have that feature in the house until after the party."&lt;br /&gt;&lt;br /&gt;The point here is that we often make conscious choices about the way we do things. These may be suboptimal in the long run - and they will come back to bite us. However we must suborn the future to the current to make sure &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-corrected"&gt;things&lt;/span&gt; get done.&lt;br /&gt;&lt;br /&gt;What is more clear to me is that we understand the operational implications of our choices. We need to build our solutions, "hard enough". We need explicit statements about the "-&lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;ilities&lt;/span&gt;", so we can apply the right amount of engineering. Let's make sure we get the failure stories as explicit as the success stories when putting our plans together - when deciding what goes into an iteration. Make sure we incur the technical debt for the right reasons.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-2762546833309554305?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/2762546833309554305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=2762546833309554305&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2762546833309554305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2762546833309554305'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/10/technical-debt.html' title='Technical Debt'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3914988591193048993</id><published>2009-09-27T15:26:00.000-07:00</published><updated>2009-09-27T16:48:54.601-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EDA'/><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><category scheme='http://www.blogger.com/atom/ns#' term='Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VPEC-T'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><title type='text'>Watching Events</title><content type='html'>It seems that when thinking about events, we have a tendency to put some of the responsibilities in the wrong place. Of course every time we don't have a proper separation of responsibilities, we get extra complexity. So in this post I will look at some of the issues around the responsibilities and see where they should be allocated.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Short political rant that can safely be ignored now. Why is health care insurance (in the USA) handled essentially through employers and employment contracts? They simply don't belong to each other. The time base is wrong, the administration is wrong, the result is wrong.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;End of rant!&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;I think a little naming context would be helpful here. This will be greatly simplified - just so that the essence is laid bare.&lt;br /&gt;&lt;br /&gt;E is an event publisher&lt;br /&gt;E has an output queue onto which itpublishes. This is called EQ&lt;br /&gt;E publishes events of type V1, V2, V3 and V4. Individual events are named v1-1, (the first event of type V1), v1-2 (the second event of type V1), etc.&lt;br /&gt;C1 is a consumer of events - it can consume events of type V1, V2&lt;br /&gt;C2 is a Consumer of events - it can consume events of type V2, V3, V4&lt;br /&gt;C3 is a consumer of events - it can consume all kinds of events.&lt;br /&gt;Each consumer has an input queue - C1 has an input queue C1Q, C2 has C2Q, C3 has C3Q&lt;br /&gt;&lt;br /&gt;The event network behaves as follows:&lt;br /&gt;&lt;br /&gt;E publishes v1-1. The event network must transfer v1-1 to C1Q and C3Q. C1Q and C3Q. C1 and C3 are now able to process the events by reading their respective queues.&lt;br /&gt;&lt;br /&gt;Thinking about the outcome possibilities (assuming E was successfuly able to publish) v1-1.&lt;br /&gt;&lt;br /&gt;Both C1 and C3 receive the event v1-1&lt;br /&gt;C1 receives the event v1-1, but C3 does not.&lt;br /&gt;C1 does not receive the event v1-1, but C3 does&lt;br /&gt;neither C1 nor C3 receive the event.&lt;br /&gt;&lt;br /&gt;Question for the reader. Where should the responsibility lie in taking action for recognizing that one of these conditions obtains. The possibilities are:&lt;br /&gt;(a) E&lt;br /&gt;(b) C1&lt;br /&gt;(c) C3&lt;br /&gt;(d) none of the above&lt;br /&gt;&lt;br /&gt;My answer is (d) - none of the above. It isn't any of these players' responsibility to do this. E's job was to publish the events. C1 and C3's jobs are to handle the events on behalf of their scope. But C1 and C3 are autonomous, so they can't be dealing with each others' failures.&lt;br /&gt;&lt;br /&gt;So if it is (d), then there must be some other partcipant - yet to be identified that takes the responsibility. That something else is a proxy for the overall business policy. It needs to exist independently of everything else - and therefore needs to have the proper information fed to it.&lt;br /&gt;&lt;br /&gt;Now imagine that C1 in some sense "fails" - it completes, but delivers an exception condition. If that condition is serious enough  then something has to know. So it would be sensible C1 were to notify something of its own outcome.&lt;br /&gt;&lt;br /&gt;Likewise C2 and C3.&lt;br /&gt;&lt;br /&gt;So we have a kind of triplet of notifications (which expand into greater complexity for real sized problems).&lt;br /&gt;&lt;br /&gt;E says, "I sent e1-1"&lt;br /&gt;C1 says, "I got e1-1"&lt;br /&gt;C1 says "I handled e1-1 with a normal result"&lt;br /&gt;C3 says, "I got e1-1"&lt;br /&gt;C3 says, "I couldn't do e1-1 - I failed because of a business problem."&lt;br /&gt;&lt;br /&gt;So we could then implement a policy rule about what to do under these circumstances.  That rule could of course inject new events into the "system."  That however is a subject for another time.&lt;br /&gt;&lt;br /&gt;Bottom line is that we have a three part system now for handling events. There is the standard pub/sub behavior (and don't get too hung up on the specific technologies). There is the abilty to send out content references using a mechanism that is not part of the event channel (quite RESTful really), and then there is the ability to act on non-receipt or improper handling of the event by one of the event subscribers.&lt;br /&gt;&lt;br /&gt;A nice compact model that seperates concerns, so that the individual components can be focussed on their own responsibilities and not prying into each others' business.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3914988591193048993?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3914988591193048993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3914988591193048993&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3914988591193048993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3914988591193048993'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/09/watching-events.html' title='Watching Events'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-2253360311072299667</id><published>2009-09-27T07:46:00.000-07:00</published><updated>2009-09-27T08:00:10.285-07:00</updated><title type='text'>A new twist on the Taj Chaat process...</title><content type='html'>For those who have seen the previous post on &lt;a href="http://businessanditarchitecture.blogspot.com/2009/04/process-improvement-and-chaat-cafe.html"&gt;process improvement at my local Indian chaat&lt;/a&gt;&lt;br /&gt; restaurant will probably be intrigued on yesterday's twist.&lt;br /&gt;&lt;br /&gt;We were buying some appetizers to go. In this case 2 samosas and an order of golgappe.  Normally the process (at least for dining) is to write the items on a form, be assigned a number and given the vibrating pager to let us know when ready. Collect food, eat, check out by handing over the pager so they could locate the items to be villed from an accordian file.&lt;br /&gt;&lt;br /&gt;For take-out, the process is very different. Again I fill out the little 2-part form. But before handing it over to central oredering, I take both parts of th3e form to the cash register. I pay for the order. Both parts of the form are stamped paid. I take the form back to central ordering where I am given the a number and a vibrator. The order is prepared, vibrator goes off and now what? I go to the station to pick up the order, but since the collection point of the vibrators is the cash register how do I return the vibrator?&lt;br /&gt;&lt;br /&gt;This is made harder because the worker at the cash register is a different person from the one I paid. So there is no session state anywhere. I have a vibrator that has vibrated and a cashier who expects to take cash. She can't find the form parts in the accordion file.....&lt;br /&gt;&lt;br /&gt;So why is this important?&lt;br /&gt;Again seeing how non-IT organizations think about the processes that run their own businesses makes us aware that we shouldn't be overengineering. There are exceptions - things that don't follow the normal path that we just have to work around. Of course each workaround decreases efficiency, but if they are sufficiently rare, then the overall efficiency is not decreased by having work arounds. However, if the workarounds do become cumbersome, expect them to be worked on without negatively affecting the frequent path activities.&lt;br /&gt;&lt;br /&gt;Oh, and by the way yes the golgappe and samosas were worth it! The whole bill was $6.56!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-2253360311072299667?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/2253360311072299667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=2253360311072299667&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2253360311072299667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2253360311072299667'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/09/new-twist-on-taj-chaat-process.html' title='A new twist on the Taj Chaat process...'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3656986036955486418</id><published>2009-09-27T07:21:00.001-07:00</published><updated>2009-09-27T07:46:42.762-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><category scheme='http://www.blogger.com/atom/ns#' term='VPEC-T'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><title type='text'>Processes and events</title><content type='html'>Another day of talking to Nigel Green - thank you Skype! And some thinking around processes and their relationship with events. Again sounds innocent - but it seems as if both of us strongy event-oriented thinkers come to common ground when thinking about processes and orchestration - namely that while you might use low level messaging semantics for implementing processes, event modeling doesn't really help when trying to model processes. However and here the lightbulb began to flicker dimly, the result of executing of a process or process step can become a source of events.&lt;br /&gt;&lt;br /&gt;We chose an example from the airline industry - and from our experiences of being travelers. Not from any great insights from the internals of the business. The focus was the check in process at the airport itself.&lt;br /&gt;&lt;br /&gt;Clearly we see interesting policies at different places and for different carriers. For example at Mumbai (at least time I went through there), they seal your bag with some kind of security strap. So it can be seen whether the bag has been tampered with. That is less common in the USA. However, at Miami International Airport when I went through a month or so ago, I saw the ability to wrap the bag in a kind of cling wrap. I presume that can be done elsewhere too. That is all by way of background.&lt;br /&gt;&lt;br /&gt;Airlines nowadays can and do charge fees for checking baggage. All of the rules require that checked bags undergo a security check. Bags are subject to weight limits. Passengers are subject to bag limits (no more than n per passenger). Ignoring further complexity like whether actually to collect the fees (elite passengers are exempt, for example) there are some quite interesting process decisions to be made.&lt;br /&gt;&lt;br /&gt;If the airline chooses to impose the bag fee immediately that the passenger offers the bag for checkin, then there may be some undo logic if the passenger decides not to check the bag after all. It is worse though. Imagine that the bag is too heavy. When is that discovered? For example if the passenger has checked in (and been charged) at a kiosk, then on presentation of the bag it is discovered to be too heavy so an extra collection is made - that could make the passenger decide not to check it after all, so a refund is in order. Or perhaps the passenger may decide to open it and remove some of the heavier items, and get it to the correct weight. That's fine - but what if it has already been secured with tape or wrapped in a cling wrap. Kinda tricky to undo...&lt;br /&gt;&lt;br /&gt;Then there is security. Another opportunity for the passenger to open the bag and remove things if they should not be in checked baggage. And so it goes.&lt;br /&gt;&lt;br /&gt;Different airlines and different jurisdictions will implement the Policies - "maximize revenue for bags", "make sure the passengers' possessions are safe", and "transport passengers safely" with different process paths. Those paths need to be orchestrated. It isn't clear how an event network will really help that orchestration. In fact I would go so far as to say it complicates it. However at each step of the various process steps (or sub-processes), it would be very useful to spit out an event that provided useful (possibly actionable) information to trigger some other behaviors.&lt;br /&gt;&lt;br /&gt;For example, if during the security screen a weapon were found, we would expect an event to be raised to trigger a whole raft of other processes. We would be jumping outside a process domain into another domain. That of airport behaviors to criminal behaviors. So looks like a terrific event.&lt;br /&gt;&lt;br /&gt;Even the mundane events may be interesting to somebody. That a passenger decided not to check the bag after a fee was assessed can be helpful when looking at the behavior as a whole for market and planning purposes. Opportunities for process improvement abound.&lt;br /&gt;&lt;br /&gt;The weight of the checked luggage is also useful for "weight and balance" on the aircraft. Necessary so proper takeoff parameters can be computed, proper fuel calculations can be performed, etc. So the event raised as a result of successful baggage check-in is quite a handy event to have.&lt;br /&gt;&lt;br /&gt;So bottom line, it seems from this (and a whole raft of other possible examples) that we will typically see events being generated as a result of a process step happening - at least when in a process.&lt;br /&gt;&lt;br /&gt;Of course there are lots of other ways of generating events, we don't need to formalize processes so that events can be generated. Relatively random behaviors give rise to events too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3656986036955486418?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3656986036955486418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3656986036955486418&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3656986036955486418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3656986036955486418'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/09/processes-and-events.html' title='Processes and events'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-644717189636809392</id><published>2009-09-13T07:31:00.001-07:00</published><updated>2009-09-13T09:03:12.912-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EDA'/><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><category scheme='http://www.blogger.com/atom/ns#' term='VPEC-T'/><title type='text'>Event and Content</title><content type='html'>This conversation with Nigel started innocently enough. Two people who have very similar views talking about architecture in the large. We described our current problem spaces - they looked very similar, but as is often the case we used the same words to mean different things. Of course once we realized this we got back on track quickly. I'll write this from my perspective, but in reality it would be better written by a dispassionate observer.&lt;br /&gt;&lt;br /&gt;I set out to describe the separtion that I am seeing in VPEC-T especially around P-E-C. In my definition, I was thinking of Content as being everything about the Event. I was merrily proceeding down this path, thinking that the view was shared until Nigel spoke. We realized simultaneously that the word covered several concepts. There is the "stuff" about the event itself - the event properties like when it happened, what kind of event it is, what channel it was communicated on - essentially a kind of tag cloud for the event. I suppose in the current vernacular this might be the event meta-data. There is also the "state" that exists as a result of something doing a piece of work and generating the event. That may well need to be made available somehow. So for example, in my sales system the "event" of a sale being made has something useful like when it happened, however there is a whole lot of other information like who the parties to the sale were, what the value of the sale is, who the sales team is, what was sold... - in other word the "business document" representating the state as perceived by the event emitter.&lt;br /&gt;&lt;br /&gt;In the Chris world, the tags (event meta data) were part of content. In the Nigel world they aren't part of content per se. Actually that is unfair, they aren't ONLY content. In other words, the event meta data can easily travel with the event. But the state information typically won't.&lt;br /&gt;&lt;br /&gt;Reversing that point of view for a second, we get the notion that there is definitely a content "store" somewhere that the processor of the event might go to get the contents, and an event store - somewhere the event data would be stored.  The content store doesn't have to be explicitly created by the event creating component, it could equally be some external source (e.g. a weather forecast). The event store's job is to store the events (duh) so that they can be replayed for a variety of reasons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;An event processor has been out of the loop for a hour and wants to catch up "get me all the sales events for the last hour"&lt;/li&gt;&lt;li&gt;A simulation wants to be done using some "live" state. What would the impact be if we had decided to close this airport at 2pm yesterday? So inject a new event into the event store and then replay forward with the existing events after that point. Of course there will quickly be diversion from the reality as processed, but that is OK. We have been able to run the simulation with a known starting point&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Considering the second bullet above, it is quite convenient to use the same semantics for processing "missed events" as for processing the events in real time. Kind of rule - never pass the content with the event, always pass a reference to content, but make sure that the event tag (meta-) data do come with the event. Make the event store readable so that the event sender isn't responsible for hanging on to the event, and having to remember who has received it and who hasn't&lt;/p&gt;&lt;p&gt;At the end of our time together on this call we were, as expected, in agreement that for a proper separation of concerns, we should treat content as being the state data and the event store as being the  place where the events and associated metadat are stored to allow for retries and simulations (among other things). &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;The Policy part of the call will come next.....&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-644717189636809392?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/644717189636809392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=644717189636809392&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/644717189636809392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/644717189636809392'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/09/event-and-content.html' title='Event and Content'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3286822630031490034</id><published>2009-07-10T03:30:00.000-07:00</published><updated>2009-07-10T04:03:00.366-07:00</updated><title type='text'>Signal to Noise</title><content type='html'>This posting is sparked by a conversation between Nigel Green and me. We were having a spirited discussion about choices in following people in Twitter. But the concept generally applies in almost all event based architectures.&lt;br /&gt;&lt;br /&gt;The fundamental principle is that it has to be somehow worth it to sort through the whole mess of communication to get what you need or want. Thinking in interface architecture terms, a point to point interface has a very high signal with very little noise. However, tailoring the communication channel is very expensive - at least for the originator of a message. Similarly a total mind dump of everything you are thinking about at a particular moment can have a very poor signal to noise ratio when viewed from the perspective of someone trying to decode the message.&lt;br /&gt;&lt;br /&gt;I have used the example of the Christmas Letter before - the letter that contains all the family news and is sent to every acquaintance. For the originator of the message, it is a very efficient way of communicating stuff. No thinking about what each individual subscriber cares about - let the subscribers figure it out. If there is enough signal in the letter, then filtering through the noise is worth it. If not, it goes quickly to the recycling bin. &lt;br /&gt;&lt;br /&gt;Likewise in social media. As a twitterer and as a blogger I don't know what individual followers are going to want. As a blogger, I don't even know who the followers are. And I don't want to. If people find that the signal is rich enough they will follow, if they don't they won't. A very efficient way of information delivery - and a very handy simplification technique in event driven thinking. The basic question is, "Is the signal to noise ratio high enough so that it is worth me continuing to listen on this channel, or are there are other channels with better ratios?" As a subscriber I can often make that choice.&lt;br /&gt;&lt;br /&gt;Twitter is such a great example, because the space is flat. When I tweet, it could be on any topic that I find interesting and relevant. To me, the twitterer, it is all signal. To you the follower it is probably mostly noise. If there are occasional useful signals you will continue to follow, if not you won't. Attempting to put some kind of ontology over twitter defeats the purpose because the publisher has no clue which permutations of tags are relevant to any given listener. I regualraly unfollow twitterers when the signal to noise ratio degrades too much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3286822630031490034?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3286822630031490034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3286822630031490034&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3286822630031490034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3286822630031490034'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/07/signal-to-noise.html' title='Signal to Noise'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-613441258884115932</id><published>2009-06-21T06:41:00.001-07:00</published><updated>2009-06-21T06:41:56.852-07:00</updated><title type='text'>Real Life Caching</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;The thought behind this post comes from the rich pageant of daily life with Madame. Yesterday morning we were discussing when she should visit her mother (a sprightly 96 year old who lives about 1,000 miles from us). So it was a matter of looking for decent airfares, timing the visit to coincide with my absence, minimizing the flight time (it is always requires a change in either Chicago or Detroit).. What you may wonder is relevant about this in architecture. It all has to deal with the location of the process, and the location of some of the data required to complete the process.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The computer was in her home office – up a flight of stairs from the main living areas of the house. Her purse was down in the kitchen. She had dutifully retrieved her credit card from her purse prior to starting the transaction (pre-cached the data), and carried it upstairs. Because of where I work, I almost always try to ensure that bookings are made on Travelocity.com – keep all possible revenue in the family.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So the process goes fairly smoothly – Madame is using my Travelocity account to make the booking (easier than creating a new one at that moment). Of course this would be a security violation, so let's say, I was acting as the operator for this purpose! We get all the way through the process (well almost) when we realize that her frequent flier number is not in the account anywhere. Also that data has not been cached anywhere (not in her head, not by bringing the physical card to the point where the transaction is being executed.) So an IO request is issued – resulting in the slow IO processor (me), walking from her office, downstairs to her purse, finding it, and returning the whole purse. Why the whole purse you ask? One reason is privacy – it is hers and I don't access its contents without permission (PII rules). Second is that I don't know what other esoterica might be needed, so I want to save my weary legs – and not have to make another trip to the purse data store (which by the way is a heap storage model). &lt;br /&gt;&lt;/p&gt;&lt;p&gt;The IO request is completed. Madame parses the purse data structure until she finds the relevant card, she then types in the number and completes the transaction.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;As always with these stories there are a couple of questions:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Would it have been more sensible for her to bring the whole purse data structure instead of just caching the credit card? In hindsight, yes. But how would she make that determination. The stairs are steep and it is a long way. The purse could be heavy (too much payload) and unwieldy.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Should I have brought the whole purse or just the needed card, or better still a lightweight interpretation of the number (she didn't need all of the information on the frequent flier card)?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Does it make sense to cache the whole content of her purse in any room where she might execute transactions? After all with wi-fi that could be anywhere, including outside the firewall (i.e. in the garden or yard)? What about security? The gardeners and the maids (would that we were so lucky!) would then have access to the cached data. That could be troublesome.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Is the network transport reliable? Could I have been distracted in the bringing of the data back upstairs – through answering the telephone, needing some refreshment prior to attacking the stairs, pure absent-mindedness or what?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Of course the point isn't to think about home processes much – we will do things that seem expedient without a whole lot of thought. But when designing systems, we have to think quite carefully about these kinds of things. By putting them in this sort of context, it can sometimes help to think things through.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;And, oh yes, this is not really architecture – it is design. However, there are patterns that emerge, and they become important aspects of architecture.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-613441258884115932?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/613441258884115932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=613441258884115932&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/613441258884115932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/613441258884115932'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/06/real-life-caching.html' title='Real Life Caching'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-579991577281353889</id><published>2009-06-05T06:29:00.001-07:00</published><updated>2009-06-05T06:29:19.555-07:00</updated><title type='text'>Architecture on the Product Side</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;In  an previous post, I wrote about the difference between the application of technology to the building of products, vs the application of technology in running the business. They are pretty different animals, if nothing else because of the way they are deployed.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So, I get to wonder what the head of architecture for the product side of one of these companies does. I can take one of the Architecture frameworks and apply it – but to what? Individual products (each with own P&amp;amp;L, development teams, practices, degrees of product maturity)?  Across the whole product organization itself, so that we can begin to standardize/use same services across the product suites. When the products can be deployed in several ways (in house operated and sold as ASP), on-premise at the customer, on=premise hosted by one customer and used by another,…So as the products are deployed we have to think about the how the platform affinities work.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The customers want to customize the way the work is performed using the products/services that they have bought. So somehow we have to think of ripping the process logic out of fixed applications.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;There  are cross product dependencies as well. So sometimes we have to rip code out of one product and insert it into another.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Oh and the up time for these products must be in the 99.999 range – the products handle very time/life critical activities.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;And finally a legacy that dates back a long way – pretty much bulletproof, but definitely has its own way of presenting itself to the world.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This Architect's world feels very different to me than the "traditional" EA world where the need to build for wide deployment and customization is less important.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Any thoughts anyone?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;C&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-579991577281353889?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/579991577281353889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=579991577281353889&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/579991577281353889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/579991577281353889'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/06/architecture-on-product-side.html' title='Architecture on the Product Side'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-4040592033738445510</id><published>2009-05-21T09:30:00.000-07:00</published><updated>2009-05-21T09:40:05.097-07:00</updated><title type='text'>Offbeat Integration Approaches</title><content type='html'>I am collecting humerous terms for different kinds of integration. I will seed the discussion with a few, but would be interested in having others added, with descriptions in the comments to this posts. It would be delightful to have a large glossary of terms.&lt;br /&gt;&lt;br /&gt;I'll start the ball rolling with some oldies but goodies.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SneakerNet (n,vt)&lt;/strong&gt; Delivering of (usually) files from one place to another on some form of removable media. The sneakers, of course refer to the need to get it there quickly. Often used to bypass security or other limits. E.g. email attachment size limitations, one system unable to connect to the same network as another system. File type limitations. &lt;strong&gt;Usage&lt;/strong&gt;. I can't email this to you, have you got a thumb drive, I'll sneakernet it to you.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;FunnelCast&lt;/strong&gt; Delivering of information to a large number of people by shouting through a megaphone. The most common means of getting data from the page of a professor's notebook to the page of a student's notebook.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Swivel Chair&lt;/strong&gt; I first heard this from my colleague Adrian Apthorp. The need to take data from one system and enter it into another can be solved by sitting on a swivel chair so you can switch between the screens with minimal effort.&lt;br /&gt;&lt;br /&gt;Have at it and exercise your creativity.&lt;br /&gt;&lt;br /&gt;Chria&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-4040592033738445510?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/4040592033738445510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=4040592033738445510&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4040592033738445510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4040592033738445510'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/05/offbeat-integration-approaches.html' title='Offbeat Integration Approaches'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-2013276963076446686</id><published>2009-05-08T05:20:00.001-07:00</published><updated>2009-05-08T05:20:27.038-07:00</updated><title type='text'>A gedanken on identity</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;This post arises from conversations (over many years) with John Hall, the late Keith Robinson, Bob Brown, Keri Healy, Nigel Green, Richard Veryard and Fred Fickling. It has to do with how we identify things, immutability and most recently REST. So first the story(originally related to me by John Hall):&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jason has just commissioned a wonderful boat (the Argo) so he could have adventures in the Mediterranean. He commissioned a crew of likely volunteers and set sail in search of (among other things) the Golden Fleece. This was not a short voyage – in fact it lasted many years and they had many adventures – none of which are relevant to this gedanken. Like all boats (holes in the water in which you throw money), Argo needed repairing quite often. So every winter , Argo would be taken to a boatyard and refitted. Old parts were replaced, holes patched, etc.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;After several years of this, there were no original parts left on the Argo at all. Everything had been replaced, even down to the smallest dowels. Question 1. Is this boat the "same" Argo as the one originally built? Certainly the crew, the local registrar of ships and taxation authorities would think so. After all, there was no need to reregister it (her, for lovers of boats). However, we know for sure it isn't the same, in fact there isn't a single original component on the boat. So, in an information system, what is the "identity" of the Argo? Does it depend on which information system (registrar/taxation/crew sign-up, repair management for example) we are thinking about? &lt;br /&gt;&lt;/p&gt;&lt;p&gt;What we didn't know, is that the wily repair shop had kept all the old parts and had been secretly reassembling them into a boat. When the final wraps came off this new boat, he announced that this was the real Argo, and that he knew the other to be a fake. Question 2. Which is the "real" Argo? Certainly this depends on who wants to know and why? The registrar of ships might well take a pragmatic point of view and decide that the repaired Argo was the "real one" and that the rebuilt one is "something else". Of course the fine piece of woodwork on which the boat's name was carefully inscribed says Argo in each case.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Question 3 (a-f and beyond). Which of our various lenses can/should we be looking at this through? The Checkland CATWOE approach becomes an important set here because the Weltanschauung (loosely translated to be the worldview) partially determines that. I suspect that the Weltanschauung is the overarching concept that allows us to choose our lenses.  So what does VPEC-T say here? What does Cynefin say here? What does Systems Thinking have to say? What do Value Networks have to say?...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Question 4. Why bother? This gedanken on its own is a fun mental exercise, but there are some underlying issues that crop up time again in our real world systems. As we start to look at the world through RESTful lenses, we come head-on into representations and the state transitions of representations, and making a clear distinction between the thing and a representation of it. So we have the Argo – and then some systematic representations of Argo. When an event (a repair perhaps) happens to Argo, we may decide to change the state of the Argo representation. Or some system may decide to, while another may not. For example crew scheduling for Argo may care less about repair events than registration. So is there just one representation of Argo (with one URI) or are there many representations of Argo? &lt;br /&gt;&lt;/p&gt;&lt;p&gt;As we wrestle with the knotty problems of identification we are forced to combat our views of history – what has happened in the past to the things we care about. How we can or cannot change other people's views of the same thing (the event streams we care about when changes are made are different from other people's). We have to worry about placing ourselves at a point in time and asking questions like, "If I were asking the question last January what would your answer have been? (very useful in market research, courts of law, etc.)"&lt;br /&gt;&lt;/p&gt;&lt;p&gt;At the bottom of this is really the "who cares about what?" question and how if we attempt to create universal data models and databases of things we are doomed. Perhaps the best we can do is to keep track of the Event and Content streams as they apply to Policy, manage our own representations of things and broadcast our state changes against those representations pushing the responsibility onto the "subscribers" to decide whether they care.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-2013276963076446686?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/2013276963076446686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=2013276963076446686&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2013276963076446686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2013276963076446686'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/05/gedanken-on-identity.html' title='A gedanken on identity'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-5471604581512609542</id><published>2009-05-06T04:45:00.001-07:00</published><updated>2009-05-06T05:29:10.397-07:00</updated><title type='text'>Services, SOA and Web Services</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;span style="font-size:14;"&gt;&lt;span style="color:#555555;"&gt;This article &lt;a href="http://www.modernanalyst.com/Resources/Articles/tabid/115/articleType/ArticleView/articleId/911/Can-SOA-Give-You-A-Good-Service.aspx"&gt;&lt;br /&gt;(Can SOA Give You Good Service&lt;/a&gt;&lt;/span&gt;) identifies some of the troubles with&lt;br /&gt;words when dealing with all the Service terms. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:14;color:#555555;"&gt;I found it a very helpful article indeed because it helps keep Service and SOA on the straight and narrow. Nice call out of the Web Service vs Service. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:14;color:#555555;"&gt;Interesting observation that "A service is a logical representation of a repeatable business activity that has a specified outcome (e.g. check customer credit; provide weather data; consolidate drilling reports). It is self-contained, may be composed of other services, and is a "black box" to its consumers."&lt;br /&gt;&lt;br /&gt;Nowhere in this definition is there any requirement to get an answer back, except&lt;br /&gt;maybe a status of "yup, I've done that" or "No couldn't do it, sorry". For sure&lt;br /&gt;a result could come back. For sure some system state may be changed (perhaps because&lt;br /&gt;of a side effect), but the key is that it is a black box. Where we do see some confusion is in granularity. I occasionally here the word operation being applied to Services.&lt;br /&gt;&lt;br /&gt;So in your example "Check Customer Credit" above, is that really a Service invocation&lt;br /&gt;or is an invocation of an operation on another Service (perhaps a Customer Management service)?&lt;br /&gt;&lt;br /&gt;Just dealing with the granularity would help me in understanding the kinds of numbers&lt;br /&gt;that are bandied about at conferences. "We have over 3000 services" vs "We have&lt;br /&gt;40 services (and 3000 operations). Is that simply a packaging issue? Coming back&lt;br /&gt;to the whole WS-something discussion, you make a telling point that "A Web service&lt;br /&gt;is a software system designed to support interoperable machine-to-machine interaction&lt;br /&gt;over a network. It has an interface described in a machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP messages, typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards". &lt;br /&gt;&lt;br /&gt;First up this says machine-to-machine. And while the computer at which a user is sitting, operating the browser is most definitely a machine, I am not convinced that WS-something is the most appropriate way of managing that interaction. It may be, but the point is not proven. Secondly, it is not completely clear to me when services actually need to be exposed (assuming that we have defined service correctly). So how much WSDL wrapping do I do? And why? In some ways - especially for internal code, WSDL wrapped service invocation is just really expensive function or subroutine calling. So even though we can define what a service is, it is harder to define what a service isn't, and harder still to choose the right architectural approach to allow for machine/machine interoperability, and human/system interoperability.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-5471604581512609542?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/5471604581512609542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=5471604581512609542&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5471604581512609542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5471604581512609542'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/05/services-soa-and-web-services.html' title='Services, SOA and Web Services'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-7198060686350318939</id><published>2009-04-30T08:58:00.001-07:00</published><updated>2009-04-30T08:58:22.003-07:00</updated><title type='text'>More Fun(?) with words</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Sometimes the TwitterSphere is just too constraining to get a thought across fully. I naively posted a question about the definition of "Application" – to see what would come back. It turned into a delightfully healthy discussion with some twists and turns along the way. It isn't every day that Duns Scotus and Humpty Dumpty show up in the same post – at least not unless Richard Veryard (@richardveryard) is involved!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So a good question is "Why do you want to define application?" My answer is actually that I don't want to DEFINE it, I just want to know what people might mean when they bandy the term about. As Nigel Green (@taotwit) and I chatted this morning at length on this and other topics, the recurring theme was, "I'd like a quick way to parse a conversation." In other words, when I am talking to someone and trying to understand what it is they want (requirements anyone?) I would like to know their frame of reference so that we can communicate. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;How often have we heard requirements that say things like, "I want a database that …." Actually, I suspect it isn't usually the database that the requestor wants, it is some way of manipulating the data with a purpose in mind. Maybe, even, an application (gasp). &lt;br /&gt;&lt;/p&gt;&lt;p&gt;So just as in a previous post where I was wondering about type/instance nomenclature, so here I am wondering about other opportunities for miscommunication.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Richard makes an interesting point, "@seabird20 If something persistently escapes or evades precision, then maybe it was the wrong concept in the first place." That may well be true, but we can't unbreak the egg. The words are out there, their meanings are many, we can't (and shouldn't) attempt to unify the vocabulary (even the Académie francaise has stopped trying to keep French completely pure – le weekend anyone?)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So this is not a cry for definition and ontology for its own sake. It is a means to collect lots of definitions so we can understand each other better. Of course, the more we share context, the more "shorthand" we can use to express ourselves – because we have either tacitly or explicitly agreed to the vocabulary. It is in the "getting to know you" stages where shared context and trust are established. It is at those early stages where slight misunderstandings can blossom into full-fledged disagreements and a loss of opportunity to trust.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-7198060686350318939?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/7198060686350318939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=7198060686350318939&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/7198060686350318939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/7198060686350318939'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/04/more-fun-with-words.html' title='More Fun(?) with words'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-6566319806723900005</id><published>2009-04-19T14:47:00.001-07:00</published><updated>2009-04-20T04:27:35.917-07:00</updated><title type='text'>Process Improvement and the Chaat Cafe</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;My favorite Indian restaurant is a 20 minute walk from my house. It has the most wonderful Indian snacks/appetizers and of course kulfi. It is also a thoroughly confusing place. I will try to describe the changes in process that I have seen over the last 18 months – since it opened.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;First, some background. It is set up with three major "stations" where things are cooked. The flat top where the dosas, parathas and other flatbread dishes are prepared. The drink area (lassis, etc.) and the chaat area (samosa, golgappe, etc.)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Version&lt;/strong&gt; &lt;strong&gt;1&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;You wander into the restaurant, decide what you are going to have and fill out a 2 part form in front of the station. Hand it to the cook. The cook makes the dish and when ready calls out over the speakers. You go and collect it from the counter. When time to pay, you take the white parts (tops) of the 2 part form to the register. They total up the bill, you pay and leave. Problem – this didn't scale well because we could never hear the loudspeaker announcements. Well we could hear that there was an announcement, but not what was being said.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;First Process Improvement  &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Numbers were attached to each table. Your table number was required to be placed on the bottom of the form. Problem then was you had to select your table prior to placing an order. How do you keep it while ordering? Can someone else grab it? Much chaos ensued. Advantage was that the loudspeaker announcer just had to call the table number. You still handed your forms to the cooks, etc. There is still the possibility that unscrupulous diners would forget the white chits or (as I have to admit to having done) throwing one away by mistake when clearing away the dishes. So my guess is that auditing showed some yellow chits (what the cooks did) which didn't have matching pair white chits. And no way of running down the offenders until much too late. Everyone seems to pay cash there!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Second Process Improvement&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Technology was introduced! Central order taking was introduced. So now, the restaurant has done away with the need to grab a table before creating an order. It has introduced a central ordering location. The forms, however are essentially the same and are not at the central location. The forms are still in front of the cooking stations. So you fill the form out at the cooking station and carry it to the central ordering facility. There (if you have not already been given one) you are given a vibrating pager. Presumably local in-restaurant network only. This is similar to the pagers often used in restaurants to tell you when your table is ready. When you place the order (on the 2 part form) you enter the number of the pager device. Now when each part of your order is ready, the pager device goes off. As you collect the dish, you need to stop by central ordering, so they can turn the thing off.  If you fail to do that, it keeps vibrating and you have no indication when another part of your order is ready. Also, unknown to the first time user, the device will be used for computing the bill, so if you are looking for individual receipts, you need one vibrator each.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;When you go to pay, you hand your vibrator to the checkout clerk. This automatically brings up the bill. I haven't seen the behind the scenes magic that does this yet. They also have an accordion file into which they put all the yellow copies into the slot numbered with the same number as the vibrating pager.  You pay and leave…&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;So what you may ask?&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This is an interesting exercise in changing processes and system state knowledge to adapt to conditions. In the first 2 iterations all the state was pushed to the diners (white copies) and that state information was used for "billing" and "payments". In the final case we see an audit database (the accordion file) and a shared key (vibrator number and slot number).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So by looking at what was causing trouble (what Policies and Values were not being dealt with correctly), the store restaurant owner instituted quite significant changes that make the process of ordering/getting the food/eating it/paying for it (the order to burp process) a great deal more streamlined. Very little automation needed, almost no effect on the primary Value of the place – "Somewhere that serves high quality, tasty, vegetarian chaat with a flavor of home." &lt;br /&gt;&lt;/p&gt;&lt;p&gt;It has been fun to watch this humble restaurant put so much thought and effort into helping itself run smoothly and maintain a great connection with its customers. Would that we in IT be as effective.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-6566319806723900005?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/6566319806723900005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=6566319806723900005&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/6566319806723900005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/6566319806723900005'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/04/process-improvement-and-chaat-cafe.html' title='Process Improvement and the Chaat Cafe'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-8269285022308889757</id><published>2009-04-19T09:44:00.001-07:00</published><updated>2009-04-19T09:44:12.535-07:00</updated><title type='text'>The trials of pedantry – aka type/instance confusion and other adventures in meaning</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;"I had Taco Bell for lunch today". I keep hearing that usage from co-workers, students, random people in passing. At some level it makes complete sense – I get it that the person speaking ate at food obtained at a Taco Bell "restaurant" (why anyone would do that is beyond the scope of this posting). However, compare and contrast that with, "I had salad for lunch today." The second describes the food (pretty generically), the first describes the place where the food came from.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Now imagine you don't know that Taco Bell is a food chain, and maybe you are not doing analysis in your primary language). What assumption would you make about the statement, "I had Taco Bell for lunch today?" I think the first reaction would be that "Taco Bell" would be classified as a kind of food, not a kind of place. And Because that is a first impression, it would set a context that could be hard to shake. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;As an aside, while working in France a couple of years back, the nearby Pizza Joint was called "Speedy Rabbit". When a project team member suggested we have "Speedy rabbit" for a working dinner – and that I, being the project manager and therefore an impediment to progress should go and fetch it. Since in that part of France, rabbit is often served, and often really tasty, I had visions of having to chase this thing down in my underpowered rental car. Turns out it was a pizza joint and that it was a simple pickup. Not a rabbit in sight. Oh well.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;As architects/analysts we often find words or phrases that are used in surprising ways (idiomatically one might say if one were being charitable). The insiders to the group get it, understand the meaning, know when the statement refers to Taco Bell the company HQ, the Taco Bell on the corner, the specific lunch (without knowing the actual details of the meal). So we have to be careful when we are faced with words like "office" or "transaction". We need to know the context that the speaker is coming from and to be able to decouple our understanding of the word from the understanding that the speaker means.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;How often have you heard statements like "we have 7 transactions in our banking system"? My first reaction is, "wow those must be huge transactions" or this bank is going under soon. And then I realize that of course it is transaction types or kinds of transactions, not the instances. Once again context rules. If you ask the question, "How many transactions did you do today?" You may well get an answer of 100 million. If you ask the question, "How many transactions can be executed?" You might get the answer 7.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So, how do we know when we are getting a "type" answer? How do we know when we are getting an "instances" answer? How do we make sure handle the precision that we need, without pushing all the annoying explicit packet context onto the people we are striving to understand. We have to learn the context, apply the context properly, and hide the distinctions unless it becomes absolutely necessary. One way of doing this nicely is to have  stash of instance models handy. So when talking about concepts we should talk about them extensionally when we mean to describe the instances, and intensionally when talking about the type.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;   &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-8269285022308889757?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/8269285022308889757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=8269285022308889757&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/8269285022308889757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/8269285022308889757'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/04/trials-of-pedantry-aka-typeinstance.html' title='The trials of pedantry – aka type/instance confusion and other adventures in meaning'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-5934261956641050495</id><published>2009-04-15T07:19:00.000-07:00</published><updated>2009-04-15T07:37:40.519-07:00</updated><title type='text'>EA and Finance</title><content type='html'>This post come out an initial simple twitter question, "Should EAs understand finance?" The conversation went all over the place. In 144 character bursts. It is hard to get the essence of what I was thinking in these short bursts.&lt;br /&gt;&lt;br /&gt;Some of the slices:&lt;br /&gt;&lt;br /&gt;How does EA justify its own costs? Interesting, important, but not where I had hoped to take things.&lt;br /&gt;General discussion on values - again interesting but not what I was looking for.&lt;br /&gt;Simplification - again, doesn't get to the meat.&lt;br /&gt;IT should understand spend on everything (not just IT) - this is getting closer. It isn't necessarily about spend, though.&lt;br /&gt;&lt;br /&gt;I guess what I should have asked is broader and better categorized than what I did ask.&lt;br /&gt;&lt;br /&gt;When I say finance, my first thought was should the EA be able to understand (at a deep level) the balance sheet OF THE BUSINESS?&lt;br /&gt;&lt;br /&gt;Second when it comes time to look at an annual report, should the EA be able to interpret the financials? Including the footnotes?&lt;br /&gt;&lt;br /&gt;When it comes to investment decisions - should the EA bee in a position to understand the implications of different kinds of investments and tradeoffs? A new airplane hangar vs increase in parts inventory vs a new data center?&lt;br /&gt;&lt;br /&gt;Note these are ALL: business decisions.&lt;br /&gt;&lt;br /&gt;Now, since the spend on "IT" is so relatively large (1.3% to 5% of turnover or revenue) - depending on what's counted and how you count it, should the EA be an active participant in the allocations of this spend (budgetary vs actual)? &lt;br /&gt;&lt;br /&gt;As technologies evolve - the shift from inhouse data centers to outsource (back to insource - outsource costing, in house operated), cloud, the economics become driving factors. How well should the EA understand these economics? How much should the EA be involved in these discussions? Is the EA involvement any different in these IT kinds of decisions than in other technology shifting decisions. For example changing the delivery fleet from gas (petrol) burning to biodiesel/electric/hybrid/CNG, LPG, LNG. All of these have huge effects on the business and its bottom line.&lt;br /&gt;&lt;br /&gt;When a business has the opportunity to allocate "money" across its various operations, should the EAs be in that discussion? Normally it is an hierarchical, line of business, roll up approach with little input from EA except the CIO might ask, "What's your budget?" This is nonsense. The EA must have a budget, for sure, but to properly assist the business, it must be an active participant in budgeting decisions.&lt;br /&gt;&lt;br /&gt;So as the EA has the opportunity to influence the business (used loosely) that s/he supports, where are the lines around finance?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-5934261956641050495?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/5934261956641050495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=5934261956641050495&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5934261956641050495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5934261956641050495'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/04/ea-and-finance.html' title='EA and Finance'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-2076755781062194995</id><published>2009-04-05T20:30:00.001-07:00</published><updated>2009-04-05T20:30:02.297-07:00</updated><title type='text'>Innovation and incremental improvement</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;I was watching the Formula 1 race from Malaysia this morning. It was on live and early, so I had the TV to myself. For the past several years F1 has been dominated by McLaren and Ferrari. For the past few years the changes to the formula have been relatively small.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This year, however, the FIA have made some pretty dramatic changes – resulting in a major shake-up. The old factory Honda team is no more, but has become reborn as the Brawn F1 team (Ross Brawn, the man behind the rise of Michael Schumacher being the team principal).  Toyota have also done well, with the red bull/toro rosso teams also having good outings.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So, what changed. I contend that this is a great example of the difference between steady, linear improvement as managed in lean/six sigma kinds of processes, and the need to be radically different as is the case when major innovation is necessary.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The FIA changed the rules dramatically. Back to slick tires, much reduced rear wing area, the Kinetic Energy Recovery System (KERS) which charges batteries under braking so the power can be deployed at times to suit the driver. Adding an extra 80 hp for about 6 seconds a lap. Engine revs reduced to 18,000, etc.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The teams that appeared to treat the rule changes as evolutionary are doing poorly/ The teams that recognized the radical nature of the changes – and with little to lose, are doing much better.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So, perhaps where innovation is concerned we should not try to put it into well defined, six sigma, DMAIC based processes. Let the creative juices flow, make changes in a non linear fashion until the platform has become relatively stable and then shift to six sigma type approaches.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-2076755781062194995?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/2076755781062194995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=2076755781062194995&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2076755781062194995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2076755781062194995'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/04/innovation-and-incremental-improvement.html' title='Innovation and incremental improvement'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-370341486375602549</id><published>2009-03-28T15:18:00.001-07:00</published><updated>2009-03-28T15:28:03.599-07:00</updated><title type='text'>Entropy in Systems</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;The concept of entropy in thermodynamics is well known. This &lt;a href="http://en.m.wikipedia.org/wiki?search=Entropy"&gt;article&lt;/a&gt; covers the landscape well. In systems, especially systems that involve human and computer interactions, we have a similar notion. &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;font-size:16;"&gt;&lt;span style="color:black;"&gt;&lt;span style="font-size:100%;"&gt;Entropy, historically, has often been associated with the amount of&lt;/span&gt; &lt;a title="wikt:order" href="http://en.wiktionary.org/wiki/order"&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;order&lt;span style="color:black;"&gt;, &lt;a title="Randomness" href="http://en.m.wikipedia.org/wiki/Randomness"&gt;&lt;/a&gt;&lt;/span&gt;disorder&lt;span style="color:black;"&gt;, and/or &lt;a title="Chaos" href="http://en.m.wikipedia.org/wiki/Chaos"&gt;&lt;/span&gt;chaos&lt;span style="color:black;"&gt; in a &lt;a title="Thermodynamic system" href="http://en.m.wikipedia.org/wiki/Thermodynamic_system"&gt;&lt;/span&gt;thermodynamic system&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;. The traditional definition of entropy is that it refers to changes in the status quo of the system and is a measure of "molecular disorder" and the amount of wasted energy in a dynamical energy transformation from one state or form to another.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:Arial;color:black;"&gt;So too in our information systems. The amount of effort that we have to undertake to move a system from one state to another (essentially to make a modification to it) is in 2 parts. The effort expended towards making the change useful, and all the rest of the effort.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;color:black;"&gt;This applies both to the change to the system itself and any changes that we make as a result of executing the system. So, for example, if we consider some system fragment, "Visit the doctor because of pain in the shoulder", then any time/effort spent in doing something other than getting the diagnosis/treatment is wasted and increases the system entropy. This time/effort may include (but is not limited to)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Getting to the Dr.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Filling in new patient paperwork&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Having payer status checked&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Explaining symptoms to receptionist&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Waiting in waiting room&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Waiting in treatment room&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Waiting for X-Ray results&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Driving to radiology lab&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Filling in radiology lab paperwork&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Waiting at radiology lab&lt;br /&gt;&lt;/li&gt;&lt;li&gt;…&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The point of this is that this "system" is unbelievably wasteful of a precious resource (at least precious to me), my time. So from my perspective all of the above steps indicate great inefficiency. Perhaps because of complexity, perhaps because of a lack of cohesive thinking.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Considering another example, perhaps closer to work for many – the HR portal. That is often the one information system that has been designed to almost entirely ignore the majority of its users. There is often a huge learning curve for the majority of the employees. Of course the users who specify the system, the HR department have it well designed for their own convenience – and what they believe is the convenience of the employees. I leave you to draw your own conclusions!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So at one level, we have the idea of the system in use with every use increasing the entropy of the system.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Now think about attempting to make a change to a system. A whole new dynamic sets in. The need to understand the system in place so it can be changed. This can involve very detailed analysis – deep understanding. The more pieces there are – and the more interconnections, the more understanding there has to be. So depending on the design of the system in place there can be a greater or lesser effect on its entropy. If the system is very involved/convoluted then the understanding as a percentage of the useful work done will be high. If the system is relatively straightforward then the understanding as a percentage of the useful work done will be less.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So systems entropy might be thought of as ( &lt;sub&gt;i=0 &lt;/sub&gt;&lt;sup&gt;n&lt;/sup&gt;∑(W&lt;sub&gt;i &lt;/sub&gt;- V&lt;sub&gt;i&lt;/sub&gt;)) where W is the work performed at any state change I and V is the Valuable work performed at any state change i.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Defining and normalizing what we mean by work – and considering some normalized work value equation is, of course complex. For example in the getting shoulder diagnosed and treated, the system implicitly values the Dr.'s time as being more valuable than mine – so the system is optimized to make sure that the Dr.'s change entropy is least. What should be happening is that the total change in entropy should be minimized.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Typically systems that are overly complex, overly bureaucratic or optimized to support a minimal number of stakeholders will exhibit the greatest increases in entropy under a given state change.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;As architects we have a responsibility to be looking out across the landscape of a system as a whole and finding ways of minimizing the increases in entropy across common state changes.&lt;/p&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a title="Thermodynamic system" href="http://en.m.wikipedia.org/wiki/Thermodynamic_system"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-370341486375602549?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/370341486375602549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=370341486375602549&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/370341486375602549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/370341486375602549'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/03/entropy-in-systems.html' title='Entropy in Systems'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-7231162669044762493</id><published>2009-03-04T13:12:00.001-08:00</published><updated>2009-04-02T06:54:00.419-07:00</updated><title type='text'>Prototyping in rails</title><content type='html'>Now this is a truly bizarre thought. Many business apps and the underlying databases are a bit more complicated than the standard web app. Occasionally it is even necessary to populate the model that you plan to implement and let the users test drive the model through the UI.&lt;br /&gt;&lt;br /&gt;This approach used to be called rapid-prototyping, but has rather fallen out of favor.&lt;br /&gt;&lt;br /&gt;However, as the browser is becoming (has become) the dominant UI now, there is perhaps an opportunity to do a rapid prototype of some system functionality so the users can be assured that you have the relationships right and that you can quickly demonstrate some scenarios.&lt;br /&gt;&lt;br /&gt;This tends to be a royal pain, and then it hit me. Rails is such a quick to develop framework that getting some gnarly prototypes out quickly is very little problem. Of course we don't want to be too convincing because the users might think we have done the hard bits. But really what we will have done is:&lt;br /&gt;&lt;br /&gt;Create a simple database model with the interesting relationships (keys/fks, etc.)&lt;br /&gt;Populated that model with some made up data - careful cases&lt;br /&gt;Allowed the users to manipulate/navigate the data through a familiar approach. For example in an auction site, you may have many bids. So a 1:m relationship there. We could show an auction with its many bids easily, then click on a bid to go deeper, ensuring we have a link back to the auction.&lt;br /&gt;&lt;br /&gt;using RESTful principles and RAILS quite a lot of this is generated with the scaffold. That's a lot of power.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-7231162669044762493?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/7231162669044762493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=7231162669044762493&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/7231162669044762493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/7231162669044762493'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/03/prototyping-in-rails.html' title='Prototyping in rails'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3726209081340560183</id><published>2009-03-04T12:50:00.000-08:00</published><updated>2009-03-04T13:07:34.922-08:00</updated><title type='text'>Evaluating enterprise software</title><content type='html'>Two things have happened at pretty much the same time. The first is an evaluation of some enterprise class software in conjunction with and on behalf of a client. The second, the appearance of this article in my email - from Alex Rosen. http://www.pentaho.com/docs/a_new_business_model_for_bi.pdf&lt;br /&gt;&lt;br /&gt;While the problem to be solved for the client is not BI, there are a lot of behaviors in common between the paper and the experience with the vendor at this client.&lt;br /&gt;&lt;br /&gt;We had gone through many of the due diligence stages, spoken to various vendors, created shortlists, evaluated Proofs of Concept until we were down to a vendor that we wished to trial more deeply.&lt;br /&gt;&lt;br /&gt;There were some key things we wanted to find out, so we devised tests, questionnaires, scheduled calls, read as much documentation as the vendor would let us see, but we really felt that the vendor was being very stingy with information.&lt;br /&gt;&lt;br /&gt;Often direct questions would be answered with, "It doesn't work that way" or "no we can't do that". In the vendor's mind this might have meant, "This is not in scope for the pilot." That isn't how it came across.&lt;br /&gt;&lt;br /&gt;It took a huge amount of probing before the vendor finally started to be more forthcoming with information - at which point things went a lot more smoothly.&lt;br /&gt;&lt;br /&gt;So, since this is a pattern oft repeated, why do many vendors behave this way?&lt;br /&gt;&lt;br /&gt;I can't answer for this specific case, but some ideas include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The process is still sales controlled and the sales team wants to control everything.&lt;/li&gt;&lt;li&gt;The process is still sales controlled, so it is important to marginalize the people who can't say yes (but who can say no).&lt;/li&gt;&lt;li&gt;The process is still sales controlled and the teams aren't used to the more implementation oriented lines of questioning&lt;/li&gt;&lt;li&gt;There are opportunities for consulting dollars, so by keeping the prospect in the dark there is more revenue.&lt;/li&gt;&lt;li&gt;The vendor believes that the solution takes some getting used to, so is rationing the information to prevent the customer from being overwhelmed.&lt;/li&gt;&lt;li&gt;The vendor doesn't have adequate documentation and doesn't wish to expose that fact just yet.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The vendor wants to see the possibilities of hard questions coming so that they can prepare for answers.&lt;/li&gt;&lt;/ul&gt;There may be other reasons that I am not aware of - and the ones I mention are pure speculation.  On the current project, I can't say that any of these reasons are correct.&lt;br /&gt;&lt;br /&gt;The key takeaway for me is to learn as much as possible about the solution before pilots. Get any FAQ documentation, get the configuration documentation so you can what's possible from the configuration. Ask the hard questions, don't take the answer, "You'll see it in the Pilot."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3726209081340560183?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3726209081340560183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3726209081340560183&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3726209081340560183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3726209081340560183'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/03/evaluating-enterprise-software.html' title='Evaluating enterprise software'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-8480195629375074369</id><published>2009-03-02T07:36:00.000-08:00</published><updated>2009-03-02T07:44:53.271-08:00</updated><title type='text'>You are judged by the company you keep</title><content type='html'>In the past week or so I have been "followed" by several quite unsavory characters offering services in which I have not the least interest. However, if someone were to plot my social graph, they might see these characters "following me", and draw a conclusion that I might have an interest.&lt;br /&gt;&lt;br /&gt;Now if that someone were a prospective employer, or someone trying to establish that I was an unfit parent, I can imagine that my Twitter social graph could be of interest - and possibly grounds for non-hiring or withdrawal of parental rights.&lt;br /&gt;&lt;br /&gt;Is that right? No I don't think it is - since I didn't do anything except exist - its the online equivalent of someone putting a flyer under my windshield wipers while parked at the airport. The trouble is that I at least know the flyer is there, the person who put it there (kinda) knows that s/he put it there, but no one else does unless it is a deliberate campaign of mis-information (putting kiddie porn magazines under an ex's wipers and then alerting authorities anonymously).&lt;br /&gt;&lt;br /&gt;So, bottom line the associations you have are knowable to anyone with a mind to discover them, and thus open to all manner of misuse - of which blackmail is one of the less benign.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-8480195629375074369?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/8480195629375074369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=8480195629375074369&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/8480195629375074369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/8480195629375074369'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/03/you-are-judged-by-company-you-keep.html' title='You are judged by the company you keep'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-6393481001274454815</id><published>2009-03-01T07:03:00.001-08:00</published><updated>2009-03-01T07:25:28.671-08:00</updated><title type='text'>Agile methods and Design-Build</title><content type='html'>I was intrigued by a term in my Sunday paper this morning. There is a project underway to extend the light rail line from Dallas to the DFW airport. It passes within a few miles of my house, so I am quite interested in seeing how it is going to look. The Mayor of Irving (Herber gears) wrote an opinion piece in the paper. In it he stressed the Design-Build approach to the project.&lt;br /&gt;&lt;br /&gt;Design-Build sounds to me (at least on the face of it) an awful lot like Agile Development for software solutions. Perhaps it is the concrete version. Off to Wikipedia - &lt;a href="http://en.wikipedia.org/wiki/Design-build"&gt;http://en.wikipedia.org/wiki/Design-build&lt;/a&gt; (among other places) where I found these gems...&lt;br /&gt;&lt;br /&gt;"Design-build focuses on combining the design, permit, and construction schedules in order to streamline the traditional &lt;a title="Design-bid-build" href="http://en.wikipedia.org/wiki/Design-bid-build"&gt;design-bid-build&lt;/a&gt; environment. This does not shorten the time it takes to complete the individual tasks of creating construction documents (working drawings and specifications), acquiring building and other permits, or actually constructing the building. Instead, a design-build firm will strive to bring together design and construction professionals in a collaborative environment to complete these tasks at the same time."&lt;br /&gt;&lt;br /&gt;&lt;p&gt;"Potential problems of the design-build process include:&lt;br /&gt;  Premature cost estimating,&lt;br /&gt;  A short-cut design process,&lt;br /&gt;  Decreased accountability by the service provider, and&lt;br /&gt;  Correction of work. "&lt;/p&gt;&lt;p&gt;"It is important to note that the design-build method, while not focused on saving the owner construction costs, nonetheless often saves the owner money on the overall project. The combined effects of carrying a construction loan (which typically carries a higher interest rate than permanent financing) and an earlier useful on-line date usually yields considerable overall profitability to the project and may make seemingly unfeasible projects into genuine opportunities.&lt;br /&gt;The compression is an important aspect of the implementation of this system. Other attributes include:&lt;br /&gt;  Enhanced communication between the service provider and the client,&lt;br /&gt;  Increased accountability by the service provider,&lt;br /&gt;  Single source project delivery, and&lt;br /&gt;  A value based project feedback system"&lt;/p&gt;Sound familiar? - It sure does to me.&lt;br /&gt;&lt;br /&gt;This is in contrast (as the rather opinionated Wikipedia artice states) to&lt;br /&gt;&lt;br /&gt;"For nearly the entire twentieth century, the concept of Design-Build was classified as a non-traditional construction method in the United States, which is the last country to still embrace the old standard of Design-Bid-Build"&lt;br /&gt;&lt;br /&gt;So if we think this through, we see the following important ideas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The documents that are produced during the project are for the benefit of moving the project along, not for preparing bid-packages. That alone would appear to have tremendous potential to save time and money&lt;/li&gt;&lt;li&gt;There had better be some kind of a major plan in place first (City Plan anyone?) to ensure that the design-build doesn't go off the rails.&lt;/li&gt;&lt;li&gt;There had better be standards/codes in place so that we don't end up with shanty towns - the guage of the railway lines should be the same throughout, the standards for connection to standard services should be standard (electricity voltage, connectors, phases, frequency)&lt;/li&gt;&lt;li&gt;The approach is "owner driven" not architect or contractor driven&lt;/li&gt;&lt;li&gt;There is opportunity to adjust for changing requirements - new materials/material standards, unexpected terrain or landscape needs, changes in aesthetics,...&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Of course Design-Build as an approach is not an excuse for no requirements - just as Agile Software Development does not mean, "We will come into the project with a bunch of good ideas and figure out the real requirements as we go along."&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-6393481001274454815?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/6393481001274454815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=6393481001274454815&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/6393481001274454815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/6393481001274454815'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/03/agile-methods-and-design-build.html' title='Agile methods and Design-Build'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-4527078625253803504</id><published>2009-02-26T08:17:00.000-08:00</published><updated>2009-02-26T08:34:05.843-08:00</updated><title type='text'>The Fat Controller</title><content type='html'>In the wonderful "Railway Series" of children's books by the Rev. W.V. Awdry there is an officious character named "The Fat Controller". He is in charge of the railway and is often involved in activities that perhaps would have been better delegated. So, moving on many years and I have embraced the MVC architectural pattern (from my early Smalltalk times) and am actively involved in building a web application that uses Rails.&lt;br /&gt;&lt;br /&gt;My own history is that I tend to work outwards from the model - after all the domain is where the interesting rules are enforced, and I can figure out how to implement those without stretching my lousy artistic design sense. After all who needs more than a command line to test a domain model?&lt;br /&gt;&lt;br /&gt;Taking this inside out approach certainly isn't typical in many of the Rails books that I have been reading of late. I see crazy statements from "experts" like "the only things that are models are wrappers for ActiveRecords" If it doesn't inherit from ActiveRecord it should not be in the Models directory.  So where do these soi-disant experts recommend putting such logic? Ahhh, in the Controller of course. How they reconcile that with DRY (Don't Repeat Yourself) principles defeats me. Oh, and what if we want several different ways of receiving and managing the same data (maybe a b2b feed, an email message, a web form, a tweet, a txt message, an iphone app...), where should that logic reside.&lt;br /&gt;&lt;br /&gt;The cognoscenti imply that there should be a single controller for this, so we now have a soup of concerns not a separation of concerns. Putting all the above into a single controller results in creating a Fat Controller of whom the Rev. W.V. Awdry would be proud.&lt;br /&gt;&lt;br /&gt;Just say no to fat controllers&lt;br /&gt;&lt;br /&gt;Controllers don't have to be activated by views.&lt;br /&gt;Models don't just wrap active records&lt;br /&gt;We don't want fat controllers gumming up the works with their officiousness.&lt;br /&gt;&lt;br /&gt;Sir Topham Hatt, please don't teach my controllers to become overweight!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-4527078625253803504?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/4527078625253803504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=4527078625253803504&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4527078625253803504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4527078625253803504'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/02/fat-controller.html' title='The Fat Controller'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-2397912516468355697</id><published>2009-02-09T09:39:00.000-08:00</published><updated>2009-02-09T09:57:46.082-08:00</updated><title type='text'>Hijacking of Architecture</title><content type='html'>In the beginning there was Zachman, three columns and the "Framework for Information Systems Architecture." This was originally published in 1987 in an IBM Systems Review, I believe.&lt;br /&gt;&lt;br /&gt;There was much wailing and gnashing of teeth as it was realized that the three columns weren't enough. It needed to embody the 6 questions, "Who, What, Where, When, Why, How" at the 6 levels, so we have a 36 cell matrix. This matrix described what the "Information Systems Architecture" was all about - but didn't offer any prescriptions. How do you create a Business Logical "What?" (data) model? And how is that different from an Application Logical "What" (data) model? And while you are about it, how do you get traceability from one to the other?&lt;br /&gt;&lt;br /&gt;Meanwhile the technologists got hold of the word architecture and immediately subverted it into the technology layers - essentially taking on the dimensions of design. So we have architects instead of designers, so those of us at the overall business and IT dimensions were left without a word to categorize ourselves.  Job titles such as Java Architect start to cop up - and we immediately get pollution of the name space - or if you prefer overloading of the architect term. So when I would rock up and say to the business, "I am an architect and I am here to help you", I would get about the same reception as someone from the IRS - not very popular. The sorts of things I would hear are, "We aren't ready for programming yet." or "Has osmeone designed how this system is going to be put together?". In other words architecture became tactical, project based and confined to the technology realms.&lt;br /&gt;&lt;br /&gt;So we look to other terms/phrases and 2 jump out. One is "City Planning" and the other is "Enterprise Architecture". Well it is hard to sell city planning to a company that makes shoes - not the sexiest term there is. And Enterprise Architecture? Well, that's another term that has been taken over by IT. Even frameworks like TOGAF (The Open Group Architecture Framework) have been more heavily focussed on the technology realm - but that does appear to be changing with version 9 (released Feb, 2009).&lt;br /&gt;&lt;br /&gt;Enterprise Architecture Forums on Linkedin and Google seem also to be focussed on keeping track of physical artifacts and dealing (again) with the technology realm.&lt;br /&gt;&lt;br /&gt;So it appears to me that the arcchitects are out of luck again. The technologists have coopted architecture at all levels.&lt;br /&gt;&lt;br /&gt;So we perhaps should not be using the term architecture at all when trying to have sensible dialog with our business colleagues. We have done such a good job (as an industry) of confusing the term that it is time for a new one. No sooner have we coined it than it will become another victim of grandiloquence. Maybe we should use a term universally despised by the technology community (Analyst anyone?) because then it won't be coopted.&lt;br /&gt;&lt;br /&gt;My friend Nigel Green talks about some of these issues in his blog &lt;a href="http://bit.ly/1xrMTL"&gt;http://bit.ly/1xrMTL&lt;/a&gt;.    What those of us who straddle the Business/IT divide have to do is facilitate the communication across that divide. Using the language of business - using a framework like VPEC-T&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-2397912516468355697?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/2397912516468355697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=2397912516468355697&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2397912516468355697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2397912516468355697'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/02/hijacking-of-architecture.html' title='Hijacking of Architecture'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-2277868603388710624</id><published>2009-01-28T08:27:00.001-08:00</published><updated>2009-01-28T08:40:13.610-08:00</updated><title type='text'>Architecture and web companies</title><content type='html'>I have been doing consulting work for a couple of companies whose products are entirely informational. Essentially companies that provide information services over the web. I have been struck at both of them about the mixing of the technology that delivers the "product" (often really a service, but it helps my head to think in terms of a product!) and the technology that runs the business.&lt;br /&gt;&lt;br /&gt;An example from the genuine product world will help illustrate what I am thinking about. When making and selling hamburgers, there is a clear separation of what is delivered and how it is accounted for, tracked - essentially how the back office runs. The selling of hamburgers is a sufficiently different proposition than the creation of the back office business systems. I wouldn't attempt to combine the 2. Yes it is important that the sales information flows... (see earlier post on flow of goods, flow of money, flow of information). However, I don't have my fryer installation crew and my cooks building the systems.&lt;br /&gt;&lt;br /&gt;Where the product is informational, companies often think that the product and the back office rely on IT, so they must be the same. So we have the people who think in terms of product, features, etc. responsible for the potentially more mundane chores of installing and managing the back end systems - giving the internal business the data it needs to run and manage the business, and the sales/support and other staff the tools they need to do the job.&lt;br /&gt;&lt;br /&gt;In reality these are entirely different groups - and should be. Yes they might share common technology needs/data/platforms (although there is little guarantee even of that).  Yes they may share communications infrastructure and communication methods/platforms. But in reality the activities required to deliver a world class product and the activities to provide robust "run/manage the business" systems are as different as flipping burgers and accounting for the flipped burgers. Mixing the teams (and thus not getting a proper separation of "IT" responsibilities) leads to some very brittle systems - often because the value of the "run/manage the business" applications is almost always subjugated to the "develop and operate the product" systems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-2277868603388710624?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/2277868603388710624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=2277868603388710624&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2277868603388710624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2277868603388710624'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/01/architecture-and-web-companies.html' title='Architecture and web companies'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3717146265821139730</id><published>2009-01-27T10:45:00.001-08:00</published><updated>2009-01-27T10:58:43.444-08:00</updated><title type='text'>327x and web scalability</title><content type='html'>These are strange bedfellows at first blush. But the more I think about them the more parallels I see.&lt;br /&gt;&lt;br /&gt;Every book I read (and every web solution I build) talks at length about statelessness - especially session statelessness. Obviously data state is important, I really would like my bank account to know its balance and not derive it by applying all the transactions since the day I opened it every time I want to know my balance.&lt;br /&gt;&lt;br /&gt;But I digress.&lt;br /&gt;&lt;br /&gt;When I was a neophyte developer, the IBM 3270 family of "green screens" were just becoming mainstream. I had the enviable task of writing a series of macros in PL/I to emulate the behavior of the assembler macros for "basic mapping support." Fun project...&lt;br /&gt;&lt;br /&gt;Anyhow in doing said project, I learned more about the 3270 than any human should have to. The key lesson of the device was that the hardware was directly addressable, had the concept of the "field" and would send back only fields that had the "Modified Data Tag" bit turned on. That meant that if a field were modified by a user, that field would be sent, but unchanged data wasn't. If nothing else that cut down the amount of data transmitted compared with approaches that refreshed the whole screen.&lt;br /&gt;&lt;br /&gt;One much exploited approach was that the serving application could send the data out &lt;span style="font-style: italic;"&gt;with the modified data tag already turned on.&lt;/span&gt; This of course meant that the device would send that data back regardless of whether the user actually modified the data or not. Immediately there was an opportunity to manage session state. Just send the stuff you needed next time back in a field with the modified data tag on. That way you have enough context for the next invocation.&lt;br /&gt;&lt;br /&gt;The next leap was the ability to use "invisible" fields. Fields that were mapped to the screen but marked invisible (so you couldn't see their contents). Handy for passwords etc. However, if you set a field to invisible + modified data tag on, you could send suitable session data back, but the user at the screen didn't have to deal with it. You got the best of both worlds. Context information sent with the request and visible impact to the user.&lt;br /&gt;&lt;br /&gt;Does this all sound familiar? f course nowadays it comes in in the header instead of the data, but it is the same general idea. If an architectural approach demands context data with every call, have the server send it back as part of the resource, so it automatically comes in on the transmission.&lt;br /&gt;&lt;br /&gt;Plus ca change, plus &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;c'est&lt;/span&gt; la meme chose!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3717146265821139730?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3717146265821139730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3717146265821139730&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3717146265821139730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3717146265821139730'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/01/327x-and-web-scalability.html' title='327x and web scalability'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-4652417133018091078</id><published>2009-01-19T10:29:00.000-08:00</published><updated>2009-01-19T12:09:50.409-08:00</updated><title type='text'>Data ambiguity Part 1</title><content type='html'>I was having breakfast on Saturday with an old friend. He pointed me to this article by Werner &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Vogels&lt;/span&gt; (Amazon.com &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;CTO&lt;/span&gt;). &lt;a href="http://www.allthingsdistributed.com/2008/12/eventually_consistent.html"&gt;http://www.allthingsdistributed.com/2008/12/eventually_consistent.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This posting by Mr. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Vogels&lt;/span&gt; is very insightful - along the data replica dimension of distributed data management. This is clearly an important dimension, but it isn't the only one. There is a more general problem of data ambiguity. This isn't necessarily just a database problem, but an overall systems problem.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The basic thought is that when you have two representations of a piece of data that are supposed to have the same value, when do they actually have the same value (and who cares?).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We can imagine the following cases.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;The 2 values must always have identical values (to an outside observer). &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;Inside&lt;/span&gt; the "transaction" that sets the state of a datum, the values can be mutually inconsistent, but that inconsistency is not manifested to an observer outside of the transaction.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The 2 values will need to be "eventually consistent" - this case is admirably covered by Mr. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Vogels&lt;/span&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The 2 values will rarely have identical values, but there are mechanisms for "explaining" the discrepancies.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;The first case is almost a default case - yes we would like that please. The second case is a good perspective from a data replication perspective - essentially dealing with a common schema. The third case is the tricky case.&lt;/p&gt;&lt;p&gt;The first case is unattainable at large scale using ACID transactions for replicas of data at &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;Internet&lt;/span&gt; scale is simply impractical for performance. &lt;/p&gt;&lt;p&gt;The third case is interesting because of situations where "transactions" can occur against either copy of the data independently and in arbitrary sequences. The communication mechanism between the systems that can  update &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;copies&lt;/span&gt; of the data may be reliable, or they may be intermittent. That isn't completely the issue.&lt;/p&gt;&lt;p&gt;So, to illustrate this kind of system, let's take a popular application - Quicken. Many people use Quicken to manage their household accounts. The idea is to be able to use Quicken as a kind of front end to bank accounts - but it is only intermittently connected.&lt;/p&gt;&lt;p&gt;At any moment, the balance that Quicken reports and the balance that the bank reports are very likely to be different values. Of course from a data management perspective they are actually different fields, however that &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;subtlety&lt;/span&gt; will be lost on the majority of users. Why will the 2 have different values for the balance field? There are lots of reasons, e.g.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Transactions have arrived at the bank without being notified to Quicken yet. For example, in an interest bearing account, the interest payment will be automatically added to the balance on the bank's view of the account. Or possibly a paid in check has bounced - the bank will have debited the check amount and (possibly) added a penalty. &lt;/li&gt;&lt;li&gt;Transactions are processed in a different sequence in general. When a user writes the checks, there is no &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;guarantee&lt;/span&gt; that they will be processed by the bank in the order in which they were written (in fact, the policy varies, e.g. process the biggest checks first if there are many to be processed because that maximizes overdraft charges in the event that an account goes overdrawn).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;These reasons boil down to the need to have system autonomy for throughput (imagine having to wait at the bank to process check 101 until check 100 had been processed).&lt;/p&gt;&lt;p&gt;Of course it doesn't matter to us that the systems are rarely fully synchronized, that the "balance" doesn't agree across them - we have accounting methods to help us reconcile. In other words we can accept that everything is OK without caring whether the systems have the same value of the balance.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-4652417133018091078?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/4652417133018091078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=4652417133018091078&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4652417133018091078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4652417133018091078'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/01/data-ambiguity-part-1.html' title='Data ambiguity Part 1'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-2545854007380597588</id><published>2009-01-16T11:25:00.000-08:00</published><updated>2009-01-16T13:53:34.428-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='information'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='communication'/><title type='text'>Which communication method and when?</title><content type='html'>While this posting doesn't just deal with Enterprise Architecture it does begin to explore how we choose the tool (from quite a wide array) that we might choose for a communication at any given moment.&lt;br /&gt;&lt;br /&gt;Just thinking of my own case, I have an unseemly number of communication mechanisms/paths.&lt;br /&gt;&lt;br /&gt;For work - 3 email accounts (my employer and 2 clients)&lt;br /&gt;For my business 1 email account&lt;br /&gt;For other purposes 5 email accounts&lt;br /&gt;&lt;br /&gt;2 Instant Messenger accounts&lt;br /&gt;2 Groove Ids (for secure file sharing and messaging)&lt;br /&gt;Twitter&lt;br /&gt;Posterous&lt;br /&gt;2 blogs (cooking and this one)&lt;br /&gt;Facebook&lt;br /&gt;&lt;br /&gt;Telephone/voicemail (4 numbers) - 1 mobile 1 home, 2 clients&lt;br /&gt;Several RSS feeds on news, technology, etc.&lt;br /&gt;Text messaging&lt;br /&gt;Corporate sharepoint&lt;br /&gt;Client wiki&lt;br /&gt;&lt;br /&gt;These obviously aren't all 2-way, but having 25 major channels - and following several news sources, a few Twitter folks that I follow(about 50)  it is clear that I have oo much time on my hands!&lt;br /&gt;&lt;br /&gt;So why do it? It really comes down to personae and convenience. Taking just the corporate emails - each company (including my employer) has its own email infrastructure. Each client uses its own email addressing scheme to send stuff around. I can't get from one client's system into another's (and nor should I be able to).&lt;br /&gt;&lt;br /&gt;If I am doing frivolous things, I tend to use my hotmail account. If I am doing semi-serious, but still relatively public things, I use my gmail account. For my own business and when I know the person at the other end, I tpically use my own business email.&lt;br /&gt;&lt;br /&gt;Twitter is a great source of interesting updates. Admittedly of the 500 or so Tweets/day that I receive, about 50 are interesting to me and about 30 really interesting. So my filters are not as good as they could be.&lt;br /&gt;&lt;br /&gt;I use the phone, but not a lot. Most of my communication is asynchronous. I text a lot, contribute to my own blogs, read a bunch of news sources. The only things I don't seem to do are listen to/download music or video.&lt;br /&gt;&lt;br /&gt;So why is this important from a business perspective? Because we each make our own choices about which media to use. The enterprise needs to enable many different channels for the various purposes.&lt;br /&gt;&lt;br /&gt;Is Twitter a corporate tool? Absolutely - especially for corporate travel departments. It's the easiest way to get information out quickly.&lt;br /&gt;&lt;br /&gt;Is Facebook a corporate tool? Absolutely - keping track of alumni, enabling corporate communities (extending the ecosystem).&lt;br /&gt;&lt;br /&gt;Are blogs corporate tools? Absolutely - a great way for the corporation to provide an authentic experience to the community.&lt;br /&gt;&lt;br /&gt;Is Groove a corporate tool? Absolutely - secure internal and external file and message sharing.&lt;br /&gt;&lt;br /&gt;Is IM a corporate tool? Absolutely - again enabling community.&lt;br /&gt;&lt;br /&gt;Is email a corporate tool - sadly yes. But as we have observed many times, it is very heavyweight. Sometimes the only way to get information in and out of corporations.&lt;br /&gt;&lt;br /&gt;Phone/Voicemail? Absolutely.&lt;br /&gt;&lt;br /&gt;I would argue that every form of communication that I use has its place in my daily corporate life. Even hotmail and gmail have helped when the corporate network is down and I have to get a response out.&lt;br /&gt;&lt;br /&gt;Enterprise are really going to have to rethink communication - recognizing that critical information is going to leak over many channels. Draconian security groups will simply be bypassed since information will continue to flow.&lt;br /&gt;&lt;br /&gt;Then we have the symmetry/asymmetry question. How much of what I do is simply reading other people's stuff (following them personally, subscribing to their publications or what?) vs engaging in dialog.&lt;br /&gt;&lt;br /&gt;When dialog of some kind is needed, which of the many tools I have at my disposal do I use? My rule of thumb is whatever the person I am communicating with last used when talking to me. Of course it depends on whether it is a single short thought (twitter), a complex large file (Groove/email/SharePoint) or something in between....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-2545854007380597588?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/2545854007380597588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=2545854007380597588&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2545854007380597588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2545854007380597588'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/01/which-communication-method-and-when.html' title='Which communication method and when?'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-2500425707150677178</id><published>2009-01-06T09:36:00.000-08:00</published><updated>2009-01-06T09:45:37.024-08:00</updated><title type='text'>If everything is moving to the network why do I want applications?</title><content type='html'>There's an odd dichotomy happening. We are seeing pretty massive shifts to services obtained over the network for all sorts oif things (buying stuff being the most obvious, but there are so many). Yet we also insist on having our "applications" local too?&lt;br /&gt;&lt;br /&gt;By local application, I mean a chunk of functionality that runs on a client device and must be installed independently of the rest of the functionality on the device. So the browser is an application, but things that run inside it aren't (at least not by this definition).&lt;br /&gt;&lt;br /&gt;Much of what we can do with our smartphones, etc. can be done using a browser (possibly using the mobile version of the web site), but with some very specific look and feel needs, we tend to download and install specific applications. This is of course, especially true on the iPhone where the apple applications are legion and well liked by the applerati.&lt;br /&gt;&lt;br /&gt;So what drives this?&lt;br /&gt;First and foremost, I believe is the desire to be in control of one's own destiny. The networks are not ubiquitous enough yet that we can rely on them to have what we need available whenever we might need it.&lt;br /&gt;&lt;br /&gt;Second network cost - that can be expensive after a while.&lt;br /&gt;&lt;br /&gt;Third pure preference - we like the look and feel of the apps we install and not of those we don't&lt;br /&gt;&lt;br /&gt;Fourth capability. Organizaing/classifying is a core "client side" requirement. Rich experiences for doing that preclude us from using totally network based approaches - although tagging really assist with this.&lt;br /&gt;&lt;br /&gt;There are probably lots of other reasons, but with capability moving into the network, it seems strange that i-apps are growing in strength and popularity&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-2500425707150677178?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/2500425707150677178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=2500425707150677178&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2500425707150677178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/2500425707150677178'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2009/01/if-everything-is-moving-to-network-why.html' title='If everything is moving to the network why do I want applications?'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-4677450196990651607</id><published>2008-12-28T06:29:00.000-08:00</published><updated>2008-12-28T06:54:25.588-08:00</updated><title type='text'>Asymmetry - the word for 2009</title><content type='html'>Almst all the dealings we have are asymmetrical, but somehow that hasn't been anything to worry about. We are, however, seeing asymmetry beginning to bite in many unpleasant ways.&lt;br /&gt;&lt;br /&gt;The first is the power that organizations have over individuals. Random/arbitrary increases of interest rates on charge cards with little recourse. Banks making errors, taking a long time to pay what's owed and then when they pay it twice by mistake demand that the error be corrected, "Immediately or else...".  The petty bureaucracies of home owners' associations - you can't park a Ford F150 in your driveway, but a Cadillac Escalade is OK (Thanks Frisco, Texas).&lt;br /&gt;&lt;br /&gt;The second is in the everyday communcation between parties.  There is the kind of power asymmetry described above, but then there is what I call "interest asymmetry". Where one party in a conversation say something - which is of no interest to the other party. We have all been involved in conversations with spouses, other family members, children, where something that is riveting to them is really dull to us.  In the interests of harmony, I will not cite specific examples here.... &lt;br /&gt;&lt;br /&gt;At a wider level, we this interest asymmetry shoing up when we use social neyworking sites. We have the opportunity to converse with many people using these tools, but these conversations have inherent asymmetry too. What we choose to say is, at least, interesting to us. What we choose to "listen to" has variable degrees of utility. I am interested in family postings about the kids, but not teribly interested in the ins and outs of Cpmmercial Property Law in England (something my brother in law is an expert in). For non-family/non-friends I am typically interested in work related stuff, or special interests (food, sailing...). So when I see the jumb;ed stream of messages, I put filters on, e.g. "Oh this is Paul talking about LIBOR again, I think I will ignore it." or "This is Robin talking about the kids, Christmas trees, presents, etc." I will ignore that." The atter case because I follow Robin's inciteful postings on technology, but not on his children.&lt;br /&gt;&lt;br /&gt;People who are followed by a large crowd (because of celebrity, interests, self-promotion) have an even more asymmetric communication approach using the media of social networking because they have so much to say, and limited opportuinty to listen if all their followers were to respond. While they will often have set themselves up with expectations of symmetric communication, the style quickly becomes asymmetric.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-4677450196990651607?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/4677450196990651607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=4677450196990651607&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4677450196990651607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4677450196990651607'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2008/12/asymmetry-word-for-2009.html' title='Asymmetry - the word for 2009'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-4021678259252542835</id><published>2008-12-23T11:28:00.000-08:00</published><updated>2008-12-23T11:37:07.673-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><category scheme='http://www.blogger.com/atom/ns#' term='subscriber'/><category scheme='http://www.blogger.com/atom/ns#' term='listener'/><title type='text'>Pub-sub</title><content type='html'>We often casually describe event driven architectural patterns as being "pub/sub". This is, of course, an over simplification and misses the point.&lt;br /&gt;&lt;br /&gt;The key is to think of this kind of architecture is subscription driven or subscription dominated. This has been brought home. big time, in the social networking frameworks (like Twitter). People who post on Twitter essentially say whatever comes into their heads. We follow individuals or groups because, on balance, we get more out of following them than not. However, we will need to filter. For example, there are &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Twitterers&lt;/span&gt; who post about the industries that I am interested in, the beer they like to drink, their cooking interests, their children, their other hobbies,.....&lt;br /&gt;&lt;br /&gt;I typically don't want to see all of that, but the poster shouldn't be deterred and stop. The poster's responsibility is to post. The listener's responsibility is to filter the dull stuff - or the stuff that is dull to the specific listener. That is often hard because the signal to noise ratio for any specific listener will be different than the signal to noise ratio for any other.&lt;br /&gt;&lt;br /&gt;The4 same is true in any kind of event dominated system - human or otherwise. The listener is in a position to make decisions about what it is interested in, what it may respond to. The "teller" must continue to deliver the narrative.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-4021678259252542835?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/4021678259252542835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=4021678259252542835&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4021678259252542835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/4021678259252542835'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2008/12/pub-sub.html' title='Pub-sub'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-5417368039456595388</id><published>2008-12-23T11:19:00.000-08:00</published><updated>2008-12-23T11:28:45.019-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='data base'/><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><title type='text'>Filing...</title><content type='html'>In the old - &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;pre&lt;/span&gt;-computer days, there used to be a job performed in every office, namely that of the filing clerk. The filing clerk was usually pretty low in the organization - often a school leaver with few qualifications, and with luck and many &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;years&lt;/span&gt; experience could become a filing manager. In other words not a great value creating job for the corporation, but one where messing up could add a lot of cost.&lt;br /&gt;&lt;br /&gt;Legion were the companies that I worked at where filing &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;clerks&lt;/span&gt; had messed up - the most extreme being the travel industry person who didn't know what to do with the "audit coupons" on a paper airline ticket. She filed them in a shoe box under her desk...&lt;br /&gt;&lt;br /&gt;Fast forward to the database world and guess what we have. A super fast filing system. So &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;feeding&lt;/span&gt; the database is like feeding the filing cabinets. Stuff is put away so you can find it again, but it isn't the operational life blood of the company. The operational life blood is the interactions between humans, the interactions between systems - in reality the events that cause value to be created for the organization. Our systems are event driven and data-filed - not database driven, at least not if they are to be truly valuable and truly model the way that value is created in the information systems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-5417368039456595388?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/5417368039456595388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=5417368039456595388&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5417368039456595388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/5417368039456595388'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2008/12/filing.html' title='Filing...'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-6820339706620097530</id><published>2008-09-01T05:53:00.000-07:00</published><updated>2008-09-01T06:23:39.834-07:00</updated><title type='text'>Auto insurance</title><content type='html'>This posting is a reprise of an idea I put out in 2000. We were beginning to see the rise of "exchanges", Component models, interface based programming and other aids to distributed systems. I had 2 major interests at the time. One was in "edge" computing, the other in facades across business models.&lt;br /&gt;&lt;br /&gt;I wrote a thought piece about auto insurance and a direct link between insurance and the vehicle. I was reminded of that piece by a TV commercial that I saw today. In the commercial, the car knew which insurance company was covering it, and if it didn't like the company, then it would find reasons not to go. In one case it ejected the keys from the ignition, in another it refused to unlock its doors and in the third case, the tires deflated.&lt;br /&gt;&lt;br /&gt;The piece I wrote years ago also had knowledge between the car and the insurer, but had some more active features. For example, if we could envisage a car with multiple settings (the boring, around town go to work setting or the "boy racer" weekend setting, or others), then we could imagine having variable rate insurance - essentially the insurance premium is selected based on the car mode that is selected. If you never engage the "boy racer" mode, you never get charged that premium. So essentially we are looking at dynamic premium pricing based on a number of conditions all known about from the edge.&lt;br /&gt;&lt;br /&gt;Lots of implications here. We could have a different key for each family member - or a key/thumbprint combo. If the thumbprint isn't a licensed (i.e. known to the insurance company) person, then the car doesn't start. So you could lock out unauthorized (friends of your children) drivers. What about speeding? The car knows that you have been speeding :-(. A car rental company (Acme) in Connecticut attempted to fine a renter for excessive speed. This was struck down in February 2002 by the Department of Consumer Protection. However, it may well be possible for insurance companies to use this kind of monitoring to assess premiums and to assist with accident "fault finding." &lt;br /&gt;&lt;br /&gt;Lots of issues of course, but the key is to be thinking in these kinds of terms - where real time (or nearly real time information) can be used to guide decision making - especially pricing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-6820339706620097530?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/6820339706620097530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=6820339706620097530&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/6820339706620097530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/6820339706620097530'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2008/09/auto-insurance.html' title='Auto insurance'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-1738172007482968046</id><published>2008-07-15T11:38:00.000-07:00</published><updated>2008-07-15T11:50:00.271-07:00</updated><title type='text'>An interface or an implementation?</title><content type='html'>I have been having conversations over the last few weeks about whether a service (in the SOA sense) is an interface or an implementation. This is a surprisingly tricky path to navigate.&lt;br /&gt;&lt;br /&gt;At one client the following question (or a variant) comes up quite frequently, "We want to service enable our C++ back end code, but the services framework is all Java how can we get them to co-exist?"&lt;br /&gt;&lt;br /&gt;So we have an implementation, we can't use it directly but we do want to leverage it. Clearly the implementation itself isn't the service. If it were there would be no discussion. Also the interfaces it already provides may not be the same as the operations we would want to offer.&lt;br /&gt;&lt;br /&gt;So we take the time-honored approach and wrap the code. The wrapper then exposes the service's operations and deals with the complexity of mapping the operations to whatever the original code supported. Now what is the Service in this scenario? Perhaps it is the wrapper code - after all it is the wrapper that has the signature, the wrapper that is directly invoked, the wrapper that will have the nice QOS measures, the wrapper I will look up in my registry.... However the wrapper doesn't "do" anything. Of course if the wrapper is really generic and abstract then it doesn't help to describe the service as being the wrapper. No one will have a clue when they go to the registry (white pages) what the service does. A description like "Wraps existing C++ code so it can be made available in the services framework" is hardly a confidence booster.&lt;br /&gt;&lt;br /&gt;So what to do? My general favorite is to use a special purpose framework (auto generated if possible) to wrap the C++ (or other legacy) code. Make sure that the service is the wrapper and not the C++ implementation and manage that in the registry.&lt;br /&gt;&lt;br /&gt;After all, one of the SOA principles is autonomy. The actual implementation doesn't have to be constrained as long as the interface supports the appropriate operations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-1738172007482968046?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/1738172007482968046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=1738172007482968046&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/1738172007482968046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/1738172007482968046'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2008/07/interface-or-implementation.html' title='An interface or an implementation?'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-6561506326306142416</id><published>2008-07-15T10:27:00.000-07:00</published><updated>2008-07-15T11:37:33.634-07:00</updated><title type='text'>Introduction to the GIM model</title><content type='html'>At some primitive level there are three sets of things that flow in an organization. These are Goods, Information and Money. Not a shattering insight, but the interactions between these three categories give us some really good insights into how a business works. This isn't a typical customer focussed, outside in kind of view, but deals with what actually happens inside the business.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Why is this view of the business important?&lt;/strong&gt;&lt;br /&gt;It is holistic, actions that occur in one of these flows has impact on the others. Shipping the software to a customer (Physical Goods) can tell the money flow that revenue recognition can occur and can deliver information that the shipment has taken place.&lt;br /&gt;&lt;br /&gt;Looking at the interactions of these flows gives us clues into:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Adherence to accounting practice (when do we recognize revenue, for example?)&lt;/li&gt;&lt;li&gt;Inefficiences in process (oh, we recalculate the revenue in many different places, even though nothing has changed)&lt;/li&gt;&lt;li&gt;Opportunities to improve quality of service (let's move the credit check - an information flow request) to earlier in the cycle so we don't incur costs before we know if the customer can/will pay)&lt;/li&gt;&lt;li&gt;Business modeling - "what if" (What happens if we attempt to move the credit check earlier?)&lt;/li&gt;&lt;li&gt;Real time information delivery from both Goods and Money (How many units did we ship today?)&lt;/li&gt;&lt;li&gt;Realization that the information need to control a Goods flow isn't available identifies a process breakdown&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Ultimately, of course, what we deal with in information systems are informational abstractions of the Goods and Money. For us in IT it is all information. However to the business it isn't so, although we use the lens of the information system to help us look at the underlying realities. Our information system lenses are so distorted, however, that we often don't or can't know what is properly in or out of focus.&lt;/p&gt;&lt;p&gt;There are some real nuances to worry about here too. For example, in a content delivery system (e.g. a newspaper), the information (content) is treated as the Goods. Likewise in banking much of the money that flows through the bank is actually treated as Goods - but with a significant impact on Money and Information as well. &lt;/p&gt;&lt;p&gt;It is not trivial to create a GIM model, but the effect is enormous:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Silo thinking is reduced - all streams can see the effects on each other of actions taken. Moving Credit Check later in the Information Stream affects the Goods stream because it will curtail process actions.&lt;/li&gt;&lt;li&gt;Sub-optimal decision making is highlighted - "If I take this action, what breaks?&lt;/li&gt;&lt;li&gt;It provides a common "grammar" for talking about the business between the business and IT - a goal that has not been reached in many years of trying.  &lt;/li&gt;&lt;li&gt;An end to end trace of a business process - with all the stakeholders shown can be built and optimized.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Why doesn't a process model work?&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;This is a form of process model - one where we specifically illustrate what happens to all of the major "data" sets (Goods, Information, Money). So instead of being a step by step way through the process, it is a way to handle the information exchanges more effectively. So it is an enriched process model.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What other models help?&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;We can leverage many of the standard models (e.g. in UML), but nothing gives us a complete enough view.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;How do we do it?&lt;/strong&gt;&lt;/p&gt;It revolves around a fundamental understanding of business modeling - starting with the operational flow of goods. It is after all the operational flow of goods from start to finish that defines what the business delivers. So drive from flow of goods - starting anywhere.  That depends on the scope and depends on the business. The key is that it is an operational goods flow that matters. That operational goods flow means starting with operational process.&lt;br /&gt;&lt;br /&gt;In the operational goods flow, swim lanes and swimming pools are appropriate, but often it is a good idea to use business iconography and not boxes/lines to show things. That way it illustrates that we are firmly in the business domain, not IT.&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;For each step in the handling of the flow ask:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Has this step had any effect on the Money side - e.g. recognized revenue, incurred measureable cost, disposed of an asset...&lt;/li&gt;&lt;li&gt;What information might be available as a result of this action being taken. Is the information interesting "real time", is the information needed for subsequent analysis, is the information in any sense privileged? &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Yes, the questions really are that simple. The answers aren't and the implications aren't, but the questions are. What you do with the wealth of information is another matter.&lt;/p&gt;&lt;p&gt;We will notice over time that the timing needs of the Money flow and the Information flow don't exactly match the Goods flow. This is to be expected. We will also notice that the goods flow will continue regardless of whether the Money and Information flows are keeping up. In many cases we will see that the other flows play "catchup" and deal with the implications of Goods flow later. This is a primary cause for inconsistencies between different parts of the business and difficulties in rationalization. &lt;/p&gt;&lt;p&gt;It is of course impossible to fully serialize the business so that the flow of Goods is interrupted until all the Money and Information flows have properly completed. Thta's one reason why we look at the physical Goods flow - that simply doesn't wait.&lt;/p&gt;&lt;p&gt;In subsequent articles, I will talk about some of the interesting patterns and interactions that we see when doing this kind of modeling.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-6561506326306142416?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/6561506326306142416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=6561506326306142416&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/6561506326306142416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/6561506326306142416'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2008/07/introduction-to-gim-model.html' title='Introduction to the GIM model'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-7735356288514249215</id><published>2008-06-13T07:29:00.000-07:00</published><updated>2008-06-13T07:52:02.044-07:00</updated><title type='text'>What can SOA learn from RDBMS?</title><content type='html'>At first blush, there doesn't look to be a lot of synergy between Service Oriented Architecture and relational database management systems (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;RDBMS&lt;/span&gt;). The primary function of a database management system is, after all, to manage the storage, retrieval and integrity of the data it is called upon to manage. It's that last word, integrity, that provides insight into commonality.&lt;br /&gt;&lt;br /&gt;In the late 1980s &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Sybase&lt;/span&gt; introduced the notion of triggers into their &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;flagship&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;RDBMS&lt;/span&gt; product. A trigger was a piece of code that was executed when "something interesting" happened to the data under management. Triggers provided a very flexible way of reacting to changes like, for example, deleting a row from the database. That deletion could then cause a series of other actions (usually embedded in stored procedures), for example cascading the delete of one row to others - and thus enforcing referential integrity. Quite an elegant solution at the database level.&lt;br /&gt;&lt;br /&gt;Of course, being about the only capability available for &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;guaranteeing&lt;/span&gt; that the events would be detected, triggers started to get abused, whole rafts of business logic were embedded in stored procedures, and the database became the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;logic&lt;/span&gt; engine and the storage engine. No real separation of concerns there.&lt;br /&gt;&lt;br /&gt;Now let's forward to 2008 and look for parallels and opportunities. For transaction processing, we are beginning to see much lighter weight data management engines (look at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Google's&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;bigtable&lt;/span&gt; implementation or Amazon's &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;simpledb&lt;/span&gt;). Business logic is being pushed into services - probably where it should be. That leaves us with a bit of a hole. The value that triggers provided is still needed, but now it should be at the same level of data abstraction as the data managed by the services. That level is typically at the business object level.&lt;br /&gt;&lt;br /&gt;So taking the simple concept of a trigger, we can ask ourselves if there is value to the enterprise in knowing when "interesting" things happen to business objects. (Of course this is still too broad, but bear with me here). There are some business events that are quite interesting to know about. For example a big customer win (resulting in the creation of a new customer in business terms) is likely to be very interesting to the organization as a whole. Can be &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;notified&lt;/span&gt; as a morale booster/internal PR operation, can add some heft to other sales activities,... The list is endless. It isn't sensible to notify this at the database level, that is too low level, to proprietary. It makes a whole lot more sense to publish the "event" on the corporate internal nervous system.&lt;br /&gt;&lt;br /&gt;It is impossible for the customer management service to know who or what might be interested in the information. Just as in the database world, the table with the "add trigger" doesn't &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_10"&gt;actually&lt;/span&gt; know which other tables might be affected. All the customer management service knows is "that something just happened and there may be others interested". It then becomes the job of the corporate nervous system to let  this event be "broadcast". Anything interested can then pick it up and make its own decisions.&lt;br /&gt;&lt;br /&gt;It is &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;therefore&lt;/span&gt; the responsibility of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;ESB&lt;/span&gt; to provide this kind of capability in the containers that surround and manage the business objects, just as it was the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;DBMS's&lt;/span&gt; responsibility a generation earlier. It is the enterprise &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_14"&gt;business&lt;/span&gt; architecture's job to determine which of these events should be triggered, and how the interested parties might react.&lt;br /&gt;&lt;br /&gt;No there isn't much new here, we have had pub/sub architectures before - usually to aid with application integration. What is new here is that we can use the standards based capabilities that our &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;SOA&lt;/span&gt; frameworks give us, together with a firm understanding of the need to drive change, to guide us to delivering a more flexible, sustainable architecture.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-7735356288514249215?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/7735356288514249215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=7735356288514249215&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/7735356288514249215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/7735356288514249215'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2008/06/what-can-soa-learn-from-rdbms.html' title='What can SOA learn from RDBMS?'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2120400492278270391.post-3675244536717390080</id><published>2008-05-07T18:01:00.000-07:00</published><updated>2008-05-07T18:24:43.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EDA'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>SOA is from Mars EDA is from Venus</title><content type='html'>It seems that in most Service Oriented Architecture deployments, the predominant paradigm is request/response. Consumer A wants something from Service B. Essentially it is an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;RPC&lt;/span&gt; like model, but with extra overhead. This model has been dominant because of several factors:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;We can think of it like an extension of the earliest programming models we ever dealt with - subroutines and functions&lt;/li&gt;&lt;li&gt;We don't have to get all snarled up in worrying about parallel processing/multi-tasking and other hard to debug kinds of models&lt;/li&gt;&lt;li&gt;We can break up problems into conveniently sized chunks by some kind of hierarchic decomposition&lt;/li&gt;&lt;li&gt;All languages support the model intrinsically.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Does this mean that it is the best way? Perhaps for some problems, but surely not for all. I see a subroutine or function as being a rather surly, uncommunicative programming equivalent of a slob sitting in a chair, swilling beer and only responding when he feels like doing so. Very good at doing one thing at a time, easy to discover (after all who can miss the chair, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;beer can&lt;/span&gt; and TV remote). &lt;/p&gt;&lt;p&gt;This model is so dominant that we have even simulated it on top of asynchronous protocols. So even in a system that doesn't support request/response directly (e.g. an asynchronous, message based system) we still allow for the same semantics, but this time fudging them to use pairs of asynchronous messages. Changing the transport doesn't really change the programming model. We still think in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;RPC&lt;/span&gt; terms.&lt;/p&gt;&lt;p&gt;Enter &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;SOA&lt;/span&gt; and we often have the same view. This time instead of an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;RPC&lt;/span&gt;, we sometimes refer to a "Service Call". Immediately we should be on the defensive. Call implies request/response. Should that be what our services do? Well, of course sometimes they should. &lt;/p&gt;&lt;p&gt;Now let's look at things from a different perspective. In an Event Driven Architecture, when something happens, the component that realizes something has happened feels the need to communicate this goodness to anyone who will listen. Some listeners will take action as a result. It is almost a gossiping model, a model where as soon as information is available, it is able to be shared. Not only does sharing take place, but it is absolutely impossible for the originator or broadcaster of the information to control what happens to it. It is out in the aether with all sorts of actions taking place as a result. Some of the actions might be beneficial, some not.&lt;/p&gt;&lt;p&gt;So here, we have a much lighter weight, less surly architecture an approach where the actions are distinguished from the notifications, where the actors are actively listening and making decisions for themselves. An architecture that exhibits autonomy and a loosely coupled style.  Of course the trouble with a gossiping style is that a large amount of information is made available, only some of which will be acted on. So it is very "chatty" Chattiness in IT systems correlates well with increased resource consumption. In constrained systems (especially those that are network or disk constrained) increasing resource consumption can have a large, and negative impact on the cost of doing business.&lt;/p&gt;&lt;p&gt;In the EDA model, information "publishers" and "consumers" are constantly doing other things. They are true multi-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;taskers&lt;/span&gt;, ever prioritizing their activities, deciding whether to wait for more information or whether to act immediately. Capable of acting and absorbing information at the same time, making complex decisions largely autonomously. In other words, there is less friction in this style of interaction.&lt;/p&gt;&lt;p&gt;Information, of course, doesn't need to be acted on immediately. A &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;useful&lt;/span&gt; tidbit might be recognized a long time after some other tidbit, making a situation clear. The arrival of the final tidbit can trigger a complex set of actions, relying on information disassociated from the original event, but somehow dependent on it.&lt;/p&gt;&lt;p&gt;Bottom line, we need to understand when it is appropriate to use one style or another. Sometimes it is good for a bunch of slobs to hang out, grunt and drink beer. At other times a more nimble, more overlapping, less controlling approach can deliver systems that function more smoothly.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2120400492278270391-3675244536717390080?l=businessanditarchitecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://businessanditarchitecture.blogspot.com/feeds/3675244536717390080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2120400492278270391&amp;postID=3675244536717390080&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3675244536717390080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2120400492278270391/posts/default/3675244536717390080'/><link rel='alternate' type='text/html' href='http://businessanditarchitecture.blogspot.com/2008/05/soa-is-from-mars-eda-is-from-venus.html' title='SOA is from Mars EDA is from Venus'/><author><name>Chris Bird</name><uri>http://www.blogger.com/profile/13436436994311245922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry></feed>
