Because of “new” ideas such as workflow and BPEL our ways of identifying and analyzing automation needs have changed. More and more, we do no longer start at what a user needs, but at what needs to be done; we start analyzing the business processes first. And that’s a really good thing.
Now, when we have our business processes, brave people dare to say that the y are in fact the requirements for the software that needs to be created. Very courageous even say, that they define – or at least inspire the design of – the (software) services that will combine into the software. (The reason for this is, that it’ll make your life as a software designer a lot easier to keep in pace whenever the business processes change.)
But when we “really” start designing/analyzing that part of the business process that needs to be automated (or supported by software), it’s asif we take a step back and start thinking: now, how would a user want to do this… and we recombine everything again, even if this means that means making the underlaying services less functionally coherent.
Now, let’s think of humans as just a “biological” software component implementation.
Humans interact with software using a very specific protocol, which translates incoming data to visual stimuli (the GUI) and keyboard and mouse actions to outgoing data.
The model that mostely is used (not the model I present here), has too many limitations. The entire webbased/thin clients wave for example, uses a pull model, where data is only shown to the user if the data is pulled from the backend; in most applications, there is no push. However, in real live applications, there often is a need for it… and it’s better supported by a mental model that looks at humans as components as components do not only have required interfaces (with operations that must be provided by another part of the system), they also have provided interfaces (that can be called by other parts of the system).
More and more human interventions will get automated. It might not look as a happy future, but rule engines could replace some if not a lot of the “manual” human jobs done today. Replacing these tasks with a piece of software will be a lot easier, if the interaction was embedded in component.
…
I’m sure that some people might be offended by the ideas in this post (especially the part about replacing a person with a rule engine), but I’m going to give it some more thought to see where I could end up with this train of thought. And I’m also going to investigate on how other protocols are formally specified. Perhaps that might give me some idea on how to specify the computer-human interaction more precisely.