Video streamVideo streamVideo stream
Question indexQuestion indexQuestion index

Interview transcriptInterview transcriptInterview transcriptDiscuss this interviewDiscuss this interviewDiscuss this interview
Pat Helland, MTS and COM+ Architect

Pat Helland has 25 years of experience in the software industry and has been an architect at Microsoft since 1994. He has worked for more than 20 years in database, transaction processing, distributed systems, as well as fault tolerant and scalable systems. Pat worked at Tandem Computers designed TMF (Transaction Monitoring Facility). He was one of the founders of the team that implemented and shipped Microsoft Transaction Server (MTS), now COM+. Pat has recently focused on loosely-coupled application environments.

Pat, tell us a little about your background.

Sure, I got started in the early 80s when I went to Tandem Computers, after dropping out of college - I figured I needed a real job - and I spent most of that time working on a product called TMF - Transaction Monitoring Facility - which is the foundation for Tandem's non-stop systems, it does the database logging and recovery. And then after that, I did a little dallying doing hardware design with multi-processors. And after that I came to Microsoft in '94 and started a project that became the Microsoft Transaction Server, now part of COM+. Since then, I've worked a lot on asynchronous messaging and loosely coupled systems. And now I'm in the .NET Enterprise Architecture team, trying to help our customers understand, what are the issues associated with, distributed architectures, and in particular service-oriented architectures.

Having been involved with distributed computing architectures for a while, can you give us a perspective of how things have evolved over the years?

Sure. I think it's an exciting time to see the changes that have happened, because we started out with a single machine, a big momma mainframe. And then, as we started getting more mini computers working together, we tried to make them look like one system where everybody trusted everything, you've got to do distributed transactions which is a way of pretending that all of these changes either are on one machine even though they're not.

But the problems associated with that have to do with the issues of independence, autonomy and privacy. Can I, as an organization, have my machine, and still work with your machine, your application, in a way that ties things together while allowing me to grow and you to grow without asking permission. In some ways it's a lot like having, you know, a four engine airplane that can fly on three engines. They have a lot more failures, but if you can fly on three or two engines, you have better availability, you have the ability to change and evolve things.

And that's where we're seeing this trend away from tightly coupled distributed object systems, which are fine and they work great, and they solve a problem. But you have those systems sitting here solving one problem, how do you connect into a system solving a different problem.

So, it's really a fascinating inflection point in the industry as we start looking at taking lots of different machines, different systems and allowing them to work together, while maintaining their independence, while maintaining their autonomy, while allowing one to be evolved independent of the other.

You mentioned us moving beyond distributed objects for connecting enterprises together. In what direction do you see us moving?

Well, I think this direction is mostly characterized as service-oriented architecture. That's the buzzword that we've applied. But what it really means is allowing the systems to work together while not sharing more than just the message formats, the schema for the messages, and a contract describing the interaction sequences of those messages. There's policy and things like that, but it's about not knowing much about the other machine.

When I call up to make an airline reservation, I don't know what kind of machine they've implemented it on. When I call up to make a hotel reservation, or to order something from Amazon or Barnes and Nobles, I don't need to know about what their machine is like. I'm working across a trust boundary, and what I need to know is what I need to say, and what they need to say back to me, and how we can come to a co-operative solution. That's the new cool thing that's happening.

(With) Distributed objects, you know so much about the other side. And in this new world you know very little and it allows for independent evolution and allows for a lot of features, a lot of cool things.

Is there still a place for distributed objects or are services now the way to do distribution?

Distributed objects are still very important. But let me first back up and say: Objects are very important. If you want to think about a service as a boundary across which trust is maintained: Inside the boundary, I trust, across boundary, I don't. That's the idea behind services. God bless objects! You just want to use objects. They're an incredibly powerful technique for how you do software engineering.

Sometimes that application is spread across multiple machines. We've seen that more and more, as adding machines was helped us scale out. Now, as machines get more and more powerful, a lot of these applications are going to fit back on one machine, where they didn't fit upon a single machine before.

And so, I think objects are the important thing. Distributed objects, that's fine, you can use them wherever you want to, but I would put the emphasis on services as the key way to hooking together disperate things. And then when you implement each individual thing, objects are just a wonderful, wonderful technology.

Are you saying that the need to separate logical tiers across physical boundaries is simply not going to happen any more and that's one reason why the value proposition for distributed objects is going away?

