Coles began his career at Bristol City. He made his debut for the club on 24 April 2000 in a 2–2 home draw against Oxford United. He became a regular fix in the squad at Ashton Gate Stadium two seasons later during the 2001-02 campaign. He scored his first goal for the club in December 2001 in a 2–0 away win over Wrexham.[3]
In January 2003, he helped Bristol City to the third round of the FA Cup and played the full 90 minutes in a 2–0 away defeat against Leicester City.[4] Later that year, he was named Young Player of the Year at the club for the 2002–03 season.[5]
He played a central role in the Bristol City side that reached the Division Two play-off final in May 2004, only to lose 1–0 against Brighton & Hove Albion at the Millennium Stadium in Cardiff in front of 65,167 spectators.[6]
In July 2005, he was arrested and charged for being drunk and disorderly during a pre-season trip.[7] In February 2005, he was placed on the transfer list at Ashton Gate Stadium.[8]
Hull City
On 26 July 2005, Coles was signed by Hull City manager Peter Taylor for a fee of £200,000.[9] He made his debut for Hull on 6 August 2005 in a goalless home draw against QPR.[10]
After a promising start having agreed a two-year contract at the club, he suffered an anterior cruciate ligament knee injury which ruled him out for the remainder of the 2005–06 season.[11] He returned to full fitness in October 2006, coming on as a half time substitute in a 2–0 away defeat against Burnley at Turf Moor.[12]
Hartlepool United
Struggling to break into the first team at Hull at the start of the 2007-08, on 1 October 2007 he signed for League One side Hartlepool United on a one-month loan deal.[13] He made his debut for Hartlepool five days later in a 2–1 away defeat against Nottingham Forest.[14]
Bristol Rovers
On 1 November 2007, Coles joined Bristol Rovers in League One on a 3-month loan from Hull City.[15] The move became permanent on 8 January 2008 when he moved for an undisclosed fee, signing a two-and-a-half-year contract with The Pirates.[16][17]
On 6 January 2008, he scored his first goal for Bristol Rovers in a third round FA Cup tie away to Premier League outfit Fulham.[18] On 12 August 2008, he ended speculation about his future by signing a new two-year contract extension with The Pirates, despite interest in him from Plymouth Argyle.[19]
On 11 October 2008, he scored in a 2–1 home win over Leyton Orient however suffered a serious knee injury.[20] He visited American specialist Bill Knowles during the off-season and returned to The Pirates' squad for the 2009–10 season.[21] In just his second game back from injury, at the start of the 2009-10 season, he scored alongside Joe Kuffour on 15 August 2009 in a 2–0 away victory against Stockport County.[22]
Exeter City
In early June 2011, rumours circulated of a potential move for Coles to Exeter City.[23] A few days later, on 11 June 2011, he moved to League One Exeter.[24] His debut for the Grecians came on 6 August 2011 in a goalless draw away at Stevenage.[25] Later that month, on 24 August 2011, he was a part of the Exeter side that hosted Liverpool in the second round of the League Cup, suffering a 3–1 defeat against the Premier League club.[26]
On 12 March 2012, he suffered a fractured spine in a collision with goalkeeper Artur Krysiak during training, an injury that caused him to miss the remainder of the 2011–12 season.[27] As a result, he was unable to help Exeter avoid relegation into League Two.[28]
In June 2014, he was disciplined by Exeter over offensive comments he made on Twitter. The tweet in question was Coles' response to a tweet he had been sent, with his response including two expletives.[31] He was fined two weeks' wages by Exeter, stripped of the captaincy and transfer-listed by the club.[32]
Forest Green Rovers
On 5 August 2014, Coles joined Forest Green Rovers on a one-year contract from Exeter City.[33] He made his debut for the club only four days later on 9 August 2014 in a 1–0 away win over Southport.[34] His first goal for the club came on 18 October 2014 as he scored the only goal of the game in a 1–0 away victory over his former club, Bristol Rovers, at the Memorial Stadium.[35]
In January 2015, he signed a contract extension ensuring he would remain at Forest Green until the summer of 2016.[36] On 31 March 2015, following the departure of assistant manager Dave Kevan to Notts County, he stepped up to fill a player-coach role until the end of the 2014-15 season.[37]
On 3 May 2015, he featured in the second leg of Forest Green's Conference National play-off clash with former club Bristol Rovers, although he couldn't prevent a 2–0 defeat which saw Bristol Rovers win the tie 3–0 on aggregate.[38] It proved to be his last game for the club as his contract was cancelled by mutual consent in August 2015.[39] Coles stated at the time that he has "no real plans to play anymore", effectively signalling his retirement.[40]