We’ve got a main branch, a stage branch (where things get ready for release) and a release branch.

I fixed an issue with network replication of something on our players. It was like 10 lines of code but also required changing the player blueprint. Problem solved…

… so solved, in fact, that production wants it moved to stage AND to release today.

Integrating the code change is pretty trivial. But the blueprint changes? I’ve basically cut and pasted bits and pieces, but it’s a slow manual process of essentially redoing the same work twice. It’s an obvious invitation to user error, and of course the history for all three assets is now diverged. Eventually the main branch will catch up with and override the others. But it’s a huge waste of time (rendered much worse by the fact that I had to sync the whole game three times and rebuild it three times besides the blueprint nonsense)

Back when I was doing Unreal, we had the same problem, but a whole lot more branches (multiple projects, shared resources, it was nightmarish).

So my strategy was to continuously move more and more functionality out of blueprints and into code. With the end goal being that blueprints were basically holders of values, and references, with as much logic as possible in the code.

Basically once something was prototyped or proven in blueprint form, get it over into code.