Description of Business and Summary of Significant Accounting Policies - Condensed Consolidated Statements of Income (Details) - USD ($)
$ / shares in Units, $ in Thousands
3 Months Ended 12 Months Ended
Dec. 31, 2020
Oct. 02, 2020
Jul. 03, 2020
Apr. 03, 2020
Dec. 31, 2019
Sep. 27, 2019
Jun. 28, 2019
Mar. 29, 2019
Dec. 31, 2020
Dec. 31, 2019
Dec. 31, 2018
Error Corrections and Prior Period Adjustments Restatement [Line Items]                      
Revenue                 $ 1,395,529 $ 1,382,525 $ 1,279,036
Cost of revenue                 1,271,375 1,254,560 1,164,609
Operating income $ 13,725 $ 14,837 $ 2,430 $ 12,483 $ 15,649 $ 12,416 $ 11,193 $ 10,391 43,475 49,649 48,055
Income from operations before income taxes                 38,682 43,179 42,984
Income tax expense                 1,731 10,003 7,898
Net income $ 16,781 $ 10,391 $ 1,111 $ 8,668 $ 10,644 $ 7,841 $ 7,617 $ 7,074 $ 36,951 $ 33,176 $ 35,086
Earnings per share                      
Basic (in dollars per share) $ 1.44 $ 0.89 $ 0.10 $ 0.75 $ 0.92 $ 0.69 $ 0.66 $ 0.63 $ 3.19 $ 2.90 $ 3.13
Diluted (in dollars per share) $ 1.42 $ 0.88 $ 0.09 $ 0.74 $ 0.91 $ 0.67 $ 0.66 $ 0.62 $ 3.14 $ 2.86 $ 3.08
As Previously Reported                      
Error Corrections and Prior Period Adjustments Restatement [Line Items]                      
Revenue                   $ 1,382,642 $ 1,279,304
Cost of revenue                   1,252,711 1,164,609
Operating income                   51,615 48,323
Income from operations before income taxes                   45,145 43,252
Income tax expense                   10,429 7,956
Net income                   $ 34,716 $ 35,296
Earnings per share                      
Basic (in dollars per share)                   $ 3.03 $ 3.14
Diluted (in dollars per share)                   $ 2.99 $ 3.10
Correction                      
Error Corrections and Prior Period Adjustments Restatement [Line Items]                      
Revenue                   $ (117) $ (268)
Cost of revenue                   1,849 0
Operating income                   (1,966) (268)
Income from operations before income taxes                   (1,966) (268)
Income tax expense                   (426) (58)
Net income                   $ (1,540) $ (210)
Earnings per share                      
Basic (in dollars per share)                   $ (0.13) $ (0.01)
Diluted (in dollars per share)                   $ (0.13) $ (0.02)