Born in Paddington, Barnes was brought up in the Felixstowe area as a Barnardo's Boy. He featured for junior side South Suffolk Old Boys and was on the books at Ipswich Town as a schoolboy. However, he joined Coventry City as an apprentice in May 1979, and was converted from a striker to a full-back role.
Coventry City
While with Coventry, Barnes received England youth caps and honours while also making nine top-flight appearances at Highfield Road. He left in April 1982 to rejoin Ipswich on a free transfer.
Ipswich Town
Rejoining his boyhood club, Barnes spent two years at Portman Road where he made 17 appearances. He made his debut for the club in the First Division match against Swansea City on 27 November 1982 and made six first-team appearances during his first season with Town. He made a further ten starts and one substitute showing in his second season, before playing his final game in the East Anglian derby on 23 April 1984.
Wolverhampton Wanderers
Barnes secured a £35,000 transfer to Wolverhampton Wanderers in October 1984 where he became a first-team regular, making 88 appearances in three seasons at Molineux. However, he joined just as Wolves were on a free-fall through the Football League, suffering two successive relegations to Division Four. He faced his future club Colchester United in the Football League play-offs at the semi-final stage in the 1986–87 season, overcoming Colchester to reach the final, but the club lost out to another of Barnes' future clubs, Aldershot, in the final at Wembley.
Aldershot
A move to play-off winners Aldershot was the next destination for Barnes for a £25,000 fee, where he spent two years playing in the Third Division, making 69 league appearances. In his second season with the club, their second in the Third Division, Aldershot finished rock-bottom of the league, allowing Sheffield United to buy the player for £50,000 in July 1989.
Sheffield United
Barnes made the step up to Second Division football with Sheffield United, who had just been promoted to the league. He did not look out of place in the higher tier as he helped the Blades to promotion to the First Division at the first time of asking, securing a runners-up spot in the league. He also aided the club in consolidating their position in the top tier as it evolved to become the Premier League. Injuries aside, Barnes was virtually ever-present for two seasons but fell out of favour with manager Dave Bassett who tried unsuccessfully to sell him to Bristol City. Barnes was also unhappy with his playing terms, initially rejecting a new contract in 1992. Having lost his place in the side, he was finally transferred to Watford in January 1994 with the Blades recouping the £50,000 they paid for him. He left Bramall Lane after four-and-a-half years having played 82 league matches and 107 games in all competitions.
Watford
A move to Watford allowed Barnes to make a fresh start in the south, but his time with the club was not fruitful, managing just 16 games over two seasons with the Hornets. Suffering from niggling injuries, a run of five consecutive matches for the club in February to March 1996 was the most Barnes could manage, and he was eventually released in 1996 as Watford were relegated to the Third Division.
Colchester United
Barnes' former Aldershot teammate Steve Wignall brought him to Layer Road in 1996, on a free transfer following his release from Watford in August 1996, making his debut the following day in a 2–0 home reverse against Hartlepool United. He played eleven times for the U's over the course of eight months, but was unable to shake off a persistent groin injury. Barnes was forced into retirement at the age of 35 in March 1997 when he had his contract cancelled by mutual consent, having played his last professional game in a 1–1 draw with Mansfield Town on 14 December 1996.