One feature that almost all games have in common is loading screens.
Many small games can get away with a single loading screen at the start of the game to load all or most assets.
Most larger games have one before every level or environment, or at least for major transitions. The only way to get around loading screens entirely is to have only a small core engine that is loaded at the beginning of the game, and to then load everything else (other engine parts and frameworks, assets, script files..) on the fly.
To make the latter feasible without causing the game to freeze at times, concurrency is a necessity – content has to be loaded in the background while different threads update the gamestate, render it, and keep the interface responsive.
This is a complex topic however, and too big to tackle in this post.
Instead we will look at a smaller problem and how to solve it.