This is the fifth of a series of questions from SO4IT a Swedish IT consultancy company who are using GigaSpaces technology to build a SID based Order Management system for Communications Service Providers.
So4It: This is the summary of how I intend to implement Customer Ordering all the way to Provisioning. I have added questions along the way.
So4It: This is how I interpret the usage of the ProductOffering and ProductSpecifications:
A ProductOffering has the commercial data on it and an Atomic or Composite ProductSpecification assigned to it. We will sub class the ProductSpecification so it will contain a fixed set off attributes and additionally to these we will also add a number of ProductSpeccficationCharacteristics to it.
Andrew : I always think of it as being the other way round – the Spec has one or more ProductOfferings assigned to it (the same ProductSpec) can be sold at different prices). So the Product Offering should be linked to one ProductSpec – or be a composite ProductOfferings have sub ProductOfferings below it. The atomic sub ProductOfferings must be linked to a ProductSpec but the ProductSpec itself could be a composite. For example: imagine you are selling iPhones (some complete with SIM cards and a “tariff plan” and others just an iPhone but without a subscription or SIMI). There would be a composite ProductSpec representing the iPhone with SIM and there would be ProductSpecs ‘below’ it representing the basic iPhone and the SIM card,. There would also be other ProductSpecs representing the network services you get as a customer of the phone company. You would have a series of ProductOfferings that would offer the iPhone without a SIM card and the iPhone with a SIM card and the relevant network ProductSpecs. You would do it this way to be able to reuse the network ProductSpec for Android phones for example. There would be multiple ProductOfferings linked to the composite iPhoneSIM ProductSpec and network ProductSpec each with different commercial terms.
A ProductSpeccficationCharacteristicValue can for example be "color of the cover on the iphone" and the ProductSpecificationCharacteristic is "cover color" and the possible values are "red","green","blue" etc. In the web this will be displayed as a drop down box and the customer chooses a value. Is this the correct idea of how it is used?
Andrew: OK – this will work.
So4It: The Use Case continues as follows:
So4It: This is the summary of how I intend to implement Customer Ordering all the way to Provisioning. I have added questions along the way.
- The use-case starts when a Customer enters the web and wishes to order a product. The web displays all the products offerings that are active.
- The Customer selects a ProductOffering he/she wishes to purchase.
- The web shop sends a request to the Order Management system that the Customer with a CustomerAccount.id wishes to purchase a product described by the ProductOffering
Andrew: Ok this is going well, but I'm going to interrupt with a philosophical point. You could use a CustomerOrder for this request which would be a nice and loosely coupled design and SID compliant. This would mean that the Order Management system could receive CustomerOrders from any system (internal or external). However that may be “overkill” – it would be OK to just have a XML message called something like “Web Shop Request”. Are you going for a SOA design or are you just simply passing messages around. If SOA you need to think about the services offered by the Order Management and other systems.
So4It: This is how I interpret the usage of the ProductOffering and ProductSpecifications:
A ProductOffering has the commercial data on it and an Atomic or Composite ProductSpecification assigned to it. We will sub class the ProductSpecification so it will contain a fixed set off attributes and additionally to these we will also add a number of ProductSpeccficationCharacteristics to it.
Andrew : I always think of it as being the other way round – the Spec has one or more ProductOfferings assigned to it (the same ProductSpec) can be sold at different prices). So the Product Offering should be linked to one ProductSpec – or be a composite ProductOfferings have sub ProductOfferings below it. The atomic sub ProductOfferings must be linked to a ProductSpec but the ProductSpec itself could be a composite. For example: imagine you are selling iPhones (some complete with SIM cards and a “tariff plan” and others just an iPhone but without a subscription or SIMI). There would be a composite ProductSpec representing the iPhone with SIM and there would be ProductSpecs ‘below’ it representing the basic iPhone and the SIM card,. There would also be other ProductSpecs representing the network services you get as a customer of the phone company. You would have a series of ProductOfferings that would offer the iPhone without a SIM card and the iPhone with a SIM card and the relevant network ProductSpecs. You would do it this way to be able to reuse the network ProductSpec for Android phones for example. There would be multiple ProductOfferings linked to the composite iPhoneSIM ProductSpec and network ProductSpec each with different commercial terms.
So4It: In my interpretation the attributes on a sub class of a ProductSpecification are really constants for that ProductSpecification. This means that for these attributes the Customers will not be able to change the values of these attributes but instead we set them to values that are constant for this particulate ProductSpecification. Additionally we have other attributes that are something the customer can choose from and they become ProductSpecificationCharacteristicValue(s). Then when we instantiate the product we use both types of values for the final product. Correct?
A ProductSpeccficationCharacteristicValue can for example be "color of the cover on the iphone" and the ProductSpecificationCharacteristic is "cover color" and the possible values are "red","green","blue" etc. In the web this will be displayed as a drop down box and the customer chooses a value. Is this the correct idea of how it is used?
Andrew: OK – this will work.
So4It: The Use Case continues as follows:
- The Order Management system receives the request that the CustomerAccount wants to Order the ProductOffering. It also receives the selected ProductSpecificationCharacteristicValue(s) for the different ProductSpecification the ProductOffering contains.
Andrew: Yes, good work. It is interesting that the PSCVs don’t have to have a direct association (relationship) with the OrderItem line – they can just be quoted in the against the relevant ProductSpec in the XML structure. If you were designing a database to hold this structure you would have to worry about how to model the relationship between the OrderItem and the PSCV.
So4It:
So4It:
The question is, if I store it as ProductSpecificationCharacteristicValues (that will keep it general and we can easily add new values) but at the same time if we have concrete sub-classes like SimCardResource that has attributes it is easier to understand. What way do you prefer when you do it?
Andrew: You must instantiate the selected or allocated attribute values as ProductCharacteristicValues, ResourceChacterIsticValues and ServiceCharacteristicValues to show the values chosen/allocated to this particular instance of each of the product, the resource and the service. You cannot point to the ProductSpecCharacteristicValue or the ResourceSpecCharacteristicValue etc as this will cause huge problems in the future if someone changes one of these values.
So4It: Maybe there is no right way but I also see that it is harder to do the usage and stuff if everything is so damn general.
Andrew: I agree things are very generic in the SID, but you are doing a great job implementing it - the key to the whole thing is the Product definition or Product Modelling. Get that right and the app will be flexible and easy to use - get it wrong and you've got a nightmare on your hands, but I think you are moving in the right direction - you expose the correct level of detail in the Web Shop to allow the Customer to select and tailor the Product he/she wants and then hide the detail of provisioning down in Order Management and what you call the Order Management Handler - I would call Provisioning Orchestrator or "Provisioning Conductor".
You are correct in having the OM decompose the CustomerOrder into Resource, Service and possibly Work Orders based on looking at the decomposition of the ProductSpec into ServiceSpecs and ResourceSpecs and it is also right to have a separate process "orchistrate" the Service/Resource/Works Orders.
Did I give you my analogy of the restaurant? The WebShop is the waiter with the menu (ProductOfferings) and his note pad (the CustomerOrder) - the head chef (OM system) takes the Order and decomposes that order into different dishes that need to be cooked at different times - he allocates these sub-orders (Service/Resource/Works) (and now he is acting as the Provisioning Orchestrator) to the sous-chefs who cook the meat/vegetables/soup/sweet at the correct time and in the correct quantities and flavours.
So4It:
- The Order Management system inspects the ProductOffer and extract the WorkOrder, ResourceOrder and ServiceOrders from it. It then stores each of them separately but with a common Order number and sets the status to PENDING
- The web shop receives the Order number and a confirmation that the Order has been received.
- The use-case ends
- The use-case starts when the Order Management handler gets one or many Work, Resources and/or Service Orders under the same Order number.
- The Order Management system inspects the Order and decides how to instantiate it as a Physical/Logical Resource(s) and/or CustomerFacingServices. It sends a request to the Customer Management system to add the instantiated Physical/Logical resource(s) and/or CustomerFacingServices to the CustomerAccount.
So4It:
- The Order Management system asks the Provisioning system to provision the instantiated Physical/Logical Resource(s) and/or CustomerFacingServices.
- The Order Management system sets the status of the Order to EXECUTED.
- The use-case ends
The question is, if I store it as ProductSpecificationCharacteristicValues (that will keep it general and we can easily add new values) but at the same time if we have concrete sub-classes like SimCardResource that has attributes it is easier to understand. What way do you prefer when you do it?
Andrew: You must instantiate the selected or allocated attribute values as ProductCharacteristicValues, ResourceChacterIsticValues and ServiceCharacteristicValues to show the values chosen/allocated to this particular instance of each of the product, the resource and the service. You cannot point to the ProductSpecCharacteristicValue or the ResourceSpecCharacteristicValue etc as this will cause huge problems in the future if someone changes one of these values.
So4It: Maybe there is no right way but I also see that it is harder to do the usage and stuff if everything is so damn general.
Andrew: I agree things are very generic in the SID, but you are doing a great job implementing it - the key to the whole thing is the Product definition or Product Modelling. Get that right and the app will be flexible and easy to use - get it wrong and you've got a nightmare on your hands, but I think you are moving in the right direction - you expose the correct level of detail in the Web Shop to allow the Customer to select and tailor the Product he/she wants and then hide the detail of provisioning down in Order Management and what you call the Order Management Handler - I would call Provisioning Orchestrator or "Provisioning Conductor".
You are correct in having the OM decompose the CustomerOrder into Resource, Service and possibly Work Orders based on looking at the decomposition of the ProductSpec into ServiceSpecs and ResourceSpecs and it is also right to have a separate process "orchistrate" the Service/Resource/Works Orders.
Did I give you my analogy of the restaurant? The WebShop is the waiter with the menu (ProductOfferings) and his note pad (the CustomerOrder) - the head chef (OM system) takes the Order and decomposes that order into different dishes that need to be cooked at different times - he allocates these sub-orders (Service/Resource/Works) (and now he is acting as the Provisioning Orchestrator) to the sous-chefs who cook the meat/vegetables/soup/sweet at the correct time and in the correct quantities and flavours.
3 comments:
and the possible operations on the Offer?(discharge, migrate, unlink,...) where´re? Are only catalog in the operations of the service that aggregate in productspecification (with xFS), and will be offer in the layer of offer, and available for CRM? or... should be catalog in productspecification or offering.
So$It and I were not trying to list all the possible operations on an Offer in this blog. We just listed some to allow us to understand the information necessary for an offer and and order. You are correct to say there are many other operations.
Andrew, I like your analogy of the restaurant. I think it is the simplest way you can describe the Order Entry / Order Decomposition and Orchestration concepts with SID data model objects :-) I'll definetely use it.
Post a Comment