Каријеру је почео 2011. у клубу Патрик тистл, гдје је провео четири године и одиграо 121 утакмицу, након чега је прешао у Лутон таун, који се такмичио у Енглеској лиги 2.[3][4] Послије три године, вратио се у Шкотску, у Климарнок.[5] За клуб је одиграо 101 утакмицу, а 2020. прешао је у Мадервел као слободан играч.[6]
За репрезентацију Шкотске до 21 годину, одиграо је једну утакмицу, 2013. док је за сениорску репрезентацију Шкотске дебитовао 2018 и учествовао је на Европском првенству 2020.
Клупска каријера
Почетак каријере
Каријеру је почео у млађим категоријама клуба Вишав Викомб вондерерс, а затим је био капитен Абердина до 17 година.[7] Године 2009, прешао је у академију Селтика,[8] са којим је освојио Куп и лигу у сезони 2010/11. последњој у тиму.[9]
Патрик тистл
Из академије Селтика отпуштен је 2011,[10] након чега је почео професионалну каријеру и потписао је једногодишњи уговор са тимом Патрик тистл.[11] Дебитовао је 17. септембра, у побједи од 4:0 против Ер јунајтеда, када је у игру ушао са клупе, а први гол за клуб, постигао је 30. септембра, у побједи од 5:0 против Гренок Мортона.[12] У сезони 2012/13, одиграо је 38 утакмица, а Патрик тистл је освојио Другу лигу и изборио пласман у Премијершип, а играо је и финале Челенџ купа.[12] Због својих игара, изабран је у идеални тим лиге.[13]
На дан 27. јануара 2015. Блекпул је своју првобитну понуду од 50,000 фунти за О’Донела, повећао на 125,000.[14] Клуб је прихватио понуду, али је О’Донел одбио понуђене услове и остао је у клубу још шест мјесеци, до истека уговора.[15] Након истека уговора, напустио је Патрик тистл, на крају сезоне 2014/15,[16] а за клуб је одиграо 139 утакмица и постигао је девет голова у лиги.[12]
Лутон таун
На дан 22. јуна 2015. потписао је двогодишњи уговор са чланом енглеске Лиге два — Лутон тауном.[16] За клуб је дебитовао 11. августа, у побједи од 3:1 против Бристол ситија у Лига купу.[17] Први гол за клуб постигао је 1. септембра, у побједи од 2:1 против Лејтон Оријента, у Трофеју ЕФЛ, куп такмичењу за клубове из трећег или четвртог ранга енглеских лига.[18] Сезону 2015/16. завршио је са 33 одигране утакмице и једним постигнутим голом.[19]
Други гол за клуб постигао је 13. августа 2016, на почетку сезоне 2016/17, у ремију 1:1 против Јовил тауна.[20] Након пораза 2:0 од Кровли тауна, 17. септембра, изгубио је мјесто у првом тиму, које је преузео Џејмс Џастин, који је имао 18 година и дипломирао је на академији.[21] Послије пет утакмица, због повреде Џастина, вратио се у први тим у побједи од 2:1 на гостовању против Лејтон Оријента, 15. октобра.[22] Поново је изгубио мјесто у првом тиму након што се Џастин опоравио, али је ушао на полувремену на утакмици против Солихул Морса, у ФА купу, гдје је постигао два гола, у преокрету од 0:2 до 6:2.[23] Нашао се у првом тиму на утакмици против Карлајл јунајтеда у лиги, која је завршена 1:1,[24] а на крају сезоне 2016/17, уговор му није продужен и отишао је из клуба.[25]
Климарнок
На дан 4. јула 2017, потписао је трогодишњи уговор са шкотским Климарноком.[26] Након што је Стив Кларк постављен за тренера, играо је добро и 2018. добио је позив у репрезентацију. У августу 2019, клуб му је понудио нови трогодишњи уговор, али је он одлучио да сачека крај сезоне и донесе одлуку.[27] У јануару 2020, Оксфорд јунајтед је послао понуду за њега, али договор није постигнут прије истека трансфер рока.[28] На крају сезоне 2019/20. одбио је нови уговор и напустио је Климарнок.[29]
Мадервел
На дан 13. августа 2020, потписао је уговор са Мадервелом на пола године, до наредног трансфер периода.[30] На дан 1. фебруара 2021, продужио је уговор са клубом до краја сезоне.[31] На дан 13. априла 2021, потписао је двогодишњи уговор са клубом, до љета 2023.[32]
Репрезентативна каријера
За репрезентацију Шкотске до 21 годину одиграо је једну утакмицу, у фебруару 2013.[33] У мају 2018, по први пут је позван у сениорску репрезентацију Шкотске, за пријатељске утакмице против Перуа и Мексика.[34] Дебитовао је 29. маја 2018, у поразу 2:0 од Перуа.[35] Позван је у тим и за утакмице у септембру 2018, а добио је похвале за игру у побједи од 2:0 против Албаније у Лиги нација.[36]
На дан 19. маја 2021. нашао се у тиму за Европско првенство 2020,[37] које је због пандемије ковида 19 помјерено за 2021.[38]