Consolidated Statements of Income - USD ($)
shares in Thousands, $ in Thousands
12 Months Ended
Dec. 31, 2019
Dec. 31, 2018
Dec. 31, 2017
Income Statement [Abstract]      
Revenue $ 1,382,642 $ 1,279,304 $ 1,114,788
Cost of revenue 1,252,711 1,164,609 1,012,840
Selling, general and administrative expenses 78,316 66,372 60,728
Operating income 51,615 48,323 41,220
Interest expense, net (6,470) (5,071) (4,640)
Income from operations before income taxes 45,145 43,252 36,580
Income tax expense (benefit) 10,429 7,956 (22,917)
Net income $ 34,716 $ 35,296 $ 59,497
Earnings Per Share      
Basic (in dollars per share) $ 3.03 $ 3.14 $ 5.40
Diluted (in dollars per share) $ 2.99 $ 3.10 $ 5.31
Weighted average common shares outstanding - basic (in shares) 11,444 11,224 11,021
Weighted average common shares outstanding - diluted (in shares) 11,612 11,378 11,209