<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ivar Jacobson International &#187; Architecture | Ivar Jacobson International</title>
	<atom:link href="http://blog.ivarjacobson.com/tag/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ivarjacobson.com</link>
	<description>The Smart Blog</description>
	<lastBuildDate>Mon, 16 Jan 2012 14:12:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Do we need Event-Driven Architecture?</title>
		<link>http://blog.ivarjacobson.com/do-we-need-event-driven-architecture/</link>
		<comments>http://blog.ivarjacobson.com/do-we-need-event-driven-architecture/#comments</comments>
		<pubDate>Wed, 31 Dec 1969 23:59:59 +0000</pubDate>
		<dc:creator>Ivar Jacobson</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[EDA]]></category>

		<guid isPermaLink="false">http://ivarjacobson.wordpress.com/?p=58</guid>
		<description><![CDATA[A software system with an Event-Driven-Architecture (EDA) is built around the idea that events are the most significant elements in the system and that they are produced somewhere in the system and consumed somewhere else in the system. The business value is that you can easily extend such a system with new things that are [...]]]></description>
			<content:encoded><![CDATA[<p><span><span style="font-size:10pt;font-family:Verdana;"><span style="font-size:10pt;font-style:italic;font-family:Verdana;">A software system with an Event-Driven-Architecture (EDA) </span><span style="font-size:10pt;color:#000000;font-style:italic;font-family:Verdana;">is built around the idea that events are the most significant elements in the system and that they are produced somewhere in the system and consumed somewhere else in the system.</span><span><font face="Verdana"></p>
<p class="MsoNormal"><span style="font-size:10pt;font-style:italic;font-family:Verdana;">The business value is that you can easily extend such a system with new things that are ready to produce or consume events that already are in place in the system.<span>  </span>Of course you can add new events as you go.</span><span style="font-size:10pt;color:#000000;font-style:italic;font-family:Verdana;"> </span></p>
<p><span style="font-size:10pt;font-family:Verdana;">Yes, this is absolutely great.<span>  </span>If you build something new there is no reason why you shouldn’t use this kind of architecture.<span>  </span>However, focusing on the events is not the only thing you should do.<span>  </span></span><span style="font-size:10pt;font-family:Verdana;"> </span></p>
<p><span style="font-size:10pt;font-family:Verdana;">Instead, you should just build an architecture in which you have components or services and some kinds of “channels” between some of these components.<span>  </span>Over a channel an event can flow from one component – the producer – to another one – the consumer.<span>  </span>These components are loosely coupled and can exist in a distributed world.<span>  </span>Some of these events are such that you broadcast them to anybody that has subscribed to them.</span><span style="font-size:10pt;font-family:Verdana;"> </span></p>
<p><span style="font-family:Verdana;">Thus don’t constrain your architecture to just be event-driven.<span>  </span>There is really no money to save by doing just that.<span>  </span>Let it be components with channels.<span>  </span>The channels I am talking about were already adopted in the telecom standard SDL back in 1982.<span>  </span>In EDA it is basically a mechanism for brokering events.<span>   </span>In the OMG standard CORBA from the early 1990s it was called the “Event Service”.<span>  </span>What a coincidence!<span>  </span>Actually one way of thinking about EDA conceptually is really that it is all that CORBA was meant to be, but in the Web/Internet world.</span><span style="font-family:Verdana;"> </span></p>
<p><span style="font-size:10pt;font-family:Verdana;">The most interesting components are services.<span>  </span>You get service-oriented architecture at the same time, and more.</span><span style="font-size:10pt;font-family:Verdana;"> </span></p>
<p><span style="font-size:10pt;font-family:Verdana;">However, those of you who think this is fundamentally new have really not done your homework.<span>  </span>It is probably true that the three letter combination EDA is new as it was for SOA.<span>  </span>We have also got some new great platforms that make it easier to implement these ideas.</span></p>
<p><span style="font-size:10pt;font-family:Verdana;">Over the years I have seen trends in the component world that put more focus on the components than the channels (and thus the events) between them.<span>  </span>Other times it has been the other way around.<span>  </span>However, there is absolutely no reason to choose.<span>  </span>You should allow for both. But what we don’t need are more buzzwords. They don’t help us at all.</span><span style="font-size:10pt;font-family:Verdana;"> </span></p>
<p><span style="font-size:10pt;font-family:Verdana;">To summarize, you should go for a component architecture without any compromises.<span>  </span>This is what made the Ericsson AXE system such an incredible success story more than 30 years ago.<span>  </span>And thanks to its architecture it is still probably the best selling product of its kind in the world.<span>  </span>However, Ericsson had to build its own infrastructure managing components with channels since such solutions didn’t exist at the time.</span></p>
<p><span style="font-size:10pt;font-family:Verdana;">Of course, this is still new to people who have not previously developed a component architecture.<span>  </span>Thus those people have to come up to speed and that means training and mentoring.<span>  </span>And, to start with you need some good technical practices.<span>  </span>It is as easy as that!</span><span> </span></p>
<p> </p>
<p></font></span></span></span></p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivarjacobson.com/do-we-need-event-driven-architecture/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>EA Failed Big Way!</title>
		<link>http://blog.ivarjacobson.com/ea-failed-big-way/</link>
		<comments>http://blog.ivarjacobson.com/ea-failed-big-way/#comments</comments>
		<pubDate>Wed, 31 Dec 1969 23:59:59 +0000</pubDate>
		<dc:creator>Ivar Jacobson</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Postcards]]></category>
		<category><![CDATA[EA]]></category>

		<guid isPermaLink="false">http://ivarjacobson.wordpress.com/?p=54</guid>
		<description><![CDATA[Enterprise Architecture failed big way! Around the world introducing an Enterprise Architecture EA has been an initiative for most financial institutions (banks, insurance companies, government, etc.) for the last five years or so, and it is not over. I have been working with such companies and helped some of them to avoid making the worst mistakes. Most [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span style="font-size:10pt;font-family:Verdana;">Enterprise Architecture failed big way!</span></strong><span style="font-size:10pt;font-family:Verdana;"></span></p>
<p style="margin:0;" class="MsoNormal"><em><span style="font-size:10pt;font-family:Verdana;">Around the world introducing an Enterprise Architecture EA has been an initiative for most financial institutions (banks, insurance companies, government, etc.) for the last five years or so, and it is not over. I have been working with such companies and helped some of them to avoid making the worst mistakes. Most EA initiatives failed. My guess is that more than 90% never really resulted in anything useful. </span></em></p>
<p><em><span style="font-size:10pt;font-family:Verdana;"></span></em><span style="font-size:10pt;font-family:Verdana;"></span> </p>
<p style="margin:0;" class="MsoNormal"><tt><span style="font-size:10pt;font-family:Verdana;">Why did people fail? There are many reasons, but they can all be summarized by the word smart. They were not smart when they selected solution. They were not smart when they selected way of working. They were not smart when they organized their business and IT resources. Building an EA is not rocket science. </span></tt></p>
<p style="margin:0;" class="MsoNormal"><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">There are two common reasons specific to EA failure:</span></tt></p>
<ol>
<li>
<div style="margin:0;" class="MsoNormal"><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">Focus on paper-ware instead of executable software.  </span></tt><tt><span style="font-size:10pt;font-family:Verdana;">When enterprise architects work in an ivory tower without caring about what can be implemented, they produce too much models and documentation without executable solutions.  </span></tt><tt><span style="font-size:10pt;font-family:Verdana;">Enterprise architectures should be implemented incrementally, starting as early as possible. We call such architectures for executable EAs. </span></tt></div>
</li>
<li>
<div style="margin:0;" class="MsoNormal"><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">Big gaps between layers instead of seamless relationships.  </span></tt><tt><span style="font-size:10pt;font-family:Verdana;">Usually there are several layers such as a business layer, an application layer, a data layer and a technical layer. There are huge gaps between these layers which results in very brittle architectures. It is like trying to stand on a skateboard which is on top of another skateboard which in its turn is on top of yet another skateboard, etc. To have a chance these skateboards need to behave like one which is hard enough.  </span></tt><tt><span style="font-size:10pt;font-family:Verdana;">Thus the relationship between the business layer end the application and data layers are not straightforward and the relationships between the application layer and the data layer is as hard to manage as it was 20-30 years when we used methods like functional decomposition, or structured analysis and design. It is amazing that people haven’t learnt anything from component based development (with or without objects). </span></tt></div>
</li>
</ol>
<p style="margin:0;" class="MsoNormal"><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">There are many other mistakes that people have made, many of which are related to organizational change in general. Examples include lack of business support for EA, not communicating the scope and purpose of EA, no strong IT leadership etc. In addition to these common challenges, all it takes to succeed at EA is to use best practices for modern software development, avoid upfront academic modeling, build both top down and bottom up, look upon the whole enterprise system as a system of interconnected systems. </span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">Many of the companies that failed are now looking for the next silver bullet – Service Oriented Architecture SOA. To me SOA is what EA should have become. SOA can be described as EA++ -- it is Enterprise Architecture made better. SOA is clearly on the right path, but again adopting it requires that you work smart! </span></tt><span style="font-size:10pt;font-family:Verdana;"> </span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivarjacobson.com/ea-failed-big-way/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SOA</title>
		<link>http://blog.ivarjacobson.com/soa/</link>
		<comments>http://blog.ivarjacobson.com/soa/#comments</comments>
		<pubDate>Wed, 31 Dec 1969 23:59:59 +0000</pubDate>
		<dc:creator>Ivar Jacobson</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Postcards]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://ivarjacobson.wordpress.com/?p=29</guid>
		<description><![CDATA[March 30, 2004 Before being invited to Tallahassee, I had never heard about it. I flew in to the city in the morning and back in the evening. I spent a day with the State of Florida. Bill Lucas did a wonderful job in making me feel very welcome and everyone I met was very [...]]]></description>
			<content:encoded><![CDATA[<p><tt><span style="font-size:10pt;font-family:Verdana;">March 30, 2004</span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;">Before being invited to Tallahassee, I had never heard about it. I flew in to the city in the morning and back in the evening. I spent a day with the State of Florida. Bill Lucas did a wonderful job in making me feel very welcome and everyone I met was very friendly and interested in my work. I enjoyed my day very much. One of the questions we discussed was web services. The last couple of years services have become important elements for describing and building software. As with everything new, the software world has a tendency to believe that something fundamentally different has surfaced and that a new way of thinking is required. As a consequence we have got a whole arsenal of new concepts around the concept of services. We have got “service-oriented architectures”, “on demand”, “utility computing”...you name it. However, there is nothing fundamentally new with services. To organize software in services is an old practice. </span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">Services were once a very important construct in RUP, actually in the version of RUP that we called 3.8. (It was the version prior to Rational buying my company, so it was called Objectory 3.8.) Unfortunately, the RUP team thought that downplaying services in RUP would make it significantly simpler. I disagreed with this opinion, but accepted it because almost everything else was adopted. It was very hard to argue for service-oriented design when the concept hadn’t hit the software industry. With Service-Oriented Architecture (SOA) on the table, the need is there. </span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">In 1998, I wrote about services in the Unified Software Development Process book: Apart from providing use cases to its users, every system also provides a set of services to its customers. I made a distinction between end-users of the system and the customer who purchases a system for its users. For instance, a bank system has users which may be clients of the bank, and the bank itself is a customer of the system (maybe buying it from some system integrator). A customer acquires a suitable mix of services. Through these services the system will provide the necessary use cases for the users to do their business:</span></tt></p>
<ul>
<li>
<div><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><span style="font-size:10pt;font-family:Verdana;">A use case specifies a sequence of actions: a thread is initiated by an actor, followed by interactions between the actor and the system, and completed and stopped after having returned a value to the actor. Usually, use cases don’t exist in isolation. For instance, the Withdraw Money use case assumes that another use case has created a user account and that the user’s address and other user data are accessible. </span></div>
</li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Verdana;">A service represents a coherent set of functionally related actions - a package of functionality - that is employed in several use cases. A customer of a system usually buys a mix of services to give its users the necessary use cases. A service is indivisible in the sense that the system needs to provide it completely or not at all. </span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Verdana;">Use cases are for users, and services are for customers. Use cases cross services, that is, a use case requires actions from several services. A service usually provides several use cases or parts of several use cases. </span></li>
</ul>
<p><span style="font-size:10pt;font-family:Verdana;"></span><tt><span style="font-size:10pt;font-family:Verdana;">In the Unified Process, the service concept is in analysis (platform independent modelling) supported by service packages. The following can be noted about service packages: </span></tt><span style="font-size:10pt;font-family:Verdana;"></span></p>
<ul>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Verdana;">A service package contains a set of functionally related classes. </span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Verdana;">A service package is indivisible. Each customer gets either all classes in the service package or none at all. Thus a service package is a configuration unit. </span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Verdana;">When a use case is realized, one or more service packages may be participants in the realization. Moreover, it is common for a specific service package to participate in several different use-case realizations. </span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Verdana;">A service package often has very limited dependencies toward other service packages. </span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Verdana;">A service package is usually of relevance to only one or a few actors. </span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Verdana;">The functionality defined by a service package can when designed and implemented be managed as a separate delivery unit. A service package can thus represent some “add-in” functionality of the system. When a service package is excluded, so is every use case whose realization requires the service package. </span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Verdana;">Service packages may be mutually exclusive, or they may represent different aspects or variants of the same service. For example, “spell checking for British English” and “spell checking for American English” may be two different service packages provided by a system. You configure the system with one or the other, but maybe not with both. </span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Verdana;">The service packages constitute an essential input to subsequent design and implementation activities, in that they will help structure the design and implementation models in terms of service subsystems. In particular, the service subsystems have a major impact on the system’s decomposition into binary and executable components. This is of course only true if the development is going top-down with no reuse of existing components: legacy systems, packaged solutions, web services. And fact is, we develop more and more with reusable components. </span></li>
</ul>
<p style="margin:0;" class="MsoNormal"><span style="font-size:10pt;font-family:Verdana;"></span><tt><span style="font-size:10pt;font-family:Verdana;">By structuring the system according to the services it provides, we prepare for changes in individual services, since such changes are likely to be localized to the corresponding service package. This yields a robust system that is resilient to change. </span></tt><tt><span style="font-size:10pt;font-family:Verdana;"> </span></tt></p>
<p style="margin:0;" class="MsoNormal"><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;">Given that most software of today is developed with ready made components, why would you like to design an analysis model (a platform independent model) with service packages. There is one good reason: we still need to understand what we are doing. Building software is about understanding, understanding components developed by different vendors, divisions, teams. An analysis model - maybe even just a partial model - used as a start help you overcome these difficulties. </span></tt><span style="font-size:10pt;font-family:Verdana;"></span><span style="font-family:Verdana;"> </span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivarjacobson.com/soa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Software Reuse</title>
		<link>http://blog.ivarjacobson.com/software-reuse/</link>
		<comments>http://blog.ivarjacobson.com/software-reuse/#comments</comments>
		<pubDate>Wed, 31 Dec 1969 23:59:59 +0000</pubDate>
		<dc:creator>Ivar Jacobson</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Postcards]]></category>
		<category><![CDATA[Reuse]]></category>

		<guid isPermaLink="false">http://ivarjacobson.wordpress.com/?p=27</guid>
		<description><![CDATA[February 8, 2004 Many organizations are trying to achieve software reuse. Many of them think that they will achieve reuse if they just put their components in some sort of repository. Then they just expect others to reuse their valuable assets. I never cease to be surprised that people still do that. We have said [...]]]></description>
			<content:encoded><![CDATA[<p><tt><span style="font-size:10pt;font-family:Verdana;">February 8, 2004</span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;">Many organizations are trying to achieve software reuse. Many of them think that they will achieve reuse if they just put their components in some sort of repository. Then they just expect others to reuse their valuable assets. </span></tt><span style="font-family:Verdana;"></span><tt><span style="font-size:10pt;font-family:Verdana;">I never cease to be surprised that people still do that. We have said for at least a decade that you don’t get any substantial reuse by just posting components. It seems as if people, instead of learning from others experience, always have to make the same mistakes as others over and over again. </span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">The book I wrote with Martin Griss and Patrik Jonsson on Software Reuse is very explicit about how to achieve reuse. The subtitle of the book is: Architecture, Process and Organization for business success. </span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">It all starts with Architecture. You design an architecture which identifies which components are reusable and which are not, thus a layered architecture. Usually two layers on top of middleware are enough. The top layer contains application components, which are not designed to be reusable. The second layer contains the domain components intended for reuse by several applications in the top layer. The only practical way to get a domain component is by designing an architecture in which the component has a clear role. Without this architectural setting, a component will never really be reused. </span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">Process comes next. The way you develop the domain components is different from how you develop application components. They are documented for reuse. We suggested in our book that you design a façade for each domain component. This façade contains an extract of the models of the component, an extract defining how the component can be reused. In case the domain is big enough (e.g. banking, telecom, airline), the façades can through careful design evolve into a more powerful tool – a domain-specific language (DSL). Instead of designing on top of the interfaces of the domain components, expressed through their façades, you will design using a domain specific language. </span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">Domain components also come with a kit containing tools for its reuse, examples of how to reuse it, and other things that help in getting it reused. </span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">Developing application components is different. Application components don’t require to be documented for reuse. Instead they are designed using domain components and through interaction with other application components. </span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">Finally Organization. In order to get successful reuse, you also need to develop an organization which maps 1:1 to the architecture. This means that for each component in the architecture there is a corresponding responsibility in the organization. Higher level components are the responsibility of a subsystem-owner. Lower level components are the responsibility of an individual developer. Without such a simple mapping between architecture and organization it will be practically impossible to get good reuse. Such an organization will become an expert organization – people will become experts in a subject matter. It grows people that want to create quality products. I call such an organization an architecture-based organization as opposed to a project-based organization. A project-based organization has a line manager for each project. The manager should only care about his own project. Such an organization is counterproductive to reuse. </span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">In an architecture-based organization, the project managers are not line managers. Instead they own the budget for their project. Using this budget they can buy resources from the line organization (that is the subsystem-owners with domain expert developers) to get their projects done in time. The line organization can work with several projects concurrently and they have to prioritize them based on delivery dates. Yes, there may be conflicts, but these are usually not large. The total costs are substantially lower because the domain components are developed and maintained by experts. Thus in the case of conflicts, more resources can be added to remove the conflict, and still the costs are much lower than with a project-based organization. </span></tt><tt><span style="font-size:10pt;font-family:Verdana;"> </span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;">The approach I just presented also has the advantage that you grow the reusable components as you work with real projects. You will start with an empty architecture, but you fill it as you go. You don’t sit there and speculate about what might be reusable; instead you design the components in the architecture that are first needed. They have probably not stabilized for the first project, so they may have to grow through several projects before they really become reusable without redesign. </span></tt></p>
<p><tt><span style="font-size:10pt;font-family:Verdana;"></span></tt><tt><span style="font-size:10pt;font-family:Verdana;">To achieve reuse is not easy. People have tried simple solutions like class libraries and component libraries into which component designers post their components hoping that other people will reuse them. We have seen very little reuse coming this way. Managers have thought it was the lack of incentives so they have stimulated all kinds of initiatives to get reuse. This is ignorant. You will get reuse, but only by standing on top of an integration of A, P and O, that is Architecture, Process and Organization. In another postcard I will tell you how you can move to an architecture-based organization from a project-based organization without revolution. It is really fascinating to see how easy it can be done, given that you are smart. However, that is not a problem, since you are smart, aren’t you? </span></tt><span style="font-family:Verdana;"></span><span style="font-family:Verdana;"> </span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivarjacobson.com/software-reuse/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

