Tuesday, January 6, 2009
Is SOA Dead?
I completely agree that service orientation is here to stay. But I don’t agree that the term SOA is going away any time soon. We are in the typical “trough of disillusionment” Gartner speaks about, as a huge wave of over-hype sets high expectations for a technology. Industry buys into the vision, then slowly comes to realize it is not a silver bullet. Hard work is still to be done to extract the benefits of the new technology. When so many people express disappointment in a technology, negative momentum builds, and soon a consensus develops that the new technology is a failure at best, and evil at worst. Such is the case with SOA.
To be sure, some technologies never fully emerge from the trough. Artificial Intelligence and Object Databases are two examples that never achieved wide-spread adoption after huge early stage hype. Others fare much better, like EAI and even Java. I remember the early Java days working at MCI circa 1997. Despite huge investments including the best consultants Sun had to offer, projects were massively under-performing, or even failing altogether. But the gradual maturation of the platform and supporting tools pulled Java from the trough of disillusionment to eventually make it the most popular programming language ever.
Anne concludes by saying that we need to move away from the term SOA and simply use the term “services”, since that is the core foundation of the concept. I think that’s fine for the time being. In fact, I’ve recently found myself using the term “service orientation” instead of SOA anyway. But I believe this is a temporary diversion. Eventually, market noise will settle down, and we in the software industry will finally develop a consensus on what this concept really is. When that happens, I believe, it will mark the emergence from the trough of disillusionment, and the return to calling this concept “SOA” once again, without fear of scorn.
See my related post here.
Wednesday, October 29, 2008
Services for RIA
The idea of using a services layer to supply information and operations to a web client application is not new. While I’ve written about the combination, I certainly am not the first to recognize the nice fit. Some of the acronyms floating around the internet, and the AJAXWorld conference were SOFEA (Service Oriented Front End Architecture) and SOUI (Service Oriented User Interface). SOFEA was coined by Ganesh Pradad and a couple coworkers in October, 2007, in a paper titled “Life Above the Service Tier” (http://sofea.googlegroups.com/web/Life+above+the+Service+Tier+v1_1.pdf). Ganesh’s blog (http://wisdomofganesh.blogspot.com/), which is high on my favorites list, contains additional information and resources.

SOFEA recommends a clear separation of presentation tier concerns. The major processes involved in the presentation tier are:
1. Application Download phase
2. Presentation Flow – driven by client side
3. Data Integration – use the service tier, peer-to-peer (allowing two way communication like notifications). XML based using REST or WS-*.
By separating these concerns, each can be optimized for its special needs. Whereas traditional thin-client technology requires the server to be involved in all three concerns, the rich capabilities of RIA no longer require that. In addition, the data integration piece can take advantage of an existing services layer, that is likely already built or under construction within the enterprise. Ganesh also claims that the Front Controller pattern, used in all the server-based web development frameworks, is actually an anti-pattern, made popular simply because of the previous lack of capabilities on the client side. The existence of so many frameworks supports his point, as none of them seem to quite satisfy the needs of the presentation layer. They never will, according to Ganesh, because, among other things, placing portions of the presentation flow logic on the server violates the principle of separation of concerns. Encapsulating presentation flow fully on the client side is now possible with the quickly maturing RIA development environments.
SOUI shares a very similar architecture. Proposed by Nolan Wright and Jeff Haynie (who founded Appcelerator on this principle), SOUI also places presentation flow logic on the client side. The major difference between SOUI and SOFEA is the preference for JSON in SOUI. JSON is more compact than XML. But the advantage of XML is the better typing system (elements and attributes can be strongly typed), along with validation tools built in.
The XAware project appears to be a very viable candidate to fill the gap of the data integration piece within SOFEA and SOUI. The environment is well-positioned to create information-rich services to supply data to the presentation tier. As we continue with project development, we will be adding more support material and features to make it even easier to use XAware for RIA development.
Monday, June 30, 2008
Categories of Services
In previous blogs, I have discussed contract-first service design and the benefits to constructing services as information-rich, smart endpoints. In his most recent book, SOA: Principles of Service Design, Thomas Erl formalizes and extends these ideas by defining 3 categories of services based on the type of logic they encapsulate, the extent of potential reuse, and the degree of focus on a singular domain. The service categories are:
Entity Services – modeled around business entities like customer, purchase order, insurance policy, and invoice. Such a service typically includes the CRUD-like operations to Create, Read, Update, and Delete instances of the business entity. As I’ve mentioned in the past, entity services are ideal candidates for contract-first service design, with entities modeled in XML Schema, and that schema becoming the basis of the interface to create, read, update, or delete a business entity.
Task Services – services that generally model a business process in the enterprise. This type of service very often combines business logic and calls to other services, and because of its focus on a particular business domain, often has a low degree of reusability. Orchestration and choreography environments, along with environments that facilitate flow logic (XAware, for example) are common ways in which to create task services, although many are still writing code to stitch together services with business logic to expose “task” services. Task services also typically involve operations on more than one entity. When processing a purchase order, for example, a process may require validating a customer (using the “customer” entity service), generation of a unique purchase order number (using a order number generator service – a utility service), and adding the order to the provisioning system (using the purchase order entity service). A requirement to access multiple entities is an indicator that your service is a task service. Task services are often referred to by other names, among them: business process services, process services, task-centric business services, or orchestration services (when using orchestration tools).
Utility Services – services that are technology-oriented rather than business focused. Utility services typically provide common and reusable functions that cut across functional domains, such as event logging, notification, and unique number generation. Utility services are often referred to as “technology services” or “infrastructure services”.
The service category definitions are just the beginning in Erl’s book. The heart of the book discusses a palette of principles that guide a designer through the complex activity of creating services with appropriate characteristics for a particular use case and environment within an SOA. This is a book that I highly recommend, and I plan on referencing Erl’s ideas frequently in future blogs.
Wednesday, April 2, 2008
The Long Tail of Services
The “Long Tail” moniker has been used (some would say overused) in marketing and mass media over the last couple years. Now, as different use cases for SOA evolve, the metaphor seems appropriate to explain the growing use of services outside of the core domain of SOA, business process implementation and integration. If you’re not familiar with the term “long tail”, it is used to describe how companies like Amazon, iTunes, and Netflix have monetized the huge number of low-volume products they carry in inventory. While traditional retailers make most of their money selling only the blockbusters, these companies have discovered how to make significant money from the products that sell in very small quantities. In “The Long Tail” diagram below, the green area (the head) represents the “blockbusters”, a small number of high volumes sales items. The yellow area is the tail, representing a large number of items selling at very low volume. The shaded area under the curve can be thought of as revenue. You can imagine that if the tail is long enough, its revenue is significant, and can even exceed that of the head. Chris Anderson coined the term “The Long Tail”, and wrote an excellent book on the subject, which you can read more about here.
The Long Tail of Services
The long tale metaphor also aptly explains and helps justify the phenomenon of minimalist services created for singular purposes. While the SOA mantra is to create services for reuse, the rise of Web 2.0 technologies like
The Long Tail of Services: Single-use and low reuse services may outnumber those designed for reuse. In “The Long Tail of Services” diagram, the horizontal axis represents individual services, and the vertical axis shows “instances of use”. The head area represents services that are reused many times. The tail area shows services with ever decreasing reuse, culminating with services used only a single time (single-use services).
Services for Web 2.0 Applications
Building services for consumption in a user-facing application is quite different than building services to feed core business processes. If you download and use any of the AJAX-like environments, or Adobe’s Flex, and build a sample display fed from XML data, you’ll likely notice the XML structure tends to follow a simple, almost table-like structure. This is very simplistic compared to the information-rich XML structure you might expect in real-world business objects like a purchase order, invoice, or insurance policy. The latter are the domain of SOA proper, the subjects manipulated by services while moving through business processes.
At first glance, I would say the Web 2.0 style services are high-quantity, commoditized, point services fulfilling a specific, singular purpose. Don’t expect reuse from these, as they were not designed with reuse as a design criteria. But thinking further about this, I now feel that a small service like this may actually be a good candidate for reuse. The reason: its visualization is the main manifestation of its existence. In fact, a user who sees the visualization of the information is probably going to be the one to recognize that it can be used in other situations. Isn’t this a much more powerful reuse driver than a UDDI query, or worse, a WSDL file sitting on a web server or file system somewhere? Even with a nice WSDL viewer, it takes imagination to envision the data reused in another application. If this visualization aspect does turn out to be a big factor in reuse, perhaps that will drive a movement to publish services with default visualization components. It sure makes sense to be able to visualize a data structure in a display composition, rather than simply viewing an XML structure.
Other Aspects of The Long Tail of Services
The Long Tail of Services diagram is also a good context to help rationalize other aspects of service oriented design. I can envision where on the graph you would expect to apply the most governance energy (services whose intent is high reuse), and where you might expect to use light-weight REST or POX rather than SOAP as a delivery mechanism (in the long tail). Debates such as REST versus WS-* are still simmering, but The Long Tail of Services may at least provide a different dimension on the discussion, providing a context where one point of view makes more sense relative to one section of the curve.
Credits: The Long Tail picture was created by by Hay Kranen / PD, and annotated by me.
Monday, March 31, 2008
Web 2.0 Powered by SOA
Mark Scrimshire blogged about attending a Ray Valdes presentation on Portals and Mashups (see the blog here). The article nicely explains how Web 2.0 and SOA technologies combine to produce a new generation of portals, fed by information culled from throughout the enterprise. The separation of concerns between Web 2.0 and SOA technologies can be summarized in a single sentence:
“Information is delivered through a Portal, Not by a Portal.”
Simply put, Web 2.0 provides the visual set of user-customizable portlets, while SOA supplies the information for the visual screens. The information is typically provided in a service-oriented manner, with a lightweight REST approach gaining preference over SOAP for the service delivery mechanism. Interestingly, over 50% of the audience was specifically using an SOA strategy, but only about 10% felt the process was successful. Deployment cylces were reportedly very long, on the order of 2 years before demonstrating value.
The project I lead at XAware.org fits nicely into this Web 2.0 and SOA approach. XAware lets you quickly build and manage data services from any number of enterprise data sources, then deliver those services using a lightweight REST or POX (plain old XML over HTTP) transport.
Friday, March 21, 2008
Eclipse Conned By Microsoft
While I believe Microsoft is in a different galaxy when gaging their level of Open Source commitment, I do believe they are moving in the right direction. They are doing just about what you might expect from the largest, most successful commercial software company in the world. They are encouraging interoperability to increase their own platform market. But Sam asked for patience from the EclipseCon crowd, noting that in 1995, everybody assumed Microsoft missed the boat on the internet. Ten years later, they are one of the dominant players in that space. Sam propositioned that with Open Source too, Microsoft may be starting slow, but ten years from now, Microsoft may be known as a dominant Open Source player. I am skeptical on this point, as I believe were most of the attendees. But Sam's interoperability initiative is at least a good step in the right direction.
I attended a number of EclipseCon sessions Wednesday morning, covering Service Component Architecture (SCA) tooling, JBoss's jBPM, and Eclipse metadata management initiatives. The SCA tooling is part of the new SOA Tools Platform, one that is emerging as an important member of the Open Source SOA ecosystem. XAware plays well with all these tools, interoperating at a number of levels, ultimately providing information-rich services as the foundation of an SOA initiative.
As if a Microsoft keynote speaker at an Open Source event weren't unusual enough, things grew really strange when I had a brief encounter with a flamboyant Marilyn Monroe while exiting the convention center. A number of her bouncing body parts looked totally fake, not least of which was her platinum blonde hair, obviously a wig. It turns out she was stumping for NetBeans among the Eclipse faithful. For those who don't know, NetBeans is the Sun-sponsored competitor to Eclipse, also an Open Source, pluggable Interactive Development Environment (IDE). Marilyn smiled broadly and handed me a disk, then invited me to the NetBeans party at the Techmart building next door. Instead of heading to my car, I took a left turn towards the Techmart (guess I'm a sucker for such advertising gimmicks), and took a quick walk through. The NetBeans crew had free beer and other refreshments along with demonstrations of the NetBeans environment. I didn't have much time to hang around, but I appreciated the amusing marketing ploy, a perfectly targeted campaign aimed at EclipseCon attendees.
Friday, March 7, 2008
Urban Sprawl in SOA Land
Where will this “urban sprawl” of services come from? The new killer app for SOA is Rich Internet Applications (RIA). Vendors and pundits are vocal about the perfect fit of RIA and SOA. Environments like Flex , Appcelerator, and many of the AJAX-based development environments like Tibco GI seem to perfectly match RIA and services.
It seems like an excellent fit on the surface, using services to populate sections of the display and to perform major operations like "process order". But management of the services is a glaring risk area. SOA generally strives to create coarse-grained services aligned with steps in a business process. You can visualize each service as an activity node on a flow graph. From this basic idea you get many of SOA's benefits: coarse grained, loosely coupled, reusable services that can be re-orchestrated into new business processes.
In the RIA-SOA scenario, left unchecked, I envision a high number of very granular services. Most of these will be tightly coupled, not very reusable, and RPC style. Maybe there is nothing wrong with this, but it is a significant divergence from the core principles of SOA.
I personally like the idea of RIA-SOA, but the trick will be to encourage and enforce SOA principles in the development of this new style of application. Otherwise, expect rampant proliferation of low-value services.
I can envision certain RIA development styles that are more “service oriented” than others. A quick example can illustrate this. Suppose an auto insurance company needs a new policy administration system. From the user perspective, an agent may enter a policy number and expect to see the auto policy in a multiple-tab view. Lets say that one tab shows the policy owner (name, address, contact info, etc), another tab shows coverage information (dollar limits for damage, medical, liability, etc.), and a third tab shows premium information.
The designer of such an application has many alternatives to supply services to power the screens. The primary characteristic differentiating the approaches is how coarse-grained the services are. For illustrative purposes, lets talk about three degrees of coarse-grain-ness: coarse-grained, medium-grained, and fine-grained. A coarse-grained approach would provide services to “get policy” and “update policy”. The RIA application would call “get policy” when the agent enters the policy number. Each tab would read and update appropriate sections of the single, shared policy structure. The agent would click an update button to invoke the “update policy” service under the covers, which sends the policy structure to a service which performs the needed updates. This strategy not only limits round-trip calls to the server, but conforms to SOA norms by encouraging development of more coarse-grained services that are likely more reusable and more loosely coupled.
A medium-grained approach would provide us with a separate service invocation for each of the tabbed panels. Three tabs leads to 6 services to read and update appropriate portions of the policy. The application would likely exhibit better perceived performance, as the user could view the first screen as soon as the first service (get policy owner) completes. While we have potentially 6 round trips instead of 2 in the coarse-grained case, the update operation may deal with less data, since we only have to update individual portions that changed. These services seem reusable and loosely coupled as well, as they are grouped around business information that likely is used by many applications.
A fine-grained approach leads to a larger number of services. Imagine you design your GUI top-down. You go along building screens and stubbing out services you will later create to populate the fields and react to user events. Your services are precisely defined to fit the specific needs of each screen. It a bit harder to imagine this style with our insurance example, but perhaps we define a service to retrieve name, another for address information, and another for contact information. Each section of each screen gets its own service. We have many more services now, but we increase the opportunity for perceived visual refresh performance. Another benefit is that the service definitions fall out immediately from the information sections of each screen, making the design effort straightforward. But the sheer number of services will cost us in terms of management overhead. And these services are so closely aligned to screen layout as to make reuse outside the RIA environment very unlikely.
From this example, we see that as we move down the scale towards more fine-grained services, we increase the opportunity for perceived visual refresh performance while we increase the number of round-trip service invocations to the server. We also increase the management overhead by introducing dramatically more design artifacts.
While the policy administration example shows tradeoffs in the service design approaches, in the context of service orientation, the characteristics are not quite so arbitrary. To be service oriented, you must strive to provide coarse-grained services that are reusable and loosely coupled. To a large extent, if you think in terms of defining the information payloads for services at a higher level, from the business analyst perspective, you will achieve better reuse and loose coupling. On the other hand, if your service interface is defined by a specific set of screen fields, you have tightly coupled your service to its consumer. When the screen changes, your service interface must change. Such a service has a singular purpose, will not be reusable in any other context, and so by definition, is not service oriented.
The message to RIA designers and architects is simple. Yes, industry needs you to combine RIA and SOA to achieve a new level of productivity and richness of user experience. But you should take up of the cause of SOA while you build your RIA. Be service oriented so your services are loosely coupled. Be service oriented so your services can be reused elsewhere. Your efforts will be a productivity multiplier within your organization, bearing fruit from your work long after your current project. Be service oriented, and in the process, you can stop the sprawl.
Tuesday, February 26, 2008
4 Generations of Services
While working at MCI in 1995, I was exposed for the first time to the benefits of service orientation. I was responsible for the order entry application for 1-800-MUSIC-NOW (which turned out to be a marketing flop), in which call center agents needed to process credit card payments for music CDs. Fortunately for me, MCI was already accepting credit card payment for long distance service. Even more fortunate was that a forward-thinking architect working in the credit-card processing group in
The long term vision of SOA is to enable rapid assembly of applications by orchestrating services into new business processes. Unlike the modest cost savings I experienced at MCI, the cost reductions achieved in a mature SOA could be immense. The traditional 12 or 18 month development cycles involving armies of analysts and developers are replaced by a business analyst drawing a flow graph of the new process, then clicking a button for deployment to enterprise-ready infrastructure. The "service oriented" approach is measured in days or weeks using a fraction of the engineering resources.
The industry is a long way from realizing the SOA vision, of course, but service orientation has certainly evolved a good deal in the past decade. To better understand this evolution, it is helpful to categorize technologies into generations. For example, programming languages have been categorized as they matured, from machine code to assembly, then FORTRAN, C/C++ and Java, and finally 4GLs like PowerBuilder, SQL, ColdFusion. Each generation achieved higher levels of abstraction and more statement power, making it ever-easier to translate process descriptions and algorithms into machine-executable form.
As service orientation has matured, a number of generations of services have emerged. These generations are defined loosely by how well they support or implement the major characteristics of SOA: standards-based, loosely coupled, coarse-grained, and business-orientation enabling an analyst to understand and manipulate it. Early generations reflect less of these core SOA values, and later generations are more comprehensively based on these values. Looking at the landscape of services over the last 5 years, I see 4 generations of services:
1st Generation Services - Simple services coded in a 3GL language like C, C++, C#, or Java, which don't use modern service standards like WS-* or REST. These services tend to tightly couple the consumer with underlying resources. Older distributed computing technologies like CORBA and DCOM fall into this category as well.
2nd Generation Services - Services that are standards-based and fairly simple, like implementing an operation to retrieve, modify, create, or delete a data set on a database. These services can often be auto-generated from other sources, such as from a Java or C# class, an EJB, or a database query. These services tend to reflect a method on an object, or expose an underlying implementation strategy like a relational table. They are easy to create, but because they are technology-oriented rather than business-oriented, they are unwieldy to use directly in a business process. Instead, they require combining with other services and logic to provide the proper level of granularity for orchestration.
3rd Generation Services - Truly "service-oriented", these services are aligned with a step in the business process. Loose coupling is achieved by explicitly defining data formats that are the payload of the service request and response, and these formats are driven by analysts that know the business process at hand, not by technologists attempting to optimize execution times and storage requirements. These services are often created by stitching together and transforming 1st and 2nd generation services to achieve a coarse-grained service that is suitable for orchestration and at the same time achieves loose coupling.
4th Generation Services - These are 3rd generation services that are institutionalized as managed, secure, governed, and reusable services. 4th generation services involves an ecosystem of SOA-aware technologies and procedures, which allow construction and management of business processes and higher level services. Given time to achieve 4th generation services, a company will maximize the benefits of SOA, enabling them create and modify business processes quickly to meet the changing demands of the business.
The precise boundaries of the generations and the metrics used to categorize a service can certainly be debated. But the concept is valuable in that it helps clarify the goal, to ultimately maximize the benefits of an SOA. These concepts also help justify implementing services in projects that have more modest goals. Maybe you know a function will be re-used across departments. Or, you anticipate that your basic service will be used by a 3rd generation service, thereby growing the foundation that will become an SOA based on 4th generation services. We don't need it all today, but we can derive concrete benefits in the short-term while maneuvering towards an even more attractive set of benefits in the future.
Saturday, February 9, 2008
SOA Sweet Spot: Integration
A survey released this week from AmberPoint, titled "State of SOA Adoption Survey", shows steady growth in SOA adoption among respondents. While I always take a vendor-sponsored survey with a grain of salt, AmberPoint seems to have found their way to real SOA implementers in the corporate environment. Systems Integrators, vendors, and consultants were culled out of the distribution list, leaving only end-users: "a database of IT professionals who have an understanding for SOA concepts and methodologies.... a large population of architects, operations staff and developers." Only a fraction of respondents were AmberPoint customers (15%). The promising news from the survey is that the vast majority of respondents (98%) viewed SOA projects as having a high degree of success. That figure breaks down with 38% stating their projects were a success, achieving all desired goals, and 60% cateogorizing projects as "partially successful", meeting most of the goals.
I happen to agree with the results, as they are consistent with a steady growth in SOA projects that I have seen. One of the more compelling survey questions deals with what problems companies are solving with SOA - Integration tops the list by far, with 75% of respondents saying SOA addresses integration-related issues. I saw one article this week about flailing SOA projects (Time for a ’stimulus package’ for SOA? ), but there seems to be a developing consensus that SOA doesn't solve every problem. No surprise there. Like any technology, SOA is good at solving many problems, but some problems are better left to other solutions. What this survey clearly indicates is that integration is SOA's sweet spot.
Extreme Governance?
There was a lot of talk about governance this week at Gartner's Application Architecture, Development & Integration Summit in Las Vegas. What is SOA governance? Simply put, SOA governance defines the policies, procedures and rules of how an organization implements and manages its SOA. Just like we have a development process guiding how we develop core software (XAware uses Agile/Scrum), SOA governance defines the process for SOA development initiatives across the enterprise. Issues to be managed include who can define services, who implements services, permissions for who can access them, on what platform they run, and who pays for development and maintenance.
At the show, I talked with many enterprise users to get reactions to the governance talks. The message from Gartner is clear - Paulo Malinverno stated in one presentation that an SOA with no governance is doomed to failure. But most of the companies I talked to, in trying to implement SOA, are either not implementing governance, or are still struggling with how to do it. I am convinced many others have governance, but are calling it by a different name. The common strategy seems to have a single point of authority, such as an enterprise architecture group, which defines the policies and ensures compliance.
In a conversation with Gartner analyst Roy Shulte, I asked his thoughts on SOA governance. In his view, governance is merely "the workflow in IT". Again, this sounds like nothing more than a process to manage services and other components in the SOA.
Just Enough Governance
Paolo and others caution against too much governance, which might smother and cripple a fledgling SOA initiative. In this respect, I look at agile development processes as the model for appropriate levels of controls. Scrum and XP both value working software over documentation and heavy-handed processes. In fact, I like the term "extreme governance" as a moniker for SOA governance in an agile environment. For developers, the connotation is light-weight, as-needed controls. For the executive who skims over details, the company's "extreme governance" process should win bragging rights in the fight to maintain firm control over the IT rebels. We'll fill him in on the play on words later.
For my part, I would simply recommend to users to stay pragmatic. Services are becoming easy to build, so the number within the enterprise will naturally grow rapidly. The key is understanding that some of the services should become "investment engines" that deserve more oversight to extract meaningful, enterprise-wide value. Services on the edge of an enterprise require more control than services deployed for departmental use. Services with broad use potential within the enterprise should be institutionalized and deployed on enterprise-scale, operationally sound infrastructure. To me, staying pragmatic and applying controls in the proper contexts is the definition of "extreme governance".