<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><!-- generator="b2evolution/4.1.5" --><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
	<channel>
		<title>Carnets de bord</title>
		<link>http://www.ebpml.org/blog2/index.php</link>
		
		<description />
		<language>en-US</language>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<admin:generatorAgent rdf:resource="http://b2evolution.net/?v=4.1.5" />
		<ttl>60</ttl>
				<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/CarnetsDeBord" /><feedburner:info uri="carnetsdebord" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/3.0/</creativeCommons:license><item>
			<title>Programming with Abstract State Types</title>
			<link>http://feedproxy.google.com/~r/CarnetsDeBord/~3/2lHapQ1tkVc/programming-with-abstract-state-types</link>
			<pubDate>Mon, 20 May 2013 10:08:00 +0000</pubDate>			<dc:creator>jdubray</dc:creator>
			<category domain="main">MDE</category>
<category domain="alt">SOA</category>
<category domain="alt">Xtext</category>
<category domain="alt">MOP</category>
<category domain="alt">UML</category>			<guid isPermaLink="false">137@http://www.ebpml.org/blog2/</guid>
						<description>&lt;div style="float: left;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share"&gt;Tweet&lt;/a&gt;
&lt;script type="text/javascript" src="http://platform.twitter.com/widgets.js"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;script type="text/javascript" src="http://platform.linkedin.com/in.js"&gt;&lt;/script&gt;
&lt;script type="IN/Share" data-counter="right"&gt;&lt;/script&gt;
&lt;p&gt;I'd be the first one to recognize that I am playing way out of my league here, no question about it, but it seems to me that Computer Science has been neglecting, if not abusing, the notion of state in ways that seem to be counter productive. I understand that the work of Church and Turing was all about "Computing" and not surprisingly when we started to look for better abstractions to write programs the foundation of &amp;#955;-calculus was never reassessed but it is difficult today to not ask the question as to whether Abstract Data Types are at the foundation of the &lt;a href="http://www.computer.org/csdl/mags/so/2012/05/mso2012050096-abs.html"&gt;General Theory of Software Engineering&lt;/a&gt; (&lt;a href="http://semat.org/?page_id=632"&gt;GTSE&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;I spent the last couple of weeks pounding on the idea that &lt;a href="http://www.ebpml.org/blog2/index.php/2013/05/17/what-if-barbara-liskov-had"&gt;there is more&lt;/a&gt; to Barbara Liskov statement about the fundamental role of programs than &lt;a href="http://www.cs.iastate.edu/~hridesh/teaching/362/07/01/papers/p50-liskov.pdf"&gt;Abstract Data Types&lt;/a&gt;:&amp;#160;&lt;/p&gt;
&lt;blockquote&gt;I believe that the fundamental role of programs is to modify state not just the bits&lt;/blockquote&gt;
&lt;p&gt;Indeed, when you look at it closely, the role of "computers" today is far less about "computing" than it is about managing state, even though computing is required to transition from state to state properly.&lt;/p&gt;
&lt;p&gt;After defining &lt;a href="http://www.b-mc2.com/learn/"&gt;BOLT&lt;/a&gt;, and looking at &lt;a href="http://www.ebpml.org/blog2/index.php/2013/04/26/reinventing-agile-from-value-to"&gt;extensions in the problem domain&lt;/a&gt;, I found that the idea of defining a programming model&amp;#160;based on Abstract State Types could shed some new light on what a programming language truly is.&lt;/p&gt;
&lt;p&gt;Surprisingly, there is very little literature about ASTs as I define them. It seems that ASTs fit the model of &lt;a href="http://arxiv.org/pdf/1302.1046.pdf"&gt;Coalgebras&lt;/a&gt;, but again, I am playing way out of my league here.&amp;#160;&lt;/p&gt;
&lt;p&gt;In the paper referenced below, I define an AST as a simple data structure (key value pairs) which all share the same lifecycle (yes, states have a lifecycle too!). A state lifecycle is triggered by an interaction between two (or more) states. States are immutable and new states (of the same type or a different type) are created at the end of an interaction. I define 3 composition mechanisms (containment, extension, connection). Interestingly, there is no ASM (Abstract State Machine) behind ASTs. What we see as a "State Machine" is actually the occurence of repeatable interactions, so all the complexity associated to modeling state machines goes away.&lt;/p&gt;
&lt;p&gt;If anyone feels there is a strong analogy between ASTs and QED, well, it is nearly by design, but it really came about from me staring at UML State Diagrams, linking them to &lt;a href="http://www.infoq.com/articles/seven-fallacies-of-bpm"&gt;business process execution&lt;/a&gt;, then to &lt;a href="http://www.b-mc2.com/learn/"&gt;business strategy&lt;/a&gt;&amp;#160;and then all the way back to problem definition and today programming model.&amp;#160;&lt;/p&gt;
&lt;p&gt;This paper is far from complete, a very rough draft at best. I publish it as is for three reasons:&lt;/p&gt;
&lt;p&gt;a) I strongly believe that the fundamental idea behind ASTs will not change&lt;/p&gt;
&lt;p&gt;b) It would take me an infinite amount of time, which I don't have, to bring it to maturation&lt;/p&gt;
&lt;p&gt;c) This is really a call for help, if someone would like to jump in as a coauthor, to further the idea&lt;/p&gt;
&lt;p&gt;I don't see ASTs as being the next gen programming concept, ADTs are just fine, but it was hard to resist not extending the BOLT conceptual framework to the programming model level, especially in the context of Barbara Liskov's statement on the role of programs.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/programming-with-abstract-state-type.pdf?mtime=1369044287"&gt;Here is the paper&lt;/a&gt;, as usual any feedback is welcomed, especially if someone has already worked on that idea. My next step is really to put this idea in practice to explore it further. In particular the paper does not speak at all of the general orchestration behind state interactions (mechanisms such as addressing, activation, ...) but this is by design because I feel it is totally orthogonal.&lt;/p&gt;
&lt;p&gt;Again, I welcome the contribution of one or two co-authors, otherwise I'll continue working on this paper in an open content mode.&lt;/p&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a href="http://www.ebpml.org/blog2/index.php/2013/05/20/programming-with-abstract-state-types"&gt;Original post&lt;/a&gt; blogged on &lt;a href="http://b2evolution.net/"&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<div style="float: left;"><a class="twitter-share-button" href="http://twitter.com/share">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
</div>
<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
<script type="IN/Share" data-counter="right"></script>
<p>I'd be the first one to recognize that I am playing way out of my league here, no question about it, but it seems to me that Computer Science has been neglecting, if not abusing, the notion of state in ways that seem to be counter productive. I understand that the work of Church and Turing was all about "Computing" and not surprisingly when we started to look for better abstractions to write programs the foundation of &#955;-calculus was never reassessed but it is difficult today to not ask the question as to whether Abstract Data Types are at the foundation of the <a href="http://www.computer.org/csdl/mags/so/2012/05/mso2012050096-abs.html">General Theory of Software Engineering</a> (<a href="http://semat.org/?page_id=632">GTSE</a>).</p>
<p>I spent the last couple of weeks pounding on the idea that <a href="http://www.ebpml.org/blog2/index.php/2013/05/17/what-if-barbara-liskov-had">there is more</a> to Barbara Liskov statement about the fundamental role of programs than <a href="http://www.cs.iastate.edu/~hridesh/teaching/362/07/01/papers/p50-liskov.pdf">Abstract Data Types</a>:&#160;</p>
<blockquote>I believe that the fundamental role of programs is to modify state not just the bits</blockquote>
<p>Indeed, when you look at it closely, the role of "computers" today is far less about "computing" than it is about managing state, even though computing is required to transition from state to state properly.</p>
<p>After defining <a href="http://www.b-mc2.com/learn/">BOLT</a>, and looking at <a href="http://www.ebpml.org/blog2/index.php/2013/04/26/reinventing-agile-from-value-to">extensions in the problem domain</a>, I found that the idea of defining a programming model&#160;based on Abstract State Types could shed some new light on what a programming language truly is.</p>
<p>Surprisingly, there is very little literature about ASTs as I define them. It seems that ASTs fit the model of <a href="http://arxiv.org/pdf/1302.1046.pdf">Coalgebras</a>, but again, I am playing way out of my league here.&#160;</p>
<p>In the paper referenced below, I define an AST as a simple data structure (key value pairs) which all share the same lifecycle (yes, states have a lifecycle too!). A state lifecycle is triggered by an interaction between two (or more) states. States are immutable and new states (of the same type or a different type) are created at the end of an interaction. I define 3 composition mechanisms (containment, extension, connection). Interestingly, there is no ASM (Abstract State Machine) behind ASTs. What we see as a "State Machine" is actually the occurence of repeatable interactions, so all the complexity associated to modeling state machines goes away.</p>
<p>If anyone feels there is a strong analogy between ASTs and QED, well, it is nearly by design, but it really came about from me staring at UML State Diagrams, linking them to <a href="http://www.infoq.com/articles/seven-fallacies-of-bpm">business process execution</a>, then to <a href="http://www.b-mc2.com/learn/">business strategy</a>&#160;and then all the way back to problem definition and today programming model.&#160;</p>
<p>This paper is far from complete, a very rough draft at best. I publish it as is for three reasons:</p>
<p>a) I strongly believe that the fundamental idea behind ASTs will not change</p>
<p>b) It would take me an infinite amount of time, which I don't have, to bring it to maturation</p>
<p>c) This is really a call for help, if someone would like to jump in as a coauthor, to further the idea</p>
<p>I don't see ASTs as being the next gen programming concept, ADTs are just fine, but it was hard to resist not extending the BOLT conceptual framework to the programming model level, especially in the context of Barbara Liskov's statement on the role of programs.</p>
<p><a href="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/programming-with-abstract-state-type.pdf?mtime=1369044287">Here is the paper</a>, as usual any feedback is welcomed, especially if someone has already worked on that idea. My next step is really to put this idea in practice to explore it further. In particular the paper does not speak at all of the general orchestration behind state interactions (mechanisms such as addressing, activation, ...) but this is by design because I feel it is totally orthogonal.</p>
<p>Again, I welcome the contribution of one or two co-authors, otherwise I'll continue working on this paper in an open content mode.</p><div class="item_footer"><p><small><a href="http://www.ebpml.org/blog2/index.php/2013/05/20/programming-with-abstract-state-types">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.ebpml.org/blog2/index.php/2013/05/20/programming-with-abstract-state-types#comments</comments>
			<wfw:commentRss>http://www.ebpml.org/blog2/index.php?tempskin=_rss2&amp;disp=comments&amp;p=137</wfw:commentRss>
		<feedburner:origLink>http://www.ebpml.org/blog2/index.php/2013/05/20/programming-with-abstract-state-types</feedburner:origLink></item>
				<item>
			<title>Metaprogramming: Revisiting Barbara Liskov's Assumptions</title>
			<link>http://feedproxy.google.com/~r/CarnetsDeBord/~3/C3d8tU6F4os/what-if-barbara-liskov-had</link>
			<pubDate>Sat, 18 May 2013 02:15:00 +0000</pubDate>			<dc:creator>jdubray</dc:creator>
			<category domain="main">MDE</category>			<guid isPermaLink="false">136@http://www.ebpml.org/blog2/</guid>
						<description>&lt;div style="float: left;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share"&gt;Tweet&lt;/a&gt;
&lt;script type="text/javascript" src="http://platform.twitter.com/widgets.js"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;script type="text/javascript" src="http://platform.linkedin.com/in.js"&gt;&lt;/script&gt;
&lt;script type="IN/Share" data-counter="right"&gt;&lt;/script&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;I have an infinite respect of &lt;a href="http://en.wikipedia.org/wiki/Barbara_Liskov"&gt;Prof. Liskov&lt;/a&gt;, for her, personally, and her work. A lot of what she has discovered has guided my own work and the work of millions more for the past four decades and her insight on the role of programs has litterally transformed and shaped the way I think:&lt;/p&gt;
&lt;blockquote&gt;I believe that the fundamental role of programs is to modify state not just the bits&lt;/blockquote&gt;
&lt;p&gt;But, what if her fundamental assumptions were off? After all they are assumptions and assumptions need to be revisited periodically, they are (somewhat) artificial, often unconscious, constraints that we believe make it easier to find the solution of a given problem. &lt;a href="http://www.infoq.com/presentations/Feynman-Way"&gt;Just ask Richard Feynman&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After reading, and rereading her seminal paper on "&lt;a href="http://www.cs.iastate.edu/~hridesh/teaching/362/07/01/papers/p50-liskov.pdf"&gt;Programming with Abstract Data Types&lt;/a&gt;", it is difficult not to question her assumptions.&amp;#160;&lt;/p&gt;
&lt;p&gt;For centuries, we have created valuable abstractions that make it easier to solve problems, &lt;a href="http://projectwordsworth.com/the-paradox-of-the-proof/"&gt;very complex problems&lt;/a&gt;. As we all understand the value of high level programming languages,&amp;#160;&lt;span style="font-size: 13px;"&gt;it would be hard to disagree, for instance, with her introductory statement:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;Unfortunately, it is very difficult for a designer to select in advance all the abstractions which the users of his language might need. If a language is to be used at all, it is likely to be used to solve problems which its designer did not envision, and for which the abstractions embedded in the language are not sufficient.&lt;/blockquote&gt;
&lt;p&gt;Yet, that statement creates an unfortunate bias that somehow the language designer and the solution developer must always be two different people. It also creates another unfortunate bias, as it, somehow, suggests that every a team of developers should use the same programming language, maybe within a tier, if not for the entire solution stack.&lt;/p&gt;
&lt;p&gt;Actually, it is probably very difficult to not count these two assumptions as mere facts. My career started pretty nicely with the development of &lt;a href="http://darpa.webflat.net/mto/ultra/98overview/integrated-13.html"&gt;advanced semi-conductor deposition systems&lt;/a&gt;. I used NeXTStep to build these systems: ADTs, OOP, and Model-Driven development tools (&lt;a href="http://en.wikipedia.org/wiki/Interface_Builder"&gt;Interface Builder&lt;/a&gt;) offered a delightful way to create a model of these systems. These abstractions were so powerful that I ended up building a Natural Language Processor on top of the control systems (using Objective-C's reflection mechanisms). Back in 1996, this control system was jaw dropping, but to be fair, NeXTStep, ADTs, i.e. abstractions, combined with some &lt;span style="text-decoration: line-through;"&gt;elbow&lt;/span&gt;&amp;#160;finger grease was all that was needed to create that kind of magic. Retrospectivelly, I trully think this was magic, and I could have never build such a system by myself without all the good work that was done at that time.&amp;#160;&lt;/p&gt;
&lt;p&gt;In 1997, when Steve Jobs returned to Apple and killed NeXT, I had to leave this wonderfully abstracted world and decided to join the ranks of Information Technology professionals. IT was very different from the world of industrial process control: none of these abstractions make any sense in IT. When I say any, I really mean any. Everywhere I turned, ADTs didn't help: BPM (process), SOA (service), XML (eXtensible Data Structures), HTTP (Protocols), SQL or NoSQL (Data).&amp;#160;&amp;#160;Worse, ADTs seemed to make things far more complex than one would have originally thought.&lt;/p&gt;
&lt;p&gt;So why not aiming at a completely different direction?&amp;#160;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: 13px;"&gt;What if every development team would be allowed to build (and have control over) their programming language?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px;"&gt;What if every developer in that team would have the flexibility to create their own programming language, if it made sense?&amp;#160;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px;"&gt;What if these programming languages could even be solution specific, again if it made sense?&amp;#160;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I know, this is a radical idea. I just ask you to consider the following proposal. The work of a team of developers&amp;#160;&lt;span style="font-size: 13px;"&gt;would look like something like this:&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;div class="image_block"&gt;&lt;a href="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/fig1-1.png?mtime=1368809006"&gt;&lt;img src="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/fig1-1.png?mtime=1368809006" alt="" width="523" height="341" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="image_block"&gt;&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;What's different here, compared to traditional Model Driven Software Development is that the developer writes code in three dimensions:&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;- the programming model, i.e. the abstractions that are best suited to create the solution&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;- the solution model, a.k.a the metadata, expressed with the abstractions of the programming model&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;- the code generator that generates the code from the solution model&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;For every feature, the developer has now the choice to change or enhance the programming model, add more metadata or change the code generator. The problem of round tripping mostly disappears as we never need to touch the generated code directly (it happens in the code generator).&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&lt;a href="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/fig2-1.png?mtime=1368809073"&gt;&lt;img src="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/fig2-1.png?mtime=1368809073" alt="" width="483" height="332" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;In many ways this is how developers think already. They do have a programming model in their mind, sometimes well aligned with the underlying technology, and sometimes not. The business logic is then projected in the underlying technology using patterns that amount to a specific programming model. So why not make all these abstractions explicit and technology independent? Technologies do change and architecture refactoring is one of the hardest thing to do.&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&lt;a href="http://www.infoq.com/news/2011/10/mde-missed-the-boat"&gt;MDE, MDSD, MDA... failed&lt;/a&gt; because just like for traditional programming language you cannot design abstractions in a distance. You can't have a group or a vendor produce the abractions and the developer figure out how to use them to solve the problem at end. This has to be a continous process. Over time, the programming model and the code generator may stabilize, for a given activity, a type of solutions or even an entire company, but this should be a non goal. The goal of metaprogramming is to create the best abstraction to solve the problem at hand, well, because, this is what developers do anyway, but for most of us, in a very crooked way.&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&lt;a href="http://www.canappi.com"&gt;Canappi&lt;/a&gt;,&amp;#160;the tool I developed over the last 2 years, allows me to do just that. I built this beautiful next generation social app for &lt;a href="http://www.6ixinc.com"&gt;6IX Inc&lt;/a&gt;&amp;#160;which will be available in the App &amp;#160;Store in the next few days.&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;Metaprogramming allowed us to try different UX and quickly converge to what we felt was optimal. All the MongoDB and S3 client code is generated and modeled at the programming model level.&amp;#160;&lt;/div&gt;
&lt;div class="image_block"&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&lt;a href="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/6ix.jpg?mtime=1368841197"&gt;&lt;img src="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/6ix.jpg?mtime=1368841197" alt="" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;Ultimately Metaprogramming delivers 3 key benefits:&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;1) As the project progresses, you end up mostly editing the solution model. Writing code at this level is usually very compact and very stable. This means that you can make major functional changes up to the last minute, if you need to&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;2) You can refactor the code generator fairly easily, for that app, the code generator is about 10k LOC, while the generated code is slightly above 100k LOC. As you refactor the technology, this is about 90% less effort&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;3) QA costs go way down, again as you are in effect stabilizing far less amounts of code&lt;/div&gt;
&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;I use &lt;a href="http://www.languageworkbenches.net/index.php?title=LWC_2013"&gt;a Language Workbench&lt;/a&gt;&amp;#160;to develop the programming model, the corresponding Eclipse Plugins and generate code: Eclipse &lt;a href="http://www.slideshare.net/schwurbel/pragmatic-dsl-design-with-xtext-xbase-and-xtend-2"&gt;Xtext with Xtend&lt;/a&gt;, but other choices are possible with &lt;a href="http://www.jetbrains.com/mps/"&gt;MPS&lt;/a&gt;&amp;#160;, &lt;a href="http://pjmolina.com/metalevel/essential/"&gt;Essential&lt;/a&gt; or &lt;a href="http://strategoxt.org/Spoofax"&gt;Spoofax&lt;/a&gt;. I can assure you that this is far easier than you think.&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;I do not believe that in the late 70s people thought that Language Workbenches were something that was even remotely possible, at least not to the level of Xtext, Xtend and Xbase. I'd be really curious one day to ask that question to Barbara.&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;It is key to understand that metaprogramming is fully anchored in the solution domain (not the problem domain). I respect the fact that some solutions may be built directly from the specification of the problem, but after writing this post on &lt;a href="http://www.ebpml.org/blog2/index.php/2013/04/26/reinventing-agile-from-value-to"&gt;User Stories vs Problem Statements&lt;/a&gt;, I trust even less the ability to create full fledge solutions from a problem specification. &lt;a href="http://www.intentionalsoftware.com/"&gt;I am not saying it is always impossible&lt;/a&gt;, I am just saying it is generally much harder and delivers less compeling solutions.&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;&amp;#160;&lt;/div&gt;
&lt;div class="image_block" style="text-align: left;"&gt;(All pictures are from Wikimedia)&lt;/div&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a href="http://www.ebpml.org/blog2/index.php/2013/05/17/what-if-barbara-liskov-had"&gt;Original post&lt;/a&gt; blogged on &lt;a href="http://b2evolution.net/"&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<div style="float: left;"><a class="twitter-share-button" href="http://twitter.com/share">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
</div>
<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
<script type="IN/Share" data-counter="right"></script>
<p>&#160;</p><p>I have an infinite respect of <a href="http://en.wikipedia.org/wiki/Barbara_Liskov">Prof. Liskov</a>, for her, personally, and her work. A lot of what she has discovered has guided my own work and the work of millions more for the past four decades and her insight on the role of programs has litterally transformed and shaped the way I think:</p>
<blockquote>I believe that the fundamental role of programs is to modify state not just the bits</blockquote>
<p>But, what if her fundamental assumptions were off? After all they are assumptions and assumptions need to be revisited periodically, they are (somewhat) artificial, often unconscious, constraints that we believe make it easier to find the solution of a given problem. <a href="http://www.infoq.com/presentations/Feynman-Way">Just ask Richard Feynman</a>.</p>
<p>After reading, and rereading her seminal paper on "<a href="http://www.cs.iastate.edu/~hridesh/teaching/362/07/01/papers/p50-liskov.pdf">Programming with Abstract Data Types</a>", it is difficult not to question her assumptions.&#160;</p>
<p>For centuries, we have created valuable abstractions that make it easier to solve problems, <a href="http://projectwordsworth.com/the-paradox-of-the-proof/">very complex problems</a>. As we all understand the value of high level programming languages,&#160;<span style="font-size: 13px;">it would be hard to disagree, for instance, with her introductory statement:</span></p>
<blockquote>Unfortunately, it is very difficult for a designer to select in advance all the abstractions which the users of his language might need. If a language is to be used at all, it is likely to be used to solve problems which its designer did not envision, and for which the abstractions embedded in the language are not sufficient.</blockquote>
<p>Yet, that statement creates an unfortunate bias that somehow the language designer and the solution developer must always be two different people. It also creates another unfortunate bias, as it, somehow, suggests that every a team of developers should use the same programming language, maybe within a tier, if not for the entire solution stack.</p>
<p>Actually, it is probably very difficult to not count these two assumptions as mere facts. My career started pretty nicely with the development of <a href="http://darpa.webflat.net/mto/ultra/98overview/integrated-13.html">advanced semi-conductor deposition systems</a>. I used NeXTStep to build these systems: ADTs, OOP, and Model-Driven development tools (<a href="http://en.wikipedia.org/wiki/Interface_Builder">Interface Builder</a>) offered a delightful way to create a model of these systems. These abstractions were so powerful that I ended up building a Natural Language Processor on top of the control systems (using Objective-C's reflection mechanisms). Back in 1996, this control system was jaw dropping, but to be fair, NeXTStep, ADTs, i.e. abstractions, combined with some <span style="text-decoration: line-through;">elbow</span>&#160;finger grease was all that was needed to create that kind of magic. Retrospectivelly, I trully think this was magic, and I could have never build such a system by myself without all the good work that was done at that time.&#160;</p>
<p>In 1997, when Steve Jobs returned to Apple and killed NeXT, I had to leave this wonderfully abstracted world and decided to join the ranks of Information Technology professionals. IT was very different from the world of industrial process control: none of these abstractions make any sense in IT. When I say any, I really mean any. Everywhere I turned, ADTs didn't help: BPM (process), SOA (service), XML (eXtensible Data Structures), HTTP (Protocols), SQL or NoSQL (Data).&#160;&#160;Worse, ADTs seemed to make things far more complex than one would have originally thought.</p>
<p>So why not aiming at a completely different direction?&#160;</p>
<ul>
<li><span style="font-size: 13px;">What if every development team would be allowed to build (and have control over) their programming language?</span></li>
<li><span style="font-size: 13px;">What if every developer in that team would have the flexibility to create their own programming language, if it made sense?&#160;</span></li>
<li><span style="font-size: 13px;">What if these programming languages could even be solution specific, again if it made sense?&#160;</span></li>
</ul>
<p>I know, this is a radical idea. I just ask you to consider the following proposal. The work of a team of developers&#160;<span style="font-size: 13px;">would look like something like this:</span><span style="font-size: 13px;">&#160;</span></p>
<div class="image_block"><a href="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/fig1-1.png?mtime=1368809006"><img src="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/fig1-1.png?mtime=1368809006" alt="" width="523" height="341" /></a></div>
<div class="image_block">&#160;</div>
<div class="image_block" style="text-align: left;">What's different here, compared to traditional Model Driven Software Development is that the developer writes code in three dimensions:</div>
<div class="image_block" style="text-align: left;">- the programming model, i.e. the abstractions that are best suited to create the solution</div>
<div class="image_block" style="text-align: left;">- the solution model, a.k.a the metadata, expressed with the abstractions of the programming model</div>
<div class="image_block" style="text-align: left;">- the code generator that generates the code from the solution model</div>
<div class="image_block" style="text-align: left;">&#160;</div>
<div class="image_block" style="text-align: left;">For every feature, the developer has now the choice to change or enhance the programming model, add more metadata or change the code generator. The problem of round tripping mostly disappears as we never need to touch the generated code directly (it happens in the code generator).&#160;</div>
<div class="image_block" style="text-align: left;">&#160;</div>
<div class="image_block" style="text-align: left;">&#160;</div>
<div class="image_block" style="text-align: left;"><a href="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/fig2-1.png?mtime=1368809073"><img src="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/fig2-1.png?mtime=1368809073" alt="" width="483" height="332" /></a></div>
<div class="image_block" style="text-align: left;">&#160;</div>
<div class="image_block" style="text-align: left;">In many ways this is how developers think already. They do have a programming model in their mind, sometimes well aligned with the underlying technology, and sometimes not. The business logic is then projected in the underlying technology using patterns that amount to a specific programming model. So why not make all these abstractions explicit and technology independent? Technologies do change and architecture refactoring is one of the hardest thing to do.&#160;</div>
<div class="image_block" style="text-align: left;">&#160;</div>
<div class="image_block" style="text-align: left;"><a href="http://www.infoq.com/news/2011/10/mde-missed-the-boat">MDE, MDSD, MDA... failed</a> because just like for traditional programming language you cannot design abstractions in a distance. You can't have a group or a vendor produce the abractions and the developer figure out how to use them to solve the problem at end. This has to be a continous process. Over time, the programming model and the code generator may stabilize, for a given activity, a type of solutions or even an entire company, but this should be a non goal. The goal of metaprogramming is to create the best abstraction to solve the problem at hand, well, because, this is what developers do anyway, but for most of us, in a very crooked way.</div>
<div class="image_block" style="text-align: left;">&#160;</div>
<div class="image_block" style="text-align: left;"><a href="http://www.canappi.com">Canappi</a>,&#160;the tool I developed over the last 2 years, allows me to do just that. I built this beautiful next generation social app for <a href="http://www.6ixinc.com">6IX Inc</a>&#160;which will be available in the App &#160;Store in the next few days.</div>
<div class="image_block" style="text-align: left;">&#160;</div>
<div class="image_block" style="text-align: left;">Metaprogramming allowed us to try different UX and quickly converge to what we felt was optimal. All the MongoDB and S3 client code is generated and modeled at the programming model level.&#160;</div>
<div class="image_block">
<div class="image_block" style="text-align: left;"><a href="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/6ix.jpg?mtime=1368841197"><img src="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/6ix.jpg?mtime=1368841197" alt="" width="400" /></a></div>
<div class="image_block" style="text-align: left;">Ultimately Metaprogramming delivers 3 key benefits:</div>
<div class="image_block" style="text-align: left;">1) As the project progresses, you end up mostly editing the solution model. Writing code at this level is usually very compact and very stable. This means that you can make major functional changes up to the last minute, if you need to</div>
<div class="image_block" style="text-align: left;">2) You can refactor the code generator fairly easily, for that app, the code generator is about 10k LOC, while the generated code is slightly above 100k LOC. As you refactor the technology, this is about 90% less effort</div>
<div class="image_block" style="text-align: left;">3) QA costs go way down, again as you are in effect stabilizing far less amounts of code</div>
</div>
<div class="image_block" style="text-align: left;">&#160;</div>
<div class="image_block" style="text-align: left;">I use <a href="http://www.languageworkbenches.net/index.php?title=LWC_2013">a Language Workbench</a>&#160;to develop the programming model, the corresponding Eclipse Plugins and generate code: Eclipse <a href="http://www.slideshare.net/schwurbel/pragmatic-dsl-design-with-xtext-xbase-and-xtend-2">Xtext with Xtend</a>, but other choices are possible with <a href="http://www.jetbrains.com/mps/">MPS</a>&#160;, <a href="http://pjmolina.com/metalevel/essential/">Essential</a> or <a href="http://strategoxt.org/Spoofax">Spoofax</a>. I can assure you that this is far easier than you think.</div>
<div class="image_block" style="text-align: left;">&#160;</div>
<div class="image_block" style="text-align: left;">I do not believe that in the late 70s people thought that Language Workbenches were something that was even remotely possible, at least not to the level of Xtext, Xtend and Xbase. I'd be really curious one day to ask that question to Barbara.&#160;</div>
<div class="image_block" style="text-align: left;">&#160;</div>
<div class="image_block" style="text-align: left;">It is key to understand that metaprogramming is fully anchored in the solution domain (not the problem domain). I respect the fact that some solutions may be built directly from the specification of the problem, but after writing this post on <a href="http://www.ebpml.org/blog2/index.php/2013/04/26/reinventing-agile-from-value-to">User Stories vs Problem Statements</a>, I trust even less the ability to create full fledge solutions from a problem specification. <a href="http://www.intentionalsoftware.com/">I am not saying it is always impossible</a>, I am just saying it is generally much harder and delivers less compeling solutions.&#160;</div>
<div class="image_block" style="text-align: left;">&#160;</div>
<div class="image_block" style="text-align: left;">(All pictures are from Wikimedia)</div><div class="item_footer"><p><small><a href="http://www.ebpml.org/blog2/index.php/2013/05/17/what-if-barbara-liskov-had">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.ebpml.org/blog2/index.php/2013/05/17/what-if-barbara-liskov-had#comments</comments>
			<wfw:commentRss>http://www.ebpml.org/blog2/index.php?tempskin=_rss2&amp;disp=comments&amp;p=136</wfw:commentRss>
		<feedburner:origLink>http://www.ebpml.org/blog2/index.php/2013/05/17/what-if-barbara-liskov-had</feedburner:origLink></item>
				<item>
			<title>Reinventing Agile: From Value to Solutions</title>
			<link>http://feedproxy.google.com/~r/CarnetsDeBord/~3/6qS5t5EMGK8/reinventing-agile-from-value-to</link>
			<pubDate>Fri, 26 Apr 2013 12:22:00 +0000</pubDate>			<dc:creator>jdubray</dc:creator>
			<category domain="main">MDE</category>
