Haines was born in Clayton, Ohio. He saw brief Major League action in 1918 with the Cincinnati Reds, but became a fixture in the St. Louis Cardinals starting rotation in 1920. Despite a 13–20 record, he pitched 301⅔ innings, the highest output of his career, and recorded a 2.98 ERA. In the minor leagues from 1913 to 1919, he compiled a 107–61 record and 1.93 ERA over 187 games.
Haines's luck changed over subsequent seasons. Playing until 1937, at the age of 43, he won 20 games or more three times for the Cardinals and won three World Series championships (in 1926, 1931, and 1934), though he did not pitch in the 1931 series. In the 1926 World Series against the Yankees, he went 2–0 with a 1.08 ERA. He retired with a 210–158 record, 981 strikeouts, 3.64 ERA, and 3208⅔ innings pitched.