For the sake of modularity, what if I drop ALL of my workflows in a Reusable group or push them to Backend Workflows.
Would this be smart?
For the sake of modularity, what if I drop ALL of my workflows in a Reusable group or push them to Backend Workflows.
Would this be smart?
Hey @bestbubbledev,
Mostly replying to not miss the comments …
I started moving my workflows to the backend because of the mobile editor (having the same workflows for web and mobile). I guess if you have a web AND mobile app this becomes necessary to ensure being synced between both - plus, no double work.
I also realized I have a lot of actions that run stand-alone as well as part of larger workflows. I decided to break them down in small modular workflows that trigger each other if necessary. That way I can ensure everything is just built once and I can easily reuse workflows when I build something new.
Does that make sense?
*I am still in the process and can’t tell yet if it’s a good idea or not
in traditional development, you don’t keep any CRUD operations or any heavy computation in FE ( where is user’s browser )
When u do in BE u use cluster instance CPU and MEM so I/O is more reliable and fast ofc.
For one of our modules ( app ), we use bubble as FE only, all logic sits in NodeJS + AWS
but ofc it would be smart, you can make a lot WFs as utils and reuse them for others logics, keeping dry ur app.
Some considerations on this:
What I do is put the workflows inside existing reusables.
For example:
If I have a popup for editing/adding a new contact, I’ll build a reusable popup and put all the workflows related to the contact inside it.
Most of the time, I’m using the popup on a page or another reusable anyway, and for the rare times it’s not used, it just sits there hidden — no issue.
This keeps everything very DRY (Do Not Repeat Yourself).
Saving Steps with Embedded Workflows
I use workflows in reusables a lot — even for small things.
For example, most people show a popup with:
Instead, I put that inside a single workflow inside the popup and then just run that workflow.
2 steps might not seem like a lot, but it really helps later — like if you add a tab element inside the popup and want it to reset to Tab 1 on open. You just update the popup’s workflow once and it updates across all 20 places it’s called.
No chasing bugs across the app.
Generic Reusables Over Hard-Coded Ones
Another approach I use is building generic reusable elements.
For example, in a contact search popup, instead of passing tons of different fields into the popup to handle every situation, I:
Setup:
contact_selected
trigger_boolean
contact_selected
trigger_boolean
to yes
trigger_boolean
to no
immediately (so it can be retriggered again).On the page side, I just listen for trigger_boolean = yes
and then save the contacts however needed.
This lets you drop the popup onto any page without modifying it.
Data Ownership Trick: Single Field for Linking Data
I often add one field to a data type called for_data
.
unique_id
of whatever thing the child data belongs to.for_data = this thing's unique_id
.This keeps your database super clean, especially when items like files might belong to dozens of different things.
Additional Tricks I Use
Dummy Groups for Common Data
Popup Close Events Always Reset State
Settings Data for App-Wide Config
Settings
data type where I keep global things like app name, logo, company address, phone etc or for storing things like email html templates Using Data Instead of Option Sets (When Needed)
Compartmentalizing Data Into Small Tables
If you build this way, your app stays light, scalable, and easy to maintain — even if it grows into hundreds of pages and thousands of workflows which some of my apps have.
Thank you all for chiming in!
My main concern was WU usage as @ademiguel has pointed out. I guess pushing everything to BWs is smart but expensive. Not sure if it’s worth it.
@bestbubbledev check out the video below for an approach that considers modularity, WU, and flexibility.
You can get this functionality with this plugin