It's too easy to place blame (what was it - 60-odd percent?) on the Network Rail and its infrastructure. Sure - it's hugely lacking, and a significant part of that shortfall probably arose in the irrational rationalisation that BR did back in the 70/80s; removal of anything surplus like points, sidings, multi-tracking, longer block sections and so on.
(I may be inaccurate in this distant recollection but) AFAIR there is a single block section north of Beverley that extends all the way to either Hutton Cranswick (~10 minutes) or Driffield (15+ minutes) meaning, of course that a late-running service cannot be followed until at least 10 or 15 minutes later. Thus one late train has the propensity to make the next train late as well - because of rationalisation. The situation is worse, of course, on the miles of single(d) track we enjoy nowadays across the network.
But as regards (let me call it) general late running - let's consider a hypothetical situation. You are waiting at Rotherham for your train to Doncaster (which started at Sheffield; it's not a "through" train from elsewhere), and it's late (again). Why is it late? Suppose it's because either the train itself or one or more of the crew (or both) are delayed arriving into Sheffield because they were working a delayed departure from Leeds, which in turn was delayed by another late running service there blocking their path, which in turn was caused by something in Manchester and so on.....
We could extend our consideration to the events in Leeds or in Manchester (which will be equally relevant) but for the sake of simplicity, let's just consider the Sheffield departure.
Were there a spare train and/or crew available in Sheffield, your departure from Rotherham might have operated on time using this spare resource. But constant cost reductions on the Railway (both public and private) mean that there is insufficient money spent on spare resource; there are no extra trains and few (insufficient) spare staff. It relies to too great an extent on every piece of the diagramming jigsaw (for BOTH staff and equipment) to fit together as planned in order to work. And when something does go wrong (whether it be a cause outside the railway - trespassing or suicide for example - or within it) the jigsaw falls apart.
This could potentially be remedied quickly. What is immediately needed is a cost penalty to be imposed on the operator as part of their contract for failure to operate (whether punctually or at all). It needs to be pitched at such a level that it ceases to be cost-effective to operate unreliably; such that it is cheaper in the long run to have spare resource in place to cover contingencies than it is to simply fail to run to time. It must NOT be cheaper to fail than it is to succeed.
That works, of course, only when private enterprise is contracted to operate the services as it would focus their financial minds on performance improvement as a cost-limiting factor rather than the sunk cost of over provision for contingency. But there is little to be gained in "fining" an operator in the public sector, as Northern will shortly become, as there is no net loss to anyone. In such a case, the only meaningful solution is to offer personal incentives and disincentives to those in charge such that they, too, deem it beneficial to provide enough resource resilience to cover such contingencies.
Which just leaves us with the question of where to park the spare trains (eg at Sheffield) and we're back to rationalisation again.