Consolidated Statements of Income - USD ($)
shares in Thousands, $ in Thousands
12 Months Ended
Dec. 31, 2020
Dec. 31, 2019
Dec. 31, 2018
Income Statement [Abstract]      
Revenue $ 1,395,529 $ 1,382,525 $ 1,279,036
Cost of revenue 1,271,375 1,254,560 1,164,609
Selling, general and administrative expenses 80,679 78,316 66,372
Operating income 43,475 49,649 48,055
Interest expense, net (4,793) (6,470) (5,071)
Income from operations before income taxes 38,682 43,179 42,984
Income tax expense 1,731 10,003 7,898
Net income $ 36,951 $ 33,176 $ 35,086
Earnings per share      
Basic (in dollars per share) $ 3.19 $ 2.90 $ 3.13
Diluted (in dollars per share) $ 3.14 $ 2.86 $ 3.08
Weighted average common shares outstanding - basic (in shares) 11,599 11,444 11,224
Weighted average common shares outstanding - diluted (in shares) 11,751 11,612 11,378