Something that took me weeks to finish in my engine/games: have 1 executable that selects the most adapted rendering backend at launch. For years, I supported both OpenGL3.0 and D3D12, but in separate executables, so the user had to select the right one. Now the implementation of the rendering backends is separated into dlls, and the executable choses the most adapted one at launch (except if the user overriden the "most adapted" one with another one in the options screen) I'm still keeping the ability to build with the renderer embedded in the executable, mostly for the case where, for consoles for example, there is only 1 backend available and it wouldn't make sense to still have the overhead of calling functions from a runtime library. And for easier debug when I want to add a feature to my renderer.