Briefing Study: Requirements Analysis and Specification (slide 16)
Using the Entity-Event Analysis technique
Entity Life Histories are a very specific technique but where a supplier is involved, it is probably best to record the business rules in prose with each requirement specification. Each supplier will have its own technique for translating business rules and the sequence of allowed processing into logical system specifications.
If there are very specific rules as to how events should be sequenced and allowed to interact with entities, this can be documented as part of the CRUD matrix (below).
Some might still want to do ELHs for one or two very key entities to the business.
CRUD Matrix - Create, Read, Update, Delete
- Identify business events, e.g. Customer Order Received and Customer Order Received With Payment
- Look at each function defined in Function Definition. Track back to
its triggering dataflow(s) - these will be Events.
It could, for example, be receipt of an order, receipt of a payment against an invoice, decision to add a new product to offer for sale, despatch of an order or receipt of a delivery from a supplier.
Follow the processing of that event through the various elementary processes (or parts of a process) that make up the function. Identify the entities affected and the way they are affected - they will be on dataflows, either carried with the event's triggering dataflow or picked up from or created / updated into datastores via dataflows. Every time a user has to make a decision before deciding how to process an item then that is a separate event.
For example, whether there is a payment with the order, or where, say an authoriser has to decide whether to authorise an order that would place a customer over their credit limit. In this latter case, the order would be put into the system, the system would prevent the actual processing of the order and instead would put in suspense, awaiting authorisation from a manager. Here, the processing of the first event, Customer Order Received, can automatically be directed down one of two routes - normal and into suspense (if this order would take them over their credit limit). Another two events would then be the manager picking off orders in suspense and either deciding to authorise them for fulfilling, or to reject the order with a letter to the customer explaining the situation (Suspended Order Authorised and Suspended Order Rejected).
- For each event you identified, create a new row on the CRUD matrix and put in the Event Name. Next decide which entities are Created, Read, Updated or Deleted.
- For each such event, also describe the detailed effects of the event and any business rules that can be applied automatically An example would be that the accounts of customers who have unpaid invoices over 30 days past their due date must be put into suspension.
A more straightforward example would be where a customer order turns out not to violate any business rules. You'd describe the effects something like this. The customer entity is read to match against the name on the order. A new Customer Order entity is created. For every item ordered, an Order Line entity is created with product and order quantity details. To get the product details, the Product entity would be read. The order total is used to check against the Customer Account to see if the credit limit would be exceeded. If so the Customer Account entity is updated to put it into suspense.
What about the business rule that a customer can only purchase things on credit if they have an account?
What's likely to happen is that the order entry screen will have somewhere that allows you to put in the customer name to see if they have an account. If not and the order wasn't accompanied by payment, the user wouldn't process the order but would instead write back to the customer. An alternative would be to put in the order details but put it into suspense until payment is received. Next, write to the customer explaining that the order is on hold until payment is received. Users will decide these sorts of details.
Something akin to the above prose description would go into the appropriate requirements catalogue entry and something more precise in the CRUD Matrix.
Good Practice Tip
After a meeting, summarize the outcome in an email, asking for confirmation / correction. Make this a priorty and do as soon as you can, preferably before the end of the day. Ask for responses within two business days.
If you ran a workshop, get its outputs summarized and into an email that you send to every participant. If it means updating diagrams, include them. Again, seek confirmation / correction within two business days, three or four if it was a major workshop with lots of or complex output.
As above, make this a high priority to get done as soon as possible after the workshop. Don't let more than a couple of days elapse, maybe a bit more if it entails lots of work.
Always make it a matter of courtesy to email them immediately after your meeting / workshop thanking them for their time / taking part and letting them know when you will email them with the output. Keep to your word.