My last post (successful conversion)

Our company has now successfully made the shift from starting in Bubble 3.5 years ago all the way into full conventional web stacks. Bubble gave us our big break those years ago and the ability to validate and quickly iterate, and for that we are very grateful. We were blessed to have a successful idea that spawned into multiple products and continued to scale and grow into something truly life-changing. As with all things that scale, the time eventually came for us to make the transition into conventional code stacks for in-house enterprise control and rigor, but I wanted to leave some breadcrumbs for others whom want the assurance that, if they start on Bubble and hit gold, there is indeed a way forward should conventional code be their ultimate destination (Bubble has grown significantly over the years in productionionalized disciplines and some members may be fine staying with them indefinitely, but our scenario ultimately required conventional). The below was just our roadmap, there’s many ways to scale and there are other well-versed members lurking here that have alternate valid paths. Every step comes with new levels of learning required and the full roadmap would take typically years.

  1. Learn to build an app fully using in-house Bubble tech. The level of conventional code knowledge you need here is minimal, and you can cut your teeth on learning site navigation and DB modelling, API’s, and Stripe.

  2. Dev in Bubble with more “conventional” thinking. To be pointed for conventional, learn to avoid using “Lists of things” in your DB, as they are non-enterprise standard. Instead, stand up a separate table with such “things” with their own Bubble-generated unique_id’s and then add separate “crossref” tables of whatever you need between the driving table and the reference “thing” table (which will turn into much more tables but that’s ok) (these are also called many-to-many tables). Also, on the front-end, code exclusively using custom states to get you used to how a majority of conventional front-ends work. (Custom states can just get piled up at the top page level). Every data element on-page ties to a custom state and CRUD actions engage the custom states only. For front-end design, use “Styles” as much as possible in your elements (which are essentially CSS classes)

  3. Bubble’s internal DB is very fast and decently auto-indexed for non-relational queries (such as fetch a User form the User table, even if users are in the millions). But it will hit a wall fast when you start needing highly-complex joins and your features list grows in a complex app. Learn SQL. DDL to create tables and DML to perform your CRUD actions. Learn how to code in an enterprise grade DB of your choice. Bubble itself is built on Postgres, which I personally like as well, but there’s a plethora of other options. Most apps require just a standard relational DBMS, with a few exceptions. Once you’re ready, start using Bubble’s SQL API plugin to develop entire apps using a conventional DB stood up on some external provider (DigitalOcean, Aiven, etc). Proceed to unlock the power of stored procedures/functions in your DBMS to handle triggered actions or huge bulk data actions on events. Note, Bubble doesn’t pool/cache external DB connections, so they’ll automatically be a bit slower for those simple queries throughout your app, but the savings you see on complex queries exponentially outweighs it.

Note, if you have a lot of active userdata on Bubble and need to port it out, it’s at this point you’d need a dedicated cluster and request a read-only DB connection to your internal DB. You can then port it out via your DBMS editor or a more powerful tool such as Talend Stitch. Bubble typically requires IP whitelists for this, so you may need to grab a dedicated VPN to accomplish.

  1. Utilize your own S3 storage. Pick a provider and start using the necessary API’s to push/pull files, such as for user photos, uploads, etc. Learn how to store and retrieve S3 ID’s in your DB to keep you S3 storage clean when artifacts are signaled to be replaced/deleted by members. If you have files already on Bubble’s S3 (AWS), you’ll eventually need migrator processes to copy and move them into your own S3.

Following the above, you’ll be best positioned to tackle relearning front-end. Start learning HTML+CSS. There is unfortunately no simple way to convert Bubble front-end pages into conventional, you will need to recreate them from scratch in your future conventional framework (which for us, was Wappler as the next step), but all of them will require HTML, CSS, and knowledge of breakpoints (which are the “responsive” device sizes you can choose in Bubble).

Additional hard points of what Bubble handles for you, and that you’ll have to tackle going into conventional: security provision (user logins and such, luckily some frameworks out there give you a good leg-up on this aspect), timezones, and building the backend scheduling engine (whether done in your conventional framework or via cron inside your DB)

We had a successful app out of the box in Bubble, so we had to ascend this list incrementally and it took years to do it without disturbing the userbase. I guarantee you others have different ideas and those are welcomed, but we wanted to share the rough roadmap we took to encourage others that, yes, if you start on Bubble and get successful, there DOES exist a roadmap to conventional should you desire it and are willing to put in the serious time to learn. I simply wanted to share this as a give-back to the community I’ve been with for many years. Happy trails and happy Bubbling!

26 Likes

Thanks for sharing this. Out of curiosity, did you or internal team members learn the traditional coding tools required or outsource it to other devs?

An excellent post – Thank you for sharing. This is exactly my thoughts on Bubble - Start small with a MVP… get the basics down, get some users, get some excitement, then as it grows, hand it to a team of software developers and say “build THIS”.

I’ve done it twice successfully now. Honestly, I wish Bubble could handle more high level enterprise stuff like “big data” manipulation and performant complex queries (which is funny because clients are much more willing to pay more once their app is making money itself and growing rapidly)… but so is the way of things.

4 Likes

Thanks @boston85719 , we needed full control without external-dependency, so all skills were learned in-house. (The house had pre-existing experience in data development areas, so the front-end areas were the most sparse). Learning the full-stack admittedly takes a good while.

1 Like

Agreed @w.fly, which is why self-driven DB is the first “conventional” area one should get to. Otherwise, you’ll hit a nasty wall the millisecond one needs to perform their first dual-filtered inner join (driver and lookup both have predicates), or filtered anti-join, which usually happens as soon as some app users start asking for more features.

This is ideally why I stay away from the Bubble database as much as I can. If I am building a simple app, sure, I’ll use it, but once we get into the CRM realms, or big-data in general, my best alternative is hosting my own postgres and just making SQL queries in-house. This leaves me the opportunity to move onto a different platform or depend on my own sources to secure my own data.

@anon38627393 congrats friend. You’ve taken the step that a lot of people are afraid to do. You posting this hopefully will allow people to know they aren’t fully “locked-in” unless they don’t try.

1 Like

Wise plan @GH5T ! Data securitization is another important factor, as well as the ability to mart/BI your own data to other tools and analytics or cross-link for marketing or multi-app tenancy.

For speed, all anyone should need on the Bubble’s-side is the base user table, as Bubble quietly stores the user password hashes and Stripe ID’s there. Keeping those on an external DB would require building your own security and Stripe API handshakes, which is significantly re-inventing the wheel unnecessarily inside Bubble and should only be a focus at the time of a final conventional shift.

1 Like