Born in Houston, Bates attended the University of Texas and, in his freshman season, won the 1983 College World Series as a part of the Texas Longhorns baseball team. For the next two seasons, Bates was named to the College Baseball All-America Team, a team composed of the best collegiate baseball athletes in America. Drafted by Milwaukee in the 4th round of the 1985 MLB draft, he rose through the Brewers' farm system and teams that he played for won multiple minor league titles. He subsequently made his MLB debut in 1989, after Milwaukee's starting second baseman became injured. A trade sent Bates to Cincinnati in 1990, where the Reds used him as a pinch runner at the end of the regular season and into the postseason. Facing the Oakland Athletics in the World Series, Bates reached base on a pinch hit single against Dennis Eckersley and later scored the winning run in Game 2, as the Reds ultimately swept the Athletics, four games to none. Following the World Series championship, Bates spent two years in minor league baseball, one for the Reds and one for the Chicago Cubs, and last played exhibition baseball in 1995. After retirement, he worked as an equipment supplier in the oil and gas industry in Houston and coached his daughter's softball team.
Bates was born on December 7, 1963, in Houston, Texas, and attended Aldine High School. When the Philadelphia Phillies selected him in the 8th round of the 1982 MLB draft, Bates became the second player ever to be drafted out of Aldine. Instead of signing a professional contract with the Phillies, Bates chose to attend the University of Texas at Austin.
Bates enrolled at the University of Texas at Austin in 1983, and played baseball in his first year there. The 1983 Longhorns finished with a 61–14 win–loss record and were ranked as the number one team in the nation by Collegiate Baseball Magazine. To determine which team would represent the Central Regional in the College World Series, the Longhorns played against the Mississippi State Bulldogs; the Longhorns defeated the Bulldogs and advanced to the World Series. Though the World Series followed a double-elimination format, the Longhorns never lost and defeated the Alabama Crimson Tide 4–3 to win the championship. After the Series, Bates was named to the World Series All-Tournament team, composed of the best players from the series. Writers for Baseball America named him to their honorary Freshman All-America team.
Bates began playing professionally for the Class A-Advanced Stockton Ports, a Brewers farm team which competed in the California League. Though the Ports only had two future MLB position players on their roster (Bates; and LaVel Freeman, who played in two games for the Brewers in 1989), the team had seven future MLB pitchers. Under manager Tom Gamboa, the Ports finished with an 82–63 record and reached the California League playoffs, which consisted of four teams playing in a best-of-five game series; the two winners advanced to play for the League championship. In the first series, the Ports defeated the Modesto A's, three games to one. In the championship, Stockton faced the Fresno Giants, who defeated the Salinas Spurs to reach the finals. With a 2–1 series lead, Stockton lost the final two games, and the Giants won the California League title. Individually, Bates batted .298 and tied for fourth-best on the team, with 18 stolen bases in 59 games played.
In 1986, the Brewers promoted Bates to the Double-A El Paso Diablos, a team that played in the Texas League. The eight home runs that Bates hit and his 75 RBI became the highest of his career at any professional level. The Diablos finished the regular season with an 85–50 record and made the Texas League playoffs, eventually winning the League title for the first time since 1974. El Paso's 85 wins were the most in the managerial career of Duffy Dyer, which lasted eleven years. Bates led the club with 23 stolen bases, but was caught stealing ten times, also a team high.
Before the 1987 season, Bates attempted to make the Brewers' Opening Day roster by playing in Milwaukee's spring training camp. A writer for the Milwaukee Journal Sentinel noted there was "a lot of recent publicity" around Bates, and another Journal Sentinel reporter said he "impressed many with his play". Despite this, the Brewers sent Bates to their minor league camp in Peoria, Arizona, in March. He spent the entire season playing in Triple-A for the Denver Zephyrs of the American Association (AA) and played in 130 games, the second most on the Zephyrs to Brad Komminsk's 135. He was named the AA's All-Star second baseman, and finished the season batting .316 with 51 stolen bases, second most in the AA to Gary Thurman of the Omaha Royals, who stole 58. His 117 runs scored also led a Denver club that won its final 11 games to finish 79–61, one game ahead of the Louisville Redbirds for the best record in the AA. In the first round of the playoffs, Denver faced the Oklahoma City 89ers, defeated them, and advanced to the League championship series. In the match, the Indianapolis Indians defeated the Zephyrs four games to one to win the AA title for the second straight year.
In a Brewer's spring training game in early March, Bates committed two errors against the Chicago Cubs in the top of the 11th inning, as the Cubs scored the winning run without recording a hit, but his 4th-inning single scored two runs. He was again cut from the MLB roster prior to the start of the 1988 season, as Milwaukee manager Tom Trebelhorn named Paul Molitor their starting second baseman. Now in Triple-A, Bates had a five RBI game against the Iowa Cubs on April 12 in a Zephyrs' victory. Hindered throughout the season by a leg injury, Bates hit .258 with 29 stolen bases, a loss of 22 from a season ago, as the Zephyrs finished 72–62; it was the first time in Bates' professional career that a team he played for missed the playoffs.
After the 1988 season, the Brewers added Bates to their winter roster as the 1989 season approached. However, when 12-year Brewer second baseman Jim Gantner re-signed with the club, Bates was demoted to Denver, and the Journal-Sentinel predicted that he would remain there due to his limited defensive versatility. Bates began the season with the Zephyrs and in July was named to the Triple-A All-Star Game. On the MLB level, the Brewers suffered multiple injuries to starting players, having 9 athletes on the disabled list (DL) on August 22 and 14 total players on the DL up to that point. In a game against the New York Yankees on August 15, Gantner played at second base as the Brewers tried to hold on to a 1–0 lead. With Marcus Lawton on first base, Yankees batter Wayne Tolleson hit a ground ball to shortstop Bill Spiers for a potential double play. Lawton ran into Gantner, who had trouble fielding a low throw from Spiers; umpire Dave Phillips called both Lawton and Tolleson out due to Lawton's illegal roll-block, but Gantner tore the medial collateral ligament in his left knee and was placed on the DL. Bates was called up as his replacement.
After the injury, Milwaukee's general manager Harry Dalton said that Bates "is expected to join [the MLB team] by game time [August 16]", adding "he won't be in the starting lineup, but he could play if necessary". Bates made his MLB debut on August 17 as a part of a double switch against the Boston Red Sox: when Dan Plesac replaced Tony Fossas as the pitcher, Bates entered the game for Gus Polidor. Wade Boggs hit a ground ball to Bates, but he committed an error that allowed Boggs to reach and Dwight Evans to advance to third base. No runs were scored in the inning and the Brewers won, 8–4. Bates made his first career start two days later, and his first MLB hit came on August 20 when he reached base on an infield single. Bates then stole second base, and scored on a single by Robin Yount. While he was running out a base hit on August 22, Bates slipped on wet grass and suffered a separated right shoulder. The Brewers placed him on the 15-day DL; as a replacement, Milwaukee acquired Ed Romero from the Atlanta Braves. Bates returned to the team for three more games in September before the end of the season. Over seven MLB games, he batted .214 with three hits, three runs, and two steals.
In late March, Trebelhorn projected that Bates would be Milwaukee's starting second baseman for the 1990 MLB season, although Dale Sveum was bearing down on the starting spot. Bates started at second on Opening Day against the Chicago White Sox, and despite a 2–1 Brewers' loss, Bates' play was complimented. Facing the Red Sox on April 14, Bates hit his only MLB extra base hit, a double, in the 8th inning but committed two errors on defense. He later scored the go-ahead run on a Gary Sheffield double in a 9–5 Milwaukee victory. Previously, he stole second base and home plate in the 2nd. His second (and final) MLB RBI occurred on April 18. Rob Deer scored on his single, after Bates entered the game in the 6th inning to replace Sveum, who had been hit by a pitch an inning earlier. By April 27 Bates was hitting .103 over 29 at bats, as Molitor came off the DL and expected to take over at second: Seth Livingstone of The Telegraph called the switch "merciful". Four days later, Bates was demoted to Denver, where he was the team's all-time leader in steals. For the Zephyrs, he batted .327 in 25 games before Milwaukee traded him to the Cincinnati Reds on June 9. This occurred as part of a four-player deal, in which Bates and outfielder Glenn Braggs were sent to Cincinnati for pitchers Ron Robinson and Bob Sebra. Reds general manager Bob Quinn said he made the trade because, while "we felt comfortable with our pitching staff, we didn't feel comfortable with the right-handed hitters off the bench". Bates later said that he repeatedly asked the Brewers to trade him.
When he arrived with the Reds organization, Bates was assigned to the Triple-A Nashville Sounds of the AA. In a play-in game to determine the leader of the AA Eastern division, and thus the team that qualified for the playoffs, the Sounds played against the Buffalo Bisons. Nashville manager Pete Mackanin called the contest "the most absurd game I've ever seen in my life": the match, which lasted 18 innings, ended when Chris Jones hit a double that scored Bates. Nashville played another extra-inning game, this time a 20-inning contest on September 7, against the Western-champion Omaha Royals in the playoffs and lost. Later, the Sounds lost the series three games to two; Bates' season, however, was not over, as the Reds added him to their MLB roster. In his Cincinnati debut on September 11, Bates came into the game as a pinch runner and scored on a Billy Doran hit. Doran – a second baseman the Reds acquired from the Houston Astros in a "last-minute" deal before the trade deadline – was hospitalized with back pain and spasms on September 29. Doctors performed an operation on October 3, which would hold him out of postseason play as Cincinnati won the National League West; the Reds were the first team in National League history to lead a division for an entire 162-game season. In a move that surprised Bates, who already prepared to return to his Houston residence after the Reds' last regular-season game, the club added him to their postseason roster.
In the 1990 National League Championship Series, the Reds faced the Pittsburgh Pirates in a best-of-seven game series. In Game 1, the Reds, the home team, opened up a 3–0 lead but trailed 4–3 as the game entered the bottom of the ninth inning. Todd Benzinger led off the inning with a pinch-hit single against Bob Patterson. Patterson walked the next batter, Eric Davis, but forced an out at third base when Ron Oester tried to sacrifice Davis over. Manager Lou Piniella put Bates into the game as a pinch runner for Oester. Davis, at second, tried to steal third, and Bates followed; while Davis was safe, Pirates catcher Mike LaValliere threw to second and Bates was out by three feet, which made the second out in the inning. Speaking about himself, Bates said he thought he "had a better jump than [he] did", and added that he should not have attempted the steal. The Reds failed to score that inning and lost the game. Bates' next postseason appearance came in Game 3, when he pinch ran for Joe Oliver and scored a run as the Reds won 6–3. Cincinnati ultimately defeated the Pirates and moved on to the World Series, where they would play the Oakland Athletics for the league championship.
In Game 1, the Reds defeated the Athletics 7–0 in what Associated Press writer Jim Donaghy called "a stunning combination of power and pitching": Cincinnati scored four runs off of Dave Stewart, who had a six-game winning streak in the playoffs, while pitchers José Rijo, Rob Dibble, and Randy Myers combined for a nine-hit shutout. The game ended the Athletics' ten-game postseason win streak. Bates did not play. Like Game 1, Cincinnati was the home team for Game 2, where Danny Jackson of the Reds faced Bob Welch of the Athletics. Oakland opened the scoring with a run in the top of the first inning, a ground ball by Jose Canseco that scored Rickey Henderson. The Reds responded for two runs in the bottom of the first. Oakland scored three more runs in the third, and Piniella removed Jackson from the game as the Athletics led the Reds 4–2. Cincinnati added a run in the bottom of the fourth and managed to tie the game in the eighth as Billy Hatcher hit a triple and scored on a groundout. After nine innings, the game remained tied, 4–4. Rob Dibble came into pitch in the ninth and held the Athletics scoreless for the two innings he pitched; Oakland countered with future Hall of Fame inductee Dennis Eckersley for the bottom of the tenth. Leading off for the Reds was Davis, who grounded out to shortstop. The next batter was supposed to be the pitcher Dibble but Bates entered the game to pinch hit. Hitting coach Tony Pérez told him to "put the ball in play" and "run like Hell". Eckersley pitched Bates to an 0–2 ball–strike count when he hit the ball weakly to the third baseman and beat out an infield single; it was Bates' first hit against a right-handed pitcher in his MLB career. Chris Sabo advanced Bates to second on a single, and Oliver scored Bates on another single to win the game. Bates called the situation a "dream come true".
The Reds won Game 3 after scoring seven runs in the top of the third inning off of Mike Moore. Pitcher Tom Browning earned the win for Cincinnati, as the game ended at a score of 8–3. The Athletics took a lead in Game 4, as Carney Lansford hit a single that scored Willie McGee from second base. In the eighth inning, however, the Reds loaded the bases after singles by Barry Larkin and Herm Winningham, and an error that allowed Paul O'Neill to reach base. Larkin scored on a groundout and Winningham scored on a sacrifice fly to give Cincinnati the lead, 2–1. The lead held, as Myers came in for Rijo after one out in the bottom of the ninth inning, and the Reds became World Series champions. Bates did not play in either game. As with all players on the World Series champion Reds, Bates received a World Series ring and visited the White House.
In January, Bates signed a one-year contract to stay with the Reds. In spring training, Cincinnati sent Bates to their minor league complex for reassignment to a team in the Reds' farm system. He started the season in Triple-A. Doran, still with a back injury, went on the DL in May, but Bates was not able take his spot due to a back injury of his own. He played the entire 1991 season for the Sounds, where he batted .242 over 49 games with one stolen base out of three attempts, as the team finished with a 65–78 record. The Reds did not re-sign him. On May 7, 1992, Bates signed a contract with the Chicago Cubs and played for the Iowa Cubs, Chicago's Triple-A affiliate. Over 91 games played, he hit .241 with 62 hits and two stolen bases as Iowa finished 51–92. From 1992–1994, he worked for his father-in-law in a Houston pipe fabrication business. In February 1995, the Brewers invited Bates to their spring training camp as a possible replacement player due to the 1994–1995 MLB strike. When the strike ended Bates returned to his wife and children in Houston, instead of continuing his career elsewhere, citing physical reasons for his retirement.
When he played, Bates stood at 5 feet 7 inches (170 cm), something that teammates taunted him about: in Milwaukee spring training camp, players threw a cap on the ground and addressed it as if it were Bates. During the MLB off-season, he worked as a substitute school teacher in Houston. Before the World Series, Bates raced against an unchained cheetah in a promotional event for the Cincinnati Zoo at Riverfront Stadium. The premise of the event was to show that a cheetah could defeat a human (with a five-second head start) in a 100-yard race. The cheetah was supposed to chase a toy, but about halfway through the race, Bates' hat fell off, and instead, it went after the hat; Bates won the race. In 2000, the University of Texas inducted him into their Men's Athletics Hall of Honor. As of 2010, Bates lives in Houston and works for an equipment supplier in the oil and gas industry. He also coaches his daughter's softball team outside of work.