<category domain="alt">Business Strategy</category>			<guid isPermaLink="false">135@http://www.ebpml.org/blog2/</guid>
						<description>&lt;div style="float: left;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share"&gt;Tweet&lt;/a&gt;
&lt;script type="text/javascript" src="http://platform.twitter.com/widgets.js"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;script type="text/javascript" src="http://platform.linkedin.com/in.js"&gt;&lt;/script&gt;
&lt;script type="IN/Share" data-counter="right"&gt;&lt;/script&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;This post is a synthesis of &lt;a href="http://www.b-mc2.com/2013/04/25/refocusing-agile-from-value-to-solutions/"&gt;two&lt;/a&gt; &lt;a href="http://www.b-mc2.com/2013/04/26/from-business-strategy-to-solution-a-unified-conceptual-framework/"&gt;posts&lt;/a&gt; I originally published on my other blog "&lt;a href="http://www.b-mc2.com/category/b-mc2/"&gt;unRelated&lt;/a&gt;".&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.versionone.com/Agile101/Agile-Development-Success/"&gt;One of the key foundations&lt;/a&gt;&amp;#160;and most attractive principle of Agile or Lean methodologies is that &amp;#160;"&lt;em&gt;Everyone can help each other remain focused on the highest possible business value per unit of time&lt;/em&gt;".&lt;/p&gt;
&lt;p&gt;I am certainly a strong supporter of that principle. However, value is often difficult to assess, I would actually argue that it is easier to identify what has less or little value, but what we think as valuable can potentially lead to many false positive, or simply be "business-as-usual" and hide the broader structure of the solution.&amp;#160;&lt;/p&gt;
&lt;p&gt;"User Stories" are the corner stone of&amp;#160;&lt;a href="http://agile.dzone.com/articles/user-story-primer"&gt;identifying and delivering value&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;An argument can be made that the user story is the most important artifact in agile development, because it is the container that primarily carries the value stream to the user, and agile development is all about rapid value delivery.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In practice, very few people focus on the benefits part of a user story. All user stories I see are either what we used to call "requirements" (just phrased slightly differently but isomorphically) or "tasks" needed to advance the state of the project.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;However, there is a fundamental flaw in the construction of user stories, even when they are properly written, because they somehow make an assumption about the shape of the solution, and drive the author to turn almost immediately in solution mode, leaving no room for creative and out-of-the-box thinking.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Let's compare the metamodel of a User Story and to the formal definition of a Problem. The metamodel of a User Story looks like that (using the&amp;#160;&lt;a title="LEARN" href="http://www.b-mc2.com/learn/"&gt;BOLT&lt;/a&gt;&amp;#160;notation):&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;As a &amp;lt;role&amp;gt; I want to &amp;lt;action&amp;gt; so that &amp;lt;benefit&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.b-mc2.com/wp-content/uploads/2013/04/us-model.jpg"&gt;&lt;img class="aligncenter size-full wp-image-620" src="http://www.b-mc2.com/wp-content/uploads/2013/04/us-model.jpg" alt="us-model" width="388" height="145" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I define a problem formally as a non existing transition between two known states [1], &amp;#160;the metamodel of a problem looks like that:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.b-mc2.com/wp-content/uploads/2013/04/pb-model2.jpg"&gt;&lt;img class="aligncenter size-full wp-image-621" src="http://www.b-mc2.com/wp-content/uploads/2013/04/pb-model2.jpg" alt="pb-model2" width="227" height="113" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;A solution is a way to transition between these two states. Please note that both the actors and the actions are part of the solution:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.b-mc2.com/wp-content/uploads/2013/04/sol-model.jpg"&gt;&lt;img class="aligncenter size-full wp-image-622" src="http://www.b-mc2.com/wp-content/uploads/2013/04/sol-model.jpg" alt="sol-model" width="302" height="113" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;This is where the problem lies when using User Stories, you are specifying the requirements with the solution in mind. There is, of course, a general relationship between some of the actors and entities of the system with the "start" and "end" states of the problem. The problem states are always defined in terms of their respective states (possibly as a composite state), but it is a mistake to think that the actors and entities that perform the actions, as part of the solution, are always the same as the actors and entities related to the (problem) states.&lt;/p&gt;
&lt;p&gt;Hence, an action is solution centric and should not be part of the problem definition. As soon as you pick one, you have put a stake in the ground towards the direction you are going to take to solve the underlying problem. The other issue is that the start and end states are never clearly identified in a user story leading to confusion in the in the solutioning and verification process, since the problem is not defined with enough precision. Benefits could sometimes align with the target/desirable state, but the definition is often too fluffy and more goal centric, not effectively representing that (problem) state.&lt;/p&gt;
&lt;p&gt;Ultimately, the relationship between problems and solutions is a graph (states, transitions as problems, actions as solutions), and this is where the coupling between the problem space and the solution space at the User Story level becomes unfortunate. This means that User stories cannot be effectively nested and clearly cannot fit in hierarchical structures (which is common to most Agile tools I know). This problem is quite accute as teams struggle to connect business level user stories and system level or solution level user stories. The concept of having a single parent directly conflicts with the possibility of having multiple possible transitions into a single state and decomposition principles where the same problem appears in the decomposition of several higher level problems.&amp;#160;&lt;/p&gt;
&lt;p&gt;I feel that distinction is profound because we can now clearly articulate:&lt;/p&gt;
&lt;p&gt;a) the problem statements with respect to each other (as a graph of states and transitions)&lt;/p&gt;
&lt;p&gt;b) we can articulate the solution in relation to the problem statements&lt;/p&gt;
&lt;p&gt;c) we can articulate the verification (&lt;a href="http://en.wikipedia.org/wiki/Behavior-driven_development"&gt;BDD&lt;/a&gt;) in relation to the problem and solution [2]&lt;/p&gt;
&lt;p&gt;d) we can actually articulate the&amp;#160;&lt;a title="Amazon IO" href="http://www.b-mc2.com/2013/02/21/amazon-io/"&gt;Business Strategy&lt;/a&gt;&amp;#160;[3], the Problem Statement, the Solution and the Verification with the same conceptual framework&lt;/p&gt;
&lt;p&gt;e) derive the &lt;a href="http://www.b-mc2.com/2013/04/24/organizational-iq/"&gt;Organizational IQ&lt;/a&gt; from the problems being solved on an every day basis&lt;/p&gt;
&lt;p&gt;To the best of my knowledge none of these articulations have been suggested before and no one has ever provided a unified framework that spans such a broad conceptual view from the Business Strategy to the Verification. In the proposed framework the business strategy is simply a higher level and specialized view of the problem and solution domains, but using the exact same semantics (which are described &lt;a href="https://itunes.apple.com/us/book/b-mc2/id584185735"&gt;here&lt;/a&gt;). In other words the enterprise is a solution to a problem, which is a composition of smaller problems and more fine grained solutions, etc. This has an extremely important implication for the execution of the strategy because now both the Strategy and its Execution are perfectly aligned, at the semantic level: the strategy, problem, solution and verification graph represent a map that everyone in the organization can refer to.&amp;#160;&lt;/p&gt;
&lt;p&gt;To take advantage of this new conceptual framework. I suggest that we make a very simple and easy change to Agile and replace "user stories" by "problem statements". Each problem must be "solutioned", either by decomposing it into simpler problems or solutioning it directly. Value can still be used to prioritize which problems are addressed first, that part of the Agile and Lean movement is very valuable, so too speak, but the focus on problems and solutions opens a new flexibility in how we handle the long range aspects of the solution while enabling the highest level of creativity and ultimately a direct articulation with the IQ of the organization.&amp;#160;&lt;/p&gt;
&lt;p&gt;As problems are decomposed, we will eventually reach a point where the subproblems will be close to or isomorphically related to the solution. But it would be a mistake to not clearly delineate the problems from solutions, simply because at the lowest level, they appear isomorphic.&amp;#160;&lt;/p&gt;
&lt;p&gt;If we start drawing some BOLT diagrams, a problem lifecycle can be defined as:&lt;br /&gt;&lt;a href="http://www.b-mc2.com/wp-content/uploads/2013/04/problem-lc.jpg"&gt;&lt;img class="alignnone size-full wp-image-583" src="http://www.b-mc2.com/wp-content/uploads/2013/04/problem-lc.jpg" alt="problem-lc" width="363" height="382" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The fact that the lifecycle is pretty much identical as the one of a user story enables most of the Agile processes and tools to work nearly unchanged.&lt;/p&gt;
&lt;p&gt;You may want to know "How do I write a Problem Statement?". Personally, I don't like canned approaches. Oviously here, the mere definition of the two states (low value and high value) is enough to describe the problem. If a solution already exists (i.e. it is possible to transition between these two states) you may want to describe some characteristics of the new solution. I googled "How to write a Problem Statement?" and I felt there was already a good alignment betweent the results and the abstract definition provided above. &lt;a href="http://www.ceptara.com/blog/how-to-write-problem-statement"&gt;For instance&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We want all of our software releases to go to production seamlessly, without defects, where everyone is aware and informed of the outcomes and status. (Vision)&lt;/p&gt;
&lt;p&gt;Today we have too many release failures that result in too many rollback failures. If we ignore this problem; resources will need to increase to handle the cascading problems, and we may miss critical customer deadlines which could result in lost revenue, SLA penalties, lost business, and further damage to our quality reputation. (Issue Statement)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here we see two states for the releases: initial state (low value) tested, and the high value state (in production). There is also an undesirable state (failure) that the new solution will prevent reaching. For me the most important thing is that the problem statement must avoid at all cost to refer to the solution. Even if the people specifying the problem statement have an idea about the solution, they should capture it separately.&lt;/p&gt;
&lt;p&gt;This new focus on problem &amp;amp; solution provides a rich conceptual framework to effectively organize the work of a team. After all, we have been innovating, i.e. creating solutions to problems, for thousands of years, so it is no surprise that our vocabulary is quite rich. Here are a few concepts that could be used:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Goal&lt;/strong&gt;: a goal is not a problem, but you often need to solve problems to reach goals, so it's important to keep them in mind&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fact&lt;/strong&gt;: a fact often constrains the solution, so they need to be clearly surfaced and accounted for&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumption&lt;/strong&gt;: assumptions are very important because they also constrain the solution, but in a more flexible way. Assumptions can be changed, facts generally cannot.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Statement&lt;/strong&gt;: the problem statement is what physically replaces the user story.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hurdle&lt;/strong&gt;: During the decomposition of a problem, hurdles might be identified, they are not a problem per say, but they impact the solution. It could be for instance that a resource is not available in time to meet the deadline.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Snag&lt;/strong&gt;: A problem can be downgraded to a snag as the solution is obvious to the team and represent a low level of effort. It can also be a small unexpected issue, that need to be quickly resolved.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dilemma&lt;/strong&gt;: A problem can be upgraded to a dilemma, when several solutions are possible and it is not clear which one to chose&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Setback&lt;/strong&gt;: The team can suffer a setback when it thought it had found the solution but it didn't, or could not find a solution and need to reassess either the problem or the approach&lt;/p&gt;
&lt;p&gt;On the solution side, we can also capture different elements and stages of the solutioning process:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Answer&lt;/strong&gt;: Findings related to a question raised in the problem statement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;: A validation that the solution conforms to a Fact&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Resolution&lt;/strong&gt;: The choice made after reaching a dilemma&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: a temporary solution to a problem or a snag to make progress towards the solution to the greater problem&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Development&lt;/strong&gt;: An element of the solution, usually the solution to a subproblem or a snag&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breakthrough&lt;/strong&gt;: The solution found after reaching a setback&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Way out&lt;/strong&gt;: A solution was not found, nevertheless, the project reached a satisfactory state to meet some or all of the initial goals&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;From a management perspective. The Solution or Delivery Manager can escape the bureaucracy that Agile has created. Ironically, moving stickers around is a zero value activity, with zero impact on the organizational IQ. The solution manager can and should be responsible for the IQ of the project, which rolls up and benefits from the IQ of the organization. It should keep track of the elements that are incorporated in the solution as problems are solved. It should encourage team members to be creative when necessary and to shamelessly adopt existing solutions when it makes sense. It should help resolve dilemmas and push for breakthroughs.&lt;/p&gt;
&lt;p&gt;The PMO organization becomes the steward of the Organization's IQ.&lt;/p&gt;
&lt;p&gt;As we define problems and solutions in terms of entities, state, transitions and actions, the&amp;#160;&lt;a title="LEARN" href="http://www.b-mc2.com/learn/"&gt;BOLT&lt;/a&gt;&amp;#160;methodology provides a unified conceptual framework that spans from Business Strategy to Problem and Solution Domains to Verification (BDD).&lt;/p&gt;
&lt;p&gt;To summarize,&lt;/p&gt;
&lt;p&gt;1) We have provided a formal model of a problem and a solution, and how they relate to each other&lt;/p&gt;
&lt;p&gt;2) This formal model offers the ability to compose problems and solutions at any scale, over the scope of the enterprise&lt;/p&gt;
&lt;p&gt;3) Problems and Solutions can be composed from Business Strategy down to Verification&lt;/p&gt;
&lt;p&gt;4) We suggest that Agile methodologies replace User Stories by Problem Statements&lt;/p&gt;
&lt;p&gt;5) With the renewed focus on "problems", we can also integrate the work of Prof. Knott on Organizational IQ in the whole framework&lt;/p&gt;
&lt;p&gt;Last, but not least, decoupling problem definition and solution yields a tremendous benefit in the sense that both can evolve independently during the construction process.&amp;#160;&lt;/p&gt;
&lt;p&gt;_______________________________________________________________________________&lt;/p&gt;
&lt;p&gt;[1]&amp;#160;For instance, you build a vehicle, obviously you want to car to transition to the "in motion" state. Different "actions" will lead to the vehicle to reach that state (a horse pulling, an engine, transmission and wheels, a fan, ...).&lt;/p&gt;
&lt;p&gt;[2] BDD Metamodel (Scenario):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.b-mc2.com/wp-content/uploads/2013/04/bdd-model.jpg"&gt;&lt;img class="aligncenter size-full wp-image-623" src="http://www.b-mc2.com/wp-content/uploads/2013/04/bdd-model.jpg" alt="bdd-model" width="302" height="144" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;[3] Living Social Business Strategy mapped using the same conceptual framework (Source:&amp;#160;&lt;a href="https://itunes.apple.com/us/book/b-mc2/id584185735"&gt;B = mc2&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.b-mc2.com/wp-content/uploads/2013/04/lifecycle.jpg"&gt;&lt;img class="aligncenter size-full wp-image-624" src="http://www.b-mc2.com/wp-content/uploads/2013/04/lifecycle.jpg" alt="lifecycle" width="446" height="395" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a href="http://www.ebpml.org/blog2/index.php/2013/04/26/reinventing-agile-from-value-to"&gt;Original post&lt;/a&gt; blogged on &lt;a href="http://b2evolution.net/"&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<div style="float: left;"><a class="twitter-share-button" href="http://twitter.com/share">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
</div>
<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
<script type="IN/Share" data-counter="right"></script>
<p>&#160;</p>
<p>This post is a synthesis of <a href="http://www.b-mc2.com/2013/04/25/refocusing-agile-from-value-to-solutions/">two</a> <a href="http://www.b-mc2.com/2013/04/26/from-business-strategy-to-solution-a-unified-conceptual-framework/">posts</a> I originally published on my other blog "<a href="http://www.b-mc2.com/category/b-mc2/">unRelated</a>".</p>
<p><a href="http://www.versionone.com/Agile101/Agile-Development-Success/">One of the key foundations</a>&#160;and most attractive principle of Agile or Lean methodologies is that &#160;"<em>Everyone can help each other remain focused on the highest possible business value per unit of time</em>".</p>
<p>I am certainly a strong supporter of that principle. However, value is often difficult to assess, I would actually argue that it is easier to identify what has less or little value, but what we think as valuable can potentially lead to many false positive, or simply be "business-as-usual" and hide the broader structure of the solution.&#160;</p>
<p>"User Stories" are the corner stone of&#160;<a href="http://agile.dzone.com/articles/user-story-primer">identifying and delivering value</a>:</p>
<blockquote>
<p>An argument can be made that the user story is the most important artifact in agile development, because it is the container that primarily carries the value stream to the user, and agile development is all about rapid value delivery.</p>
</blockquote>
<p>In practice, very few people focus on the benefits part of a user story. All user stories I see are either what we used to call "requirements" (just phrased slightly differently but isomorphically) or "tasks" needed to advance the state of the project.</p>
<p><span style="font-size: 13px; line-height: 19px;">However, there is a fundamental flaw in the construction of user stories, even when they are properly written, because they somehow make an assumption about the shape of the solution, and drive the author to turn almost immediately in solution mode, leaving no room for creative and out-of-the-box thinking.</span></p>
<p>Let's compare the metamodel of a User Story and to the formal definition of a Problem. The metamodel of a User Story looks like that (using the&#160;<a title="LEARN" href="http://www.b-mc2.com/learn/">BOLT</a>&#160;notation):</p>
<p style="padding-left: 30px;">As a &lt;role&gt; I want to &lt;action&gt; so that &lt;benefit&gt;</p>
<p><a href="http://www.b-mc2.com/wp-content/uploads/2013/04/us-model.jpg"><img class="aligncenter size-full wp-image-620" src="http://www.b-mc2.com/wp-content/uploads/2013/04/us-model.jpg" alt="us-model" width="388" height="145" /></a></p>
<p>I define a problem formally as a non existing transition between two known states [1], &#160;the metamodel of a problem looks like that:</p>
<p><a href="http://www.b-mc2.com/wp-content/uploads/2013/04/pb-model2.jpg"><img class="aligncenter size-full wp-image-621" src="http://www.b-mc2.com/wp-content/uploads/2013/04/pb-model2.jpg" alt="pb-model2" width="227" height="113" /></a></p>
<p>&#160;</p>
<p>A solution is a way to transition between these two states. Please note that both the actors and the actions are part of the solution:</p>
<p><a href="http://www.b-mc2.com/wp-content/uploads/2013/04/sol-model.jpg"><img class="aligncenter size-full wp-image-622" src="http://www.b-mc2.com/wp-content/uploads/2013/04/sol-model.jpg" alt="sol-model" width="302" height="113" /></a></p>
<p>&#160;</p>
<p>This is where the problem lies when using User Stories, you are specifying the requirements with the solution in mind. There is, of course, a general relationship between some of the actors and entities of the system with the "start" and "end" states of the problem. The problem states are always defined in terms of their respective states (possibly as a composite state), but it is a mistake to think that the actors and entities that perform the actions, as part of the solution, are always the same as the actors and entities related to the (problem) states.</p>
<p>Hence, an action is solution centric and should not be part of the problem definition. As soon as you pick one, you have put a stake in the ground towards the direction you are going to take to solve the underlying problem. The other issue is that the start and end states are never clearly identified in a user story leading to confusion in the in the solutioning and verification process, since the problem is not defined with enough precision. Benefits could sometimes align with the target/desirable state, but the definition is often too fluffy and more goal centric, not effectively representing that (problem) state.</p>
<p>Ultimately, the relationship between problems and solutions is a graph (states, transitions as problems, actions as solutions), and this is where the coupling between the problem space and the solution space at the User Story level becomes unfortunate. This means that User stories cannot be effectively nested and clearly cannot fit in hierarchical structures (which is common to most Agile tools I know). This problem is quite accute as teams struggle to connect business level user stories and system level or solution level user stories. The concept of having a single parent directly conflicts with the possibility of having multiple possible transitions into a single state and decomposition principles where the same problem appears in the decomposition of several higher level problems.&#160;</p>
<p>I feel that distinction is profound because we can now clearly articulate:</p>
<p>a) the problem statements with respect to each other (as a graph of states and transitions)</p>
<p>b) we can articulate the solution in relation to the problem statements</p>
<p>c) we can articulate the verification (<a href="http://en.wikipedia.org/wiki/Behavior-driven_development">BDD</a>) in relation to the problem and solution [2]</p>
<p>d) we can actually articulate the&#160;<a title="Amazon IO" href="http://www.b-mc2.com/2013/02/21/amazon-io/">Business Strategy</a>&#160;[3], the Problem Statement, the Solution and the Verification with the same conceptual framework</p>
<p>e) derive the <a href="http://www.b-mc2.com/2013/04/24/organizational-iq/">Organizational IQ</a> from the problems being solved on an every day basis</p>
<p>To the best of my knowledge none of these articulations have been suggested before and no one has ever provided a unified framework that spans such a broad conceptual view from the Business Strategy to the Verification. In the proposed framework the business strategy is simply a higher level and specialized view of the problem and solution domains, but using the exact same semantics (which are described <a href="https://itunes.apple.com/us/book/b-mc2/id584185735">here</a>). In other words the enterprise is a solution to a problem, which is a composition of smaller problems and more fine grained solutions, etc. This has an extremely important implication for the execution of the strategy because now both the Strategy and its Execution are perfectly aligned, at the semantic level: the strategy, problem, solution and verification graph represent a map that everyone in the organization can refer to.&#160;</p>
<p>To take advantage of this new conceptual framework. I suggest that we make a very simple and easy change to Agile and replace "user stories" by "problem statements". Each problem must be "solutioned", either by decomposing it into simpler problems or solutioning it directly. Value can still be used to prioritize which problems are addressed first, that part of the Agile and Lean movement is very valuable, so too speak, but the focus on problems and solutions opens a new flexibility in how we handle the long range aspects of the solution while enabling the highest level of creativity and ultimately a direct articulation with the IQ of the organization.&#160;</p>
<p>As problems are decomposed, we will eventually reach a point where the subproblems will be close to or isomorphically related to the solution. But it would be a mistake to not clearly delineate the problems from solutions, simply because at the lowest level, they appear isomorphic.&#160;</p>
<p>If we start drawing some BOLT diagrams, a problem lifecycle can be defined as:<br /><a href="http://www.b-mc2.com/wp-content/uploads/2013/04/problem-lc.jpg"><img class="alignnone size-full wp-image-583" src="http://www.b-mc2.com/wp-content/uploads/2013/04/problem-lc.jpg" alt="problem-lc" width="363" height="382" /></a></p>
<p>The fact that the lifecycle is pretty much identical as the one of a user story enables most of the Agile processes and tools to work nearly unchanged.</p>
<p>You may want to know "How do I write a Problem Statement?". Personally, I don't like canned approaches. Oviously here, the mere definition of the two states (low value and high value) is enough to describe the problem. If a solution already exists (i.e. it is possible to transition between these two states) you may want to describe some characteristics of the new solution. I googled "How to write a Problem Statement?" and I felt there was already a good alignment betweent the results and the abstract definition provided above. <a href="http://www.ceptara.com/blog/how-to-write-problem-statement">For instance</a>:</p>
<blockquote>
<p>We want all of our software releases to go to production seamlessly, without defects, where everyone is aware and informed of the outcomes and status. (Vision)</p>
<p>Today we have too many release failures that result in too many rollback failures. If we ignore this problem; resources will need to increase to handle the cascading problems, and we may miss critical customer deadlines which could result in lost revenue, SLA penalties, lost business, and further damage to our quality reputation. (Issue Statement)</p>
</blockquote>
<p>Here we see two states for the releases: initial state (low value) tested, and the high value state (in production). There is also an undesirable state (failure) that the new solution will prevent reaching. For me the most important thing is that the problem statement must avoid at all cost to refer to the solution. Even if the people specifying the problem statement have an idea about the solution, they should capture it separately.</p>
<p>This new focus on problem &amp; solution provides a rich conceptual framework to effectively organize the work of a team. After all, we have been innovating, i.e. creating solutions to problems, for thousands of years, so it is no surprise that our vocabulary is quite rich. Here are a few concepts that could be used:</p>
<p><strong>Goal</strong>: a goal is not a problem, but you often need to solve problems to reach goals, so it's important to keep them in mind</p>
<p><strong>Fact</strong>: a fact often constrains the solution, so they need to be clearly surfaced and accounted for</p>
<p><strong>Assumption</strong>: assumptions are very important because they also constrain the solution, but in a more flexible way. Assumptions can be changed, facts generally cannot.</p>
<p><strong>Statement</strong>: the problem statement is what physically replaces the user story.</p>
<p><strong>Hurdle</strong>: During the decomposition of a problem, hurdles might be identified, they are not a problem per say, but they impact the solution. It could be for instance that a resource is not available in time to meet the deadline.</p>
<p><strong>Snag</strong>: A problem can be downgraded to a snag as the solution is obvious to the team and represent a low level of effort. It can also be a small unexpected issue, that need to be quickly resolved.</p>
<p><strong>Dilemma</strong>: A problem can be upgraded to a dilemma, when several solutions are possible and it is not clear which one to chose</p>
<p><strong>Setback</strong>: The team can suffer a setback when it thought it had found the solution but it didn't, or could not find a solution and need to reassess either the problem or the approach</p>
<p>On the solution side, we can also capture different elements and stages of the solutioning process:</p>
<p><strong>Answer</strong>: Findings related to a question raised in the problem statement.</p>
<p><strong>Result</strong>: A validation that the solution conforms to a Fact</p>
<p><strong>Resolution</strong>: The choice made after reaching a dilemma</p>
<p><strong>Fix</strong>: a temporary solution to a problem or a snag to make progress towards the solution to the greater problem</p>
<p><strong>Development</strong>: An element of the solution, usually the solution to a subproblem or a snag</p>
<p><strong>Breakthrough</strong>: The solution found after reaching a setback</p>
<p><strong>Way out</strong>: A solution was not found, nevertheless, the project reached a satisfactory state to meet some or all of the initial goals</p>
<p>...</p>
<p>From a management perspective. The Solution or Delivery Manager can escape the bureaucracy that Agile has created. Ironically, moving stickers around is a zero value activity, with zero impact on the organizational IQ. The solution manager can and should be responsible for the IQ of the project, which rolls up and benefits from the IQ of the organization. It should keep track of the elements that are incorporated in the solution as problems are solved. It should encourage team members to be creative when necessary and to shamelessly adopt existing solutions when it makes sense. It should help resolve dilemmas and push for breakthroughs.</p>
<p>The PMO organization becomes the steward of the Organization's IQ.</p>
<p>As we define problems and solutions in terms of entities, state, transitions and actions, the&#160;<a title="LEARN" href="http://www.b-mc2.com/learn/">BOLT</a>&#160;methodology provides a unified conceptual framework that spans from Business Strategy to Problem and Solution Domains to Verification (BDD).</p>
<p>To summarize,</p>
<p>1) We have provided a formal model of a problem and a solution, and how they relate to each other</p>
<p>2) This formal model offers the ability to compose problems and solutions at any scale, over the scope of the enterprise</p>
<p>3) Problems and Solutions can be composed from Business Strategy down to Verification</p>
<p>4) We suggest that Agile methodologies replace User Stories by Problem Statements</p>
<p>5) With the renewed focus on "problems", we can also integrate the work of Prof. Knott on Organizational IQ in the whole framework</p>
<p>Last, but not least, decoupling problem definition and solution yields a tremendous benefit in the sense that both can evolve independently during the construction process.&#160;</p>
<p>_______________________________________________________________________________</p>
<p>[1]&#160;For instance, you build a vehicle, obviously you want to car to transition to the "in motion" state. Different "actions" will lead to the vehicle to reach that state (a horse pulling, an engine, transmission and wheels, a fan, ...).</p>
<p>[2] BDD Metamodel (Scenario):</p>
<p><a href="http://www.b-mc2.com/wp-content/uploads/2013/04/bdd-model.jpg"><img class="aligncenter size-full wp-image-623" src="http://www.b-mc2.com/wp-content/uploads/2013/04/bdd-model.jpg" alt="bdd-model" width="302" height="144" /></a></p>
<p>&#160;</p>
<p>[3] Living Social Business Strategy mapped using the same conceptual framework (Source:&#160;<a href="https://itunes.apple.com/us/book/b-mc2/id584185735">B = mc2</a>)</p>
<p><a href="http://www.b-mc2.com/wp-content/uploads/2013/04/lifecycle.jpg"><img class="aligncenter size-full wp-image-624" src="http://www.b-mc2.com/wp-content/uploads/2013/04/lifecycle.jpg" alt="lifecycle" width="446" height="395" /></a></p><div class="item_footer"><p><small><a href="http://www.ebpml.org/blog2/index.php/2013/04/26/reinventing-agile-from-value-to">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.ebpml.org/blog2/index.php/2013/04/26/reinventing-agile-from-value-to#comments</comments>
			<wfw:commentRss>http://www.ebpml.org/blog2/index.php?tempskin=_rss2&amp;disp=comments&amp;p=135</wfw:commentRss>
		<feedburner:origLink>http://www.ebpml.org/blog2/index.php/2013/04/26/reinventing-agile-from-value-to</feedburner:origLink></item>
				<item>
			<title>Formalizing the API Style</title>
			<link>http://feedproxy.google.com/~r/CarnetsDeBord/~3/_gyyf1fdCmY/formalizing-the-api-style</link>
			<pubDate>Sun, 14 Apr 2013 05:24:00 +0000</pubDate>			<dc:creator>jdubray</dc:creator>
			<category domain="main">SOA</category>			<guid isPermaLink="false">134@http://www.ebpml.org/blog2/</guid>
						<description>&lt;div style="float: left;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share"&gt;Tweet&lt;/a&gt;
&lt;script type="text/javascript" src="http://platform.twitter.com/widgets.js"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;script type="text/javascript" src="http://platform.linkedin.com/in.js"&gt;&lt;/script&gt;
&lt;script type="IN/Share" data-counter="right"&gt;&lt;/script&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;I &lt;a href="http://www.ebpml.org/blog2/index.php/2013/03/20/the-end-of-the-web"&gt;explained last month&lt;/a&gt;&amp;#160;that the Web Style never took off&amp;#160;since &lt;a href="http://www.tbray.org/ongoing/When/200x/2006/04/17/SOA-or-not"&gt;Tim Bray's post&lt;/a&gt;&amp;#160;which predicted the End of SOA with a great dose of exaggeration. Instead, developers quickly pivoted towards a traditional, albeit HTTP-based, API style. I am not sure who could have expected a different outcome...&amp;#160;&lt;/p&gt;
&lt;p&gt;Over all these years, the process of defining an API style has been quite chaotic &lt;a href="http://www.infoq.com/presentations/API-Revolution"&gt;as people swung&lt;/a&gt; from resource orientation to service orientation and back and, today, there is no particular "standard" or "sytle" which people can confidently rely on to design their API. Every developer decides artistically (and often inconsistenly) how he wants to use HTTP to marshal a particular API call.&lt;/p&gt;
&lt;p&gt;I was doing some research on a few APIs this week-end and took another look at &lt;a href="https://developers.helloreverb.com/swagger/"&gt;Swagger&lt;/a&gt;. I really like what they do. Incidentally, if anybody doubts that the Web Style is dead, I would take a peak at &lt;a href="http://petstore.swagger.wordnik.com/"&gt;their petshop demo&lt;/a&gt;... That being said, that petshop API is terrible.&amp;#160;&lt;/p&gt;
&lt;p&gt;When it comes to Resource Orientation, Service Orientation, Event Orientation... I actually like them all: I am a &lt;a href="http://www.infoq.com/articles/mop"&gt;polyadic&lt;/a&gt; programmer (a.k.a metaprogrammer) and if anyone doubts it, I would encourage you to look at a framework I built in 2007,&amp;#160;&lt;a href="http://www.ebpml.org/wsper/wsper"&gt;WSPER&lt;/a&gt; ("whisper"), which stands for Web Service, Process, Event, Resource. &amp;#160;&lt;/p&gt;
&lt;p&gt;So, after so many years, should we continue opposing Resource and Service orientation? I would like to show here that indeed we can weave them together and as a result we can surface resource orientation in a much cleaner way while retaining all the benefits of service orientation in the process.&lt;/p&gt;
&lt;p&gt;Services have this nice property of being exposed via an endpoint which creates a natural boundary of deployment, access and management. Enpoints truly enable an interface to be totally decoupled from its implementation. I cannot emphasize enough how important that decoupling is to distributed computing.&lt;/p&gt;
&lt;p&gt;Service orientation brought another important innovation by moving the focus from objects to views. Services hide, just enough, the model behind the Service Interface: you understand that you are dealing with a customer view, but you never have to understand the extend of a customer class. Actually I would argue that a "true" customer class cannot be built, you always interact with a particular resource in a given context (Sales, Billing, Support...). If you doubt it, please take a look at this presentation from &lt;a href="http://www.infoq.com/presentations/API-Revolution"&gt;Daniel Jacobson&lt;/a&gt;. To be fair, however, as a side effect of this approach, queries or (partial) updates are notoriously painful when you need to define them in a WSDL, no argument there. I get that. But is that a reason to give up altogether on Service Orientation?&amp;#160;&lt;/p&gt;
&lt;p&gt;On the other hand the RESTafarians have grossly misunderstood Service Orientation and at the same time, never really understood that REST brought back distributed objects into the programming model. Worse, because of its sole focus on resources, REST forces you to expose every single detail of the model to the resource consumer. It shouldn't be a surprise to anyone that in the end all they can deliver is CRUD.&amp;#160;&lt;/p&gt;
&lt;p&gt;One thing that people often forget in SOA is that a service implementation can and should expose multiple service contracts, this is a bit harder to do with APIs because resource paths are not polymorphic by design and they are often hard wired to the implementation. Yes, I know, I could use yet another HTTP header or even concatenate an nth parameter to the Content-type but that is inelegant because you lose the natural boundary offered by a "service" endpoint. The real elegance I see behind Resource orientation (that none of the Web APIs I know implement, including the so-called RESTful ones) is when a path, say /customers/1234, truly points to the same resource regardless of which service I use to access it.&amp;#160;&lt;/p&gt;
&lt;p&gt;What I mean here is when you have a customer service and a purchase order service,&amp;#160;&lt;span style="font-size: 13px; line-height: 19px;"&gt;you should be able to fetch the same customer information (albeit with a different view) using the same path. Yes, when you query an order GET /orders/345 and it returns a path (not a link) to /customers/1234 the PO Service could implement that path and return a view of the customer in the context of a purchase order and if you invoke the same path on the customer service, you would get a more complete view (assuming you have the access rights).&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;When you marshal the service name within the path (and the version for that matter), you cannot achieve that elegant behavior without a lot of out of band conventions and string manipulations.&amp;#160;&lt;span style="font-size: 13px; line-height: 19px;"&gt;That's why I suggest that you define the service/API boundaries using subdomains rather than paths. For instance we would have two subdomains:&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&lt;a href="http://v1.customers.api.ebpml.org"&gt;http://v1.customers.api.ebpml.org&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&lt;a href="http://v2.orders.api.ebpml.org"&gt;http://v2.orders.api.ebpml.org&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Each subdomain would provide access to its own resource collections, &lt;strong&gt;including overlapping collections&lt;/strong&gt;. Both API calls would return a view of the same customer:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&lt;span&gt;[GET]&amp;#160;&lt;/span&gt;&lt;a href="http://v1.customers.api.ebpml.org/customers/1234"&gt;http://v1.customers.api.ebpml.org/customers/1234&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&lt;span&gt;[GET]&amp;#160;&lt;/span&gt;&lt;a href="http://v2.orders.api.ebpml.org/customers/1234"&gt;http://v2.orders.api.ebpml.org/customers/1234&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Imagine a "link" that works across services and versions? Many times I have mentioned that REST couples access and identity. Here we have a clear separation between access (subdomain endpoint) and identity (at the path level).&amp;#160;&lt;/p&gt;
&lt;p&gt;This API style is capable of supporting the traditional Query/Create/Update/Delete operations quite efficiently, in a way that could look attractive to Web developers. However, I would like to emphasize again that HTTP alone is not a good query language. If you doubt it,please take look at the MongoDB API. Any serious service implementation will have to follow their lead, especially for complex queries and partial updates.&lt;/p&gt;
&lt;p&gt;Actions are another point of misalignment between resource and service orientation. Many of the RESTafarians have dismissed the need for actions and advised to use a simple update instead. In the real world this is of course a completely bogus approach (validation, authorization, logging, throttling, versioning, duplication of the update logic on the consumer side...) and Web API designers have been prompt to use action verbs in their paths, wired to specific method calls.&lt;/p&gt;
&lt;p&gt;I have also explained many times that every resource has a lifecycle. Some resource (such as a Tweet or Status) have a CUD lifecycle (Create -&amp;gt; Update* -&amp;gt; Delete) which maps well to the lifecycle of a Web page, and hence the HTTP verbs, but again &lt;a href="http://www.ebpml.org/blog2/index.php/2010/09/14/soa-bpm-rest-lifecycle-example"&gt;in the real world&lt;/a&gt;, lifecycles are complex and each transition maps to an action which you need to express one way or another. A verb is what everyone understands. If you want to use a noun for a verb, be my guest, but semantically you have not changed the meaning of the call, you are still triggering an action, which when successful will transition the resource from one state to the next.&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;img title="" src="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/order_lifecycle.JPG" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;So there is no reason to be afraid (and do like everyone else): use verbs as needed, either behind a resource when they apply to a resource instance or at the collection level when you initiate a lifecycle.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;[POST] &lt;a href="http://v2.orders.api.ebpml.org/orders/create"&gt;http://v2.orders.api.ebpml.org/orders/create&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&lt;span&gt;[POST]&amp;#160;&lt;/span&gt;&lt;a href="http://v2.orders.api.ebpml.org/orders/1234/submit"&gt;http://v2.orders.api.ebpml.org/orders/1234/submit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&lt;span&gt;[POST]&amp;#160;&lt;/span&gt;&lt;a href="http://v2.orders.api.ebpml.org/orders/1234/pay"&gt;http://v2.orders.api.ebpml.org/orders/1234/pay&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&lt;span&gt;[POST]&amp;#160;&lt;/span&gt;&lt;a href="http://v2.orders.api.ebpml.org/orders/1234/ship"&gt;http://v2.orders.api.ebpml.org/orders/1234/ship&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&lt;span&gt;[POST]&amp;#160;&lt;/span&gt;&lt;a href="http://v2.orders.api.ebpml.org/orders/1234/deliver"&gt;http://v2.orders.api.ebpml.org/orders/1234/deliver&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&lt;span&gt;[POST]&amp;#160;&lt;/span&gt;&lt;a href="http://v2.orders.api.ebpml.org/orders/1234/return"&gt;http://v2.orders.api.ebpml.org/orders/1234/return&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Composite calls (which fire several actions that transition to multiple states on different resources) should also be considered.&lt;/p&gt;
&lt;p&gt;You will notice that the use of a subdomain as a service boundary greatly simplifies the migration from one major version to the next since API signatures and identities are not polluted by the version number like it is often the case in traditional API designs.&lt;/p&gt;
&lt;p&gt;That's it, I believe that approach defines a clean Web API style which brings together the best of Resource Orientation and Service Orientation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;It achieves a true decoupling between resource access and identity, which in turns allow service consumers to use these identities across multiple services and supports a polymorphic resource access model (at the service level) which encourages the usage of views on the model, rather than a direct access to the model&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;It introduces a clean API boundary which can be much more efficiently managed (and authorized)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;It provides a clear and clean way to define actions which map directly to the resource lifecycle&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;It simplifies version migrations&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;I came up with these ideas while building a &lt;/span&gt;&lt;a style="font-size: 13px; line-height: 19px;" href="https://developers.helloreverb.com/swagger/"&gt;Swagger&lt;/a&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt; stencil for &lt;/span&gt;&lt;a style="font-size: 13px; line-height: 19px;" href="http://www.omnigroup.com"&gt;Omnigraffle&lt;/a&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;. So &lt;/span&gt;&lt;a style="font-size: 13px; line-height: 19px;" href="http://www.canappi.com/Swagger.gstencil"&gt;here it is.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ebpml.org/Swagger.gstencil"&gt;&lt;img src="http://www.b-mc2.com/wp-content/uploads/2013/02/omnigraffle_for_bolt.png" alt="omnigraffle_for_bolt" width="32" height="32" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a href="http://www.ebpml.org/blog2/index.php/2013/04/13/formalizing-the-api-style"&gt;Original post&lt;/a&gt; blogged on &lt;a href="http://b2evolution.net/"&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<div style="float: left;"><a class="twitter-share-button" href="http://twitter.com/share">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
</div>
<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
<script type="IN/Share" data-counter="right"></script>
<p>&#160;</p>
<p>I <a href="http://www.ebpml.org/blog2/index.php/2013/03/20/the-end-of-the-web">explained last month</a>&#160;that the Web Style never took off&#160;since <a href="http://www.tbray.org/ongoing/When/200x/2006/04/17/SOA-or-not">Tim Bray's post</a>&#160;which predicted the End of SOA with a great dose of exaggeration. Instead, developers quickly pivoted towards a traditional, albeit HTTP-based, API style. I am not sure who could have expected a different outcome...&#160;</p>
<p>Over all these years, the process of defining an API style has been quite chaotic <a href="http://www.infoq.com/presentations/API-Revolution">as people swung</a> from resource orientation to service orientation and back and, today, there is no particular "standard" or "sytle" which people can confidently rely on to design their API. Every developer decides artistically (and often inconsistenly) how he wants to use HTTP to marshal a particular API call.</p>
<p>I was doing some research on a few APIs this week-end and took another look at <a href="https://developers.helloreverb.com/swagger/">Swagger</a>. I really like what they do. Incidentally, if anybody doubts that the Web Style is dead, I would take a peak at <a href="http://petstore.swagger.wordnik.com/">their petshop demo</a>... That being said, that petshop API is terrible.&#160;</p>
<p>When it comes to Resource Orientation, Service Orientation, Event Orientation... I actually like them all: I am a <a href="http://www.infoq.com/articles/mop">polyadic</a> programmer (a.k.a metaprogrammer) and if anyone doubts it, I would encourage you to look at a framework I built in 2007,&#160;<a href="http://www.ebpml.org/wsper/wsper">WSPER</a> ("whisper"), which stands for Web Service, Process, Event, Resource. &#160;</p>
<p>So, after so many years, should we continue opposing Resource and Service orientation? I would like to show here that indeed we can weave them together and as a result we can surface resource orientation in a much cleaner way while retaining all the benefits of service orientation in the process.</p>
<p>Services have this nice property of being exposed via an endpoint which creates a natural boundary of deployment, access and management. Enpoints truly enable an interface to be totally decoupled from its implementation. I cannot emphasize enough how important that decoupling is to distributed computing.</p>
<p>Service orientation brought another important innovation by moving the focus from objects to views. Services hide, just enough, the model behind the Service Interface: you understand that you are dealing with a customer view, but you never have to understand the extend of a customer class. Actually I would argue that a "true" customer class cannot be built, you always interact with a particular resource in a given context (Sales, Billing, Support...). If you doubt it, please take a look at this presentation from <a href="http://www.infoq.com/presentations/API-Revolution">Daniel Jacobson</a>. To be fair, however, as a side effect of this approach, queries or (partial) updates are notoriously painful when you need to define them in a WSDL, no argument there. I get that. But is that a reason to give up altogether on Service Orientation?&#160;</p>
<p>On the other hand the RESTafarians have grossly misunderstood Service Orientation and at the same time, never really understood that REST brought back distributed objects into the programming model. Worse, because of its sole focus on resources, REST forces you to expose every single detail of the model to the resource consumer. It shouldn't be a surprise to anyone that in the end all they can deliver is CRUD.&#160;</p>
<p>One thing that people often forget in SOA is that a service implementation can and should expose multiple service contracts, this is a bit harder to do with APIs because resource paths are not polymorphic by design and they are often hard wired to the implementation. Yes, I know, I could use yet another HTTP header or even concatenate an nth parameter to the Content-type but that is inelegant because you lose the natural boundary offered by a "service" endpoint. The real elegance I see behind Resource orientation (that none of the Web APIs I know implement, including the so-called RESTful ones) is when a path, say /customers/1234, truly points to the same resource regardless of which service I use to access it.&#160;</p>
<p>What I mean here is when you have a customer service and a purchase order service,&#160;<span style="font-size: 13px; line-height: 19px;">you should be able to fetch the same customer information (albeit with a different view) using the same path. Yes, when you query an order GET /orders/345 and it returns a path (not a link) to /customers/1234 the PO Service could implement that path and return a view of the customer in the context of a purchase order and if you invoke the same path on the customer service, you would get a more complete view (assuming you have the access rights).&#160;</span></p>
<p>When you marshal the service name within the path (and the version for that matter), you cannot achieve that elegant behavior without a lot of out of band conventions and string manipulations.&#160;<span style="font-size: 13px; line-height: 19px;">That's why I suggest that you define the service/API boundaries using subdomains rather than paths. For instance we would have two subdomains:</span></p>
<p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;"><a href="http://v1.customers.api.ebpml.org">http://v1.customers.api.ebpml.org</a></span></p>
<p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;"><a href="http://v2.orders.api.ebpml.org">http://v2.orders.api.ebpml.org</a></span></p>
<p>Each subdomain would provide access to its own resource collections, <strong>including overlapping collections</strong>. Both API calls would return a view of the same customer:</p>
<p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;"><span>[GET]&#160;</span><a href="http://v1.customers.api.ebpml.org/customers/1234">http://v1.customers.api.ebpml.org/customers/1234</a></span></p>
<p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;"><span>[GET]&#160;</span><a href="http://v2.orders.api.ebpml.org/customers/1234">http://v2.orders.api.ebpml.org/customers/1234</a></span></p>
<p>Imagine a "link" that works across services and versions? Many times I have mentioned that REST couples access and identity. Here we have a clear separation between access (subdomain endpoint) and identity (at the path level).&#160;</p>
<p>This API style is capable of supporting the traditional Query/Create/Update/Delete operations quite efficiently, in a way that could look attractive to Web developers. However, I would like to emphasize again that HTTP alone is not a good query language. If you doubt it,please take look at the MongoDB API. Any serious service implementation will have to follow their lead, especially for complex queries and partial updates.</p>
<p>Actions are another point of misalignment between resource and service orientation. Many of the RESTafarians have dismissed the need for actions and advised to use a simple update instead. In the real world this is of course a completely bogus approach (validation, authorization, logging, throttling, versioning, duplication of the update logic on the consumer side...) and Web API designers have been prompt to use action verbs in their paths, wired to specific method calls.</p>
<p>I have also explained many times that every resource has a lifecycle. Some resource (such as a Tweet or Status) have a CUD lifecycle (Create -&gt; Update* -&gt; Delete) which maps well to the lifecycle of a Web page, and hence the HTTP verbs, but again <a href="http://www.ebpml.org/blog2/index.php/2010/09/14/soa-bpm-rest-lifecycle-example">in the real world</a>, lifecycles are complex and each transition maps to an action which you need to express one way or another. A verb is what everyone understands. If you want to use a noun for a verb, be my guest, but semantically you have not changed the meaning of the call, you are still triggering an action, which when successful will transition the resource from one state to the next.&#160;</p>
<p><img title="" src="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/order_lifecycle.JPG" alt="" /></p>
<p>&#160;</p>
<p>So there is no reason to be afraid (and do like everyone else): use verbs as needed, either behind a resource when they apply to a resource instance or at the collection level when you initiate a lifecycle.</p>
<p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;">[POST] <a href="http://v2.orders.api.ebpml.org/orders/create">http://v2.orders.api.ebpml.org/orders/create</a></span></p>
<p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;"><span>[POST]&#160;</span><a href="http://v2.orders.api.ebpml.org/orders/1234/submit">http://v2.orders.api.ebpml.org/orders/1234/submit</a></span></p>
<p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;"><span>[POST]&#160;</span><a href="http://v2.orders.api.ebpml.org/orders/1234/pay">http://v2.orders.api.ebpml.org/orders/1234/pay</a></span></p>
<p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;"><span>[POST]&#160;</span><a href="http://v2.orders.api.ebpml.org/orders/1234/ship">http://v2.orders.api.ebpml.org/orders/1234/ship</a></span></p>
<p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;"><span>[POST]&#160;</span><a href="http://v2.orders.api.ebpml.org/orders/1234/deliver">http://v2.orders.api.ebpml.org/orders/1234/deliver</a></span></p>
<p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;"><span>[POST]&#160;</span><a href="http://v2.orders.api.ebpml.org/orders/1234/return">http://v2.orders.api.ebpml.org/orders/1234/return</a></span></p>
<p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;">...</span></p>
<p>Composite calls (which fire several actions that transition to multiple states on different resources) should also be considered.</p>
<p>You will notice that the use of a subdomain as a service boundary greatly simplifies the migration from one major version to the next since API signatures and identities are not polluted by the version number like it is often the case in traditional API designs.</p>
<p>That's it, I believe that approach defines a clean Web API style which brings together the best of Resource Orientation and Service Orientation:</p>
<ul>
<li><span style="font-size: 13px; line-height: 19px;">It achieves a true decoupling between resource access and identity, which in turns allow service consumers to use these identities across multiple services and supports a polymorphic resource access model (at the service level) which encourages the usage of views on the model, rather than a direct access to the model</span></li>
<li><span style="font-size: 13px; line-height: 19px;">It introduces a clean API boundary which can be much more efficiently managed (and authorized)</span></li>
<li><span style="font-size: 13px; line-height: 19px;">It provides a clear and clean way to define actions which map directly to the resource lifecycle</span></li>
<li><span style="font-size: 13px; line-height: 19px;">It simplifies version migrations</span></li>
</ul>
<p><span style="font-size: 13px; line-height: 19px;">I came up with these ideas while building a </span><a style="font-size: 13px; line-height: 19px;" href="https://developers.helloreverb.com/swagger/">Swagger</a><span style="font-size: 13px; line-height: 19px;"> stencil for </span><a style="font-size: 13px; line-height: 19px;" href="http://www.omnigroup.com">Omnigraffle</a><span style="font-size: 13px; line-height: 19px;">. So </span><a style="font-size: 13px; line-height: 19px;" href="http://www.canappi.com/Swagger.gstencil">here it is.</a></p>
<p><a href="http://www.ebpml.org/Swagger.gstencil"><img src="http://www.b-mc2.com/wp-content/uploads/2013/02/omnigraffle_for_bolt.png" alt="omnigraffle_for_bolt" width="32" height="32" /></a></p><div class="item_footer"><p><small><a href="http://www.ebpml.org/blog2/index.php/2013/04/13/formalizing-the-api-style">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.ebpml.org/blog2/index.php/2013/04/13/formalizing-the-api-style#comments</comments>
			<wfw:commentRss>http://www.ebpml.org/blog2/index.php?tempskin=_rss2&amp;disp=comments&amp;p=134</wfw:commentRss>
		<feedburner:origLink>http://www.ebpml.org/blog2/index.php/2013/04/13/formalizing-the-api-style</feedburner:origLink></item>
				<item>
			<title>Migrating from Rackspace to EC2</title>
			<link>http://feedproxy.google.com/~r/CarnetsDeBord/~3/RbaMs6OTiT4/migrating-from-rackspace-to-ec2</link>
			<pubDate>Tue, 26 Mar 2013 05:33:00 +0000</pubDate>			<dc:creator>jdubray</dc:creator>
			<category domain="alt">News</category>
<category domain="main">SOA</category>
<category domain="alt">Business Strategy</category>			<guid isPermaLink="false">133@http://www.ebpml.org/blog2/</guid>
						<description>&lt;p&gt;About 4 years ago I fired up my first Cloud server on Rackspace. The service has been great but Rackspace's pricing strategy has been abysmal. In 4 years, my bill stayed constant, so did the specs of my "servers" (a modest 10 Gb / 256 Mb).&lt;/p&gt;
&lt;p&gt;While Amazon customers enjoyed something like 26 price drops in that timeframe, I got nothing. Worse, for the kind of servers I use, the price went up 50%, earlier this year: Rackspace no longer offers a micro server (i.e. a slice of a server), for anything I do, I now have to buy a small instance at a 50% premium (after the 30% "drop").&amp;#160;&lt;/p&gt;
&lt;p&gt;So I just got a reserved Amazon's micro instance, a whopping 600 Mb "machine", substantially faster (my guesstimate is about 3X) for about the same price as a now defunct micro Rackspace instance. I can easily run 2 micro Rackspace instances in a single not-so-micro Amazon instance.&lt;/p&gt;
&lt;p&gt;Don't get me wrong, I am sad to switch. When I told Robert Scoble that Rackspace's pricing Strategy sucks, he responded and got the President, Lew Moorman and the CTO to reply to me personally. But for me, the cloud is all about slices: temporal slices, or tenancy slices, and clearly Amazon understands that game far better than any other Cloud provider. I am not in the business of sponsoring Rackspace, I expect them to innovate at a reasonable rate and pass that innovation to their customers, the way Amazon does it, or almost any business. Even Apple gets that, the iPhone 4 is 30% cheaper than when it came out, the iPad 2 is 25% cheaper ... and so on.&amp;#160;&lt;/p&gt;
&lt;p&gt;The migration was uneventful, a simple file transfer was enough since my workload is stateless. At first glance security seems a lot tighter.&amp;#160;&lt;/p&gt;
&lt;p&gt;So long Rackspace.&lt;/p&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a href="http://www.ebpml.org/blog2/index.php/2013/03/25/migrating-from-rackspace-to-ec2"&gt;Original post&lt;/a&gt; blogged on &lt;a href="http://b2evolution.net/"&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>About 4 years ago I fired up my first Cloud server on Rackspace. The service has been great but Rackspace's pricing strategy has been abysmal. In 4 years, my bill stayed constant, so did the specs of my "servers" (a modest 10 Gb / 256 Mb).</p>
<p>While Amazon customers enjoyed something like 26 price drops in that timeframe, I got nothing. Worse, for the kind of servers I use, the price went up 50%, earlier this year: Rackspace no longer offers a micro server (i.e. a slice of a server), for anything I do, I now have to buy a small instance at a 50% premium (after the 30% "drop").&#160;</p>
<p>So I just got a reserved Amazon's micro instance, a whopping 600 Mb "machine", substantially faster (my guesstimate is about 3X) for about the same price as a now defunct micro Rackspace instance. I can easily run 2 micro Rackspace instances in a single not-so-micro Amazon instance.</p>
<p>Don't get me wrong, I am sad to switch. When I told Robert Scoble that Rackspace's pricing Strategy sucks, he responded and got the President, Lew Moorman and the CTO to reply to me personally. But for me, the cloud is all about slices: temporal slices, or tenancy slices, and clearly Amazon understands that game far better than any other Cloud provider. I am not in the business of sponsoring Rackspace, I expect them to innovate at a reasonable rate and pass that innovation to their customers, the way Amazon does it, or almost any business. Even Apple gets that, the iPhone 4 is 30% cheaper than when it came out, the iPad 2 is 25% cheaper ... and so on.&#160;</p>
<p>The migration was uneventful, a simple file transfer was enough since my workload is stateless. At first glance security seems a lot tighter.&#160;</p>
<p>So long Rackspace.</p><div class="item_footer"><p><small><a href="http://www.ebpml.org/blog2/index.php/2013/03/25/migrating-from-rackspace-to-ec2">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.ebpml.org/blog2/index.php/2013/03/25/migrating-from-rackspace-to-ec2#comments</comments>
			<wfw:commentRss>http://www.ebpml.org/blog2/index.php?tempskin=_rss2&amp;disp=comments&amp;p=133</wfw:commentRss>
		<feedburner:origLink>http://www.ebpml.org/blog2/index.php/2013/03/25/migrating-from-rackspace-to-ec2</feedburner:origLink></item>
				<item>
			<title>The End of the Web (Style)</title>
			<link>http://feedproxy.google.com/~r/CarnetsDeBord/~3/t8OjtacP1nE/the-end-of-the-web</link>
			<pubDate>Wed, 20 Mar 2013 11:50:00 +0000</pubDate>			<dc:creator>jdubray</dc:creator>
			<category domain="main">SOA</category>			<guid isPermaLink="false">132@http://www.ebpml.org/blog2/</guid>
						<description>&lt;p&gt;Seven years ago, next month, Tim Bray predicted &lt;a href="http://www.tbray.org/ongoing/When/200x/2006/04/17/SOA-or-not"&gt;the End of SOA&lt;/a&gt;&amp;#160;and concluded his commentary with:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"&lt;span&gt;SOA isn&amp;#8217;t the future,&amp;#160;&lt;/span&gt;&lt;a href="http://www.tbray.org/ongoing/When/200x/2006/03/26/On-REST"&gt;Web style&lt;/a&gt;&lt;span&gt;&amp;#160;is."&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That post opened the door to a big circus and gave pundits the "opportunity" to predict with more accuracy than any oracle the Death of SOA. Anne Thomas Manes&amp;#160;explained to us in 2009,&amp;#160;from the comfort of her cublicle at&amp;#160;&lt;span style="text-decoration: line-through;"&gt;Delphi&lt;/span&gt;&amp;#160;Gartner, &amp;#160;that "&lt;a href="http://www.infoq.com/news/2009/01/is-soa-dead"&gt;SOA [was] a great failed experiment&lt;/a&gt;". Another "analyst", David Chappell, added to the circus by asking tong-in-cheek "&lt;a href="http://davidchappellopinari.blogspot.com/2009/08/is-soa-failing-2008-interview.html"&gt;if SOA was failing&lt;/a&gt;", and went as far as calling SOA: "&lt;span&gt;Suckered Once Again". Then there was Jim Webber's "&lt;a href="http://www.slideshare.net/deimos/jim-webber-martin-fowler-does-my-bus-look-big-in-this"&gt;Same Old Atrocity&lt;/a&gt;" which is one of the most profound and graph-ical presentation IT had ever seen.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;How many SOA initiatives were stopped or slowed down by "The End of SOA"? Mine was. My manager at the time told me that Tim Bray's post was circulating in our IT department and he didn't know where to start to craft an answer to his management. His team had built their own ESB at a time when hardly anyone had heard of XML and several years of hard work and constantly rising transaction volumes (a respectable 10 M requests/day at the time, in early 2007) &amp;#160;were now jeopardized by a single paragraph written by Tim Bray.&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Seven years later, the Programmable Web's directory has&amp;#160;&lt;a href="http://www.programmableweb.com/"&gt;close to 9000 registered public APIs&lt;/a&gt;&amp;#160;(yes APIs, as in Ancient Programming Interface&lt;span style="font-size: 13px; line-height: 19px;"&gt;). That number is growing exponentially. Out of 9000 APIs, my best estimate is that less than 1% are following Tim Bray's&amp;#160;&lt;/span&gt;&lt;a style="font-size: 13px; line-height: 19px;" href="http://en.wikipedia.org/wiki/Representational_state_transfer"&gt;Web Style&lt;/a&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;. They are all but following &lt;a href="http://www.ebpml.org/blog2/index.php/2011/11/21/pizza-is-a-vegetable"&gt;an "API" style&lt;/a&gt;, short of RPC.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;If we just take a sample of the newest APIs on the ProgrammableWeb (as of March 18), we have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&lt;strong&gt;Ask Ziggy&lt;/strong&gt; which offers the ability (sic) &lt;/span&gt;&lt;a style="font-size: 13px; line-height: 19px;" href="http://www.ask-ziggy.com/walkthrough.html#sample"&gt;&amp;#160;to define "actions"&lt;/a&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt; (such as Play, NextSong, Previous Song, Shuffle...)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&lt;strong&gt;WhatLanguage&lt;/strong&gt; explains that &lt;a href="http://www.whatlanguage.net/en/api/language_identification_documentation#detect_text"&gt;you can use, as you wish&lt;/a&gt;, a GET (if your request is less than 7500 chars) or a POST to the same URI to detect the language of a given string&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&lt;strong&gt;Do.com&lt;/strong&gt; actually seem to be offering a &lt;a href="https://developers.do.com/docs/tasks"&gt;Web Style API&lt;/a&gt;, but it does not do much, it is simply CRUDing 5 resources (tasks, project, users,...)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&lt;strong&gt;SkyBuffer&lt;/strong&gt; is also following &lt;a href="https://dev.skybuffer.com/version/1"&gt;the Web Style&lt;/a&gt;, but just like DO.com, this is just some CRUD on a couple of entities&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&lt;strong&gt;MaShape&lt;/strong&gt; which is a "Cloud API hub" is very interesting because they offer a better way for developers to consumer APIs. &lt;a href="https://www.mashape.com/docs/gettingstarted/overview"&gt;How do they do that&lt;/a&gt;? They invite developers to "&lt;span&gt;Learn how to describe your API on Mashape to autogenerate client libraries and documentation". Yes you heard right, after years of bashing, developers start talking about client library code generation.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;Why on earth would anyone attempt to build a client library code generation? Wasn't the Web Style all about the "Uniform Interface", Bookmarks and auto-magic &lt;a href="http://www.infoq.com/articles/hypermedia-api-tutorial-part-one"&gt;HATEAOS&lt;/a&gt;? not to forget standard IANA types? Yes, you don't hear that kind of argument much these days. APIs rule. People are no longer ashamed to use a verb in their URLs or POST a (complex) query. Most importantly, &lt;a href="http://docs.mongodb.org/manual/reference/javascript/"&gt;MongoDB showed us&lt;/a&gt; that there is a lot more needed to CRUD than these 4 little verbs and an anemic URL syntax. Developers and Architects are so desperate to go around the "Web Style" that &lt;a href="http://www.infoq.com/presentations/OpenStack-Extensions"&gt;they even try to add namespaces to JSON&lt;/a&gt;. Who would have thought?&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;You guessed it, the REST emperor has no clothes. That 5 API random sample (out of 9000) from the Programmable Web is actually quite representative of the lay of the land: APIs that do something interesting simply ignore the Web style, APIs that do follow it are just a bunch of boring and useless CRUD while everyone struggles to write API clients since there is no machine readable contract &lt;a href="http://bill.burkecentral.com/"&gt;to generate the plumbing&lt;/a&gt;. &lt;a href="http://www.ebpml.org/blog2/index.php/2011/11/21/pizza-is-a-vegetable"&gt;How long does it take to write the client code&lt;/a&gt;? A couple hours? a couple days? a couple of weeks? &lt;a href="http://www.canappi.com/pages/connectors-home"&gt;I wrote quite a few&lt;/a&gt;, before abstracting it into a Web API client framework.&amp;#160;&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;For crying out loud, &lt;a href="http://petstore.swagger.wordnik.com/#!/user"&gt;even Swagger's totally gave up on the Web Style&lt;/a&gt; in favor of APIs.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;After wipping out decades of wisdom in distributed computing architecture from distributed transactions, eventing, orchestrations or assemblies, the Web Style is all but dead. The only people that would argue otherwise are the one that a) that are emotionally or financially attached to it or b) working for a Palo Alto startup which just discovered an nth way to exchange silly pictures and chats.&amp;#160;&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;Actually, the whole Web is all but dead, between &lt;a href="http://www.itwriting.com/blog/7249-native-apps-vs-html-5-no-consensus-over-how-to-choose.html"&gt;developers who can't figure out how to produce anything of value with HTML5&lt;/a&gt; and compete with Native apps and end users finally getting cold at the wonderful idea of being "the product" central to the Web business model.&amp;#160;&lt;a href="http://www.ebpml.org/blog2/index.php/2010/11/21/soon-the-web-will-die"&gt;Tim Berner-Lee which is coming out every six month&lt;/a&gt; with a "Long live the Web" message but after &lt;a href="http://www.bbc.co.uk/news/world-asia-21855051"&gt;a wrath of security abuses&lt;/a&gt;, it seems that even a KBE can no longer save the Web.&amp;#160;&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;The "Web Spring" of 2006, which was launched in the context of a failing SUN (Tim Bray was working for SUN at the time) and a lumping Connected Division at Microsoft, created a big vacuum that was never filled. After chasing the Minimum Viable Architecture, we reached a point where it can't be distinguished from a house of card. &amp;#160;&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;The truh and the matter is that the Web Style is nothing more than some pitiful CRUD a la SkyBuffer or Do.com. The "&lt;em&gt;cr&amp;#232;me de la cr&amp;#232;me"&amp;#160;&lt;/em&gt;of our industry lead us into a very big ditch, a pit of technical debt where API providers are now forced to ship client libraries for different platforms like in the old days of ODBC.&amp;#160;&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;So, where do we go from there? No, I am not suggesting to return to WS-* or even grow &lt;a href="http://www.infoq.com/news/2009/09/burke-reststar-soa-roa-rest"&gt;REST-*&lt;/a&gt;. We have to move forward, passed a corny vision &lt;a href="http://labs.oracle.com/techrep/1994/abstract-29.html"&gt;that has plagued our industry since the 70s&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;First we have to understand and acknowledge that mobile computing is driving a new paradigm, possibly the biggest paradigm shift in computing we have ever seen. Few people would remember, but software engineering was built on an old, very old paradigm of "file processing" which culminated with &lt;a href="http://en.wikipedia.org/wiki/Unix_File_System"&gt;UFS&lt;/a&gt;. The desktop metaphor and the main usage patterns of PCs remained anchored in "file processing". Mobile is no longer about files, mobile terminals assist us in pretty much any activity we do. If nothing else, future operating systems will be activity centric. Yes, sign of times, even Microsoft finally dropped its stapple folder structure (My Documents, My Pictures , My Music...) or did they?&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;Second, we have to leave Web technologies behind. They once made some sense when computing was tethered and people could not bring their computing device with them. They no longer do. End users have become far more demanding and sophisticated than developers themselves and thinking that dubious technical arguments can weight in against popular demand is at best naive. The best user experience will win, anyone who has, is or will be betting against it will lose. The Web rose, because it too, once, provided a better user experience. It didn't rise because it was "the Web".&amp;#160;&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;Third, we have to be pragmatic about distributed computing and continue to&amp;#160;&lt;a href="http://www.ebpml.org/blog2/index.php/2011/06/29/unrest"&gt;unREST&lt;/a&gt;. More CRUD is not going to cut it, even with an API as superbly designed as the MongoDB API. We also have to grow up an understand that, OO is the wrong paradigm to represent interactions between distributed components. Hence we have to stop reifying everything we do into stateless singleton method calls. Annotations on a class are simply too weak to drive the semantic revolution that SOA started and we now need to finish.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;These evolutions all point to a robust Composite Programming Model where the view and the model are free from each other and hence properly connected, following an activity/action/lifecycle paradigm. Every solution today is a Composite Solution that want to take advantage of the wealth of public or private 2-legged and 3-legged APIs.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;Which vendor will take the lead in building a modern&amp;#160;composite programming model (CPM :-)? IBM? Oracle? Microsoft? Apple? Google? Facebook? ouch... I would bet on a MongoDB or Joyent style startup which comes out of nowhere and rises at light speed because it delivers a tremendous amount of value.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;The Web (Style) isn't the future, a robust Composite Programming Model is.&lt;/div&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a href="http://www.ebpml.org/blog2/index.php/2013/03/20/the-end-of-the-web"&gt;Original post&lt;/a&gt; blogged on &lt;a href="http://b2evolution.net/"&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>Seven years ago, next month, Tim Bray predicted <a href="http://www.tbray.org/ongoing/When/200x/2006/04/17/SOA-or-not">the End of SOA</a>&#160;and concluded his commentary with:</p>
<blockquote>
<p>"<span>SOA isn&#8217;t the future,&#160;</span><a href="http://www.tbray.org/ongoing/When/200x/2006/03/26/On-REST">Web style</a><span>&#160;is."</span></p>
</blockquote>
<p>That post opened the door to a big circus and gave pundits the "opportunity" to predict with more accuracy than any oracle the Death of SOA. Anne Thomas Manes&#160;explained to us in 2009,&#160;from the comfort of her cublicle at&#160;<span style="text-decoration: line-through;">Delphi</span>&#160;Gartner, &#160;that "<a href="http://www.infoq.com/news/2009/01/is-soa-dead">SOA [was] a great failed experiment</a>". Another "analyst", David Chappell, added to the circus by asking tong-in-cheek "<a href="http://davidchappellopinari.blogspot.com/2009/08/is-soa-failing-2008-interview.html">if SOA was failing</a>", and went as far as calling SOA: "<span>Suckered Once Again". Then there was Jim Webber's "<a href="http://www.slideshare.net/deimos/jim-webber-martin-fowler-does-my-bus-look-big-in-this">Same Old Atrocity</a>" which is one of the most profound and graph-ical presentation IT had ever seen.</span></p>
<p><span>How many SOA initiatives were stopped or slowed down by "The End of SOA"? Mine was. My manager at the time told me that Tim Bray's post was circulating in our IT department and he didn't know where to start to craft an answer to his management. His team had built their own ESB at a time when hardly anyone had heard of XML and several years of hard work and constantly rising transaction volumes (a respectable 10 M requests/day at the time, in early 2007) &#160;were now jeopardized by a single paragraph written by Tim Bray.&#160;</span></p>
<p>Seven years later, the Programmable Web's directory has&#160;<a href="http://www.programmableweb.com/">close to 9000 registered public APIs</a>&#160;(yes APIs, as in Ancient Programming Interface<span style="font-size: 13px; line-height: 19px;">). That number is growing exponentially. Out of 9000 APIs, my best estimate is that less than 1% are following Tim Bray's&#160;</span><a style="font-size: 13px; line-height: 19px;" href="http://en.wikipedia.org/wiki/Representational_state_transfer">Web Style</a><span style="font-size: 13px; line-height: 19px;">. They are all but following <a href="http://www.ebpml.org/blog2/index.php/2011/11/21/pizza-is-a-vegetable">an "API" style</a>, short of RPC.</span></p>
<p>If we just take a sample of the newest APIs on the ProgrammableWeb (as of March 18), we have:</p>
<ul>
<li><span style="font-size: 13px; line-height: 19px;"><strong>Ask Ziggy</strong> which offers the ability (sic) </span><a style="font-size: 13px; line-height: 19px;" href="http://www.ask-ziggy.com/walkthrough.html#sample">&#160;to define "actions"</a><span style="font-size: 13px; line-height: 19px;"> (such as Play, NextSong, Previous Song, Shuffle...)</span></li>
<li><span style="font-size: 13px; line-height: 19px;"><strong>WhatLanguage</strong> explains that <a href="http://www.whatlanguage.net/en/api/language_identification_documentation#detect_text">you can use, as you wish</a>, a GET (if your request is less than 7500 chars) or a POST to the same URI to detect the language of a given string</span></li>
<li><span style="font-size: 13px; line-height: 19px;"><strong>Do.com</strong> actually seem to be offering a <a href="https://developers.do.com/docs/tasks">Web Style API</a>, but it does not do much, it is simply CRUDing 5 resources (tasks, project, users,...)</span></li>
<li><span style="font-size: 13px; line-height: 19px;"><strong>SkyBuffer</strong> is also following <a href="https://dev.skybuffer.com/version/1">the Web Style</a>, but just like DO.com, this is just some CRUD on a couple of entities</span></li>
<li><span style="font-size: 13px; line-height: 19px;"><strong>MaShape</strong> which is a "Cloud API hub" is very interesting because they offer a better way for developers to consumer APIs. <a href="https://www.mashape.com/docs/gettingstarted/overview">How do they do that</a>? They invite developers to "<span>Learn how to describe your API on Mashape to autogenerate client libraries and documentation". Yes you heard right, after years of bashing, developers start talking about client library code generation.</span></span></li>
</ul>
<div>Why on earth would anyone attempt to build a client library code generation? Wasn't the Web Style all about the "Uniform Interface", Bookmarks and auto-magic <a href="http://www.infoq.com/articles/hypermedia-api-tutorial-part-one">HATEAOS</a>? not to forget standard IANA types? Yes, you don't hear that kind of argument much these days. APIs rule. People are no longer ashamed to use a verb in their URLs or POST a (complex) query. Most importantly, <a href="http://docs.mongodb.org/manual/reference/javascript/">MongoDB showed us</a> that there is a lot more needed to CRUD than these 4 little verbs and an anemic URL syntax. Developers and Architects are so desperate to go around the "Web Style" that <a href="http://www.infoq.com/presentations/OpenStack-Extensions">they even try to add namespaces to JSON</a>. Who would have thought?</div>
<div>&#160;</div>
<div>You guessed it, the REST emperor has no clothes. That 5 API random sample (out of 9000) from the Programmable Web is actually quite representative of the lay of the land: APIs that do something interesting simply ignore the Web style, APIs that do follow it are just a bunch of boring and useless CRUD while everyone struggles to write API clients since there is no machine readable contract <a href="http://bill.burkecentral.com/">to generate the plumbing</a>. <a href="http://www.ebpml.org/blog2/index.php/2011/11/21/pizza-is-a-vegetable">How long does it take to write the client code</a>? A couple hours? a couple days? a couple of weeks? <a href="http://www.canappi.com/pages/connectors-home">I wrote quite a few</a>, before abstracting it into a Web API client framework.&#160;</div>
<div>&#160;</div>
<div>For crying out loud, <a href="http://petstore.swagger.wordnik.com/#!/user">even Swagger's totally gave up on the Web Style</a> in favor of APIs.</div>
<div>&#160;</div>
<div>After wipping out decades of wisdom in distributed computing architecture from distributed transactions, eventing, orchestrations or assemblies, the Web Style is all but dead. The only people that would argue otherwise are the one that a) that are emotionally or financially attached to it or b) working for a Palo Alto startup which just discovered an nth way to exchange silly pictures and chats.&#160;</div>
<div>&#160;</div>
<div>Actually, the whole Web is all but dead, between <a href="http://www.itwriting.com/blog/7249-native-apps-vs-html-5-no-consensus-over-how-to-choose.html">developers who can't figure out how to produce anything of value with HTML5</a> and compete with Native apps and end users finally getting cold at the wonderful idea of being "the product" central to the Web business model.&#160;<a href="http://www.ebpml.org/blog2/index.php/2010/11/21/soon-the-web-will-die">Tim Berner-Lee which is coming out every six month</a> with a "Long live the Web" message but after <a href="http://www.bbc.co.uk/news/world-asia-21855051">a wrath of security abuses</a>, it seems that even a KBE can no longer save the Web.&#160;</div>
<div>&#160;</div>
<div>The "Web Spring" of 2006, which was launched in the context of a failing SUN (Tim Bray was working for SUN at the time) and a lumping Connected Division at Microsoft, created a big vacuum that was never filled. After chasing the Minimum Viable Architecture, we reached a point where it can't be distinguished from a house of card. &#160;</div>
<div>&#160;</div>
<div>The truh and the matter is that the Web Style is nothing more than some pitiful CRUD a la SkyBuffer or Do.com. The "<em>cr&#232;me de la cr&#232;me"&#160;</em>of our industry lead us into a very big ditch, a pit of technical debt where API providers are now forced to ship client libraries for different platforms like in the old days of ODBC.&#160;</div>
<div>&#160;</div>
<div>So, where do we go from there? No, I am not suggesting to return to WS-* or even grow <a href="http://www.infoq.com/news/2009/09/burke-reststar-soa-roa-rest">REST-*</a>. We have to move forward, passed a corny vision <a href="http://labs.oracle.com/techrep/1994/abstract-29.html">that has plagued our industry since the 70s</a>.</div>
<div>&#160;</div>
<div>First we have to understand and acknowledge that mobile computing is driving a new paradigm, possibly the biggest paradigm shift in computing we have ever seen. Few people would remember, but software engineering was built on an old, very old paradigm of "file processing" which culminated with <a href="http://en.wikipedia.org/wiki/Unix_File_System">UFS</a>. The desktop metaphor and the main usage patterns of PCs remained anchored in "file processing". Mobile is no longer about files, mobile terminals assist us in pretty much any activity we do. If nothing else, future operating systems will be activity centric. Yes, sign of times, even Microsoft finally dropped its stapple folder structure (My Documents, My Pictures , My Music...) or did they?</div>
<div>&#160;</div>
<div>Second, we have to leave Web technologies behind. They once made some sense when computing was tethered and people could not bring their computing device with them. They no longer do. End users have become far more demanding and sophisticated than developers themselves and thinking that dubious technical arguments can weight in against popular demand is at best naive. The best user experience will win, anyone who has, is or will be betting against it will lose. The Web rose, because it too, once, provided a better user experience. It didn't rise because it was "the Web".&#160;</div>
<div>&#160;</div>
<div>Third, we have to be pragmatic about distributed computing and continue to&#160;<a href="http://www.ebpml.org/blog2/index.php/2011/06/29/unrest">unREST</a>. More CRUD is not going to cut it, even with an API as superbly designed as the MongoDB API. We also have to grow up an understand that, OO is the wrong paradigm to represent interactions between distributed components. Hence we have to stop reifying everything we do into stateless singleton method calls. Annotations on a class are simply too weak to drive the semantic revolution that SOA started and we now need to finish.</div>
<div>&#160;</div>
<div>These evolutions all point to a robust Composite Programming Model where the view and the model are free from each other and hence properly connected, following an activity/action/lifecycle paradigm. Every solution today is a Composite Solution that want to take advantage of the wealth of public or private 2-legged and 3-legged APIs.</div>
<div>&#160;</div>
<div>Which vendor will take the lead in building a modern&#160;composite programming model (CPM :-)? IBM? Oracle? Microsoft? Apple? Google? Facebook? ouch... I would bet on a MongoDB or Joyent style startup which comes out of nowhere and rises at light speed because it delivers a tremendous amount of value.</div>
<div>&#160;</div>
<div>The Web (Style) isn't the future, a robust Composite Programming Model is.</div><div class="item_footer"><p><small><a href="http://www.ebpml.org/blog2/index.php/2013/03/20/the-end-of-the-web">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.ebpml.org/blog2/index.php/2013/03/20/the-end-of-the-web#comments</comments>
			<wfw:commentRss>http://www.ebpml.org/blog2/index.php?tempskin=_rss2&amp;disp=comments&amp;p=132</wfw:commentRss>
		<feedburner:origLink>http://www.ebpml.org/blog2/index.php/2013/03/20/the-end-of-the-web</feedburner:origLink></item>
				<item>
			<title>Four Principles to Succeed at SOA</title>
			<link>http://feedproxy.google.com/~r/CarnetsDeBord/~3/fqaybmO-9Hc/four-principles-to-succeed-at</link>
			<pubDate>Fri, 22 Feb 2013 05:15:00 +0000</pubDate>			<dc:creator>jdubray</dc:creator>
			<category domain="main">SOA</category>			<guid isPermaLink="false">131@http://www.ebpml.org/blog2/</guid>
						<description>&lt;div style="float: left;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share"&gt;Tweet&lt;/a&gt;
