Data in the Wild

Today, we’re joined by Anna Maste, exited founder of Boondockers Welcome and current founder of Subscribe Sense. She talks to us about what you need to be mindful of when building two-sided marketplaces, why it’s important to make many-to-one relationships from the get go, and more.
Chapters
  • (00:54) - What is Boondockers Welcome?
  • (01:26) - Boondockers Welcome’s tech stack
  • (06:48) - Time zones are hard
  • (10:54) - Privacy, pricing, and the two-sided marketplace model
  • (34:28) - What is Subscribe Sense?

Sponsor
This show is brought to you by Xata, the only serverless data platform for PostgreSQL. Develop applications faster, knowing your data layer is ready to evolve and scale with your needs.

About the Hosts
Queen Raae wrote her first HTML in 1997 after her Norwegian teachers encouraged her to take the new elective class. 

Around the same time, Captain Ola bought a Macintosh SE for his high school with the proceeds from the school newspaper he started.

These days, you’ll find them building web apps live on stream and doing developer marketing work for clients. They are both passionate about the web as a platform and the joy of creating your own thing.

Visit queen.raae.codes to learn more.

Creators & Guests

Host
Benedicte (Queen) Raae 👑
🏴‍☠️ Dev building web apps in public for fun and profit 👑 Helping you get the most out of @GatsbyJS📺 Streams every Thursday: https://t.co/xaLy43cqMI
Host
Ola Vea
A piraty dev who also help devs stop wrecking their skill-builder-ship ⛵. Dev at (https://t.co/8m50kyT981) & POW! w/👑 @raae & Pirate Princess Lillian (8) 🥳🏴‍☠️
Guest
Anna Maste
Audiobook narrator and erstwhile tech entrepreneur. Founder @subscribesense and @boondockerswelc '21. she/her.
Editor
Krista Melgarejo
Marketing & Podcasts at @userlist | Originally trained in science but happily doing other stuff in SaaS & tech now

What is Data in the Wild?

Learn from your favorite indie hackers as they share hard-earned lessons and tall tales from their data model journeys!

Brought to you by Xata — the only serverless data platform for PostgreSQL.

[00:00:00] Ola: Welcome to Data in the Wild. Discover data model tricks and tricks used by our favorite indie hacker devs, with Queen Raae.

[00:00:15] I'm your co-host, Captain Ola Vea. This podcast is brought to you by Xata, the serverless data platform for modern web applications.

[00:00:25] Benedicte: And today's guest is the great and powerful Anna Maste, exited founder of Boondockers Welcome and the current founder of Subscribe Sense.

[00:00:33] Welcome to the show, Anna.

[00:00:35] Anna: Thank you. It's great to see you again, Benedicte. And nice to meet you, Ola.

[00:00:40] Benedicte: It's nice to see you again. And I just have to say for everyone, go look up Anna's Christmas songs on Twitter even though we're totally off season.

[00:00:49] Ola: Oh.

[00:00:51] Benedicte: But yeah. I'm just gonna leave that nugget in there.

[00:00:54] So Anna, what problem did and does Boondockers Welcome solve?

[00:00:58] Anna: So Boondockers Welcome is a peer-to-peer RV sharing. Sorry, RV camping platform. So it's, the way I like to describe it is it's like couch surfing, but you bring your own couch. So driveway surfing, if you will.

[00:01:14] We started it in 2012, me and my co-founder, who happens to be my mother, who is an RVer herself. And it was acquired by a company called Harvest Hosts in 2021.

[00:01:26] Ola: Okay.

[00:01:26] So before we get into your experience with data modeling for Boondockers Welcome, could you quickly run through your tech stack?

[00:01:35] Anna: Yeah. So we actually went through a couple of different tech stacks through the lifetime of us owning the business.

[00:01:43] But for the last five years that we owned it, we used Django as our framework, Python obviously is the programming language that we used. And then, we deployed on a DigitalOcean Droplet running FreeBSD because I happen to have a FreeBSD expert who lives in my house.

[00:02:04] And then we also had a mobile app that was written in React Native.

[00:02:09] Benedicte: So what data model changed the least from your launch until you sold?

[00:02:14] Anna: That changed the least?

[00:02:17] I mean, it would probably be just, we had essentially a model for all of our users. We had both guests and hosts. But then we had both one model that was just sort of for all our users, and that one was pretty static.

[00:02:36] You know, your typical username, email address. We did, you know, eventually have some more detailed contact information, like telephone number and things in there, and that changed a little bit over time.

[00:02:48] But because we had split everything else out to guests and hosts, those were ones that changed more, but that base underlying user model probably changed the least.

[00:02:59] Benedicte: Did you have any formal education in like how to model data for databases?

[00:03:06] Anna: No, not formal education.

[00:03:10] Funny story, I actually taught high school for a year after I graduated from engineering. And I taught a like, grade 11 or 12 computer course. It was like a business computer course, and as part of that, one of the units was teaching like Microsoft Access databases.

[00:03:28] And so I actually, you know, went and dug in to a lot sort of database design principles so I could teach these grade 12 kids how to design a proper database. But that was probably the most I ever learned was teaching it so I could teach that.

[00:03:38] Ola: Ooh, but yeah, that's good.

[00:03:41] Benedicte: Do you feel like that helped?

[00:03:42] Anna: Yeah, I think it definitely did. I mean, you know, avoiding duplicate data, you know, making sure you've got your relationships pointing in the right way.

[00:03:51] I'd probably forgotten a lot of it by the time I actually needed it again, but I think it helped me.

[00:03:56] Ola: So what data model has changed the most for you then since you launched Boondockers Welcome?

[00:04:02] Anna: So I think what changed the most is when we first launched, we were essentially just a messaging platform for people to connect with each other and arrange to stay on each other's property with their RV when they were traveling. And we didn't do any sort of actual tracking of those stays at the beginning.

[00:04:21] It was just purely, you know, "Oh, so and so has a spot. Here's the information about where they live," you know, generalized so nobody's privacy was infringed upon. And you could connect with them. And then there was just a messaging system after that.

[00:04:36] Eventually, by the time we were done, we had, you know, very detailed reservation models that included, you know, the exact dates, the number of nights they were staying, what kind of RV they were driving, how long it was, whether or not they were hoping to connect to electricity at the site, whether they were traveling with pets on that particular trip.

[00:05:00] So it became much more detailed and that. was essential really for us eventually because we started, we got to the point where we needed to do things like get insurance for our company. And that was imperative to know, you know, exactly how many stays people were staying with people, making sure that.

[00:05:20] We eventually, you know, instituted rules where you couldn't stay with a host for more than five days in a row.

[00:05:27] And that was part of our insurance requirements. So that was really the biggest change. We started out without tracking any of that and then we added sort of all of that as we went.

[00:05:39] Ola: So if you could time travel back in time, what would you undo about that data model thingy that you just talked about?

[00:05:48] Benedicte: The data model thingy.

[00:05:52] Anna: I mean, I wish we had tracked all of that from the very beginning, would be the thing that I would, you know, I wish we could undo the way that the model was designed. I think was okay. There were issues.

[00:06:07] So, the reservation system kind of had to work with the availability system, and I'm trying, I'm wracking my brain a bit for the details here, but the availability system was sort of on a per night basis.

[00:06:19] It's like, you had to check and see if a spot was available, you know, five times for each given day. Whereas the reservations were sort of a beginning and end time range. And it, it became difficult to sort of rectify those. There was a lot of database calls when you're trying to, you know, check and see if that availability could move across those days.

[00:06:42] So I still didn't ever, I never came up with really the best way to sort of deal with that. But then I sold the company.

[00:06:48] Benedicte: And yeah, time and dates are just hard.

[00:06:52] Anna: They are. They don't seem like they should be hard, and yet they are, right? And then you just start to deal with like, time zones. We, you know, most of our hosts were in North America, so you maybe had like, a three hour time zone difference, and most of the time it didn't really matter if it, you know, if you were crossing, you know, a date boundary.

[00:07:14] But we had been suddenly, you know, had a huge European uptake, then that would have really been challenging from that perspective. But we definitely ran into issues with that too, where we had, you know, people who happened to be, you know, checking before midnight, from one coast and trying to reserve a spot on the next coast and it was on the other side, and it was like the other day.

[00:07:39] And yeah, dates are hard,

[00:07:41] Ola: But did they call you up? Did they like need support or what? How did you solve it then?

[00:07:47] Anna: Usually they would email us, not call us. But yeah, we would just go in and fix stuff if it was wrong. But it was more often than not things like, "oh, it said it was available this day, but then I went to reserve and then it wasn't," and it was because of a time zone issue.

[00:08:01] Like they were actually in the Pacific time zone. And they were trying to reserve something in the Eastern time zone. And it was a different day than it was the next day. Anyway, it's hard.

[00:08:12] Benedicte: And they were going to drive across the time zone.

[00:08:14] Anna: I mean, yeah. I can't imagine they were getting there that quickly.

[00:08:19] No, but yeah.

[00:08:20] Benedicte: No, because I just learned, and I didn't know this, that if you look at the world, there are 15 minutes time zones. There are, and I don't remember where, but there are some places where it's just like a 15 minute difference. Like you zoom, it's an hour. At least, but there are half hours and also some 15 minutes time zones.

[00:08:38] Anna: Oh, that's crazy.

[00:08:39] Benedicte: Yeah. So a lot of people, so just like, you know, save those dates in UTC and just like have them in UTC and use some proper framework to understand what time zone is they're in, because you do not want to code that yourself, if that is not what you're going to sell though. Like if you,

[00:09:00] So did you save them in UTC or did you choose one of the American time zones or did you, you add the time zone? Do you remember?

[00:09:07] Anna: We saved them in UTC and then we would try to display them in current time zone. But there's also, yeah. It's like, gosh, you're digging into my memory here. But, you know, the time that one person would see if they happened to be, they were reserving for a time zone that they weren't currently in.

[00:09:27] So, it's like, do you want to show them in the time zone that they're currently in or the time zone of the place that they're going to be, right? And so, it was hard to necessarily know all the time which time zone you were, should be displaying to people when they're traveling.

[00:09:41] Benedicte: Yeah, absolutely. I like it when it's like it says shown in your time and then it has like a time zoned version next to it.

[00:09:50] Cause then I feel like I can trust it. Cause that it's in your time zone. I'm like,

[00:09:55] Anna: Yeah, you're right. It's like, "you're going to arrive at 2 p. m. Eastern tomorrow, even though the place that you're stopping in is actually in central time zone." So, you know, it should show both of them there. That would be ideal when you've got different, but anyway. Yeah.

[00:10:10] Benedicte: Because a lot of people say just, you know, show it in their time zone, but, and it might be the developer in me, like, I do not trust it. If it just says that it's in my time zone, I'm like, "I need to know."

[00:10:22] Anna: I have the same complaint about currency, right? Because you know, I'm in Canada and everything's in dollars, but US also uses dollars.

[00:10:29] So you know, if I'm on a website, I have no idea half the time I'm like, is this Canadian dollars or is this American dollars? It's a big difference.

[00:10:36] Benedicte: That's, I haven't thought about that with dollars because for me, that's just American dollars, but we have the same thing with our currency. Cause it's the same currency in Norway, Sweden, and Denmark.

[00:10:45] Oh, it's not the same, but it's the same symbol. Same name, yeah. But not the same currency. So it can be very different.

[00:10:54] Would you say there is any specific challenges when it comes to data modeling for a two sided marketplace that people need to be mindful of?

[00:11:05] Anna: Just protecting people's private data, making sure that you've, you know, there were times where we've got, our hosts had, you know, all of the information about exactly where they lived, you know, detailed directions on how to get there.

[00:11:18] And you know, those things for us were, you know, shared with people who they had invited explicitly to come visit with them. But, you know, we had to make sure that they were not visible elsewhere. So it was sort of a question of, should we abstract that to a separate data model, or do we keep all that in there?

[00:11:38] And then, you know, the privacy part of that we have to deal with on another level versus dealing with it sort of at the model level. So that's sort of one of the things that was an issue for us is just figuring out which pieces of those are shareable and which aren't.

[00:11:54] Benedicte: Which solution did you land on?

[00:11:57] Anna: We landed on the do it at the top level and try not to screw it up level. Yeah.

[00:12:03] Benedicte: That's a good level. And I guess also messaging would be important when it comes to privacy.

[00:12:10] Anna: Yes. And messaging, I think in any sort of system messaging modeling is definitely complicated, especially we had our messaging models were very tied to like our, what we call like, it wasn't really a reservation, but like our stay request models.

[00:12:27] And so you had messages that were associated with a stay request. And you want to be able to display those with the stay request, but then people, you will want to be able to just see them all in like a, a unified inbox as well. And so there was a lot of, just being cognizant of how people like to navigate back and forth between those models.

[00:12:47] And I know that was something when we sold the company, Harvest Hosts had their own very similar product. They, our acquirers arrange stays between RVers and private businesses like wineries and breweries. So they already had their own sort of reservation system. And so they really, they didn't buy our technology.

[00:13:10] They bought our customer and our host base. So they migrated all of our customers and hosts over to theirs. But we spent, you know, I was on their staff for six months, essentially helping to navigate the change in getting essentially technology parity between the two systems. Because their system had been pretty much predominantly, you just pick up the phone and call the winery and see if there's a spot.

[00:13:34] They didn't really have a very robust reservation system. So there was a lot of difficulties in getting sort of that, like that messaging to reservation connection wasn't nearly as easily navigable in their app as it was originally in ours. People complained about a bit, but I'm sure they'll fix it at some point.

[00:13:56] Ola: But they didn't want your technology because they were used to their own, even though it wasn't that good, or?

[00:14:03] Anna: I guess they had their own engineering team and they, you know, had built something and they wanted to, you know, they were, it was still new-ish what they were building, right? So they weren't going to throw that out by hours.

[00:14:16] And, you know, they already had all of their, the things they needed for their current customers, their current clients, the wineries and stuff in there. So it made sense, like you don't want to have two technology stacks and if you're going to have to pick one, you might as well pick the one that you already have everybody trained on, right? So.

[00:14:35] Ola: So you didn't try to convince them? "You know, guys, look at this stuff I have here!"

[00:14:41] Anna: If I had really wanted to like stay in a job and stay there for, you know, the next five-two years, that would have been maybe the smart thing to do. But I didn't want to, I knew that I wanted to, you know, stay there for a few months and help them get everything set up.

[00:14:54] Benedicte: A question that popped into my mind when you were talking about messaging is, did you end up needing to do any kind of moderation features for the messaging? Or were your users all good people?

[00:15:09] Anna: Most of, well, it was mostly direct messaging, not like, you know, forum type messaging. So there wasn't a whole lot of moderation from that perspective.

[00:15:15] And then, in order to, to message one of our hosts, you had to pay us. So that right away, you know, removes a large number of the problems that you usually have in messaging systems. So as soon as you ask for any amount of money, you solve a lot of those problems.

[00:15:31] There was definitely, there were times though where, I mean, we had one person who was trying to open a competing app and they messaged every single one of our hosts saying, "Hey, you should come join our app."

[00:15:50] That was fun. They paid the, you know, $50 a year to get access to that. And then, yeah. It was probably worth it to them, but they just pissed off most of our hosts. So luckily almost none of them said, "Oh yes, I'll go over there." They just were angry at that guy.

[00:16:05] Ola: Yeah. You guys just seem like crooks, so maybe I should change to your service.

[00:16:09] That's, that's great.

[00:16:12] Benedicte: But what were the reasons for some of the, you said that you'd been on multiple technology stacks. Did you keep the database the same since you had that expertise in-house or, just talk me through like the technology changes.

[00:16:28] Anna: When we first started. I didn't really, I mean, I was a computer engineer, but I had not really worked with databases at all.

[00:16:36] I didn't do web development. I had been, I was a firmware engineer for a hardware manufacturer here. So, I didn't have a whole lot of knowledge about web development and our very first, we call it proof of concept. But it was like, that was our thing for five years, essentially was just Drupal CMS with a whole bunch of plugins and some custom PHP code thrown in there.

[00:17:05] So it was not, I was definitely pushing the limits of what you could do in there and to get anything accomplished took way longer than it should have. So essentially we had, you know, a lot of data in our database from that, that I had to export and massage to put into the new models.

[00:17:27] And I, it was a whole year long project when I decided, I rebuilt the entire thing in Django, created all the data models from scratch and figured out how to export from the old database and imported, like, dump out SQL in the proper, whatever formats to bring it in. Yep.

[00:17:48] Ola: So if you can like what you described there, I like that. I like that.

[00:17:51] So you had to build skills. First, you like did like Drupal skills and then you're like, "no, let's do something else."

[00:18:01] And then, so if you had to pick one skill, what's the one you would like say, "yeah, this one was the one I enjoy the most to kind of learn."

[00:18:11] Anna: I mean, I enjoy learning almost anything.

[00:18:14] I think, I mean, from a data modeling perspective, I think. I think one of the skills, something that I didn't know even existed before I started using Django was like ORMs, object relational mappers, right?

[00:18:30] Like, and Django has a really good ORM like that allows you to essentially not ever really have to write a bunch of SQL.

[00:18:39] And I really enjoyed learning how to do that and how to get better at that and reduce, you know, my number of database queries to get things out quickly and easily. And just how the ease at which an ORM allowed me to create those data models without having to really think about the details of, you know, which way should this relationship be pointing and all of the really finicky details that go into database modeling.

[00:19:11] Benedicte: The really finicky details.

[00:19:13] But I also think that since you had that, let's say the MVP that stayed for a long time. You obviously had a lot of knowledge about what you needed from your data models when you went into that rewrite.

[00:19:27] Anna: Yeah. And that made a huge difference, right? Like I wasn't.

[00:19:30] Yeah, when you talk about what changed the most, yeah. I was able to essentially figure out what we needed, what we didn't, what was missing, and restart from scratch. And I think I did a pretty good job in that, you know, we added fields here and there, but that was really the big change was, everything that I realized was not working from the original MVP and that I was able to essentially rewrite the whole thing when we moved to Django.

[00:19:57] Benedicte: Where did it really like butt heads when it came to the first version? Like what was the point when you were like, "I must rewrite. Like, this is not gonna work."

[00:20:08] Anna: I think it was, oh, I do remember. I remember what it was. When we wrote the original version, um, wwemed that, you know, our members would either be guests or hosts and sometimes both.

[00:20:24] But if you were a host, you were only ever going to have one host location. It was like, you essentially had a user, they might have a guest profile, they might have a host profile, but that was it. And then we suddenly had people who said, you know, "oh, I also have this recreational property that's fantastic and we'd love to have people come stay there. Can we have two host profiles?"

[00:20:45] And there was just no way for me to do that with the model that we had. And you know, we would say, make two accounts, you know, find a second email address and just make a second account and tell people to like, go look at your other account so that they can see your references on your other.

[00:21:02] And it was a very inelegant and not at all wonderful solution. But yeah, that was the thing that broke it. I was like, "I can't do this with this data model." And so when I moved over that was obviously one of the big priorities is making sure that you had a many to one mapping on the host location to users.

[00:21:19] Ola: Was that what Monica was talking about too? On Twitter there?

[00:21:23] Benedicte: No, it was more of what she actually said, in our interview where she said, "you always want to start with an array of the thing, not just one object of the thing."

[00:21:32] Anna: Yep, lesson learned.

[00:21:34] Benedicte: I love how you're coming back to some of the same lessons, because I think it's really interesting for, you know, people listening who are maybe more in the beginning of their journey or they're on their second journey, then they can be like, "yes, I also did that mistake. I will not do it again," or, "Hey, I can just skip that and just make it an array from the get go."

[00:21:59] Ola: Because Pierre also said that he needed to rebuild to get more flexibility with, you know, profiles and,

[00:22:07] Benedicte: I think he was talking pricing and plans so that you can have different plans and different, so not the subscription and the plan wasn't tied together and that they also could make custom plans.

[00:22:20] But I guess your pricing model was a yearly subscription, so you might not have had so many changes around that side.

[00:22:32] Anna: Yeah, that's right. We did eventually. We started sort of. We raised our prices, but we grandfathered people in, so we did have to add some things for that too. It was like, instead of just having one pricing model, now all of a sudden, you know, you could perhaps be grandfathered into a previous pricing model or.

[00:22:51] At one point, when we first started, hosts had, you could be both a host and a guest and then you would have discount for your guest membership and then later on we said a host can just have guest membership for free.

[00:23:05] Anyway, so we had all these different. And at one point we sold like three year memberships and then we stopped doing that. And yeah, so we definitely had a number of different pricing models that ended up.

[00:23:16] Ola: So you did?

[00:23:17] Anna: Yeah.

[00:23:17] Ola: You did? Okay. Oh!

[00:23:21] Benedicte: There's some common themes here. So just to go back to the host versus property, what does the most properties a host had?

[00:23:28] Anna: I don't think we ever had anybody who had more than like, maybe there was some with three. I think two was usually it though.

[00:23:34] Although we did sometimes, and again, this is another shortfall shortcoming in our data model, which I never was able to, got around to addressing, but we did have several hosts who would have, they could host multiple people at the same time, so it was still the same host location but they had, like, maybe a pad over here that could host a smaller RV, and then a pad over here that could host a larger RV, and this one had electric, but this one didn't. And we never really had the ability to let them differentiate like that.

[00:24:11] Like we could, we did say, you know, "how many rigs can you host?" That was something that we added when we moved to Django and the new model there was to say, and that might've even been an after the fact thing after that initial migration that we said, "oh, okay, people want to be able to say that they have spots for four or five rigs."

[00:24:30] And that came back to the reservation system too, where you're like, "oh, how many spots are left?" And make sure there's like, "oh, there's one spot for this night and there's two spots for this night," and trying to deal with all that from a reservation model level.

[00:24:43] But we never got around to being able to let people say, you know, "This spot can host this rig and has these amenities. And this spot can host this size and has these amenities." Unless they actually created two different host locations. So some people would do that. They would say I have three different host locations, even though they're really all in the same place, but different amenities and different size rigs that they could couldmmodate.

[00:25:10] Benedicte: But then I guess they had to add the same information for each of these spots that were common for the property.

[00:25:19] Anna: Exactly. So it's not ideal. And I don't think many of our hosts ended up doing that. I think most of the time they would just say in the details, it's like, you know, "ask me and we'll see if you can fit in there or something." And but I mean, ideally if I were to redo it again, yeah, that's something that I would have to take into consideration is that the spots and the amenities are joined and that's a many to one relationship with the location.

[00:25:44] Benedicte: Yeah. So the host can have multiple location and each location can have multiple spots.

[00:25:49] Anna: And each spot may have its own criteria of amenities with, you know, electric and water hookup availability and size that it can accommodate and stuff like that. Yeah.

[00:25:59] Benedicte: And then I guess some common ones for the location.

[00:26:01] Anna: Yes, exactly. So those were things that I would redo if I were doing it again.

[00:26:07] Benedicte: You always see these types of issues when the people using a system start writing things in the description like, "go see my other profile," or like, "Just call me or just message me" or like, that's when you, when you see that, like the data model didn't really fit the real world use case when you see those kinds of workarounds.

[00:26:33] Yeah.

[00:26:33] Ola: So do you have a tall tale?

[00:26:35] Anna: Yeah. So I don't know that my tall tale is really, you know, that tall. I mean, I think when, when you asked about data modeling, my mind meant, went originally to analysis of data. And one of the things I mentioned, I alluded to it earlier that we had to do at some point was apply for insurance.

[00:26:55] And we had to do a bunch of modeling of our data to figure out, you know, how many nights people were staying at places because we were paying per night for insurance, like how many on average? But also like how many nights does the average user actually stay with somebody? And, you know, if we're paying per night for insurance, are we ever going, you know, how many of our users are crazy power users who are actually putting us in the hole because the insurance is costing us way more than they're paying us on an annual basis because we worked on an annual membership fee.

[00:27:33] So were paying, you know, a dollar a night for the insurance. And most of our guests were not staying 50 nights a year with our hosts. But it was kind of interesting to map out all of that. And like, I was like putting people into buckets to see, okay, how many users do we have guests who, you know, never actually stay with somebody?

[00:27:54] How many guests do we have who, you know, only stay once or twice? Who stay, you know, three to five times and break it down like that? And, you know, how many users do we have who are going to totally break us and they're not making us any money. And should we change our pricing model if we're going to have this insurance because of that? Right?

[00:28:16] So that's from a data modeling and analysis perspective, from a, you know, actual modeling the data perspective. I don't know how tall tale I have.

[00:28:29] Ola: But what was the result then? What was the conclusion of your

[00:28:33] Anna: The conclusion was, we definitely had a few people who were costing us more than they, we were making off them, but a vast majority of them were such advocates for the program.

[00:28:46] They would go to everybody they met and say things like, "Oh, have you tried Boondockers Welcome? You really have to try it. Right? This is such an amazing program." And it was not worth it for us to try and find ways to make them, to make their memberships break even for us because they were just such huge advocates for the program.

[00:29:08] So we didn't end up changing our pricing model at all based on that analysis.

[00:29:14] Ola: But how many would you say that there were that were like, kind in the gray zone there, or maybe?

[00:29:19] Anna: Honestly, of the, we had probably when we sold, we had around 10,000 paying guest members annually. And I mean, it was in like the 10 to 20 range of people who were like that real power users.

[00:29:34] So it was a really small percentage, really. Yeah

[00:29:38] Benedicte: Did you have to go outside of your tech stack at the time to do these kind of analysis?

[00:29:47] Anna: Yeah, I did. I used Grafana, like, umopenource data modeling software and sort of dumped it in there and played around with it a lot. That was another huge learning curve for me to figure out how to pipe all the information in there to Superstarters and keep track of it. Yeah.

[00:30:08] Benedicte: But did you at any point like delete your prod database or something like that? Like any hard or any lesson?

[00:30:14] Anna: It was, well, oh sorry, you mean like not on purpose?

[00:30:20] Benedicte: Did you have to roll back?

[00:30:22] Anna: You know, I don't think we ever had a giant, giant crash or anything of that sort, no.

[00:30:27] I just, I mean, I remember when we did like the big migration from the old system to the new system. It's like, you know, I had to shut everything down and I was migrating all the data over. And then, you know, I went to startup and I think, I can't remember what it was, but something had been formatted correctly and none, like this database migration that had taken hours, you know, didn't work.

[00:30:47] And I was freaking out and I'm like, "Oh my God, now what?" Cause I had tested it and tested it and tested it. But there was just something slightly different about the production database than the one that I had. I can't remember what it was now, but I did eventually figure it out. But that was maybe the biggest freak out moment I remember having.

[00:31:04] Oh, there probably was. And I've just like blocked it out of my memory now.

[00:31:09] Benedicte: I think that's the reason, you know, that that's why you're now doing a new product, because, you knoou it's the same with having multiple kids I hear. You block out the bad stuff and you look at the good stuff. I remember

[00:31:22] Anna: The only reason people get pregnant and have babies the second time. That's right. You've blocked it out of horror and trauma the first time.

[00:31:29] Benedicte: So do you feel like or have you taken any of your learnings from Boondocker Welcome when it comes, I know you're probably have when it comes to like marketing and sales, but have you taken any learnings when it comes to kind of your, your data and database choices now that you're working on this new product, Subscribe Sense?

[00:31:47] Anna: Well, I did a bit of shopping around trying to think of what text tech stack I should use. And I looked at like some Jamstack stuff, cause that's all the new hotness. And I know that you, Benedicte to work in, in Gatsby a bit. And I did end up using that for my marketing site, but I decided for the actual app itself, I would stick with what I know.

[00:32:05] So I'm still using Django and loving their lovely ORM, which does so much of the heavy lifting for me when it comes to data design, data model design. But I think like what you said, and just learning that that just always make a many to one relationship, if you think that things are gonna make, like, just, you know, one to one, if it's really one to one, should it just be the same model?

[00:32:30] I don't know. Maybe? Yeah. Sohavingg that many to one relationship in the first place is definitely important. Now, sometimes I think like it's overkill. It's like, "are people really going to have a whole bunch of different lists that they're monitoring with my software? Is it okay for it to just all be in one, you know, one list that they're looking at?"

[00:32:52] I don't really, you know, for most users, It's probably overkill to even give them that opportunity, the ability to do that from the front end, but from the back end, yeah, it probably makes sense to have that modeled that way.

[00:33:05] Ola: So how long have you been doing this then with the new thing?

[00:33:10] Anna: The new thing? A little over a year.

[00:33:12] Like I started coding it last year, but I will admit that I am enjoying it as a sort of slow side project where, you know, it's a side project to the rest of my lovely post acquisition life. So it's a slow, it's a slow burn.

[00:33:30] Ola: Yeah.

[00:33:31] Benedicte: It's a slow burn. But if you wanna, or just back to what you said, is that you could, yeah, I think it was an interesting point that you said that you can have, you know the database in the, or the data model in the backend can be more open than what you show in the front end.

[00:33:48] Like there doesn't always have to be a one to one there. And that's an interesting point because then. Yeah, then you can do the, cause it's often easier to change the front end than to change your database models after the fact.

[00:34:03] Anna: Yeah, absolutely. And at this point I don't have any customers who are sort of using that multi list capability. I use it a lot from a testing perspective so that I can have one account and I can make multiple lists, but none of my customers are. And like, maybe I really should remove that ability because it's really just confusing for them from a front end perspective to have this multiple lists.

[00:34:22] So yeah.

[00:34:23] Ola: So what's the list? What is in the list? Is it like email addresses or?

[00:34:28] Anna: All right. So we're going full onto the other side.

[00:34:31] So Subscribe Sense, is a marketing tech software that helps to increase lead capture specifically for like double opt in mailing lists that require, you know, the user to click that confirmation email.

[00:34:47] So really, we connect with your main email software, be it, you know, MailChimp or ConvertKit. Actually, ConvertKit's the only one it really supports right now. The support from the other ones is coming. But, and then, it will show you who has attempted to sign up and who has actually completed that confirmation step.

[00:35:08] So most of our users at this point are, you know, they just have one. You know, list that they really need to look at. But here's all of the email addresses. Here are the ones that are confirmed. Here's the ones that are still outstanding. And, you know, we can send reminder emails to them. We, you know, have a JavaScript snippet that people can, users can install on their like confirmation page or they can use a confirmation page that we host that shows like a status bar of whether or not the confirmation has been received yet.

[00:35:38] It includes what we call a sniper link to their inbox to help pull up the email address, the confirmation email directly which works really well, like for Gmail, like puts a search URL in the parameter, a search parameter in the URL to help pull up that email.

[00:35:55] Anyway, but yes, from a data modeling perspective, a list is really just, yeah, the list of all the email addresses that have come in,too get signed up for their list.

[00:36:05] And in, you know, In ConvertKit, you can have multiple forms. So, you know, it kind of is like, well, do we want to have them funnel those into different lists in our system? But from our perspective, it's like, it doesn't really matter how they got there because I'm not doing any of the sending of emails to those people other than, you know, possibly a reminder email to say, "hey, you haven't completed your signup yet."

[00:36:32] So it's like, We really, they really don't need separate lists, multiple lists from my perspective, but data model made sense to make it many to one. So yeah.

[00:36:44] Benedicte: And also just, I must just say that the whole form listing and ConvertKit still confuses me. I just end up tag. I just use tags even if they come from form.

[00:36:53] I'm like auto tag because it just.

[00:36:55] I get confused, but we should probably wrap this up. Yeah.

[00:37:00] Ola: I must just say that, you know, I, I've been a lot on sail ships, like large ones. And we have a saying there. Huh? Yeah. Yeah. Yeah. But like big ones with like a crew of a hundred, two, 300 people. And then we have a saying there and it's, if something can go wrong, It will go wrong.

[00:37:22] So the moment you remove that several list thing, this is one guy is going to show up with two lists and be like, Hey, I want my lists. Yep.

[00:37:31] Anna: Yes, absolutely.

[00:37:33] Benedicte: So where can folks go to find out more about you? And I guess Subscribe Sense.

[00:37:38] Anna: Yeah, so Subscribe Sense is subscribesense.com, And if you want to follow me, you can look me up on Twitter. I am @skulegirl, spelt what we call the metric way, S K U L E G I R L, skulegirl. Or you can go to my personal website, which is horribly unupdated, but annamaste.ca, I think. I think.

[00:38:05] Benedicte: And you'll be able to find all of those links in the description. And thank you so much for sharing your data model stories with us today, Anna.

[00:38:15] I really enjoyed your love for the, Django ORM. I also really like ORMs. It just makes everything prettier and more neat.

[00:38:27] Anna: It does. Very much. Yeah.

[00:38:29] Thank you so much. This was fun.

[00:38:31] Ola: Yes. Okay. Welcome back to Data in the Wild next week to discover more data model tips and tricks. Yeah. Ahoy. Okay. Bye.