A method of sending data packets from a sender to a receiver in a communication network, over one or more communication links, said data packets forming a data flow, said method comprising: determining a latency constraint comprising a maximum delivery target time period associated with data packets forming said data flow; determining a reliability constraint comprising an indication of data packets of the data flow delivered within the latency constraint; obtaining an indication of performance of each of said one or more communication links between said sender and receiver, the indication of performance comprising feedback from said receiver in relation to one or more data packets sent by said sender to said receiver using said one or more communication links; and determining a raw data carrying capacity of each of said one or more communication links indicating the raw data carrying capacity of each of said one or more communication links within said latency constraint, based on said indication of performance of said one or more communication links; determining a latency-constrained data carrying capacity of each of said one or more communication links indicating the data carrying capacity of each of said one or more communication links within said latency constraint, said latency-constrained data carrying capacity being based on said reliability constraint; calculating a data batch size for each of said one or more communication links between said sender and receiver based on said determined raw data carrying capacity of each of said one or more communication links; selecting a number of said data packets and redundant packets to send in said calculated data batch size in dependence upon said determined latency -constrained data carrying capacity of each of said one or more communication links; and sending one or more data packets from said data flow together with said redundant packets in accordance with said selection in said calculated data batch for each of said one or more communication links. determining a latency constraint comprising a maximum delivery target time period associated with data packets forming said data flow; determining a reliability constraint comprising an indication of data packets of the data flow delivered within the latency constraint; obtaining an indication of performance of each of said one or more communication links between said sender and receiver, the indication of performance comprising feedback from said receiver in relation to one or more data packets sent by said sender to said receiver using said one or more communication links; and determining a raw data carrying capacity of each of said one or more communication links indicating the raw data carrying capacity of each of said one or more communication links within said latency constraint, based on said indication of performance of said one or more communication links; determining a latency-constrained data carrying capacity of each of said one or more communication links indicating the data carrying capacity of each of said one or more communication links within said latency constraint, said latency-constrained data carrying capacity being based on said reliability constraint; calculating a data batch size for each of said one or more communication links between said sender and receiver based on said determined raw data carrying capacity of each of said one or more communication links; selecting a number of said data packets and redundant packets to send in said calculated data batch size in dependence upon said determined latency -constrained data carrying capacity of each of said one or more communication links; and sending one or more data packets from said data flow together with said redundant packets in accordance with said selection in said calculated data batch for each of said one or more communication links.