Born in Dudley, West Midlands, Penn began his career at Birmingham City in their youth system in July 2001. He joined the youth system at Kidderminster Harriers in March 2002, and appeared in one youth team match against Wellington on 7 March before joining Scunthorpe United"s youth system in July 2002. He joined Kidderminster Harriers on a free transfer in the summer of 2005.
Shortly after he joined he had a short spell on loan at Alvechurch before breaking into the Kidderminster side.
Penn went on to make over 150 appearances for the club, and also played for the England C side during his time there. He then joined newly promoted League Two side Burton Albion in July 2009, for a club record fee thought to be £30,000.
Penn moved to Cheltenham Town on a free transfer in May 2011, after he rejected a new contract from Burton. Following the departure of club captain Alan Bennett in the January 2013 transfer window, Penn was named the new club captain by Cheltenham manager Mark Yates.
Penn signed for League Two rivals York City on a two-and-a-half-year contract for an undisclosed fee on 6 January 2014.