Throughout the last decades, communication networks have become embedded into almost every aspect of our day-to-day lives (e.g., watching movies, online shopping, sharing moments with friends and family). Moreover, as the support for the transport of audio and video became the norm, new application domains have kept emerging every day. One of these, the Tactile Internet, enables the transport of the sense of touch. Consequently, it allows the end-users to interact with a remote environment in the same way they would if they were present locally. While such applications could revolutionize many industries by enabling users to transport their skills (e.g., surgical skills) across the globe, they pose many new challenges to communication networks, such as the need for very low latency. Yet, providing low latency is fundamentally different from providing high bandwidth, and, as this thesis demonstrates, existing solutions developed for bandwidth-oriented services are not directly applicable to low-latency services. This thesis explores how programmable networks can be used to facilitate emerging low-latency services. Specifically, it combines the advantages of (1) Software-Defined-Networking (SDN), a paradigm in networking that centralizes the control plane, and (2) programmable data planes, which enable an on-the-fly deployment of novel algorithms to the network switches. In particular, this thesis explores what SDN controller tasks are feasible to be offloaded to the data plane, the trade-offs in doing so, and their benefits on low-latency applications. Moreover, it takes advantage of the more fine-grained monitoring possibilities of programmable data planes and incorporates these measurements into the data plane algorithms. As a result, this thesis develops a set of solutions that enable network switches to react to short-term changes in the networking traffic and act independently (or with limited input), improving the Quality of Service (QoS) of low-latency flows.First, we investigate the limitations of programmable switches and ways to overcome them by developing an application to detect heavy hitters (e.g., flows that consume most resources in the network). Next, we explore the concept of network slicing, i.e., reserving part of a physical network for a specific service. We demonstrate that network switches can combine data plane measurements and limited (preconfigured) input from the central controller to enable elasticity, i.e., the ability to automatically scale the assigned network resources based on the flows' requirements with negligible delay. Next, we analyze the co-existence and interactions between flows using different congestion control algorithms and/or having different RTTs. We use this information to develop a data plane algorithm to improve their interactions. Finally, we demonstrate how congestion detection and avoidance can be achieved in the data plane without any assistance from the end-hosts.Embedded and Networked System