erick
Sorry for the late reply, been very busy these past few days.
To your questions: It really depends on who is doing the integration. Before I go into detail, it is important to know that with r3 you never make changes in other apps directly. You create new apps that reference and extend things in other apps.
Case 1: I am the app author of REI3 Tickets and I want to integrate with a foreign app, such as REI3 Tasks
I can safely reference and extend relations from REI3 Tasks in REI3 Tickets; relation extension is done by creating new relations in REI3 Tickets that reference existing ones in the other app via 1:1 relationships. Relations in REI3 Tasks can be updated or renamed and it would not break my integration.
There are some changes that can break things, such as if the author of REI3 Tasks decides to delete attributes or entire relations. In this case, I would need to figure out why these changes are done and then migrate my references accordingly. It is very rare to straight out delete things in finished apps, but it can happen, if there are structural changes in the source app.
This is the usual case - ie. I like an existing app, but there is maybe 10-20% functionality missing. I then "build on" the app, extend relations, build custom forms and add my own stuff (UI, new attributes, triggers, etc.).
Case 2: I am not the author of REI3 Tickets or REI3 Tasks but I want to integrate the two
This is technically possible, but a lot of effort, since most integrations require not only data but also UI work. In your own app, you would likely extend relations from both apps and add new relationships between them. Then you would need to create custom UI that would include those new relationships. This is much more work than it sounds as most production apps have at least dozens of forms and you might need to touch half of them. (Plus, since most forms reference each other, you might need to replace those too. We have some features in the pipeline that makes that easier, but at the moment you probably have to replace a lot of forms).
In most cases, it´s much simpler to implement the integration natively in one of the 2 apps. Basically all your examples (Tasks + Kanban, Workflow + Tickets or Projects, etc.) already have integrations between each other. Even if not, the original app author can implement an integration much faster, as they only need to consider 1 other app, not 2.
General points
- There are no general recommendations how to structure cross-integration, as there are many variables to consider. Who owns the apps? What data is accessed from multiple places? How is user access managed?
- Building inter-connecting applications is hard enough, if you own them all and just need to decide how to separate things. Building inter-connected apps where half of the apps are foreign, is much more complicated.
- I would generally recommend only extending foreign apps lightly - if you need a couple of features that the original author cannot or does not want to add. I would not try to build an inter-connected system, spanning half-a-dozen apps where I do not control half of them.
- Generally, I would avoid syncing data between apps. Syncs can always fail and introduce possible error states. r3 is built to do direct referencing - the data is already there, why sync it again?
- Referencing data between apps is perfectly safe in your own apps, as you likely not delete anything you need somewhere else. Referencing data directly in foreign apps is also basically safe, as most changes are safe (new attributes, renaming things, etc. is no problem). But deletions, though rare, are possible and you will need to deal with that if it occurs.