Game Dev (Unity).
I noticed that GTA San Andreas systems are so flexible that you're easily able to swap the playable character and it worked perfectly, even using each character proper animations when moving, running, etc. Even tho throughout the game you only play with one character only. San Andreas Multiplayer used this feature to allow you to change this skin. But this left me wondering why'd they design it like this in the first place if the game is only intended to be one character. In GTA 5 it would make sense but why the old ones with just 1 character.
So as a result, I've been looking about how game studios develop their games and their architecture and stuff like that, and how they opt for data driven architecture where new weapons, cars, characters are simply data files containing different info like which model to use, how many seats a car has and where each seat is, etc. and the engine automatically handles all of that. And they open interfaces that they use to build the game progession using a higher-level DSL, using methods like give_player_weapon or something similiar. Alongside that, they have self-initializing systems that require little to no manual setup. You just drag the player and it automatically sets up the character, camera, wires everything up and you're on your way to go, something that I struggle with.
I'd like to apply these principles in my game. I have good understanding of how Unity works but I suck in creating flexible code architecture. Most of my game systems are not self-initializing, meaning creating a new scene requires whole lot of wiring up even if the code is there. And alot of my stuff is hardcoded, pretty much nothing is data driven.