&lt;script type="text/javascript" src="http://platform.twitter.com/widgets.js"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;script type="text/javascript" src="http://platform.linkedin.com/in.js"&gt;&lt;/script&gt;
&lt;script type="IN/Share" data-counter="right"&gt;&lt;/script&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;I was asked recently to reflect over the last 15 years working on SOA and distill what I learned in the most succinct form possible.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;I came up with "the four principles" that will make you succeed at SOA:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Service Interface shall be decoupled from Service Implementation&lt;/li&gt;
&lt;li&gt;All Business Logic shall be normalized&lt;/li&gt;
&lt;li&gt;Changing a service shall be easy
&lt;ul&gt;
&lt;li&gt;Changes shall be hidden to service consumers until they are ready&amp;#160;&lt;/li&gt;
&lt;li&gt;Changes shall be easy to consume when the consumer is ready&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Service Versioning shall be based on Compatibility&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;#160;&lt;span style="font-size: 13px; line-height: 19px;"&gt;I strongly believe that if you drive your SOA following these four principles, and these four only, you will be very successful at SOA.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;Here are the answers to a few more questions that you may ask:&lt;/span&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is SOA? &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SOA is an architecture that positions your organization to manage change in the most efficient way possible.&lt;br /&gt;&amp;#160;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What about Governance? &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;Don&amp;#8217;t &amp;#8220;over-govern&amp;#8221;, governance should remain minimal and based on common sense with a short term horizon (3-6 months)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;Data Governance is far more important since any change to your information model is generally impacting the service interface&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What about Cohesion, Autonomy and Service Boundaries?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There is little or no cohesion possible in SOA:&amp;#160;&lt;span style="font-size: 13px; line-height: 19px;"&gt;Data is relational, you cannot slice a relational model in "autonomous" entities.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;When a high degree of cohesion is observed, it is plain common sense, for instance:&amp;#160;&lt;span style="font-size: 13px; line-height: 19px;"&gt;Google Maps APIs rarely needs to be implemented within your Purchase Order service&lt;/span&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Don&amp;#8217;t sweat over your service boundaries, invest in building the best service interface possible (i.e. efficient at managing change)&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is the nature of the &amp;#8220;Service Interface&amp;#8221;?&lt;/strong&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Most people fail at SOA because, they think of a Service as an abstraction, something like a &amp;#8220;class&amp;#8221; in OO. &lt;strong&gt;The Service Interface is a contract&lt;/strong&gt; that enables changes to be explicit and controled.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How do you define loose coupling?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Loose coupling is achieved when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The business logic implemented behind the interface is not involved in managing the context of interaction with a consumer&lt;/li&gt;
&lt;li&gt;There is no duplication of the business logic involved in managing the state of the system(s) of record in the consumers of the interface&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What about reuse? &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nobody can expect to build a service today and that service will be ready to be consumed by new consumers 3 years from now. That is ludicrous. If you think of reuse that way you will fail instantly and come up with silly conclusions such as "SOA does not work".&amp;#160;&lt;/p&gt;
&lt;p&gt;In SOA (and in the real world too) reuse works the other way around:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it is not a new consumer who is reusing an old service&lt;/li&gt;
&lt;li&gt;it is almost exclusively a new version of a service (changed to support new consumers) which can be reused by old consumers without breaking them&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;Do you agree? disagree? Any other question?&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a href="http://www.ebpml.org/blog2/index.php/2013/02/21/four-principles-to-succeed-at"&gt;Original post&lt;/a&gt; blogged on &lt;a href="http://b2evolution.net/"&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<div style="float: left;"><a class="twitter-share-button" href="http://twitter.com/share">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
</div>
<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
<script type="IN/Share" data-counter="right"></script>
<p>&#160;</p>
<p>I was asked recently to reflect over the last 15 years working on SOA and distill what I learned in the most succinct form possible.</p>
<p><span style="font-size: 13px; line-height: 19px;">I came up with "the four principles" that will make you succeed at SOA:</span></p>
<ol>
<li>Service Interface shall be decoupled from Service Implementation</li>
<li>All Business Logic shall be normalized</li>
<li>Changing a service shall be easy
<ul>
<li>Changes shall be hidden to service consumers until they are ready&#160;</li>
<li>Changes shall be easy to consume when the consumer is ready</li>
</ul>
</li>
<li>Service Versioning shall be based on Compatibility</li>
</ol>
<p>&#160;<span style="font-size: 13px; line-height: 19px;">I strongly believe that if you drive your SOA following these four principles, and these four only, you will be very successful at SOA.</span></p>
<p><span style="font-size: 13px; line-height: 19px;"><br /></span></p>
<p><span style="font-size: 13px; line-height: 19px;">Here are the answers to a few more questions that you may ask:</span><span style="font-size: 13px; line-height: 19px;">&#160;</span></p>
<p><strong>What is SOA? </strong></p>
<p>SOA is an architecture that positions your organization to manage change in the most efficient way possible.<br />&#160;&#160;</p>
<p><strong>What about Governance? </strong></p>
<p><span style="font-size: 13px; line-height: 19px;">Don&#8217;t &#8220;over-govern&#8221;, governance should remain minimal and based on common sense with a short term horizon (3-6 months)</span></p>
<p><span style="font-size: 13px; line-height: 19px;">Data Governance is far more important since any change to your information model is generally impacting the service interface</span></p>
<p>&#160;<span style="font-size: 13px; line-height: 19px;">&#160;</span></p>
<p><strong>What about Cohesion, Autonomy and Service Boundaries?</strong></p>
<p>There is little or no cohesion possible in SOA:&#160;<span style="font-size: 13px; line-height: 19px;">Data is relational, you cannot slice a relational model in "autonomous" entities.</span></p>
<p>When a high degree of cohesion is observed, it is plain common sense, for instance:&#160;<span style="font-size: 13px; line-height: 19px;">Google Maps APIs rarely needs to be implemented within your Purchase Order service</span><span style="font-size: 13px; line-height: 19px;">&#160;</span></p>
<p>Don&#8217;t sweat over your service boundaries, invest in building the best service interface possible (i.e. efficient at managing change)</p>
<p><span style="font-size: 13px; line-height: 19px;">&#160;</span></p>
<p><strong>What is the nature of the &#8220;Service Interface&#8221;?</strong><span style="font-size: 13px; line-height: 19px;">&#160;</span></p>
<p>Most people fail at SOA because, they think of a Service as an abstraction, something like a &#8220;class&#8221; in OO. <strong>The Service Interface is a contract</strong> that enables changes to be explicit and controled.</p>
<p>&#160;</p>
<p><strong>How do you define loose coupling?</strong></p>
<p>Loose coupling is achieved when:</p>
<ul>
<li>The business logic implemented behind the interface is not involved in managing the context of interaction with a consumer</li>
<li>There is no duplication of the business logic involved in managing the state of the system(s) of record in the consumers of the interface</li>
</ul>
<p><span style="font-size: 13px; line-height: 19px;">&#160;</span></p>
<p><strong>What about reuse? </strong></p>
<p>Nobody can expect to build a service today and that service will be ready to be consumed by new consumers 3 years from now. That is ludicrous. If you think of reuse that way you will fail instantly and come up with silly conclusions such as "SOA does not work".&#160;</p>
<p>In SOA (and in the real world too) reuse works the other way around:</p>
<ul>
<li>it is not a new consumer who is reusing an old service</li>
<li>it is almost exclusively a new version of a service (changed to support new consumers) which can be reused by old consumers without breaking them</li>
</ul>
<p>&#160;</p>
<p>Do you agree? disagree? Any other question?</p>
<p>&#160;</p>
<p>&#160;</p><div class="item_footer"><p><small><a href="http://www.ebpml.org/blog2/index.php/2013/02/21/four-principles-to-succeed-at">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.ebpml.org/blog2/index.php/2013/02/21/four-principles-to-succeed-at#comments</comments>
			<wfw:commentRss>http://www.ebpml.org/blog2/index.php?tempskin=_rss2&amp;disp=comments&amp;p=131</wfw:commentRss>
		<feedburner:origLink>http://www.ebpml.org/blog2/index.php/2013/02/21/four-principles-to-succeed-at</feedburner:origLink></item>
				<item>
			<title>Revisiting the Conway Law</title>
			<link>http://feedproxy.google.com/~r/CarnetsDeBord/~3/FI4TgL0WEtQ/revisiting-the-conway-law</link>
			<pubDate>Sun, 03 Feb 2013 19:14:00 +0000</pubDate>			<dc:creator>jdubray</dc:creator>
			<category domain="main">Business Strategy</category>			<guid isPermaLink="false">130@http://www.ebpml.org/blog2/</guid>
						<description>&lt;div style="float: left;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share"&gt;Tweet&lt;/a&gt;
