Challenging the specification
A few years ago, I was the technical lead on a project to decommission another front office system and consolidate it onto Summit. One of the developers, who was working on a DS-API interface to replace the old system’s feed down to the settlement system came to me with a problem: The feed should be a relatively straightforward trade feed, but he’d been sent a spec where the state transition diagrams for the trades would need to be extended with extra modes and transitions and the interface would need to re save the trade in Summit. It all seemed a bit over the top, and the developer had questioned it but the analyst who had come up with the design was adamant it was required.
I called the analyst
“I’ve just seen your spec for the state transition diagram changes for the back office feed. It looks a bit complex. Can you explain why we need extend the State Transition Diagrams to support this interface? And why does the interface need to re save the trades?”
“We send the trades to an external agency for settlement. They charge for every message we send them. We don’t want to send them a message for every trade save, only when something changes that affects back office processing”
This makes sense, and is a perfectly reasonable business requirement. We can do this..
“So when the settlement staff save a trade, they need two types of save – a “send to back office” save and a “don’t send” save, so we need to add those actions to the State Transition Diagram. The feed should only pass the “send to back office” saves down to the settlement agency, and then save the trade back to verified in Summit.”
Now we have a functional specification telling us how to fulfill the business requirement. Extending the state transition is a load of extra work, requiring database meta releases, core rebuilds and GUI changes. We want to avoid this if we can, as there are far easier ways to do this. How did the analyst come up with this design?
“Is this how the old system worked”
“Yes”
There’s the answer. When writing the specification for the feed, the analyst has made the mistake of writing down ‘how the old system works’, not ‘what the old system does’. For an analyst familiar with the old system, this is the easiest thing to write down, but it’s not what we need. This a common problem when you are replacing existing software, and as a developer you need to watch for it.
If you have a business requirement, very often the old system and Summit will naturally handle it in different ways. To get a good design, you need to start with the ‘what it does’ business requirement, and then create the ‘how it does it’ functional specification. The functional specification for the old system may be relevant, but don’t be afraid to throw it away if a different approach is simpler or better. Trying to make Summit do back flips so it works the same way as the old system is a waste of time, and often destroys much of the efficiency benefits that come from moving to a new platform. We don’t actually have the full business requirement, we’ve got a functional specification for the old system. Let’s get the full requirement…
“Do the settlement team have a set of rules about when the trade should be ‘sent to back office’, or do they do something random like flip a coin?”
“They have a list of fields that are relevant for the back office. If those change they ‘save for back office'”
I thought so. Summit can handle this quite easily by doing an entity comparison in the feed between the current and previous version – then only send trades that have relevant fields changed.
“Could we have the feed check those fields, against the previous version of the trade and only feed the trades where they have changed?”
“Yeah, you could do it that way”
“I think we will. Can you send us a list of the fields that need to be checked?”
A short conversation, but what we’ve done is focused in on what needs to be done, and come up with a better approach to how we are going to do it. The new functional approach is much better for two reasons:
- the code is all one binary so we don’t need to fiddle around making state transition changes, GUI changes and trying to implement database releases. It’s going to be faster to implement.
- the send/don’t send decision is now fully automated, so there is no possibility of user error saving the trades. The new feed will be better than the old one.
The developer had tried to have the same argument, of course, but had been shot down. So it goes…










