David signed a professional contract with Norwich City in June 2009 and his first team debut came on October 6, 2009, as a substitute in a 1–0 win over Gillingham in the Football League Trophy. In March 2010, Stephens joined Football League Two side Lincoln City on loan for the remainder of the 2009/10 season.
Stephens signed for Scottish Premier League team Hibernian on a three-year deal in July 2010 and made his debut for Hibs as a substitute in the opening day 3–2 win at Motherwell on August 15, 2010.
Stephens then left Hibs in August 2012 to return south of the border, signing for Football League Two club Barnet. He featured regularly for Barnet, forming several different centre back partnerships throughout the course of the 2012/13 season. Barnet kept 15 clean sheets out of 46 games in the League in total, but were relegated following a 2–0 loss to Northampton on the final day of the season. The defender was voted Barnet’s Player of the Season by supporters in 2012/13 and again in 2013/14. After promotion in 2014/15, Stephens rejected a new deal at Barnet and left the club on July 1, 2015.
After leaving Barnet, Stephens joined the Wood in October 2015, making his debut in a 2–1 victory against AFC Hornchurch in the FA Cup. Stephens would play a pivotal part in Wood becoming an established National League outfit, before playing a critical role at the heart of the defence in the Wood team that reached the National League play-off final in 2017/18, losing narrowly to Tranmere Rovers 2-1 at Wembley Stadium.
Stephens made 36 league appearances for the Wood in 2018/19, scoring 2 goals.