A method for generating, from Virtualized Network Functions, VNFs, existing in a VNF catalog, a Network Service Descriptor, NSD, for instantiating a network service which satisfies given network service requirements, the method comprising: selecting, from the VNF catalog, VNFs that provide functionalities and architectural blocks, ABs, required to fulfill the network service requirements; generating functional forwarding graphs, FFGs, from dependencies and interaction requirements between the functionalities of the selected VNFs, wherein generating the FFGs is a recursive process that: - starts from a root functionality in the hierarchy of solution map, SM, functionalities, - is invoked for each child functionality and returns all the possible FFGs in the context of the functionality on which it was invoked: -- when the functionality is a leaf functionality, only returns the functionality itself, and -- when the functionality is not a leaf and it has children, combines all the FFGs resulting from the invocations on its children and adds itself as another FFG to the set of results, and returns the set; generating architectural forwarding graphs, AFGs, by substituting the functionalities in the FFGs for the ABs of the selected VNFs, wherein the generating: - is invoked for each of the generated FFGs, - each of functionalities in the FFG is substituted by a chain of ABs realizing the functionality, - generates all the possible AFGs by combining different options of substitution for each functionality, and - adds all the architectural dependencies in the chain of ABs to the AFGs as appropriate; generating at least a VNF forwarding graph, VNFFG,, which includes relations between the functionalities and the ABs of the selected VNFs as well as traffic flows between the selected VNFs; and creating the NSD, the NSD including the VNFFG, for instantiating the network service. selecting, from the VNF catalog, VNFs that provide functionalities and architectural blocks, ABs, required to fulfill the network service requirements; generating functional forwarding graphs, FFGs, from dependencies and interaction requirements between the functionalities of the selected VNFs, wherein generating the FFGs is a recursive process that: - starts from a root functionality in the hierarchy of solution map, SM, functionalities, - is invoked for each child functionality and returns all the possible FFGs in the context of the functionality on which it was invoked: -- when the functionality is a leaf functionality, only returns the functionality itself, and -- when the functionality is not a leaf and it has children, combines all the FFGs resulting from the invocations on its children and adds itself as another FFG to the set of results, and returns the set; - starts from a root functionality in the hierarchy of solution map, SM, functionalities, - is invoked for each child functionality and returns all the possible FFGs in the context of the functionality on which it was invoked: -- when the functionality is a leaf functionality, only returns the functionality itself, and -- when the functionality is not a leaf and it has children, combines all the FFGs resulting from the invocations on its children and adds itself as another FFG to the set of results, and returns the set; -- when the functionality is a leaf functionality, only returns the functionality itself, and -- when the functionality is not a leaf and it has children, combines all the FFGs resulting from the invocations on its children and adds itself as another FFG to the set of results, and returns the set; generating architectural forwarding graphs, AFGs, by substituting the functionalities in the FFGs for the ABs of the selected VNFs, wherein the generating: - is invoked for each of the generated FFGs, - each of functionalities in the FFG is substituted by a chain of ABs realizing the functionality, - generates all the possible AFGs by combining different options of substitution for each functionality, and - adds all the architectural dependencies in the chain of ABs to the AFGs as appropriate; - is invoked for each of the generated FFGs, - each of functionalities in the FFG is substituted by a chain of ABs realizing the functionality, - generates all the possible AFGs by combining different options of substitution for each functionality, and - adds all the architectural dependencies in the chain of ABs to the AFGs as appropriate; generating at least a VNF forwarding graph, VNFFG,, which includes relations between the functionalities and the ABs of the selected VNFs as well as traffic flows between the selected VNFs; and creating the NSD, the NSD including the VNFFG, for instantiating the network service.