Modularity

Don't repeat yourself: how to build once and reuse whatever it is that you make.

What is modularity?

When building functionality that is used in multiple places throughout the application, you should build in small chunks (modules) that can be replicated or used in other parts of the app. AirDev recommends splitting app logic and UI into modular pieces when Bubble complexity reaches a point where it causes confusion.

An example:

You have a complex sign-up flow where users' personal information has to pass through multiple steps of verification. Users must be able to access this sign-up flow from multiple pages of the app, and from different types of buttons for desktop and mobile users.

In order to set up this example, we can build this functionality in a Reusable Element (like Bubble's signup/login reusable) with a Custom Workflow for signing up users.

Before reading through this information, make sure you're familiar with how to use Reusable Elements, API Workflows, Custom Workflows and Plugins. This page covers when/why to use them.

When to convert a workflow to an API workflow or custom workflow

The easiest ways to introduce modularity to your workflows (WFs)are through custom workflows and API workflows. Situations in which you might want to use one of these include:

  • There are >10 steps in a WF (too long for readability/ease of development)

  • Parts of a WF are reused in different places throughout a page

  • A WF in a reusable element needs to be triggered from outside the reusable element

  • An entire WF is copied and reused elsewhere (sometimes with minor changes to conditions)

  • A workflow is slow and sometimes times out (takes >30 seconds and throws an error), causing poor UX

When to use an API workflow instead of a custom workflow

API workflows offer the benefit of being accessible from anywhere in the application, or even from outside of the application via API, and they don't have the same timeout limits as normal workflows. Note, however, that if your application hits capacity, API workflows will be slowed down.

Some times to use API workflows:

  • Action doesn’t need to be completed immediately (e.g. exporting data where the export file is uploaded to the Bubble DB or sent to a user’s email)

  • User WFs keep timing out on the page (take >30 seconds) or users have very poor internet

  • WF is used in multiple pages, and the custom workflow isn’t in a reusable element that is present on each of those pages

  • WFs are triggered from outside the application

If a workflow is timing out, try to speed it up before creating an API workflow. Only move it if you are unable to prevent timeouts from happening.

When to use a custom workflow instead of an API workflow

Custom workflows can be faster than API workflows for the types of actions that a user would expect a near-immediate response from, or actions that a user must wait for before continuing (e.g. signing up for an app). Here are some situations where it is better to use a custom WF:

  • Actions make changes to elements on the page (showing/hiding elements, displaying data in groups, element-type plugins)

    • Alternative strategy: Use an API WF and set a listener to detect when the API WF is done (usually through checking for when changes are made to some object in the DB)

    • This is not ideal, but it is an ok way to get around the 30 second WF timeout

  • The WF is only used on one page, and none of the above API WF reasons are true

  • If the WF is in a reusable element and needs to be triggered from outside the reusable element

Sometimes, the trade-offs between a custom WF and API WF aren't clear until you actually attempt the implementation. In that case, you can try one of the two and see if it performs well enough in terms of execution speed and reliability.

When to use a reusable element

Departing from workflows, reusable elements are useful when you want to make your app's visual design more modular. Here are some situations to use them in:

  • Your app needs to do the same thing (or nearly the same thing) on more than one page

  • Your page is a Single Page Application and a group has complex, but isolated functionality

    • Faster editor loading b.c. of less elements

    • Cleaner WF view

  • The group will likely be reused in other applications or on other pages, and it has some complex functionality

    • E.g. chat, comments, to-do list, menu, instagram-style display, or search filters

When to create a plugin

Users who know how to use the API Connector or who have some Javascript experience should consider creating plugins. This is more useful for creating modularity across applications rather than within the same application - you (or other users) can reuse the same functionality in multiple apps, and update it once in order to update it for everyone.

Situations where it is a good idea to build a plugin include:

  • A page uses a lot of custom code through the Run javascript action or you need to create an element with code

  • You create an API through the API Connector and you think other people would find it useful, or you want to use the same API in another Bubble app

App Templates

App Templates are a more unique and labor-intensive way of working modularly, and are more relevant to Bubble developers who will build many apps. This is what our AirDev Canvas template is meant to do - it makes it so that builders can more quickly make fully-featured applications, without having to waste time on setup that you will do with every app you create.

AirDev Canvas

AirDev Canvas allows you to build apps more quickly in a way that creates a visually consistent user experience across mobile and desktop. You can add modules that we have designed and build functionality on top of them, making it a breeze to create pages that look and work great.