I have one more question. If there are two programs, for example, Guild and Inventory, with their states being GuildState and InventoryState respectively, and if I want to combine them to write new logic, do I need some kind of "glue" program?
I usually keep the State common for all my programs. If they are really different entities, I keep the logic completely separate and have them communicate with each other (e.g. via messages).