Software Defined Networks (SDN) is a new network paradigm that emerged to offer better network management through the separation of network control logic and data forwarding element. This separation speed up network innovation without the need to rely on the vendor-proprietary interface for network element configuration to forward packets. However, SDN is flow driven network, for each arrived flow, a feasible path is computed to forward the flow to its destination. Afterward, the SDN control logic process the corresponding routing and instruct the set of data forwarding elements to install them on their Flowtable to guide the routing process. Unfortunately, the network changes more frequently in dynamic large-scale networks and the Flowtable is a constraint with limited space. These challenges require the SDN controller to compute paths more often which may also need a large number of flow routing rules placement. In addition, the frequency of communication link failures increases lately. The successful deployment of SDN heavily depends on how it satisfies the reliability requirement with uninterrupted services. Several studies were conducted to compute the optimal path for data forward to meet their Quality of Service demand. Other studies focus on reducing the frequency of link failure. Some studies were conducted to manage the constraint Flowtable resources. This survey focuses on Routing rules placement, unoptimized routing, link, and switch load balancing, failure detection, and recovery. The paper extensively discusses each issue and analyzes the weakness of the current solutions. Finally, it highlights potential challenges that need future research attention.