When I first started thinking about state management in games, I assumed the “belonging” paradigm — where entities register with central data stores — was something new. But as I dug into the history, I discovered that this idea appears to go back to the 1970s.
I found this journey fascinating, so I wanted to share what I learned.
1970s: The Relational Model and “Belonging”
Edgar F. Codd’s Relational Model (1970)
In June 1970, Edgar F. Codd published “A Relational Model of Data for Large Shared Data Banks” in Communications of the ACM. Reading about this paper, I learned it introduced what we now call relational databases.
-- Entities "belong" to tables as rows
SELECT health FROM enemies WHERE id = 123;
The relational worldview:
- Data exists in central tables
- Entities are referenced by IDs
- State is an “entry” in a table, not a “property” of an object
This is the “belonging” paradigm.
Why Did RDB Choose “Belonging”?
- Data consistency through normalization
- Query efficiency through indexing
- Concurrent access through transactions
Central aggregation appears to have offered fundamental advantages.
1980s: OOP and the Return to “Ownership”
The Rise of Smalltalk and C++
From what I’ve read, object-oriented programming gained prominence in the 1980s:
- Smalltalk-80 was released publicly in 1980
- C++ was renamed from “C with Classes” in 1983, with commercial release in 1985
class Enemy {
int health; // The object "owns" its state
public:
void takeDamage(int damage) {
health -= damage;
}
};
The OOP worldview:
- Objects encapsulate data and behavior
- Each instance owns its state
- Communication through message passing
This is the “ownership” paradigm.
Why Did OOP Choose “Ownership”?
- Real-world modeling (“an enemy has health”)
- Information hiding through encapsulation
- Reusability through inheritance and polymorphism
It seems to align naturally with how we think about the world.
Impact on Game Development
Unity’s GameObject/MonoBehaviour model is a direct extension of OOP:
public class Enemy : MonoBehaviour {
public int health; // Each instance owns its state
}
2000s: Performance Problems and the Rise of ECS
The Limits of OOP
As I researched further, I found that as games grew larger, certain problems emerged:
- Cache misses from scattered data
- Memory fragmentation
- Update overhead
The Birth of ECS
In my research, I found two works that seem to have been particularly influential in shaping the Entity Component System paradigm:
Scott Bilas at GDC 2002 presented “A Data-Driven Game Object System” based on his work on Dungeon Siege at Gas Powered Games. From what I’ve read, this is widely credited as one of the foundational ECS presentations.
Adam Martin in 2007 wrote “Entity Systems are the future of MMOG development,” a blog series that appears to have popularized ECS concepts and terminology.
Entity: Just an ID
Component: Data only (no behavior)
System: Processing logic
A return to “belonging.” Data exists in central component arrays, and entities are referenced by ID.
The Similarity to RDB
When I mapped out the concepts, the parallels were striking:
| RDB | ECS |
|---|---|
| Table | Component Array |
| Row | Entity |
| Primary Key | Entity ID |
| SELECT | Query |
It almost feels like ECS could be described as “RDB for game development.”
2010s: ECS Proliferation and “All or Nothing”
Major Frameworks
- 2014-2015: Entitas (C#) — created 2014, gained traction in 2015
- 2017: EnTT (C++) — used in Minecraft Bedrock Edition
- 2018: Unity DOTS
- 2020: Bevy ECS (Rust)
The “All or Nothing” Message
From what I observed, the ECS community’s messaging was often:
“If you want data-oriented benefits, abandon GameObjects and migrate fully.”
This seems to have made many developers hesitate:
- High learning curve
- Existing code becomes obsolete
- Workflow changes completely
What I Learned from This History
The Flow of Paradigms
1970: RDB — "Belonging" paradigm
↓
1980: OOP — Return to "Ownership" (matches human intuition)
↓
2000: ECS — Return to "Belonging" (driven by performance needs)
What Stood Out to Me
- “Belonging” isn’t new — RDB established it in 1970
- OOP’s “ownership” appears to feel intuitive to many — but seems to have performance limits at scale
- ECS appears to be heading in the right direction — but “all or nothing” may have created adoption barriers
The Value of Hybrid Approaches
What I find interesting is the potential for middle ground — taking ECS insights (contiguous memory, change detection) while preserving existing workflows. Whether that’s the right tradeoff depends on your specific needs.
References
- Codd, E.F. “A Relational Model of Data for Large Shared Data Banks” (1970) — Communications of the ACM
- Bilas, Scott. “A Data-Driven Game Object System” (GDC 2002)
- Martin, Adam. “Entity Systems are the future of MMOG development” (2007) — t-machine.org (link no longer available)
- EnTT GitHub
- ECS FAQ