A causare il disastro ferroviario in Puglia sarebbe stata la fatale combinazione di quattro errori umani compiuti nelle stazioni di Andria e Corato. La tratta a binario unico in cui sono morte 23 persone è l'unico in Italia a non essere protetto da un sistema automatico di blocco treno. Sarebbe dunque bastato un investimento da 2 milioni di euro per poter evitare la tragedia. Secondo gli investigatori, il capostazione di Andria ha fatto partire il treno ET1021 nonostante il convoglio ET1016 avesse già lasciato la stazione di Corato, impegnando il binario unico. Alla base degli errori il ritardo accumulato da un terzo treno.
Il via libera fatale - La collisione fra il treno ET1016, diretto da Corato ad Andria, e il convoglio ET1021, diretto da Andria a Corato, è avvenuta alle 11.06. La polizia ferroviaria ha appurato che, nella mattinata di martedì, i treni in transito sulla tratta a binario unico avevano accumulato ritardi. L'ET1016 parte da Corato alle 10.58, dieci minuti dopo l'orario prestabilito. Cinque minuti più tardi, il capostazione di Andria alza la paletta verde che consente la partenza dell'ET1021, nonostante il binario sia occupato dal convoglio proveniente da Corato.
Il terzo treno - Lo sbaglio compiuto dal capostazione Vito Piccarreta, definito "il più grave" dagli inquirenti, è soltanto il primo anello della catena di errori che hanno causato l'incidente. Ad ingannare l'uomo è stato il transito di un terzo treno, l'ET1642, che giunge nella stazione di Andria alle 11.01 (sarebbe dovuto giungere alle 10.37), esattamente all'orario in cui sarebbe dovuto arrivare l'ET1016 (che intanto era già partito, in ritardo anch'esso). Piccarreta ha dunque confuso i due treni provenienti da Sud, come dimostra il fatto che nel fonogramma inviato al collega di Corato parla del transito dell'ET1016.
Due treni da Corato - Il sistema del blocco telefonico prevede che il capostazione, prima di consentire la partenza di un treno, riceva il fonogramma di autorizzazione dalla stazione in cui il convoglio dovrà arrivare. Ed è a questo punto che interviene il secondo grave errore, stavolta compiuto dal capostazione di Corato, Alessio Porcelli. Secondo la Ferrotramviaria il treno ET1016, che si sarebbe poi schiantato contro l'ET1021, è partito senza che il convoglio precedente (il terzo treno, l'ET1642) fosse arrivato ad Andria. Il che ci porta al terzo errore, un errore di valutazione: Porcelli avrebbe dovuto notare che il fonogramma ricevuto da Piccarreta non poteva essere giusto, perché l'ET1016 non poteva essere già arrivato ad Andria. Il tempo di percorrenza della tratta Andria-Corato è di circa dieci minuti, mentre dal fonogramma di Piccarreta risultava che l'ET1016 (che in realtà era il terzo treno, l'ET1642) fosse arrivato ad Andria dopo soli cinque minuti. La discrepanza nei tempi era evidente, ma purtroppo non è stato impedito ai due treni di impegnare entrambi il binario unico.
Gli errori di capotreno e macchinista - A doversi accorgere che qualcosa nel transito dei treni non andava, dovevano essere anche il macchinista e il capotreno del convoglio ET1021 diretto da Andria a Corato. Entrambi avrebbero dovuto infatti segnare nei documenti di viaggio il transito dei due treni provenienti da Corato, l'ET1016 e l'ET1642. I due sono invece partiti nonostante non avessero registrato l'arrivo in stazione dell'ET1016.