Revenue - Revenue by Contract Type (Details) - USD ($)
$ in Thousands
12 Months Ended
Dec. 31, 2020
Dec. 31, 2019
Dec. 31, 2018
Disaggregation of Revenue [Line Items]      
Total revenue $ 1,395,529 $ 1,382,525 $ 1,279,036
Cost-plus and cost-reimbursable      
Disaggregation of Revenue [Line Items]      
Total revenue 991,535 1,048,015 995,415
Firm-fixed-price      
Disaggregation of Revenue [Line Items]      
Total revenue $ 403,994 $ 334,510 $ 283,621