HealPay Ports Ruby App to Backbone.js and Node.js for Better Database Performance at Scale

By: Latoya Irby


*This post originally appeared on Cloudant.com

HealPay started in 2010, offering a better way to collect debts with SettlementApp. Three years later, they developed RentRollApp, an app landlords can use to receive monthly rent payments. HealPay’s intelligent, data-driven apps make it easier for people to pay and manage their bills, and faster for agencies, attorneys and landlords to get paid.

We chatted with co-founders Erick Bzovi and Lance Carlson about making the switch to Cloudant and what’s next for the growing start-up. Along with predictable pricing for their cloud database, Cloudant’s flexible schema and built-in search API help HealPay build more features faster, including an interesting CouchApp for managing user permissions.

Lance and Erick from HealPay

Cloudant: How’s business?

Erick: We have two apps now. SettlementApp, our flagship software, is where we’re making enough money to keep the lights on. We recently rolled out RentRollApp (sorry about the pun). With RentRollApp, tenants pay their rent online. It’s a simple app with a monthly recurring payment structure.

We’re coming across new and exciting opportunities and we’re doing more transactions on a monthly basis, so business is good. We’re growing. We’re still a startup and we still need help — we still need to work eight days a week. We’ve integrated databases with Cloudant. We’re pushing it hard, and it’s going well.

Cloudant: Why did you move to Cloudant? What did your prior application architecture look like?

Lance: I don’t like making decisions on HackerNews, but I heard about Cloudant there and started researching it. In doing so, I became obsessed with separating the M part of MVC and pushing that into CouchDB with CouchApps. That’s what really intrigued me. And then I began replacing our apps with node.js and Cloudant.

We started on Amazon RDS with our Sinatra implementation of SettlementApp. We were already experiencing scaling problems and I could see that as we added customers, we’d have a problem shutting down the RDS server and rebooting it with potentially more space. And it was a waste of space. It didn’t scale well; it would be harder to make multiple databases per customer. Scaling our database infrastructure seemed easier to accomplish with Cloudant.

Plus, I wanted to start off with a predictable pricing scheme, and it seemed like Cloudant offered that with its multi-tenant option. That’s huge. It was the initial selling point. RDS kind of kills you, in terms of predicting costs. So being flexible with payment was great for us. I like Cloudant’s pricing model, but clearly we’re going to use up a lot of hardware resources as we move forward. There are some financial data-compliance regulations we need to follow, and we’re investing in a dedicated Cloudant cluster. In the beginning, it was great to know that multitenant was there to help us grow.

Cloudant: Where are your application servers situated?

Lance: We have our app servers on EC2. There’s a node app for SettlementApp and another for RentRollApp. But I consolidated the admin application for both using an app I like to call “Madmin.” With Madmin, I make a CouchApp for each plugin, Madmin checks the configuration of each CouchApp and determines whether or not to load the plugin for the administration. I’ve heard this might not scale but, I like it because it’s very modular.

Cloudant: There shouldn”t be problems scaling. Madmin sounds interesting, can you dive in a bit further?

Lance: Sure! It’s cooler than you might think. Each CouchApp has its own JavaScript functions, which automatically load the plug-in after the user logs in. It gives us Backbone.js, the whole thing. And with the logic we added, it allows us to assign and manage access permissions. Basically, the login function is deployed as an app.

Cloudant: Sounds like you guys are doing some pretty cool things with Cloudant! How was making the switch?

Lance: There were major code changes, but we were willing to take the leap because I thought there’d be a lot of benefits. I rewrote all our Sinatra code in node.js, all from scratch. I could have saved some hours of my life, but I think we’re better off in the long-run.

Schema management has been a lot less of a problem, too. It’s a lot easier now if we have to move data. Cloudant’s flexible schema increases the speed at which we can work. That’s been huge. We try to constrain and not make our datasets too complicated.

Cloudant: That’s good to hear! We’re looking forward to see what you guys come up with next.

Lance: The API for Cloudant Search is really nice. It’s more sophisticated than I originally thought, so I want to look at how you implemented the Backbone.js search API and tease that out — create a little library that exposes the Cloudant API in an easy way. I’ll keep you guys posted on that. I’m trying to think of what else I want out of your API, but we’ve accomplished everything we’ve needed to so far.

— Lynnette Nolan, marketing communications specialist, Cloudant