You have to understand that I get paid to think of far out in the future, right. That's my job, is to say: What are the economic trends and what are we thinking about as we move ahead? It's going to be a number of years before people stop wanting to do multi-tier deployments in order to be cost effective. All that's said and done, Moore's Law seems to be on an inexorable trend, getting larger and larger, and machines are getting more and more powerful, and so as time moves on, it becomes less interesting to distribute them across multiple machines. One thing to remember: If you have a distributed object solution, you're solution is having challenges if the machines are not all up.

These forces that exist when integrating separate enterprises have always been there. What has changed now that we're focusing on services more than tightly coupled systems?

Actually, the forces, they're mitigated with humans. Mostly, you've had people interacting with other people, and behind the people they have their computer systems, right. And so, as businesses have worked together, historically, it's been, you call up and talk to a reservation agent. Or you do whatever it takes to fill out a form and drop it in the mail in order to get the work done.

Now, we're starting to get to the point where we can see that we can actually eliminate more and more of the human touch in making these things work together. And that doesn't need to be a black and white. I think one of the mistakes we've made with B2B computing, is that we assume that we have to be 100% programmatically connected. And I point out: Gee, if you've got people in there doing all kind of this stuff, if eliminating 20% of the interaction is a lot of money, it's a lot of savings, it's fantastic. Because then what you can do is you can take that money, you can reinvest it, solve a few more programmatic problems that people used to have to do, and maybe raise that bar to 25% or 30%. And that then ends up being low hanging fruit that can allow you to tie these machines together.

So, it's just thinking about these independent systems, and beginning to get them to wok together without having humans being the lubrication that allows it to work.

What are some of the challenges of integrating applications that have not existed before?

Well, when you've had a couple apps that have been independently designed, they have different assumptions about the world. Different assumptions about inventory, different assumptions about customers; they probably don't even have the same snail mail address format. It's a lot like: It's true that we can connect the bytes back and forth with IP and TCP today, but that doesn't do me anymore good than if I can pick up the telephone and talk to China, and if I'm speaking only English, and they're speaking only Mandarin, we still can't communicate very effectively. Here's some cool sounds, but it doesn't help get work done.

The same thing's occurring when you bring applications together. The semantics of the interaction is a challenge. It's very, very difficult across an enterprise to get a common understanding of what a customer is, is a great example. Because, this half has got these fields, and that half has got those fields, and maybe you can get some common fields of understanding, but there's still all these differences that are in there.

A huge advantage that we have is XML. XML and XML Schema, and XSD have allowed for at least the expression of what the data formats look like, even though that hasn't helped with all the semantics. But it's a good start. We don't have to worry about parsing, we don't have to worry about a lot of those details. But we still have a huge road ahead of us in terms of rationalizing how we understand the data across differently and independently designed applications.

So how is this going to shake out? How will we establish this common understanding between applications?

Well, I think it's a fascinating area. There's a lot of what we can learn by looking at history. And to me, there's a strong parallel between data, and how you represent structured data, and what happened in the late 19th century with manufactured goods. All these cities were independent and they weren't connected. You know, you would go to one company and they would have their own nut format and their own bolt format, and you would put them together and they would match within the company, but there were no standards across different manufacturers. As people try to start making things work together, the economic forces demanded that these things worked and be able to hook together.

And so what happened is some manufacturers were in a dominant position and they were able to take their standards, and say: This is how we're going to continue to do it, and others then had to adapt to that. Some industries got together and there were consortiums that said: Okay, here is what we're going to do so that we have a common agreement of how our parts will work together, but largely it happened by people having a good design, and then other people being able to make compatible parts that fit with it.

You're going to start seeing that shaking up in the horizontals and in the verticals across the industry as people have applications that need to work together and some apps are going to change because they are going to have to adapt to whatever the common understanding is across the industry.

And so this will be an exciting time as we see things evolve, as we see things change so that they can interoperate, so that they can work together, and can have a common way of understanding the data formats.

Haven't we already seen this with EDI? What lessons have we learned from that experience?

EDI was a fantastic thing; that's the first thing. Yes, it was our grandfather's format, I'm not trying to say that. Yes, it was in binary and it's not as cool as we have in XML. But EDI was pretty rigid. It didn't allow for extensibility and flexibility, and so it had one pretty particular way of doing that. And that became brittle as the applications evolved; it was harder for EDI to change. There's a lot of money in EDI today, so you should tip your hat with respect, you know, at this data representation. Still, I do see more exciting things happening that are going to go a lot farther than EDI has gone so far.

So how does this all relate to enterprise integration?

