I still don't really understand event abstraction hierarchies, and I couldn't think of a good way to describe my confusion. Instead, I'll provide an example from OMS system and see how others would apply the technique to the problem. Several years back, I was fortunate enough to work on a pre-trade compliance engine for an Order Management System. A pre-trade compliance system is used to check all trades before they're executed to prevent costly mistakes and regulatory violations. Generally speaking, there's 4 different people that will use the system: fund manager, trader, compliance officer and compliance manager.
If any transaction violates a rule, the trade cannot proceed until the violation is resolved, or overridden. In this specific situation, all of them use the same exact tool and the page looks the same to all of them. What differs is the security and authorization. A trader can only see certain trades. The fund manager can see all trades for a fund, which could include multiple traders. The fund manager might manage multiple funds. The compliance officer is assigned specific funds and accounts. Any violations for those will show up on his screen. The compliance manager sees all violations.
In terms of authority, the fund manager can revise any transaction for his fund. He can't override compliance violations. The compliance officer can override certain types of violations. The compliance manager can override any violations, or reject an override.
On page 55 of The Power of Events, it states "In fact, it is usually true that two stockbrokers want different views of what is going on in a financial trading system."
Where I get confused is the definition of "view". When I think of view, I think of Model View Controller. Using that definition, all traders have the same view, what differs is the transactions they see. In some cases, all traders for the same fund see all the open, what-if and pending transctions for that fund. Usually this is handled with user groups. One thing that throws me off is diagram 3.4, which shows "Financial Trades level and Transaction Protocol Level." The diagram gives me an impression that hierarchical viewing is about event aggregation. One or more protocol events aggregate up to a financial event. If that's what the book describes, I don't see or understand the value.
The OMS system I worked on used FIX and SWIFT protocol to execute trades. Both of those protocols are complex and difficult to understand. If a software engineer has a hard time understanding FIX and SWIFT, it doesn't make sense to me to expose those details to the trader. Instead, they should just see predefined status codes like: pending, cancelled, executing, etc. I suppose we can show "transaction failed 2-phase commit" to the trader, but does that really make sense? What value does abstract hierarchy give me in this specific situation? The trading system I know of handle transaction status natively and don't expose that as event aggregations to an external system.
On page 135, Table 7.2 shows 2 different levels. My experience with real traders differs from the example in the book.
One thing aggregation would help with is showing portfolio performance. For example, many funds benchmark against S&P500 and Dow. For a large SP500 fund, there's 450-500 stocks, so displaying the weight of each stock gets tricky. One way to visualize that data is to show just the sectors at the highest level. As the user zooms in, they see the industryGroup weights. If they zoom all the way in, they see the sub-industry weights. The closest example to this type of visualization is google charts and google finance.
Was the intent of abstraction hierarchy similar to performance visualization example? If that's the case, I see the value of defining different levels. In this case though, it doesn't have anything to do with events per say, but the technique could be applied to event processing. I just haven't seen it myself, so I have a hard time making that leap. I hope this attempt as explaining my confusion is less obtuse than the previous.
peter
