Unreal Engine 4 build becoming less parallelizable

I’ve taken a close look at building Unreal Engine 4 from source. Currently on Windows, my best time for building 4.24.1 is ~24 minutes using Incredibuild, this includes our project as well, but that is small compared to Unreal Engine 4 itself.

But looking at the build process, it seems like the build could be much faster than this. Epic has added a bunch of small projects that are built independently of the main engine build that do not parallelize well because they are small. It takes about half the total build time just to build these projects! They do not seem to be actual dependencies of the engine and could be built in parallel, at first glance, at least.

These are some of the problematic projects, why do these have to be built separately? The overhead I suspect is literally doubling the time it takes to build the engine.
SlateViewer
UnrealHeaderTool (likely a dependency)
SymbolDebugger
MinidumpDiagnostics
ShaderCompileWorker (possibly a dependency)
UnrealFileServer
UnrealWatchdog
CrashReportClientEditor
UnrealVersionSelector
BenchmarkTool
BootstrapPackagedGame
UnrealDisasterRecoveryService
UnrealFrontend
BlankProgram
UnrealLightmass
CrashReportClient
UnrealPak
UnrealInsightsCLI
UnrealMultiUserServer
TestPAL
BuildPatchTool
DatasmithCADWorker
UnrealCEFSubProcess
LiveCodingConsole
UnrealInsights
DatasmithSDK

Example: (XGE is Incredibuild)

34>Building DatasmithCADWorker…
34>Using Visual Studio 2019 14.24.28316 toolchain (C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314) and Windows 10.0.18362.0 SDK (C:\Program Files (x86)\Windows Kits\10).
34>Distributing 28 actions to XGE

34>---------------------- Done ----------------------
34>
34> Rebuild All: 1 succeeded, 0 failed, 0 skipped
34>
34>Total time in XGE executor: 26.48 seconds

Notice how this project took over 26 seconds to build and did not parallelize well because it only had 28 things to do? That might not sound too bad, but keep in mind there are over 25 of these little projects now, and some of them take longer than that. 25 projects * 26.5 seconds = 11 minutes just to build this stuff!

Can Epic please have a build engineer investigate this issue? If this was fixed, the engine could be built in parallel in less than 10 minutes.

To demonstrate the scope of this problem, look at the timing for the majority of the Unreal Engine, most of the “plugins”:

42>Distributing 2420 actions to XGE

42>---------------------- Done ----------------------
42>
42> Rebuild All: 1 succeeded, 0 failed, 0 skipped
42>
42>Total time in XGE executor: 322.95 seconds

Notice how 2420 actions were completed in 323 seconds, or 7.5 actions per second. Compare that to the DatasmithCADWorker project above, where only 1.1 actions per second were completed, nearly an order of magnitude slower because of the non-parallelizable overhead and the tiny number of parallelizable actions.

Ok I got some official feedback on this, it doesn’t look like any fix is planned to make the ancillary projects in the UE4 solution more parallel friendly. They recommend instead only rebuilding your main PROJECT, not the SOLUTION, which will rebuild the guts of the Unreal Engine but will skip the ancillary tools. This is fine for incremental iteration-type work but doesn’t help my actual use case of doing full solution rebuilds while upgrading/integrating new versions of UE4 into our code.

Anyway, it does make a huge difference for such a silly reason.
Rebuild Project: 6 minutes.
Rebuild Solution: 24 minutes. <– nearly all the extra time is for the little nothing projects mentioned above.