Well, you hear a lot about EAI - Enterprise Application Integration - and B2B - Business to Business - and those are both important things. I mean, in EAI what you're trying to do is take your existing applications and make them work together without humans in between them. And that's where services could be very powerful, because we're talking about the messages that flow between these applications. That's very much like what goes on in B2B, where you're actually going from one business to another.

There is a subtle difference between the two of them, in that EAI, you need to have federated infrastructure across your enterprise. You need to have solutions that are thinking about identity management, security management, just management, to distributed directory and naming, all of those problems that it takes to run your application, run you enterprise, your IT ship. And so, it's EAI, B2B, they're very, very important, but when I think about services, I fundamentally prefer to call it HST, or Hooking Shit Together.

Why is 'Hooking Shit Together' a more appropriate term?

Because, Hooking Shit Together emphasizes the fact that I've got two things, they're separate, they're independent, and it's about: How the heck do I make them work together. That then takes me to messaging, that then takes me to Schema, that then takes me to the contracts and the flows between them while allowing them to be independent. I think there's far more in common in doing that inside an IT shop, and doing it across IT shops, than there are differences.

So I actually like HST because it emphasizes what's in common about tying things together across machines, without regard to whether they're in the same company or not.

How does HST apply within a typical organization?

It's about all the different pieces. You can't find a real enterprise that has a single standard. I mean, if you have a standard, just wait until the merger and acquisition. Or wait until the CEO plays golf with his brother-in-law who's selling some application that's running on a different platform. All the real companies out there have got stuff from different vendors. And it's just a matter of hooking it together, and talking about: What do you know?

Well, the cool thing about a service-oriented architecture is you know very little about what's on the other side. I'm always mindful of that cartoon I saw which showed a dog typing in a terminal turns to his friend, another dog, and says: On the internet, no one knows you're a dog. In a service-oriented architecture, no one knows what kind of a platform you have on the other side. And no one should know, and that allows you to keep them separate, to grow them separately. And maybe, make a decision - if it's a business decision that makes good sense for your business - to replace it with a totally different platform and still continue to do that interoperability.

It reminds me so much of how cities grow and evolve. One building gets torn down and rebuilt, and another stays right next to it. The streets become something that last much, much longer than the individual buildings themselves. And as you start thinking of enterprise architecture, you have to think about: What is the lifetime of something I'm designing? Is this interface going to really be around longer than the application? That's not an unusual answer. A lot of times the application gets replaced and yet you have to be compatible with the way you get in and out of that application.

So, it's important as architects to think about: What are we trying to do for our business, how are we trying to accomplish it for our business, and what can we sit down and design, and what longevity will it have? And the other important piece to that is, one totally needs to remember, you're going to have different machines from different vendors, that heterogeneity is going to come at multiple levels. It's going to come at the hardware, it's going to come at the operating system, it's going to come at the database, the middleware. And then you get the into this world of applications where there's so many different design points, and each of those is going to have to have ways of interacting with the rest of them. It's a cool business; it's an interesting thing to look at.

What are some best practices we can apply to achieve this level of integration?

Well, I would argue that the biggest best practice is pragmatism. Don't do anything unless it makes financial sense. So if you have an existing app that is just sitting there, and it's this historic monument that was built a long time ago, you're not going to replace it, you're not going to tear it down, you're probably even poring money into it, and you want to make that tap into something else, then do whatever the heck it takes: Screen scraping, HTML parsing, tap in however you can get in. And maybe that application has 2000 different functions. And well, if you do an analysis that 30 of them are the ones that account for enough that it's worth figuring out how to hook them in via service orientation, wrap 30 of them, and let humans type away at a two tier interface on the other ones, or whatever it is. So the big guidance I would say, is just: Follow the business sense. So, what's going to solve your business problems, in the most practical way possible.

You mentioned screen scraping and html parsing. Shouldn't people stick to one model, the service orientation model for integration?

Life is not that clean. It just isn't. You have stuff out there that you have to hook into. And you can't walk in and say - that's like walking up to the mayor of Boston and saying: Hey your roads are crooked, I've got a straight layout for your streets, let's bulldoze everything. That is not real. The reality is, you have these investments, you have these things that you have to work to, and you should do whatever it takes to pragmatically accomplish it.

When I talk about how these things happen, I like to point out the easiest place to build a subway is in Nebraska. You don't have those pesky buildings to deal with. But you also don't have the economic investment to drive you to build that. And so, that is what people are facing in the enterprise. They have stuff, they need to figure out how to mostly grow it, mostly evolve it and let it work together to accomplish what their business needs.

