Raised in the Croftfoot district of Glasgow, Harris began his youth career with Clyde, but moved to Rangers for a year, before returning to the Bully Wee's setup. Harris signed professional terms for Clyde at the start of the 2004–05 season, and made his senior début on the last day of the campaign, playing the full ninety minutes in a 1–1 draw against Ross County. He played more games the following season, including Clyde's 5–2 defeat to Rangers in the Scottish League Cup, and won the penalty which gave Clyde the lead. Harris got an extended run in the team in the latter half of the 2006–07 season, due to injury to Neil McGregor.
Harris signed for Dumfries club Queen of the South in July 2007, scoring his first senior goal against Dunfermline Athletic in a 1–1 draw in mid-March. In the 2008 Scottish Cup Final, it was a Harris free kick that was headed home by Jim Thomson to make the score 2–2; Rangers ran out 3–2 winners. He scored his first goal in the 2008–09 season with a free kick away to FC Nordsjælland in the UEFA Cup second qualification round. This made him the only Queens player to score in the away leg of a UEFA competition. Harris made his 100th appearance for Queens on 22 August 2010 in the 3–1 league win away to Cowdenbeath. Harris said of his time in Dumfries "I've got to say I really enjoyed those four years at Queen of the South. It was a very special time in the club's history. I particularly enjoyed the 2008 Scottish Cup Final, then playing in the UEFA Cup in Denmark and even scoring in Copenhagen was a bonus."
Blackpool and Rotherham
After his contract with Queen of the South expired, Harris had a trial with English Championship side Blackpool. After being involved in Blackpool's pre-season fixtures, Harris signed a two-year deal with the option for a further twelve months; he arranged to shared a flat in the town with fellow Scottish player Barry Ferguson. Harris' competitive debut for the Seasiders came in the League Cup defeat to Sheffield Wednesday on 11 August 2011. Unable to claim a regular place in Blackpool's first team however, Harris did not make his Football League debut for the Seasiders until April 2012. Harris joined Rotherham United on a one-month loan deal in September 2012, and said he would be open to extending the deal. However, Rotherham were unable to extend the deal as he was called back by parent club Blackpool after playing five games for the Millers.
Sheffield United and Fleetwood Town
Blackpool loaned Harris to Nigel Clough's Sheffield United, playing in England's third tier, in January 2014; Blades defender Tony McMahon travelled in the opposite direction on a similar deal. After making his club debut on 26 January 2014, in an FA Cup tie against Fulham, Harris signed a permanent deal for Sheffield United, with McMahon agreeing to remain with Blackpool on a permanent basis with the option of another year. At the time of Harris' arrival, United were in 19th place in the league, however they kicked on for a much more successful second half of the season. They made it to the FA Cup semi finals where they lost to a Hull City fightback, while in League One they finished seventh. Harris's contract with United was extended on 16 May 2014. He scored his first goal for the Blades on 18 October 2014 against Bradford City in a 2–0 victory at Valley Parade. He played in the first leg of the League Cup semi final against Tottenham Hotspur at White Hart Lane - Spurs won the leg 1–0 and went through 3–2 on aggregate after a 2–2 second leg draw. Harris didn't play in the second leg. A fifth place league finish earned a play off semi-final tie against Swindon Town; Harris played in both legs, which Sheffield United lost out 7–6 on aggregate. On 18 February 2016, Harris signed for Fleetwood Town on loan for the rest of the season.
Bristol Rovers
Harris signed for Bristol Rovers on 2 February 2017 on a short term deal. He made his debut in a 1–1 draw away to Port Vale on 18 February 2017 which he marked with an own goal to give the opposition the lead. After making only a few more appearances for The Gas, Harris was not offered a contract and it was confirmed he would leave the club at the end of the season.
Telford United
In November 2017, Harris joined AFC Telford United of the National League North as cover for the club's regular left-back, who was cup-tied. He made one appearance, in a 0–1 FA Cup defeat at Hereford.. In March 2018 he rejoined the club for a second spell but was not offered a new contract at the end of the season.