&lt;script type="text/javascript" src="http://platform.twitter.com/widgets.js"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;script type="text/javascript" src="http://platform.linkedin.com/in.js"&gt;&lt;/script&gt;
&lt;script type="IN/Share" data-counter="right"&gt;&lt;/script&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&amp;#160;This is a cross-post from my new blog "&lt;a href="http://feeds.feedburner.com/b-mc2/muTC"&gt;unRelated&lt;/a&gt;".&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;The&amp;#160;&lt;/span&gt;&lt;a style="font-size: 13px; line-height: 19px;" href="http://en.wikipedia.org/wiki/Conway's_law"&gt;Conway Law&lt;/a&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&amp;#160;seems to be getting a renewed interest lately. In 1968, Mel Conway, then, a manager of peripheral systems research at Univac, devised:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"&lt;em&gt;organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations&lt;/em&gt;"&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This seminal&amp;#160;&lt;a href="http://www.melconway.com/Home/Committees_Paper.html"&gt;paper&lt;/a&gt;&amp;#160;is definitely worth a careful read. Mel's predicates are so visionary that we could easily believe that our ability to create complex systems has not improved in over half a century.&lt;/p&gt;
&lt;p&gt;That being said, it might be timely to ask whether the boundaries of the Conway Law are still valid and if its context has changed.&amp;#160;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: helvetica;"&gt;Insight Before Communication&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;Leadership tends to focus on&amp;#160;&lt;a href="http://www.b-mc2.com/2012/12/06/cooperation-essential-for-innovation/"&gt;the culture and structure of an organization&lt;/a&gt;&amp;#160;to drive towards desired business outcomes with the expectation is that a better culture and enhanced structure will lead to an effective communication. Actually we are so desperate in our quest to find a better culture that&amp;#160;&lt;a href="http://blogs.hbr.org/schrage/2012/12/a-simpler-way-to-get-employees-to-share.html"&gt;some people go as far as suggesting&lt;/a&gt;&amp;#160;that "stealing" (ideas) become socially acceptable.&lt;/p&gt;
&lt;p&gt;It is interesting to see that in the process nearly everyone&amp;#160;rounds off insight, often assuming a perfect ability to gain the correct level of insight into a system design or a question.&amp;#160;Mel touches that topic slightly before focusing exclusively on the relation between communication channels and the structural aspects of an organization:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It is a natural temptation of the initial designer to delegate tasks when the apparent complexity of the system approaches his limits of comprehension. This is the turning point in the course of the design. Either he struggles to reduce the system to comprehensibility and wins, or else, he loses control.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I understand that culturally, anyone who questions his or her insight, let alone someone else's insight, will pay a high price for it. We often cover up a deficit of insight as a mere communication disconnect as everyone seeks to appear intellectually sufficient. Mel's predicate is both foundational and consequential because it anchors our perception that insight can't be elaborated and somehow, like knowledge, directly correlates with power. That thought is pervasive in modern organizations where the&amp;#160;&lt;a href="http://cn.nytimes.com/article/business/2012/11/15/c15microsoft/en/?pagemode=print"&gt;Sinofskys&lt;/a&gt;&amp;#160;of the world strive as long as their levels of comprehension and control enables the organization to deliver something. I find it fascinating that 50 years apart, Mel was searching to answer the question "&lt;a href="http://www.melconway.com/Home/Committees_Paper.html"&gt;How Do Committees Invent?&lt;/a&gt;" and the prevalent culture in corporations like Microsoft or Apple abhors the "&lt;a href="http://cn.nytimes.com/article/business/2012/11/15/c15microsoft/en/?pagemode=print"&gt;Design by Committee&lt;/a&gt;" process.&lt;/p&gt;
&lt;p&gt;Can we still afford to round off insight? How and what can we really communicate without the proper insight? Don't we spend way more time communicating our insight rather than elaborating it? How many companies fail to benefit from the collective intelligence of their organization?&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: helvetica;"&gt;The Context of Design has Changed Significantly&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;I don't want to appear condescending to an era of incredible achievements but systems do evolve and new kinds of systems require new levels of insight to elaborate proper designs. Back then, most innovations were product centric. From the mid 80s and well into the late 2000s, innovation became service oriented, and today we are rapidly moving towards an "activity oriented" innovation model.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.b-mc2.com/wp-content/uploads/2013/01/activity-oriented.jpg"&gt;&lt;img class="alignnone size-medium wp-image-430" src="http://www.b-mc2.com/wp-content/uploads/2013/01/activity-oriented-300x152.jpg" alt="activity-oriented" width="300" height="152" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;fig 1. From products, to services to activities&lt;/p&gt;
&lt;p&gt;In a product-oriented world, consumers are left to compose individual products to create higher value use cases. In a service-oriented world, businesses identify some of these high value combinations and deliver them "as-a-service" to their customers. The advent of Mobile platforms makes it now possible to design systems that integrate readily with the activities customers are trying to accomplish.&lt;/p&gt;
&lt;p&gt;In an activity oriented world, the "edges" of a system take on a disproportionate importance in the design compared to their relative sizes.&amp;#160;The focus is no longer on systems and subsystems or even their orchestration into valuable services. The focus is now on understanding every activity customers are trying to accomplish and delivering a set of products and services that will directly integrate with these activities. The design of that integration, that edge, could be, actually, will pretty much always be, far more complex than the design of products and services that support them. You don't design "User Experience" as you design systems from subsystems. Designs need to start from the appreciation of the point of view of the end user, not just from the perceived value of a service or a product.&lt;/p&gt;
&lt;p&gt;That change is profound because the design of an edge requires all constituents to cooperate and depart from the unidimensional mindset of product and service centric organizations. Any inefficiency in the scope or variety of edges will have a huge impact on the success or failure of the overall design. In an activity-oriented world, the ability to harness the collective intelligence of your organization directly correlates to your success.&lt;/p&gt;
&lt;p&gt;This evolution towards more integrated systems has lead to the emergence of a new homomorphism between the type of insight different groups of people can elaborate and the structure of their organization. Even the very structure of our education system and hence hiring policies are now driven by that homomorphism.&lt;/p&gt;
&lt;p&gt;It may not have been true when Mel wrote his paper, but today it is all too common for a group to formulate requirements based their insight to drive the design of other teams. As this new homomorphism&amp;#160;developed&amp;#160; the relationship between systems and subsystems, as well as the relationships between products, services and activities made it nearly impossible to devise a structure that would nurture an appropriate level of communication with the goal of achieving a shared understanding.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.b-mc2.com/wp-content/uploads/2013/02/shared-insight.jpg"&gt;&lt;img class="alignnone size-medium wp-image-445" src="http://www.b-mc2.com/wp-content/uploads/2013/02/shared-insight-300x163.jpg" alt="shared-insight" width="300" height="163" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;fig 2. From insight to shared insight&lt;/p&gt;
&lt;p&gt;As the levels of shared or aligned insight decrease so does the ability to create compelling and sound designs. Insight gaps develop as organizations tend to focus on building what they can understand as a subset of what their leaders can comprehend. Worst of all, some elements of the design can be built undetected until they fail their organization entirely.&lt;/p&gt;
&lt;p&gt;A deficit of insight can be so costly to an organization and its shareholders that it should be accounted for in its balance sheet.&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: helvetica;"&gt;The Tools we Use to Communicate Impact Designs Negatively&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;The tools we commonly use to communicate would certainly influence Mel's conclusions. Popular knowledge tools (office suite, mind maps, requirements management solution ...) allow us to express ourselves with a greater productivity, but they may also hamper communication much more than we think. Why? The very structure that we use to communicate interferes with our ability to elaborate insight and ultimately designs.&lt;/p&gt;
&lt;p&gt;For instance mind maps assume a hierarchical set of relationships, this is unfortunate because most of the relationships in the physical world are not hierarchical. That view seems to be directly inherited from Mel's era where we could still design products in terms of systems and subsystems. Similarly, when we use some "slide-ware" every system looks like a set of layers and when we use "row-ware" such as Excel or any Requirements Management tool to capture and communicate requirements, we cannot effectively represent dependencies, let alone track the elements of the design impacted by these requirements.&amp;#160;&lt;strong&gt;These artificial knowledge structures are biased and negatively&amp;#160;&lt;strong&gt;impact&amp;#160;&lt;/strong&gt;our ability to design a system.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Probably, the most important issue introduced by knowledge tools is that none of views that we create are representing any kind of dynamic behavior.&amp;#160;How can we create an effective shared understanding between such a wide spectrum of people when everything that we communicate is using the wrong kinds of relationships and lacking even the most elementary dynamic view? Especially when we consider that human languages are poorly equipped to communicate relationships and dynamic behaviors.&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: helvetica;"&gt;A Call for Action&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;We must consider Insight and Communication separately. Mel's proposition looks attractive:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Research which leads to techniques permitting more efficient communication among designers will play an extremely important role in the technology of system management.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yet, research that would lead to techniques permitting a more efficient elaboration of insight would have a far greater impact on the system designs.&lt;/p&gt;
&lt;p&gt;Organizations should value teams that excel at elaborating insight. This is where education and HR policies should focus.&lt;/p&gt;
&lt;p&gt;We have to collectively drive towards closing any insight gap and expand our shared understanding to a level that is compatible with success.&lt;/p&gt;
&lt;p&gt;We need&amp;#160;&lt;a title="READ" href="http://www.b-mc2.com/read/"&gt;new tools&lt;/a&gt;&amp;#160;and&amp;#160;&lt;a title="LEARN" href="http://www.b-mc2.com/learn/"&gt;approaches&lt;/a&gt;&amp;#160;that enhance our ability to elaborate insight.&lt;/p&gt;
&lt;p&gt;The path to insight is not as hard as it looks, from federating intuition, to developing perception to growing appreciation and ultimately formulating the vision. Never again, should an individual feel that a group is limiting the design of a system. Never again, should the design of a system be limited by an individual. Never again, should a design reflect only a fraction of the insight of the overall group of designers.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: helvetica;"&gt;My Favorite Quotes from Mel's Article&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;there's never enough time to do something right, but there's always enough time to do it over.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;there is a homomorphism from the linear graph of a system to the linear graph of its design organization the realization by the initial designers that the system will be large, together with certain pressures in their organization, make irresistible the temptation to assign too many people to a design effort&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;One fallacy behind [the Accounting theory of management] is the property of linearity which says that two men working for a year or one hundred men working for a week (at the same hourly cost per man) are resources of equal value.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;As long as the manager's prestige and power are tied to the size of his budget, he will be motivated to expand his organization.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Probably the greatest single common factor behind many poorly designed systems now in existence has been the availability of a design organization in need of work.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Elementary probability theory tells us that the number of possible communication paths in an organization is approximately half the square of the number of people in the organization. Even in a moderately small organization it becomes necessary to restrict communication in order that people can get some "work" done.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;To the extent that organizational protocol restricts communication along lines of command, the communication structure of an organization will resemble its administrative structure.&amp;#160;This is one reason why military-style organizations design systems which look like their organization charts.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Research which leads to techniques permitting more efficient communication among designers will play an extremely important role in the technology of system management.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;the very act of organizing a design team means that certain design decisions have already been made, explicitly or otherwise. Given any design team organization, there is a class of design alternatives which cannot be effectively pursued by such an organization because the necessary communication paths do not exist. Therefore, there is no such thing as a design group which is both organized and unbiased. Every time a delegation is made and somebody's scope of inquiry is narrowed, the class of design alternatives which can be effectively pursued is also narrowed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Coordination among task groups, although it appears to lower the productivity of the individual in the small group, provides the only possibility that the separate task groups will be able to consolidate their efforts into a unified system design.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;It might conceivably reorganize upon discovery of a new, and obviously superior, design concept; but such an appearance of uncertainty is unflattering, and the very act of voluntarily abandoning a creation is painful and expensive.&lt;/p&gt;
&lt;/blockquote&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a href="http://www.ebpml.org/blog2/index.php/2013/02/03/revisiting-the-conway-law"&gt;Original post&lt;/a&gt; blogged on &lt;a href="http://b2evolution.net/"&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<div style="float: left;"><a class="twitter-share-button" href="http://twitter.com/share">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
</div>
<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
<script type="IN/Share" data-counter="right"></script>
<p>&#160;</p>
<p>&#160;This is a cross-post from my new blog "<a href="http://feeds.feedburner.com/b-mc2/muTC">unRelated</a>".&#160;</p>
<p><span style="font-size: 13px; line-height: 19px;">The&#160;</span><a style="font-size: 13px; line-height: 19px;" href="http://en.wikipedia.org/wiki/Conway's_law">Conway Law</a><span style="font-size: 13px; line-height: 19px;">&#160;seems to be getting a renewed interest lately. In 1968, Mel Conway, then, a manager of peripheral systems research at Univac, devised:</span></p>
<blockquote>
<p>"<em>organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations</em>"</p>
</blockquote>
<p>This seminal&#160;<a href="http://www.melconway.com/Home/Committees_Paper.html">paper</a>&#160;is definitely worth a careful read. Mel's predicates are so visionary that we could easily believe that our ability to create complex systems has not improved in over half a century.</p>
<p>That being said, it might be timely to ask whether the boundaries of the Conway Law are still valid and if its context has changed.&#160;</p>
<h2><span style="font-family: helvetica;">Insight Before Communication</span></h2>
<p>&#160;</p>
<p>Leadership tends to focus on&#160;<a href="http://www.b-mc2.com/2012/12/06/cooperation-essential-for-innovation/">the culture and structure of an organization</a>&#160;to drive towards desired business outcomes with the expectation is that a better culture and enhanced structure will lead to an effective communication. Actually we are so desperate in our quest to find a better culture that&#160;<a href="http://blogs.hbr.org/schrage/2012/12/a-simpler-way-to-get-employees-to-share.html">some people go as far as suggesting</a>&#160;that "stealing" (ideas) become socially acceptable.</p>
<p>It is interesting to see that in the process nearly everyone&#160;rounds off insight, often assuming a perfect ability to gain the correct level of insight into a system design or a question.&#160;Mel touches that topic slightly before focusing exclusively on the relation between communication channels and the structural aspects of an organization:</p>
<blockquote>
<p>It is a natural temptation of the initial designer to delegate tasks when the apparent complexity of the system approaches his limits of comprehension. This is the turning point in the course of the design. Either he struggles to reduce the system to comprehensibility and wins, or else, he loses control.</p>
</blockquote>
<p>I understand that culturally, anyone who questions his or her insight, let alone someone else's insight, will pay a high price for it. We often cover up a deficit of insight as a mere communication disconnect as everyone seeks to appear intellectually sufficient. Mel's predicate is both foundational and consequential because it anchors our perception that insight can't be elaborated and somehow, like knowledge, directly correlates with power. That thought is pervasive in modern organizations where the&#160;<a href="http://cn.nytimes.com/article/business/2012/11/15/c15microsoft/en/?pagemode=print">Sinofskys</a>&#160;of the world strive as long as their levels of comprehension and control enables the organization to deliver something. I find it fascinating that 50 years apart, Mel was searching to answer the question "<a href="http://www.melconway.com/Home/Committees_Paper.html">How Do Committees Invent?</a>" and the prevalent culture in corporations like Microsoft or Apple abhors the "<a href="http://cn.nytimes.com/article/business/2012/11/15/c15microsoft/en/?pagemode=print">Design by Committee</a>" process.</p>
<p>Can we still afford to round off insight? How and what can we really communicate without the proper insight? Don't we spend way more time communicating our insight rather than elaborating it? How many companies fail to benefit from the collective intelligence of their organization?</p>
<h2><span style="font-family: helvetica;">The Context of Design has Changed Significantly</span></h2>
<p>&#160;</p>
<p>I don't want to appear condescending to an era of incredible achievements but systems do evolve and new kinds of systems require new levels of insight to elaborate proper designs. Back then, most innovations were product centric. From the mid 80s and well into the late 2000s, innovation became service oriented, and today we are rapidly moving towards an "activity oriented" innovation model.</p>
<p><a href="http://www.b-mc2.com/wp-content/uploads/2013/01/activity-oriented.jpg"><img class="alignnone size-medium wp-image-430" src="http://www.b-mc2.com/wp-content/uploads/2013/01/activity-oriented-300x152.jpg" alt="activity-oriented" width="300" height="152" /></a></p>
<p>fig 1. From products, to services to activities</p>
<p>In a product-oriented world, consumers are left to compose individual products to create higher value use cases. In a service-oriented world, businesses identify some of these high value combinations and deliver them "as-a-service" to their customers. The advent of Mobile platforms makes it now possible to design systems that integrate readily with the activities customers are trying to accomplish.</p>
<p>In an activity oriented world, the "edges" of a system take on a disproportionate importance in the design compared to their relative sizes.&#160;The focus is no longer on systems and subsystems or even their orchestration into valuable services. The focus is now on understanding every activity customers are trying to accomplish and delivering a set of products and services that will directly integrate with these activities. The design of that integration, that edge, could be, actually, will pretty much always be, far more complex than the design of products and services that support them. You don't design "User Experience" as you design systems from subsystems. Designs need to start from the appreciation of the point of view of the end user, not just from the perceived value of a service or a product.</p>
<p>That change is profound because the design of an edge requires all constituents to cooperate and depart from the unidimensional mindset of product and service centric organizations. Any inefficiency in the scope or variety of edges will have a huge impact on the success or failure of the overall design. In an activity-oriented world, the ability to harness the collective intelligence of your organization directly correlates to your success.</p>
<p>This evolution towards more integrated systems has lead to the emergence of a new homomorphism between the type of insight different groups of people can elaborate and the structure of their organization. Even the very structure of our education system and hence hiring policies are now driven by that homomorphism.</p>
<p>It may not have been true when Mel wrote his paper, but today it is all too common for a group to formulate requirements based their insight to drive the design of other teams. As this new homomorphism&#160;developed&#160; the relationship between systems and subsystems, as well as the relationships between products, services and activities made it nearly impossible to devise a structure that would nurture an appropriate level of communication with the goal of achieving a shared understanding.</p>
<p><a href="http://www.b-mc2.com/wp-content/uploads/2013/02/shared-insight.jpg"><img class="alignnone size-medium wp-image-445" src="http://www.b-mc2.com/wp-content/uploads/2013/02/shared-insight-300x163.jpg" alt="shared-insight" width="300" height="163" /></a></p>
<p>fig 2. From insight to shared insight</p>
<p>As the levels of shared or aligned insight decrease so does the ability to create compelling and sound designs. Insight gaps develop as organizations tend to focus on building what they can understand as a subset of what their leaders can comprehend. Worst of all, some elements of the design can be built undetected until they fail their organization entirely.</p>
<p>A deficit of insight can be so costly to an organization and its shareholders that it should be accounted for in its balance sheet.</p>
<h2><span style="font-family: helvetica;">The Tools we Use to Communicate Impact Designs Negatively</span></h2>
<p>&#160;</p>
<p>The tools we commonly use to communicate would certainly influence Mel's conclusions. Popular knowledge tools (office suite, mind maps, requirements management solution ...) allow us to express ourselves with a greater productivity, but they may also hamper communication much more than we think. Why? The very structure that we use to communicate interferes with our ability to elaborate insight and ultimately designs.</p>
<p>For instance mind maps assume a hierarchical set of relationships, this is unfortunate because most of the relationships in the physical world are not hierarchical. That view seems to be directly inherited from Mel's era where we could still design products in terms of systems and subsystems. Similarly, when we use some "slide-ware" every system looks like a set of layers and when we use "row-ware" such as Excel or any Requirements Management tool to capture and communicate requirements, we cannot effectively represent dependencies, let alone track the elements of the design impacted by these requirements.&#160;<strong>These artificial knowledge structures are biased and negatively&#160;<strong>impact&#160;</strong>our ability to design a system.</strong></p>
<p>Probably, the most important issue introduced by knowledge tools is that none of views that we create are representing any kind of dynamic behavior.&#160;How can we create an effective shared understanding between such a wide spectrum of people when everything that we communicate is using the wrong kinds of relationships and lacking even the most elementary dynamic view? Especially when we consider that human languages are poorly equipped to communicate relationships and dynamic behaviors.</p>
<h2><span style="font-family: helvetica;">A Call for Action</span></h2>
<p>&#160;</p>
<p>We must consider Insight and Communication separately. Mel's proposition looks attractive:</p>
<blockquote>
<p>Research which leads to techniques permitting more efficient communication among designers will play an extremely important role in the technology of system management.</p>
</blockquote>
<p>Yet, research that would lead to techniques permitting a more efficient elaboration of insight would have a far greater impact on the system designs.</p>
<p>Organizations should value teams that excel at elaborating insight. This is where education and HR policies should focus.</p>
<p>We have to collectively drive towards closing any insight gap and expand our shared understanding to a level that is compatible with success.</p>
<p>We need&#160;<a title="READ" href="http://www.b-mc2.com/read/">new tools</a>&#160;and&#160;<a title="LEARN" href="http://www.b-mc2.com/learn/">approaches</a>&#160;that enhance our ability to elaborate insight.</p>
<p>The path to insight is not as hard as it looks, from federating intuition, to developing perception to growing appreciation and ultimately formulating the vision. Never again, should an individual feel that a group is limiting the design of a system. Never again, should the design of a system be limited by an individual. Never again, should a design reflect only a fraction of the insight of the overall group of designers.</p>
<p>&#160;</p>
<h2><span style="font-family: helvetica;">My Favorite Quotes from Mel's Article</span></h2>
<blockquote>
<p>there's never enough time to do something right, but there's always enough time to do it over.</p>
</blockquote>
<blockquote>
<p>there is a homomorphism from the linear graph of a system to the linear graph of its design organization the realization by the initial designers that the system will be large, together with certain pressures in their organization, make irresistible the temptation to assign too many people to a design effort</p>
</blockquote>
<blockquote>
<p>One fallacy behind [the Accounting theory of management] is the property of linearity which says that two men working for a year or one hundred men working for a week (at the same hourly cost per man) are resources of equal value.</p>
</blockquote>
<blockquote>
<p>As long as the manager's prestige and power are tied to the size of his budget, he will be motivated to expand his organization.</p>
</blockquote>
<blockquote>
<p>Probably the greatest single common factor behind many poorly designed systems now in existence has been the availability of a design organization in need of work.</p>
</blockquote>
<blockquote>
<p>Elementary probability theory tells us that the number of possible communication paths in an organization is approximately half the square of the number of people in the organization. Even in a moderately small organization it becomes necessary to restrict communication in order that people can get some "work" done.</p>
</blockquote>
<blockquote>
<p>To the extent that organizational protocol restricts communication along lines of command, the communication structure of an organization will resemble its administrative structure.&#160;This is one reason why military-style organizations design systems which look like their organization charts.</p>
</blockquote>
<blockquote>
<p>Research which leads to techniques permitting more efficient communication among designers will play an extremely important role in the technology of system management.</p>
</blockquote>
<blockquote>
<p>the very act of organizing a design team means that certain design decisions have already been made, explicitly or otherwise. Given any design team organization, there is a class of design alternatives which cannot be effectively pursued by such an organization because the necessary communication paths do not exist. Therefore, there is no such thing as a design group which is both organized and unbiased. Every time a delegation is made and somebody's scope of inquiry is narrowed, the class of design alternatives which can be effectively pursued is also narrowed.</p>
</blockquote>
<blockquote>
<p>Coordination among task groups, although it appears to lower the productivity of the individual in the small group, provides the only possibility that the separate task groups will be able to consolidate their efforts into a unified system design.</p>
</blockquote>
<blockquote>
<p>It might conceivably reorganize upon discovery of a new, and obviously superior, design concept; but such an appearance of uncertainty is unflattering, and the very act of voluntarily abandoning a creation is painful and expensive.</p>
</blockquote><div class="item_footer"><p><small><a href="http://www.ebpml.org/blog2/index.php/2013/02/03/revisiting-the-conway-law">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.ebpml.org/blog2/index.php/2013/02/03/revisiting-the-conway-law#comments</comments>
			<wfw:commentRss>http://www.ebpml.org/blog2/index.php?tempskin=_rss2&amp;disp=comments&amp;p=130</wfw:commentRss>
		<feedburner:origLink>http://www.ebpml.org/blog2/index.php/2013/02/03/revisiting-the-conway-law</feedburner:origLink></item>
				<item>
			<title>Business Models for Next Generation Social Networks</title>
			<link>http://feedproxy.google.com/~r/CarnetsDeBord/~3/a8dTKx_I6No/business-models-for-next-generation</link>
			<pubDate>Tue, 15 Jan 2013 12:02:00 +0000</pubDate>			<dc:creator>jdubray</dc:creator>
			<category domain="alt">Mobile</category>
