Thursday, May 21, 2009
I'll start the ball rolling with some oldies but goodies.
SneakerNet (n,vt) Delivering of (usually) files from one place to another on some form of removable media. The sneakers, of course refer to the need to get it there quickly. Often used to bypass security or other limits. E.g. email attachment size limitations, one system unable to connect to the same network as another system. File type limitations. Usage. I can't email this to you, have you got a thumb drive, I'll sneakernet it to you.
FunnelCast Delivering of information to a large number of people by shouting through a megaphone. The most common means of getting data from the page of a professor's notebook to the page of a student's notebook.
Swivel Chair I first heard this from my colleague Adrian Apthorp. The need to take data from one system and enter it into another can be solved by sitting on a swivel chair so you can switch between the screens with minimal effort.
Have at it and exercise your creativity.
Friday, May 8, 2009
This post arises from conversations (over many years) with John Hall, the late Keith Robinson, Bob Brown, Keri Healy, Nigel Green, Richard Veryard and Fred Fickling. It has to do with how we identify things, immutability and most recently REST. So first the story(originally related to me by John Hall):
Jason has just commissioned a wonderful boat (the Argo) so he could have adventures in the Mediterranean. He commissioned a crew of likely volunteers and set sail in search of (among other things) the Golden Fleece. This was not a short voyage – in fact it lasted many years and they had many adventures – none of which are relevant to this gedanken. Like all boats (holes in the water in which you throw money), Argo needed repairing quite often. So every winter , Argo would be taken to a boatyard and refitted. Old parts were replaced, holes patched, etc.
After several years of this, there were no original parts left on the Argo at all. Everything had been replaced, even down to the smallest dowels. Question 1. Is this boat the "same" Argo as the one originally built? Certainly the crew, the local registrar of ships and taxation authorities would think so. After all, there was no need to reregister it (her, for lovers of boats). However, we know for sure it isn't the same, in fact there isn't a single original component on the boat. So, in an information system, what is the "identity" of the Argo? Does it depend on which information system (registrar/taxation/crew sign-up, repair management for example) we are thinking about?
What we didn't know, is that the wily repair shop had kept all the old parts and had been secretly reassembling them into a boat. When the final wraps came off this new boat, he announced that this was the real Argo, and that he knew the other to be a fake. Question 2. Which is the "real" Argo? Certainly this depends on who wants to know and why? The registrar of ships might well take a pragmatic point of view and decide that the repaired Argo was the "real one" and that the rebuilt one is "something else". Of course the fine piece of woodwork on which the boat's name was carefully inscribed says Argo in each case.
Question 3 (a-f and beyond). Which of our various lenses can/should we be looking at this through? The Checkland CATWOE approach becomes an important set here because the Weltanschauung (loosely translated to be the worldview) partially determines that. I suspect that the Weltanschauung is the overarching concept that allows us to choose our lenses. So what does VPEC-T say here? What does Cynefin say here? What does Systems Thinking have to say? What do Value Networks have to say?...
Question 4. Why bother? This gedanken on its own is a fun mental exercise, but there are some underlying issues that crop up time again in our real world systems. As we start to look at the world through RESTful lenses, we come head-on into representations and the state transitions of representations, and making a clear distinction between the thing and a representation of it. So we have the Argo – and then some systematic representations of Argo. When an event (a repair perhaps) happens to Argo, we may decide to change the state of the Argo representation. Or some system may decide to, while another may not. For example crew scheduling for Argo may care less about repair events than registration. So is there just one representation of Argo (with one URI) or are there many representations of Argo?
As we wrestle with the knotty problems of identification we are forced to combat our views of history – what has happened in the past to the things we care about. How we can or cannot change other people's views of the same thing (the event streams we care about when changes are made are different from other people's). We have to worry about placing ourselves at a point in time and asking questions like, "If I were asking the question last January what would your answer have been? (very useful in market research, courts of law, etc.)"
At the bottom of this is really the "who cares about what?" question and how if we attempt to create universal data models and databases of things we are doomed. Perhaps the best we can do is to keep track of the Event and Content streams as they apply to Policy, manage our own representations of things and broadcast our state changes against those representations pushing the responsibility onto the "subscribers" to decide whether they care.
Wednesday, May 6, 2009
(Can SOA Give You Good Service) identifies some of the troubles with
words when dealing with all the Service terms.
I found it a very helpful article indeed because it helps keep Service and SOA on the straight and narrow. Nice call out of the Web Service vs Service.
Interesting observation that "A service is a logical representation of a repeatable business activity that has a specified outcome (e.g. check customer credit; provide weather data; consolidate drilling reports). It is self-contained, may be composed of other services, and is a "black box" to its consumers."
Nowhere in this definition is there any requirement to get an answer back, except
maybe a status of "yup, I've done that" or "No couldn't do it, sorry". For sure
a result could come back. For sure some system state may be changed (perhaps because
of a side effect), but the key is that it is a black box. Where we do see some confusion is in granularity. I occasionally here the word operation being applied to Services.
So in your example "Check Customer Credit" above, is that really a Service invocation
or is an invocation of an operation on another Service (perhaps a Customer Management service)?
Just dealing with the granularity would help me in understanding the kinds of numbers
that are bandied about at conferences. "We have over 3000 services" vs "We have
40 services (and 3000 operations). Is that simply a packaging issue? Coming back
to the whole WS-something discussion, you make a telling point that "A Web service
is a software system designed to support interoperable machine-to-machine interaction
over a network. It has an interface described in a machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP messages, typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards".
First up this says machine-to-machine. And while the computer at which a user is sitting, operating the browser is most definitely a machine, I am not convinced that WS-something is the most appropriate way of managing that interaction. It may be, but the point is not proven. Secondly, it is not completely clear to me when services actually need to be exposed (assuming that we have defined service correctly). So how much WSDL wrapping do I do? And why? In some ways - especially for internal code, WSDL wrapped service invocation is just really expensive function or subroutine calling. So even though we can define what a service is, it is harder to define what a service isn't, and harder still to choose the right architectural approach to allow for machine/machine interoperability, and human/system interoperability.