After years of working as a software developer, I've noticed some similarities about how to make software that carry over outside the realm of ones and zeros. Protocols It's a good idea to take advantage of existing protocols for communicating with other programs. This ensures that your program’s messages can be received by other programs, and that their information can be received by yours.
It's fun to reflect on these sorts of parallels. Have you read Thinking in Systems by Donella Meadows? I think you'd enjoy it.