A method for dynamic inter-cloud placement of virtual network functions, VNFs, in a slice path over a distributed cloud network, wherein the distributed cloud network includes edge clouds (310, 620) which are ingress points for user devices using the network and core clouds (320, 330, 340, 640) which are at least one inter-cloud link removed from the user devices, comprising: determining a pool of candidate slice paths relative to an edge cloud (310, 620) by determining a neighbourhood of available core clouds, wherein the available clouds are limited by the number of VNFs and/or a maximum number of intercloud links, and creating the pool of candidate slice paths which includes every combination of VNFs to the neighbourhood core clouds (320, 330, 340, 640), relative to the edge cloud (310, 620); for the candidate slice paths, determining a load (312, 322, 332, 342) based on each cloud in the candidate slice path, wherein the load is based on at least one of compute load, storage, network capacity and bandwidth for the edge cloud and each core cloud in the candidate slice path; ranking the candidate slice paths based on a composite score that factors in a weighted performance metric and the weighted load, wherein the performance metric corresponds to a service level agreement, SLA, attribute, and the weight applied to the load versus the performance metric is dynamically adjustable to shift the prioritization of load distribution versus performance; identifying a top-ranked candidate slice path; and provisioning the VNFs at corresponding clouds specified by the top-ranked candidate slice path. determining a pool of candidate slice paths relative to an edge cloud (310, 620) by determining a neighbourhood of available core clouds, wherein the available clouds are limited by the number of VNFs and/or a maximum number of intercloud links, and creating the pool of candidate slice paths which includes every combination of VNFs to the neighbourhood core clouds (320, 330, 340, 640), relative to the edge cloud (310, 620); determining a neighbourhood of available core clouds, wherein the available clouds are limited by the number of VNFs and/or a maximum number of intercloud links, and creating the pool of candidate slice paths which includes every combination of VNFs to the neighbourhood core clouds (320, 330, 340, 640), relative to the edge cloud (310, 620); for the candidate slice paths, determining a load (312, 322, 332, 342) based on each cloud in the candidate slice path, wherein the load is based on at least one of compute load, storage, network capacity and bandwidth for the edge cloud and each core cloud in the candidate slice path; ranking the candidate slice paths based on a composite score that factors in a weighted performance metric and the weighted load, wherein the performance metric corresponds to a service level agreement, SLA, attribute, and the weight applied to the load versus the performance metric is dynamically adjustable to shift the prioritization of load distribution versus performance; identifying a top-ranked candidate slice path; and provisioning the VNFs at corresponding clouds specified by the top-ranked candidate slice path.