@Sam Virgona The Q&A is at 4am where I live so add my 2 cents here. I've spent a lot of time thinking about different game object systems, and I've learned it really wasn't worth spending that much time on. However, it does somewhat matter since it'll affect how you write your game code, or if you really need peak performance on a million entities. TLDR: My recommendation is to start with the mega struct, add ecs-like stuff on top later if you need performance. First let's look at what an ecs is. There's two types: sparse-set based ecs and archetype based ecs. The quick description is: sparse-set has one array per component, archetype based breaks everything into multiple arrays grouped by which entities have the same components. Sparse-set makes it easier to add/remove components, archetypes make complex queries faster (I'd say more about the differences but this reply is already going to be long, so google if interested). Now these ideas can be applied to the mega-struct when needed. If there's in your mega struct that only used by a couple of entities, you could put it in a sparse set (Especially if there's an O(n^2) operation on them, O(n^2) when n=5 is better than n=500 when iterating over every entity and doing needless "if" checks). Or if your game has distinct entity types (which many do) you could just have a separate array for each different struct, which are just different archetypes (e.g. maybe in a shmup have separate arrays for the enemies, enemy bullets, and the player's bullets). Also if you do mega-struct + a side of ecs, you probably won't need to make a crazy C++ template entity system query api like the ones the different ecs frameworks provide (imo, the main reason to use a framework if doing ecs), since with the few sparse-set components or archetypes you're making, the only "queries" needed are a for loop (e.g. for(auto& ent : on_fire_sparse_set) or for(auto& ent : enemy_archetype) instead of q.each([](flecs::entity e, BaseEntityData& base, EnemyData& enemy)) or just looping through the mega-structs with a bunch of if statements for the non-performance critical stuff.