App Component Reuse Solution

1. Summary

  • We would like to take a subset (Data, UX and Behavior) of an App and be able to reuse this subset into another existing App quickly and reliably. (See example in figures 1 and 2).
  • We propose a solution which is much faster and safer than replicating each single change by hand. (See Figures 3 and 4).
  • The solution is intentionally simple but it is powerful, flexible and fairly easy to implement. There is no hidden magic, the App Author is in control of every step.

 

3X_3_2_32bae2f698527c51320a0deca6f56a54e7bf726a.png

 


 

3X_3_e_3e72ff3520d4c00f15b0ffb240e88f179973fcc1.png

 


3X_c_4_c42da0e38a70852bcd90b854fbd4b501d866860e.png


2. The Problem (Why we need this)

2.1 Description of the problem

  • It is not possible to take a subset of the Data, UX and Behavior of an App and reuse this subset in another existing App without redoing all changes manually in the App Editor.

2.2 Examples of the problem

2.2.1 Replicating a complex feature in another App is a lot of work

  • We have two existing Apps, App A and App B. We need to add in App B a complex feature that we already have in App A. Since this feature consists of a set of interrelated tables, columns, views and actions, the only way at present is to open App B with the App Editor and to manually enter all these objects and their properties by looking in detail at what we did in App A. This is time consuming and error prone. (See an example in Figures 1 and 2)

2.2.2 One general App VS Many specific Apps dilemma

  • When we use AppSheet to build Apps, we eventually end up with a set of Apps for a given Line of Business. Often there are some common features needed by the Apps. Example of such common features are : People and Organizations, Access Control, Projects and Tasks, Approval Workflows, Notifications, etc. Once we have built such a feature in an App and need to add it to other Apps we are faced with a dilemma. One choice is to merge all the specific Apps into a single general App that has all the common features; this causes negative issues : performance degradation because of the large number of tables and also difficulty to maintain a big App. Another choice is to recreate the common feature into each of the specific Apps; this is tedious and error-prone, especially that we will have to redo it in all apps every time we make a change of logic to a common feature.

2.2.3 App Templates do not help in the long run

  • App Templates that include common features may help save time when you first create an App, but when business rules require changes in a common feature, you still have to manually make the same changes in all the Apps that were derived from the template.

2.2.4 Two authors cannot work in parallel on an App and merge their work

  • It is often beneficial for an organization when two people work on an App because it fosters sharing ideas for business process improvement and ensures that more than one person understand the internals of an App. Ideally each author would work on his own copy of the App to build a feature, then the co-author can review it before the feature is merged into the main version. At present, an author can Upgrade an App based on another App copy, but the Upgrade takes the complete App. Therefore the other author has to wait his turn to make his own copy and start to work on his feature.

3. The Goal (What we need)

  • We define a “Component” in an AppSheet App as a set of Objects that work together to provide a feature.
  • The Object types that can be put in a Component are : a Table’s Set of Columns, an Action, a Slice, a View, a Format Rule, a Workflow Rule, a Report Rule.
  • To determine the contents of a Component, we want to be able to Tag Objects as soon as we add or modify them in the App Editor.
  • We would like to take a Component of an App and be able to add or update this Component into another existing App quickly and reliably, without having to enter the properties of the Objects.

4. The Solution (THIS SECTION WAS EDITED ON 2023-02-07)

When I posted this idea in January 2021, I proposed a solution that could be implemented in the App Editor, so that it could be available within a few months of the idea being approved. However after many attempts to promote this idea, it was assigned the "Not Planned" status in November 2022. I think that my detailed specification of the solution with examples did more harm than good, so I deleted this section.

5. References

This June 2020 topic presents many Reusability Ideas as well as a list of related topics in the Community

The following Feature Request is a long overdue outline I have of having Reusable Items in Appsheet. It is part of a response in part @tony request: This is just the initial outline. I will elaborate further in the future as and when I work on my Apps where it will trigger further thoughts. 1. What would be Reused and then Shared? The basic concept of reuse could be based on table which is reused (for example the Person Table with all the details of a Person like Name, Email, Phone) where …

6. Final thoughts

  • This is a long post which has too much detail for a Feature Request, but I feel a Modularity / Reusability solution is long overdue. I really care about AppSheet.
  • I welcome comments from the AppSheet Community about this Proposed Feature. In particular, I have probably forgotten some details and many heads are better than one.
Status Not Planned
51 35 2,507
35 Comments
MultiTech
Gold 4
Gold 4

The holy grail we’ve been begging for…
3X_e_d_ed7ebc71e2f4aa5b928bea4b7eaaa0158626f80c.gif

I’ve managed to figure out ways to make AppSheet automatically configure columns when you import or regenerate the column structure; that’s how I accomplished In-App Guides.

  • The problem is really with the method required to produce the code necessary for things to work; the app I’ve built is… complicated, to put it lightly.
    • I’ve thought long and hard, put many dozens of hours into things, to try and bring something like that to the public; but ultimately it’s wrought with problems and pitfalls - so it’ll likely never see the light of day.

Appsheet - long ago - talked about the ability to copy portions of your app and carry them over to others; hopefully they’re listening again. 3X_d_5_d51363a862e7ab883241c312ac5d7f271579cdd3.gif

Grant_Stead
Silver 5
Silver 5

@praveen thought you might like to see this.

aucforum
Bronze 3
Bronze 3

