A method of controlling network routes, the method comprising: providing a network, the network comprising: a plurality of edge devices, each of the plurality of edge devices executing an application having an application requirement and each of the plurality of edge devices having a forwarding engine; a plurality of core switches interconnecting the plurality of edge devices; and a network controller coupled to each of the plurality of edge devices and the plurality of core switches; characterized by receiving, by the network controller, a plurality of application requirements, the plurality of application requirements including application requirements of the applications executing on the plurality of edge devices, wherein the plurality of application requirements includes at least one hard application requirement and at least one soft application requirement; determining, by the network controller, a plurality of routes responsive to the received application requirements; programming, by the network controller, the forwarding engine of each of the plurality of edge devices and a forwarding engine of each of the plurality of core switches responsive to the determined plurality of routes; and executing an application, the application having hard and soft network related requirements, when the hard application requirements have been met, and the soft application requirements have not been met, wherein the hard requirements are the network requirements that must be met for the application to proceed, and wherein the soft requirements are the network requirements under which the application's performance is substantially optimal. providing a network, the network comprising: a plurality of edge devices, each of the plurality of edge devices executing an application having an application requirement and each of the plurality of edge devices having a forwarding engine; a plurality of core switches interconnecting the plurality of edge devices; and a network controller coupled to each of the plurality of edge devices and the plurality of core switches; characterized by receiving, by the network controller, a plurality of application requirements, the plurality of application requirements including application requirements of the applications executing on the plurality of edge devices, wherein the plurality of application requirements includes at least one hard application requirement and at least one soft application requirement; determining, by the network controller, a plurality of routes responsive to the received application requirements; programming, by the network controller, the forwarding engine of each of the plurality of edge devices and a forwarding engine of each of the plurality of core switches responsive to the determined plurality of routes; and executing an application, the application having hard and soft network related requirements, when the hard application requirements have been met, and the soft application requirements have not been met, wherein the hard requirements are the network requirements that must be met for the application to proceed, and wherein the soft requirements are the network requirements under which the application's performance is substantially optimal.