<category domain="main">Business Strategy</category>			<guid isPermaLink="false">129@http://www.ebpml.org/blog2/</guid>
						<description>&lt;p&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share"&gt;Tweet&lt;/a&gt;
&lt;script type="text/javascript" src="http://platform.twitter.com/widgets.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="http://platform.linkedin.com/in.js"&gt;&lt;/script&gt;
&lt;script type="IN/Share" data-counter="right"&gt;&lt;/script&gt;
&lt;a onclick="window.location = 'http://www.reddit.com/submit?url=' + encodeURIComponent(window.location); return false" href="http://www.reddit.com/submit"&gt; &lt;img src="http://www.reddit.com/static/spreddit7.gif" alt="submit to reddit" border="0" /&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;A couple of weeks ago, we explored&amp;#160;&lt;a title="The Future of Social Networks" href="http://www.ebpml.org/2012/12/29/the-future-of-social-networks/"&gt;the Future of Social Networks&lt;/a&gt;&amp;#160;which we see evolving towards:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;friends over followers&lt;/li&gt;
&lt;li&gt;future over past&lt;/li&gt;
&lt;li&gt;activities over posts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this post we would like to share a couple of the business models that could support these activity centric social networks. But, before we do that let's start by looking at the implications of shifting from a knowledge centric point of view (the Web) to an activity centric point of view (the Platform).&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Don't Underestimate SmallData&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;It does sound a bit trivial to state that we perform a lot of activities with our mobile devices, far more than we ever did with our computers: we purchase our morning coffee, we deposit checks, board a plane, we go places, we take pictures and videos, we learn, we measure our blood pressure, change thermostat settings, select something to watch on TV, open and rent a car ... and that list is not even the tip of the iceberg. Our phone is rapidly becoming a universal remote.&lt;/p&gt;
&lt;p&gt;And, even though we are nearly 5 years into the "smartphone" revolution, there is one large area of the Platform architecture that has not been explored: Mobile App Integration.&amp;#160;As smartphones enhance every task we do and every action we take, we can expect every task and action to produce invaluable &amp;#8220;cues&amp;#8221; that could be reused to support other activities from the same user (or from other users) using completely different apps. That's what we call "Small Data", very small data.&lt;/p&gt;
&lt;p&gt;We define small data as the data exchanged between two apps that are either under the control of the same end user or an end user and its direct social network (relatives, friends and acquaintances a.k.a RFAs).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.b-mc2.com/wp-content/uploads/2013/01/bm-fig4-300x257.png" rel="attachment wp-att-306"&gt;&lt;img class="alignnone size-medium wp-image-306" src="http://www.b-mc2.com/wp-content/uploads/2013/01/bm-fig4-300x257.png" alt="bm-fig4" width="300" height="257" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The lion share of the Platform's business model is going to be driven by Small Data. Why? Because apps won't need to guess what we want, SmallData is made up of the exact events&amp;#160;(location, time and activity)&amp;#160;&amp;#160;of our lives and can provide other apps with a wealth of cues that will make them behave exactly as we wish. Most of what there is to know lives on our devices and the ones of our relatives, friends and acquaintances (the RFAs).&lt;/p&gt;
&lt;p&gt;For instance, I may need to replace my old washing machine. I can tell my "To Do" app that I need to accomplish that new task (a well defined task). I could even enter right there a price range, features and rankings of the product. You can easily guess the kind of dialog you would have with Siri or Google Now. That information becomes instant context for all the apps I visit next on any of my device.&lt;/p&gt;
&lt;p&gt;I can also connect easily the physical environment of my tasks by scanning QR codes or using picture-based database queries.&lt;/p&gt;
&lt;p&gt;BigData and Machine Learning algorithms may provide insight over our very next moves, but there is some big barriers that Small Data can help level. BigData cannot guess the tasks we have to do, the problems we have to solve. BigData can only guess what we may want to do. Precision is another big barrier that BigData can rarely address. How many times do you search for something, end up buying it and continue seeings ads for weeks that are trying to sell a product you already own. Imagine how many opportunities to sell complementary products, or simply to ask feedback are lost? SmallData can inform your apps of the tasks you are trying to accomplish and whether you are done buying this washing machine you needed. How valuable is that?&lt;/p&gt;
&lt;p&gt;We are at this fascinating moment in time where, from a business point of view, and for all intent and purposes we live in an "&lt;a title="Blog" href="http://www.b-mc2.com/blog/"&gt;unRelated&lt;/a&gt;" world, and there is this massive revolution marching (let's call it the SoMoLoCo revolution) which is all about surfacing, realizing and enhancing all the relationships that make up our lives as part of the activities we do. When we say relationships, we mean of course the relationships between people, but also between people and tasks, things or places. SmallData is at the core of that revolution.&lt;/p&gt;
&lt;h2&gt;The Web Architecture is not optimized for a Task Centric World&lt;/h2&gt;
&lt;p&gt;In a "related" world, the opportunities to share cues abound but we need a new kind of apps which can exchange seamlessly specific data elements on the same device or beyond, with friends for instance, or with a community. Cues could of course be aggregated across a community and be made available as such.&lt;/p&gt;
&lt;p&gt;This exchange of contextual &amp;#8220;cues&amp;#8221; has been going on, at least, for as long as the Web became commercial, but today, the Web is facing a major disruption that directly challenges its business model: architecturally, the Web always mandates a 3rd party server-side integration to mediate the &amp;#160;exchange of information between two apps (think double-click),&amp;#160;&lt;strong&gt;unless there is a direct hop&lt;/strong&gt;&amp;#160;from one application to the next (think Facebook's &lt;a href="http://en.wikipedia.org/wiki/HTTP_referer"&gt;referer&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In the washing machine example, the Web architecture would require either a back-end integration between the To Do app and merchants, or it would require that you always enter a merchant app through the To Do app. Neither are really practical. The problem here is that activities relate to each other in a way that is quite different than simple bits of knowledge, propagating the context of a search to an ad is far easier than propagating the context of a trip to a series of activities.&amp;#160;&lt;/p&gt;
&lt;p&gt;That fundamental shift requires a new application integration model as mobile apps are weaved into every task we perform. One could argue, of course, that Amazon could shift from being a "Catalog" to becoming a mundane "To Do" app, but would they have that kind of insight? BigData is in their DNA, they actually don't know much about the tasks customers are trying to accomplish. Before they build that kind of knowledge, there would be a lot of room for alternatives to grow. Other retailers will have to quickly come up with an alternative solution and architecture anyways.&lt;/p&gt;
&lt;p&gt;Application integration is a very old idea but today mobile platforms are changing the game. They enable the sharing of cues between trusted users, using trusted apps and mediated by a trusted party. This is somewhat new, trust has never really been part of Web application integration. Quite the opposite actually. You cannot underestimate how much disruption can result from trusted integrations.&lt;/p&gt;
&lt;p&gt;So, the key success factor here is to enable the apps on your device to securely and &lt;strong&gt;privately&lt;/strong&gt; share information without requiring a complex temporal integration involving a 3rd party service. The information is produced and consumed on the device or the device of a related end-user.&amp;#160;&lt;strong&gt;What happens on your device can now stay on your device (sort of).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #ff9900;"&gt;&lt;strong&gt;&lt;em&gt;Just to be clear, and to show how disruptive this architecture is, the primary identifier of your private data becomes your phone. Merchants no longer need to identify you. They can't care less about YOU, they just care to know some information about you. The problem with the Web Architecture was that the only way to do that was by identifying you and tracking your every move.&amp;#160;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This can be achieved with a protocol based on the fact that the device OS (and the Platform behind) is a trusted party for the user, friends, commercial partners&amp;#8230; and has the ability to both establish the identity of the applications which share the information, enforce consent of the end-user for the sharing to happen, enrich the integration, report on transaction for commercial applications, &amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This is why protocols are likely to be a lot more important than "services" moving forward. The Web has trained us to build dumb clients and centralize anything of value on the server, at a huge cost and never enough trust. We can predict that light-weight protocols, mediated by the mobile OS (and its Platform) will directly challenge the Web architecture, precisely because &lt;strong&gt;we can leverage the platform trust model&lt;/strong&gt;. That evolution is extremely profound.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;With all that being said, let's look at a couple of scenarios where we see valuable protocols emerging.&lt;/p&gt;
&lt;p&gt;We saw in our last post, with the Starbucks example, that Automated social events, integrated with the tasks consumers are doing are going to be a big part of the future of Social Networks.&lt;/p&gt;
&lt;div class="image_block"&gt;&lt;a href="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/fig1.png?mtime=1356752507"&gt;&lt;img src="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/fig1.png?mtime=1356752507" alt="" width="500" height="302" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;There is also an extreme value in decoupling the way cues are captured, stored and shared. &amp;#160;&lt;/strong&gt;On the Web this is done in a monolithic way, and you have to become a Google AdSense to monetize it. There is a real opportunity in enabling developers to focus on capturing and using cues while the Platform manages and mediates the exchange of these cues in a trusted way. Again this paradigm shift is profound because we are no longer dependent on Google dictating the resulting service (ads) and the information being exchange. A platform based architecture can support many more information sharing scenarios.&amp;#160;&lt;strong&gt;We actually argue that a trust-based neutral Platform supports a more vibrant and diverse ecosystem than a truly open model.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;Platform operators (Google, Apple, Microsoft, RIM...) will enable that architecture because they will continuously seek ways to monetize the trust they established. The paradox is that because the Web is open, any integration between services start by establishing a form of trust and most often that leads to identifying a useful use case (such as AdSense) and mining it, at the expense of many more, but slightly less valuable, use cases.&lt;/p&gt;
&lt;h2&gt;Share information, Share Revenue&lt;/h2&gt;
&lt;p&gt;As apps align with the tasks end users are trying to accomplish and as these tasks coordinate several actions, we can expect that applications will see value in exchanging larger number of cues.&lt;/p&gt;
&lt;p&gt;The Platform can report on the connection between the usage of a cue (produced by App 1) and a sale performed on App2 in the context of the cue provided by App1. That kind of information sharing mechanism can support a healthy affiliate ecosystem, far more diverse and effective than what AdSense could ever do. So what would the protocol look like? Here is a proposal: 1) &amp;#160;App 2 developer sets up a commercial campaign to promote the sharing of clues with its application 2) &amp;#160;App 1 developer configures his app to provides the clues when end user uses his application.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Step 2 App 1shares the specified clue.&lt;/li&gt;
&lt;li&gt;Step 3 App 2 queries the clues&lt;/li&gt;
&lt;li&gt;Step 4 End user makes a purchase based on clue&lt;/li&gt;
&lt;li&gt;Step 5 App 2 reports the purchase to the platform (optionally completes the purchase with the platform)&lt;/li&gt;
&lt;li&gt;Step 6 The device communicates the transaction to the platform server (including, campaign identifier provided by App 1 with the clue, identiy of application 1). The platform mediates payouts from developer 2 to developer 1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;3) an alternative flow is to provide the cues a 3&lt;sup&gt;rd&lt;/sup&gt;&amp;#160;party service for marketing / research perspective&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.b-mc2.com/wp-content/uploads/2013/01/bm-fig3-300x219.png" rel="attachment wp-att-305"&gt;&lt;img class="alignnone size-medium wp-image-305" src="http://www.b-mc2.com/wp-content/uploads/2013/01/bm-fig3-300x219.png" alt="bm-fig3" width="300" height="219" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;With such protocol the information never travels to a developer server prior to its consumption, the end user is not "tracked".&amp;#160;It is only shared as needed on the end-user device for the benefit of the end-users or with the devices of trusted related end users (RFAs), or completely anonymously, as simple stats.&lt;/p&gt;
&lt;h2&gt;Social Data integration&lt;/h2&gt;
&lt;p&gt;We describe here a simple protocol that enables the "social" sharing of cues.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.b-mc2.com/wp-content/uploads/2013/01/bm-fig1-300x214.png" rel="attachment wp-att-307"&gt;&lt;img src="http://www.b-mc2.com/wp-content/uploads/2013/01/bm-fig1-300x214.png" alt="bm-fig1" width="300" height="214" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A trusted platform may also share this information with a trusted group of users (for instance friends), either anonymously, or specifically, with the identity of the first user. (steps 5: and 6:).&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The key though is that your friends can now use a completely different set of apps and still benefit from the sharing of cues&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For instance if users open the Fandango application, they might be interested in seeing a percentage of friends who saw or speak about any given movie (anonymously) combining the information from social network posts, iTunes purchases,....&amp;#160;&lt;strong&gt;For the Fandago app, this information has a lot of value&amp;#160;&lt;/strong&gt;because it does not need to build that integration, on its back-end, track who is friend with who and who consented to share this information. It would be extremely difficult for every user to manage their social network based on sharing actions such as purchasing a movie ticket or replacing a washing machine.&lt;/p&gt;
&lt;p&gt;Social Networks will align with end user interests, but not with every tasks they do. The platform may also aggregate some of these cues and offer aggregated / anonymized information to a group of users. For instance, people checking in at a restaurant or purchasing movie tickets may give a good idea of the wait time.&amp;#160; It may also give local statistics for popular movies, restaurants, events, transportation, &amp;#8230;. Cues could also be augmented with the help of a 3rd party service (Step 8) after being produced at step 2 and before they are consumed by step 3. In other words a series of additional clues could be made available to the device OS that neither app 1 or app 2 could infer on their own, just by the user sharing a clue on app1.&lt;/p&gt;
&lt;p&gt;With these kinds of protocols, and unlike the Web, the production and consumption of cues has the highest value when the contexts of the apps are connected. A cue-based affiliate model is no longer about delivering &amp;#8220;ads&amp;#8221; but by making commerce more effective, nearly frictionless, by sharing the right information between the actors that can really make sense of it as users take specific actions. Of course, all this can only be enabled if the end user is given control &amp;#160;over:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the consent for an application to share a cue with other applications&lt;/li&gt;
&lt;li&gt;the topology of the data integration between applications. For instance a user could be presented with a view of the cues surrounded by apps that would allow to "slide and drop" cues to a particular application.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The very open nature of the Web is driving scale over scope. The Web has successfully nurtured the largest Catalog, the largest Search engine, the largest Auction site, the largest Social Network, but we see this as a drawback because it limits the scope of what people can do. In other words, the scope of what Amazon, Google or Facebook offer is limited by the scale (and hence the revenue) they can achieve.&amp;#160;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;The Platform architecture, and what appears to be a closed system, turns that model on its head. The Platform which has already achieved scale can now focus on scope and has the potential to create business models and ecosystems that are far more varied and efficient to solve our every days problems while not compromising our privacy. &amp;#160;The platform could for instance support sharing all our activities' context in the privacy of our devices. We strongly believe that the Web as it stands will not be able to resist that kind of disruption.&amp;#160;We expect Business Models will align towards:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;activities over knowledge&lt;/li&gt;
&lt;li&gt;small data over big data&lt;/li&gt;
&lt;li&gt;trusted data sharing over "sniffing around"&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://www.linkedin.com/profile/view?id=167641&amp;amp;trk=tab_pro"&gt;Jean-Jacques Dubray&lt;/a&gt;&lt;/p&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a href="http://www.ebpml.org/blog2/index.php/2013/01/15/business-models-for-next-generation"&gt;Original post&lt;/a&gt; blogged on &lt;a href="http://b2evolution.net/"&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p><a class="twitter-share-button" href="http://twitter.com/share">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
<script type="IN/Share" data-counter="right"></script>
<a onclick="window.location = 'http://www.reddit.com/submit?url=' + encodeURIComponent(window.location); return false" href="http://www.reddit.com/submit"> <img src="http://www.reddit.com/static/spreddit7.gif" alt="submit to reddit" border="0" /> </a></p>
<p>&#160;</p>
<p>A couple of weeks ago, we explored&#160;<a title="The Future of Social Networks" href="http://www.ebpml.org/2012/12/29/the-future-of-social-networks/">the Future of Social Networks</a>&#160;which we see evolving towards:</p>
<ul>
<li>friends over followers</li>
<li>future over past</li>
<li>activities over posts</li>
</ul>
<p>In this post we would like to share a couple of the business models that could support these activity centric social networks. But, before we do that let's start by looking at the implications of shifting from a knowledge centric point of view (the Web) to an activity centric point of view (the Platform).</p>
<h2><strong>Don't Underestimate SmallData</strong></h2>
<p>It does sound a bit trivial to state that we perform a lot of activities with our mobile devices, far more than we ever did with our computers: we purchase our morning coffee, we deposit checks, board a plane, we go places, we take pictures and videos, we learn, we measure our blood pressure, change thermostat settings, select something to watch on TV, open and rent a car ... and that list is not even the tip of the iceberg. Our phone is rapidly becoming a universal remote.</p>
<p>And, even though we are nearly 5 years into the "smartphone" revolution, there is one large area of the Platform architecture that has not been explored: Mobile App Integration.&#160;As smartphones enhance every task we do and every action we take, we can expect every task and action to produce invaluable &#8220;cues&#8221; that could be reused to support other activities from the same user (or from other users) using completely different apps. That's what we call "Small Data", very small data.</p>
<p>We define small data as the data exchanged between two apps that are either under the control of the same end user or an end user and its direct social network (relatives, friends and acquaintances a.k.a RFAs).</p>
<p><a href="http://www.b-mc2.com/wp-content/uploads/2013/01/bm-fig4-300x257.png" rel="attachment wp-att-306"><img class="alignnone size-medium wp-image-306" src="http://www.b-mc2.com/wp-content/uploads/2013/01/bm-fig4-300x257.png" alt="bm-fig4" width="300" height="257" /></a></p>
<p>The lion share of the Platform's business model is going to be driven by Small Data. Why? Because apps won't need to guess what we want, SmallData is made up of the exact events&#160;(location, time and activity)&#160;&#160;of our lives and can provide other apps with a wealth of cues that will make them behave exactly as we wish. Most of what there is to know lives on our devices and the ones of our relatives, friends and acquaintances (the RFAs).</p>
<p>For instance, I may need to replace my old washing machine. I can tell my "To Do" app that I need to accomplish that new task (a well defined task). I could even enter right there a price range, features and rankings of the product. You can easily guess the kind of dialog you would have with Siri or Google Now. That information becomes instant context for all the apps I visit next on any of my device.</p>
<p>I can also connect easily the physical environment of my tasks by scanning QR codes or using picture-based database queries.</p>
<p>BigData and Machine Learning algorithms may provide insight over our very next moves, but there is some big barriers that Small Data can help level. BigData cannot guess the tasks we have to do, the problems we have to solve. BigData can only guess what we may want to do. Precision is another big barrier that BigData can rarely address. How many times do you search for something, end up buying it and continue seeings ads for weeks that are trying to sell a product you already own. Imagine how many opportunities to sell complementary products, or simply to ask feedback are lost? SmallData can inform your apps of the tasks you are trying to accomplish and whether you are done buying this washing machine you needed. How valuable is that?</p>
<p>We are at this fascinating moment in time where, from a business point of view, and for all intent and purposes we live in an "<a title="Blog" href="http://www.b-mc2.com/blog/">unRelated</a>" world, and there is this massive revolution marching (let's call it the SoMoLoCo revolution) which is all about surfacing, realizing and enhancing all the relationships that make up our lives as part of the activities we do. When we say relationships, we mean of course the relationships between people, but also between people and tasks, things or places. SmallData is at the core of that revolution.</p>
<h2>The Web Architecture is not optimized for a Task Centric World</h2>
<p>In a "related" world, the opportunities to share cues abound but we need a new kind of apps which can exchange seamlessly specific data elements on the same device or beyond, with friends for instance, or with a community. Cues could of course be aggregated across a community and be made available as such.</p>
<p>This exchange of contextual &#8220;cues&#8221; has been going on, at least, for as long as the Web became commercial, but today, the Web is facing a major disruption that directly challenges its business model: architecturally, the Web always mandates a 3rd party server-side integration to mediate the &#160;exchange of information between two apps (think double-click),&#160;<strong>unless there is a direct hop</strong>&#160;from one application to the next (think Facebook's <a href="http://en.wikipedia.org/wiki/HTTP_referer">referer</a>).</p>
<p>In the washing machine example, the Web architecture would require either a back-end integration between the To Do app and merchants, or it would require that you always enter a merchant app through the To Do app. Neither are really practical. The problem here is that activities relate to each other in a way that is quite different than simple bits of knowledge, propagating the context of a search to an ad is far easier than propagating the context of a trip to a series of activities.&#160;</p>
<p>That fundamental shift requires a new application integration model as mobile apps are weaved into every task we perform. One could argue, of course, that Amazon could shift from being a "Catalog" to becoming a mundane "To Do" app, but would they have that kind of insight? BigData is in their DNA, they actually don't know much about the tasks customers are trying to accomplish. Before they build that kind of knowledge, there would be a lot of room for alternatives to grow. Other retailers will have to quickly come up with an alternative solution and architecture anyways.</p>
<p>Application integration is a very old idea but today mobile platforms are changing the game. They enable the sharing of cues between trusted users, using trusted apps and mediated by a trusted party. This is somewhat new, trust has never really been part of Web application integration. Quite the opposite actually. You cannot underestimate how much disruption can result from trusted integrations.</p>
<p>So, the key success factor here is to enable the apps on your device to securely and <strong>privately</strong> share information without requiring a complex temporal integration involving a 3rd party service. The information is produced and consumed on the device or the device of a related end-user.&#160;<strong>What happens on your device can now stay on your device (sort of).</strong></p>
<p><span style="color: #ff9900;"><strong><em>Just to be clear, and to show how disruptive this architecture is, the primary identifier of your private data becomes your phone. Merchants no longer need to identify you. They can't care less about YOU, they just care to know some information about you. The problem with the Web Architecture was that the only way to do that was by identifying you and tracking your every move.&#160;</em></strong></span></p>
<p>This can be achieved with a protocol based on the fact that the device OS (and the Platform behind) is a trusted party for the user, friends, commercial partners&#8230; and has the ability to both establish the identity of the applications which share the information, enforce consent of the end-user for the sharing to happen, enrich the integration, report on transaction for commercial applications, &#8230;</p>
<p><em>This is why protocols are likely to be a lot more important than "services" moving forward. The Web has trained us to build dumb clients and centralize anything of value on the server, at a huge cost and never enough trust. We can predict that light-weight protocols, mediated by the mobile OS (and its Platform) will directly challenge the Web architecture, precisely because <strong>we can leverage the platform trust model</strong>. That evolution is extremely profound.</em></p>
<p><em></em>With all that being said, let's look at a couple of scenarios where we see valuable protocols emerging.</p>
<p>We saw in our last post, with the Starbucks example, that Automated social events, integrated with the tasks consumers are doing are going to be a big part of the future of Social Networks.</p>
<div class="image_block"><a href="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/fig1.png?mtime=1356752507"><img src="http://www.ebpml.org/blog2/media/blogs/CarnetsdeBord/fig1.png?mtime=1356752507" alt="" width="500" height="302" /></a></div>
<p><strong>There is also an extreme value in decoupling the way cues are captured, stored and shared. &#160;</strong>On the Web this is done in a monolithic way, and you have to become a Google AdSense to monetize it. There is a real opportunity in enabling developers to focus on capturing and using cues while the Platform manages and mediates the exchange of these cues in a trusted way. Again this paradigm shift is profound because we are no longer dependent on Google dictating the resulting service (ads) and the information being exchange. A platform based architecture can support many more information sharing scenarios.&#160;<strong>We actually argue that a trust-based neutral Platform supports a more vibrant and diverse ecosystem than a truly open model.</strong></p>
<p><strong></strong>Platform operators (Google, Apple, Microsoft, RIM...) will enable that architecture because they will continuously seek ways to monetize the trust they established. The paradox is that because the Web is open, any integration between services start by establishing a form of trust and most often that leads to identifying a useful use case (such as AdSense) and mining it, at the expense of many more, but slightly less valuable, use cases.</p>
<h2>Share information, Share Revenue</h2>
<p>As apps align with the tasks end users are trying to accomplish and as these tasks coordinate several actions, we can expect that applications will see value in exchanging larger number of cues.</p>
<p>The Platform can report on the connection between the usage of a cue (produced by App 1) and a sale performed on App2 in the context of the cue provided by App1. That kind of information sharing mechanism can support a healthy affiliate ecosystem, far more diverse and effective than what AdSense could ever do. So what would the protocol look like? Here is a proposal: 1) &#160;App 2 developer sets up a commercial campaign to promote the sharing of clues with its application 2) &#160;App 1 developer configures his app to provides the clues when end user uses his application.</p>
<ul>
<li>Step 2 App 1shares the specified clue.</li>
<li>Step 3 App 2 queries the clues</li>
<li>Step 4 End user makes a purchase based on clue</li>
<li>Step 5 App 2 reports the purchase to the platform (optionally completes the purchase with the platform)</li>
<li>Step 6 The device communicates the transaction to the platform server (including, campaign identifier provided by App 1 with the clue, identiy of application 1). The platform mediates payouts from developer 2 to developer 1</li>
</ul>
<p>3) an alternative flow is to provide the cues a 3<sup>rd</sup>&#160;party service for marketing / research perspective</p>
<p><a href="http://www.b-mc2.com/wp-content/uploads/2013/01/bm-fig3-300x219.png" rel="attachment wp-att-305"><img class="alignnone size-medium wp-image-305" src="http://www.b-mc2.com/wp-content/uploads/2013/01/bm-fig3-300x219.png" alt="bm-fig3" width="300" height="219" /></a></p>
<p>With such protocol the information never travels to a developer server prior to its consumption, the end user is not "tracked".&#160;It is only shared as needed on the end-user device for the benefit of the end-users or with the devices of trusted related end users (RFAs), or completely anonymously, as simple stats.</p>
<h2>Social Data integration</h2>
<p>We describe here a simple protocol that enables the "social" sharing of cues.</p>
<p><a href="http://www.b-mc2.com/wp-content/uploads/2013/01/bm-fig1-300x214.png" rel="attachment wp-att-307"><img src="http://www.b-mc2.com/wp-content/uploads/2013/01/bm-fig1-300x214.png" alt="bm-fig1" width="300" height="214" /></a></p>
<p>A trusted platform may also share this information with a trusted group of users (for instance friends), either anonymously, or specifically, with the identity of the first user. (steps 5: and 6:).&#160;</p>
<p><strong>The key though is that your friends can now use a completely different set of apps and still benefit from the sharing of cues</strong>.</p>
<p>For instance if users open the Fandango application, they might be interested in seeing a percentage of friends who saw or speak about any given movie (anonymously) combining the information from social network posts, iTunes purchases,....&#160;<strong>For the Fandago app, this information has a lot of value&#160;</strong>because it does not need to build that integration, on its back-end, track who is friend with who and who consented to share this information. It would be extremely difficult for every user to manage their social network based on sharing actions such as purchasing a movie ticket or replacing a washing machine.</p>
<p>Social Networks will align with end user interests, but not with every tasks they do. The platform may also aggregate some of these cues and offer aggregated / anonymized information to a group of users. For instance, people checking in at a restaurant or purchasing movie tickets may give a good idea of the wait time.&#160; It may also give local statistics for popular movies, restaurants, events, transportation, &#8230;. Cues could also be augmented with the help of a 3rd party service (Step 8) after being produced at step 2 and before they are consumed by step 3. In other words a series of additional clues could be made available to the device OS that neither app 1 or app 2 could infer on their own, just by the user sharing a clue on app1.</p>
<p>With these kinds of protocols, and unlike the Web, the production and consumption of cues has the highest value when the contexts of the apps are connected. A cue-based affiliate model is no longer about delivering &#8220;ads&#8221; but by making commerce more effective, nearly frictionless, by sharing the right information between the actors that can really make sense of it as users take specific actions. Of course, all this can only be enabled if the end user is given control &#160;over:</p>
<ul>
<li>the consent for an application to share a cue with other applications</li>
<li>the topology of the data integration between applications. For instance a user could be presented with a view of the cues surrounded by apps that would allow to "slide and drop" cues to a particular application.</li>
</ul>
<p><strong>The very open nature of the Web is driving scale over scope. The Web has successfully nurtured the largest Catalog, the largest Search engine, the largest Auction site, the largest Social Network, but we see this as a drawback because it limits the scope of what people can do. In other words, the scope of what Amazon, Google or Facebook offer is limited by the scale (and hence the revenue) they can achieve.&#160;</strong></p>
<p><strong></strong>The Platform architecture, and what appears to be a closed system, turns that model on its head. The Platform which has already achieved scale can now focus on scope and has the potential to create business models and ecosystems that are far more varied and efficient to solve our every days problems while not compromising our privacy. &#160;The platform could for instance support sharing all our activities' context in the privacy of our devices. We strongly believe that the Web as it stands will not be able to resist that kind of disruption.&#160;We expect Business Models will align towards:</p>
<ul>
<li>activities over knowledge</li>
<li>small data over big data</li>
<li>trusted data sharing over "sniffing around"</li>
</ul>
<p><a href="http://www.linkedin.com/profile/view?id=167641&amp;trk=tab_pro">Jean-Jacques Dubray</a></p><div class="item_footer"><p><small><a href="http://www.ebpml.org/blog2/index.php/2013/01/15/business-models-for-next-generation">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.ebpml.org/blog2/index.php/2013/01/15/business-models-for-next-generation#comments</comments>
			<wfw:commentRss>http://www.ebpml.org/blog2/index.php?tempskin=_rss2&amp;disp=comments&amp;p=129</wfw:commentRss>
		<feedburner:origLink>http://www.ebpml.org/blog2/index.php/2013/01/15/business-models-for-next-generation</feedburner:origLink></item>
				<item>
			<title>B = mc2 is available to download for free this week-end</title>
			<link>http://feedproxy.google.com/~r/CarnetsDeBord/~3/eou5__yW9oI/b-mc2-is-available-to</link>
			<pubDate>Sat, 12 Jan 2013 13:19:00 +0000</pubDate>			<dc:creator>jdubray</dc:creator>
			<category domain="alt">MDE</category>