Once in a great while you decide to take an app and throw it away and replace it with something new. But that's about as common as bulldozing a building in a city to put up a skyscraper. It happens, but it hurts, it costs, there's emotional investment in bulldozing that thing, there's pragmatic investments in bulldozing that thing because you've got to go and figure out how to solve problems during the transition of taking one down and putting one up. So mostly, people do a retrofit and figure out how to shore things up to accomplish what their business needs.

Service-oriented architectures allow you the tools to make whatever business choice fits. Because it talks about these being independent things, that can then hook together with others, using messaging, and using the sequences of messages that flow. And so, that then takes the decisions of about what you bulldoze and you don't bulldoze, and puts it back where it should be in the pragmatic business guy's hands.

How will people use services in building their applications?

Well, I usually think of three broad categories for using services. One is if you're building a fresh app - it doesn't always happen that often - but you start out, and you can actually use your services to cut your functionality into a bunch of different pieces giving you scale out as you spread the work around. One cool way of thinking about that is that I can have the front end that does work - kind of like shopping baskets do, you see this in websites a lot - and that can scale out, and then you use messaging, to tie back into the backend system. You see that in all the big websites where you're doing the shopping, and then you push Submit and it goes to the backend system.

So, scaling out is one answer. Another is where you're taking an existing application and you're trying to cleave the part - and I like the word cleave because it's its own antonym, it actually means the opposite of itself - and so, as you cut that application into different pieces, you have to figure out: Can I pull the data apart without too many entanglements. It's not always easy. Can I take the logic apart, and allow, maybe, this piece of code to be running separate form that piece of code and then put messaging in between them as I cleave them apart?

And then, the third category is where you actually take differing apps that were independently designed and bring them together, cleave them together as you cleave to your wife. Sometimes I want to talk about cleavage a lot, but you know, that's really a great point to talk about apps being cleaved together, or being cleaved apart with services.

And what's interesting when you go in and look at these, is that taking applications apart has a huge challenge when people have read the data from other parts and are looking and it's too big of a big ball of mud of entangled stuff that you're trying to pull apart. But the advantage to those cases is at least you have a common understanding of what those data types are because you grew up in the same neighborhood these parts did. Bringing differing apps together sometimes has the disadvantage that you don't understand things the same way. You have different interpretations of what a customer is, of what an item is. These kinds of things.

You've used civil engineering metaphors many times to describe enterprise architectural issues; can you tell us more about this metropolis paradigm?

Well, I've been thinking a lot. I'm a history buff and so I've been thinking a lot about the evolution of cities, and how that has strong parallels in IT. And as I've gone through I've flushed out a metaphor and I'm working to write it up even more, where you look at an IT shop, which has grown up independently from other IT shops, as a lot like a city that grew up independent before being connected by the railroad, right. And that connection by the railroad let people go and see other places.

Now we got the internet connecting IT shops. So you can then see a parallel between transportation and communication, where the railroad would let you bring people and raw commodities over to other places, but it didn't really solve the problem of making things work together. Just like the internet, you're bringing data back and forth. We can shovel bytes around, but we can't really make all the structured data work.

And as I thought more about it, I've seen parallels to manufactured assemblies and virtual enterprises. Also, some really interesting parallels about how you see retail and distribution paralleling business process. And we saw some amazing changes occur in manufacturing when standardization kicked in. Things like, as clothing size becomes something where you can go buy a shirt that's either a little too small, or a little too big. But because of that they get to stamp them out like crazy.

In the early 19th century, you would go and get hand tailored things. And now I feel like I'm trying to tell people: Know, what you want is less accuracy. You want stuff that is, you know, okay, it'll work just fine, but it's not quite up the snuff with all those customized things. And what happened then, is that by putting things into standards, by making them interchangeable, you were able to have a lot of common goods and a lot of pre-manufactured stuff, and we're going to see a lot of that in applications.

When I look at a typical interface application today I see a lot more information coming back from the app than I need to get done what I want to get done. I may be ordering inventory, I don't need to know the inventory balance. I need to know that if I'm ordering ten widgets, and I need the by Tuesday, what's the probability I'll get then. I don't really need to know that there's 40 In the warehouse right now. And as we allow those changes to occur, we can start seeing more interesting integration of apps where the interacting applications know less about what the other one does, but really focus on what they need to accomplish their task.


News | Blogs | Discussions | Tech talks | White Papers | Downloads | Articles | Media kit | About
All Content Copyright ©2007 TheServerSide Privacy Policy
Site Map