I run an agency that only works because we can build things maintainably (meaning that features are easy to revisit and iterate at later on). Here’s what I’ve learned from experience:
-
Almost all popups should be reusable elements.
-
URL parameters are generally much easier to work with than URL paths.
-
Every app needs a ‘Sign Up’ backend workflow that runs when a User is created.
-
CSS should be stored in an option set with the style and ID as attributes.
-
A single reusable popup can be used for all confirmations (including deletion) in an app.
-
Every app should have a Billing Account as a separate data type to store payment related data (e.g., stripe customer ID, subscription data). You’ll thank yourself when your B2C app starts allowing team members.
-
A global reusable element can be placed anywhere, and its custom events can be used to have reusable workflows across your app.
-
In the backend, instead of statically defining API tokens in URLs (e.g., ?api_token=XXXXX), have a custom event that returns an admin API token and use that.
-
Backend custom events are environment variables.
-
Front-end custom events help you modularise and make sense of madness.
-
API calls to your own app can use
[Website Home URL]api/1.1/wf/your-workflow
. -
It’s rarely wise to store plan/product data in option sets. Store features in option sets, but limits, pricing, IDs, etc., should be in a data type.
-
Large workflows with many actions don’t make you look smart - modularise into smaller components.
-
Never launch without at least basic analytics.
-
Group variables are generally easier to locate and understand than custom states and can be dynamic.
-
Add privacy rules first, as soon as you create a data type.
-
If your data type’s fields have common prefixes (e.g., addressLine1, addressLine2, addressCity), then it strongly implies it should be a separate data type (Address).
-
Install plugins judiciously, and uninstall them as soon as possible when not being used.
-
Every API Connector JSON body parameter should not have quotes. All API Connector input expressions should have :format as JSON safe. That guarantees your calls are always JSON safe.
-
Loading states should almost always be a reusable element.