As a freshman at West Virginia, Harris averaged 9.8 points in 22 minutes per game. He averaged 17.2 points and 3.5 rebounds per game as a sophomore. At the end of the season Harris transferred to Michigan State, picking the Spartans over offers from Michigan and Purdue. Under NCAA transfer rules, Harris had to redshirt for the 2014–15 season. On July 1, 2015, Harris was charged with operating a vehicle while intoxicated and refusing a preliminary breath test. As a result, he was suspended by Michigan State indefinitely. He was reinstated prior to the team's trip to Italy but did not play in any games. After Denzel Valentine injured his knee in late December, Harris would replace Valentine in the starting lineup and be counted on to step up his production in Valentine's absence. Harris had 27 points against Oakland in a 99–93 overtime win. He averaged 9.3 points and 2.1 assists per game as a junior. On October 18, 2016, Harris was named to the watch list for the Jerry West Award, given annually to the top shooting guard in the nation. He had 19 points on November 18 in Michigan State's home opener versus Mississippi Valley State. In the following game against Florida Gulf Coast, Harris led the Spartans with 33 points, but missed two free throws in the waning seconds to give FGCU a chance to win. Harris tallied 20 points including five three-pointers in a 71–63 win against Tennessee Tech on December 10. He led the way for the Spartans in a January 4 matchup against Rutgers, scoring a Big-Ten-career-high of 24 points and the Spartans ran away with the game. He had 21 points in an 82-75 loss to Indiana on January 23. In a loss to Purdue on February 18, Harris was carted off the floor after what ended up being a season-ending knee injury with eight minutes remaining in the game. He averaged 10.4 points per game as a senior.
Professional career
After not being selected in the 2017 NBA Draft, it was not until January 2018 when he finally signed his first professional contract, with the Wisconsin Herd of the NBA G League. He was let go by the Herd on February 14 after averaging 2.2 points per game in 10 games. However, he was resigned by the Herd on March 10 after a season-ending injury to Cliff Alexander. In July 2018, Harris signed with Tampereen Pyrintö of the Finnish league. Harris signed a short term contract with Tromsø Storm in Norway but cancelled his contract when his trainer Chris Warren got his contract terminated by the Tromsø Storm. In four games he averaged 23.0 points, 8.8 rebounds, 4.3 assists and 1.3 steals per game. On November 4, 2019, Harris signed with MZT Skopje of the Macedonian League.