I have read this post and agree with the concept of it. I also think you might consider how your concept my work more operationally if you want to share the development of the reusable item with others outside your organisation (to avoid reinventing the wheel).

I am not sure if having external files which require renaming items within is a good idea where some mapping could be done within each dependant app with the re-useable component.

I think a good place to start is with having expressions made reusable just so we can get something simple and manageable?

lamontfr
Silver 1
Silver 1

@aucforum Hi Colin, Thanks for your comment.

a) To share a component outside of an organization, I think that a possible method is to provide an example App that includes the component and to have detailed documentation of the component’s tables, columns, slices, views and actions. This will allow other authors to try the App, understand its behavior and then use the Export feature to get the .json component from the App.

b) I propose a solution based on the Export / Import of a .json file for a component, in order to keep the solution very simple. There are no changes in the App Interpreter, so testing by the AppSheet team will be faster because there is no risk of breaking the large number of Apps in production. The Export and Import features are only in the App Editor, so it should be feasible to develop this rapidly.

c) I see no simple way to make AppSheet expressions “reusable” because they work on named columns, and have no parameters. Also the foreign keys in a component may refer to columns elsewhere in the App, and vice-versa. Therefore when “hooking” a component to a new App, these references have to be verified. Within an organization, naming conventions for tables and columns may allow a component to be reused without renaming some identifiers. However, with existing Apps built by different people without naming standards, hooking a component will require renaming of some of its tables or columns.

d) I have reread your June 2020 post about Reusable Items and I think that it has great potential. I just propose a very basic solution which does much less than yours, but hopefully could be available quickly. I totally agree with you that we definitely need some reusability and modularity in AppSheet.

aucforum
Bronze 3
Bronze 3

a, b) I can see the advantages of .json as a simple solution. I think some library, catalogue or even shop might be good for promoting and distributing shared componets like the .json with.

c) I think I had suggested Parameters previously as a key feature of reusable components, including expressions (and maybe charts). I would have appsheet within the reusable features to allo to map references, tables, columns etc, plus parameters of course. It would avoid the need to edit any external file.

d) I would think the suggestion of the .json file might be good, simple step forward, if it makes it possible to get this major feature started. (See my reply to a, b.)

aucforum
Bronze 3
Bronze 3

Did Praveen respond to this as far as you know?

Grant_Stead
Silver 5
Silver 5

Negative. I know in the past it’s a direction he was trying to get to.

aucforum
Bronze 3
Bronze 3

I dare say, the inefficiency of repeating so many items of Appsheet has discouraged me from making or improving any more applications that I might make or more critically recommend it as a platform for others to use.

I notice you @lamontfr too want to make a viable business out of developing Appsheet Solutions. I am hoping they might follow through with this suggestion I made:

aucforum
Bronze 3
Bronze 3

Has anyone sought @tony attention on this request yet?

lamontfr
Silver 1
Silver 1

@aucforum @Grant_Stead

Thanks for helping to get some attention from the AppSheet team about this issue.

JonathanR
Bronze 1
Bronze 1

Implementing an export/import loop into development would solve much of the resistance we have to growing our AppSheet app dependence. We presently use other tools for M&E to complete longer surveys around humanitarian issues. Platforms like Kobotoolbox/ODK, Epicollect have online form builders with fine-grain, no-code controls just a notch above AppSheet’s. Advanced designers can download a forms definition file in the XLSForm standard. Designers can make mass edits (using Excel or Google Sheets) then reupload into the same form or start a new one. The app engine processes the incoming definition in the exact same way as it would edits to the online editor.

For longitudinal surveys (repeat visits), we need a tool like AppSheet that can persist mobile data, allow edits and most importantly, link tables in parent child relationships. Presently we’re preparing a baseline/endline (before/after survey) with about 80 questions. AppSheet has done well enough replicating skip logic (as show formulas based on previous questions), handling dual languages and adjusting to the survey, but by far the longest part of the migration was the unavoidable mouse and menu interactions.

Now we need to repeat the work of the baseline with only minor changes as an endline. So far as I know, the only solution is to cut-and-paste rebuild every rule and formula by hand.

Even just starting with a table definition export and import would be a huge improvement to our design workflow. UX and behaviors would be a obvious boost as well but by far our time is in the column editor.

lamontfr
Silver 1
Silver 1

@JonathanR Thanks Jonathan for your post that states some important issues that could be solved by App Components :

  • "Implementing an export/import loop into development would solve much of the resistance we have to growing our AppSheet app dependence."

  • "by far the longest part of the migration was the unavoidable mouse and menu interactions"

  • "So far as I know, the only solution is to cut-and-paste rebuild every rule and formula by hand"

  • "by far our time is in the column editor."

@praveen I cc you on this since you mentioned a few years ago that "Modular design—ability to create, share, and re-use app modules” was in the plans : AppSheet platform directions in 2018

@tony I cc you on this since you showed interest last June : Collaboration work - #6 by tony

@MultiTech_Visions @Grant_Stead @aucforum I just want to keep you informed.

I care about AppSheet and hope that the solution I propose in this topic will be considered.

MultiTech
Gold 4
Gold 4

That’s reaching back…

Grant_Stead
Silver 5
Silver 5

On the last partner call I brought it up with the team, and we discussed possibly having the column definitions at the team source level, with rules, etc. I hope that appsheet can find a way to help us power users accomplish more faster…

lamontfr
Silver 1
Silver 1

@Grant_Stead Thanks Grant for the feedback. What do you mean by “at the team source level” ?