Of course some packages, especially the ones that actually enrich the editor a lot - possibly transforming it into sort of an IDE - will be beefy. But if these beefy packages could load (actually load from the disk, with the
require() part and all, and then initialize) some parts of their functionality at the time they are needed, maybe the user experience could be better: the load time of Atom could be reduced to 4s in the specific case and the remaining 3.935s could be split in chunks that would be barely noticed in interactive use. If the “stub” paradigm were used, maybe load time could be reduced even further.
I didn’t inspect how much time Atom spends in building menus and assigning keystrokes, but I’d bet it’s not as much as initializing core parts of plugins. Obviously plugins that affect the behaviour of buffers as they are created would probably need to be fully loaded at startup time in most cases, but the ones that provide extra functionality via menus and specific keystrokes may wait until the user requires them.
This said, I think that the Facebook team that works on Nuclide is already striving to make the package as fast as possible and already implements this “good practice”. However there are possibly other modules out there that just bring up the code, initialize and sit down waiting for the user to say hello.