<category domain="alt">SOA</category>
<category domain="alt">Mobile</category>
<category domain="main">Business Strategy</category>			<guid isPermaLink="false">128@http://www.ebpml.org/blog2/</guid>
						<description>&lt;div style="float: left;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share"&gt;Tweet&lt;/a&gt;
&lt;script type="text/javascript" src="http://platform.twitter.com/widgets.js"&gt;&lt;/script&gt;
&lt;/div&gt;&lt;script src="//platform.linkedin.com/in.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="IN/Share" data-counter="right"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;p&gt;This week-end you can &lt;a href="https://itunes.apple.com/us/book/b-mc2/id584185735?ls=1"&gt;download our book for free on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;#8220;The Platform&amp;#8221; which was pioneered independently by Amazon and Apple over the last decade is creating&amp;#160;a highly disruptive environment, introducing a discontinuity at all levels: economic, financial, political and social.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Market structures and Industry boundaries are about to shift in unforeseeable ways, and every space should be considered uncontested. There is simply no amount of historical patterns, cost cutting, dashboards, 4 square frameworks or sustainable evolutions that can prepare an organization to transition into that new world.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Innovating in the Platform era requires a lot more precision and a much higher velocity. It also requires innovating simultaneously at the technology, business and operations levels.&amp;#160;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;B = mc2 is a tale of this new world, a multidimensional world, and a unique Business Strategy Methodology, BOLT, that will help you conquer it. BOLT has been designed to enable you to:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;- harness the collective intelligence of your organization&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- execute at unprecedented speed&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- offer a diverse and adaptable set of products and services which can best align with their customers&amp;#8217; needs, just-in-time and just-in-place.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Table of Contents&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Introduction &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;em&gt;Chapter 1&lt;/em&gt; - The Silent Revolution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;em&gt;Chapter 2&lt;/em&gt; - BOLT&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Introduction &lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Systems &lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Lifecycle &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;em&gt;Chapter 3&lt;/em&gt; - Formulating a Strategy with BOLT&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Introduction&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- The CEO&amp;#8217;s Dilemma&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Platform-Driven Product Strategy&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Market and Sell to the Lifecycle&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Business Integration&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Conclusion &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;em&gt;Chapter 4&lt;/em&gt; - Executing a BOLT Strategy&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Introduction &lt;/span&gt;&lt;br /&gt;&lt;span&gt;- People &lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Organization &lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Technology &amp;amp; Information &lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Conclusion &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Conclusion &lt;/span&gt;&lt;br /&gt;&lt;span&gt;Acknowledgments&lt;/span&gt;&lt;/p&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a href="http://www.ebpml.org/blog2/index.php/2013/01/12/b-mc2-is-available-to"&gt;Original post&lt;/a&gt; blogged on &lt;a href="http://b2evolution.net/"&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<div style="float: left;"><a class="twitter-share-button" href="http://twitter.com/share">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
</div><script src="//platform.linkedin.com/in.js" type="text/javascript"></script>
<script type="IN/Share" data-counter="right"></script><br />
<p>This week-end you can <a href="https://itunes.apple.com/us/book/b-mc2/id584185735?ls=1">download our book for free on iTunes</a>.</p>
<p><span>&#8220;The Platform&#8221; which was pioneered independently by Amazon and Apple over the last decade is creating&#160;a highly disruptive environment, introducing a discontinuity at all levels: economic, financial, political and social.</span><br /><br /><span>Market structures and Industry boundaries are about to shift in unforeseeable ways, and every space should be considered uncontested. There is simply no amount of historical patterns, cost cutting, dashboards, 4 square frameworks or sustainable evolutions that can prepare an organization to transition into that new world.</span><br /><br /><span>Innovating in the Platform era requires a lot more precision and a much higher velocity. It also requires innovating simultaneously at the technology, business and operations levels.&#160;</span><br /><br /><span>B = mc2 is a tale of this new world, a multidimensional world, and a unique Business Strategy Methodology, BOLT, that will help you conquer it. BOLT has been designed to enable you to:</span><br /><br /><span>- harness the collective intelligence of your organization</span><br /><span>- execute at unprecedented speed</span><br /><span>- offer a diverse and adaptable set of products and services which can best align with their customers&#8217; needs, just-in-time and just-in-place.</span><br /><br /><span>Table of Contents</span><br /><br /><span>Introduction </span><br /><br /><span><em>Chapter 1</em> - The Silent Revolution</span><br /><br /><span><em>Chapter 2</em> - BOLT</span><br /><span>- Introduction </span><br /><span>- Systems </span><br /><span>- Lifecycle </span><br /><br /><span><em>Chapter 3</em> - Formulating a Strategy with BOLT</span><br /><span>- Introduction</span><br /><span>- The CEO&#8217;s Dilemma</span><br /><span>- Platform-Driven Product Strategy</span><br /><span>- Market and Sell to the Lifecycle</span><br /><span>- Business Integration</span><br /><span>- Conclusion </span><br /><br /><span><em>Chapter 4</em> - Executing a BOLT Strategy</span><br /><span>- Introduction </span><br /><span>- People </span><br /><span>- Organization </span><br /><span>- Technology &amp; Information </span><br /><span>- Conclusion </span><br /><br /><span>Conclusion </span><br /><span>Acknowledgments</span></p><div class="item_footer"><p><small><a href="http://www.ebpml.org/blog2/index.php/2013/01/12/b-mc2-is-available-to">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.ebpml.org/blog2/index.php/2013/01/12/b-mc2-is-available-to#comments</comments>
			<wfw:commentRss>http://www.ebpml.org/blog2/index.php?tempskin=_rss2&amp;disp=comments&amp;p=128</wfw:commentRss>
		<feedburner:origLink>http://www.ebpml.org/blog2/index.php/2013/01/12/b-mc2-is-available-to</feedburner:origLink></item>
			</channel>
</rss>
