Meeting Title: Brainforge x Stackblitz Weekly Check Date: 2025-02-21 Meeting participants: Luke Daque, Mitchell Wright, Uttam Kumaran
WEBVTT
1 00:00:13.440 ⇒ 00:00:15.580 Uttam Kumaran: Hey? Guys? Sorry about the delay.
2 00:00:17.780 ⇒ 00:00:18.470 Luke Daque: Hello!
3 00:00:21.100 ⇒ 00:00:23.009 Mitchell Wright: Hey? What’s going on.
4 00:00:28.970 ⇒ 00:00:32.390 Uttam Kumaran: Cool. I know we met on Wednesday so hopefully not.
5 00:00:33.750 ⇒ 00:00:37.550 Uttam Kumaran: You don’t have to take the whole time today, but I think we just wanted to share
6 00:00:37.920 ⇒ 00:00:47.019 Uttam Kumaran: Ryan. We wanted to share some work we did on the event side and joining it to the users. And so some stuff preliminary. Maybe, Ryan, I’ll let you sort of take that.
7 00:00:47.020 ⇒ 00:00:51.259 Luke Daque: Sure I can probably share my screen so that we can see.
8 00:00:52.640 ⇒ 00:00:54.100 Luke Daque: Give me a second.
9 00:01:01.840 ⇒ 00:01:03.560 Luke Daque: Okay, can you see my screen now?
10 00:01:03.930 ⇒ 00:01:04.599 Mitchell Wright: Yep.
11 00:01:05.239 ⇒ 00:01:13.229 Luke Daque: So basically, yeah, we we did, we created this fat events table, which is basically all the events from
12 00:01:14.430 ⇒ 00:01:20.389 Luke Daque: just consolidated into one. So initially, we did it by like one events table for the chats.
13 00:01:20.659 ⇒ 00:01:25.949 Luke Daque: one events table for the messages. But then, yeah, we just consolidated everything to one.
14 00:01:26.209 ⇒ 00:01:33.879 Luke Daque: And yeah, we should be able to see all the event related
15 00:01:34.019 ⇒ 00:01:43.699 Luke Daque: fields here that these would be null, for like, if if total tokens does not exist. For example, in messages, then these would just be nulls or any message events. So yeah.
16 00:01:43.829 ⇒ 00:01:48.179 Luke Daque: that way. Yeah, we just have like one table for all events, we can
17 00:01:48.379 ⇒ 00:01:54.619 Luke Daque: like filter those when we create a dashboard, we can just filter the event type and stuff like that.
18 00:01:55.269 ⇒ 00:02:00.639 Luke Daque: And we did like Putam mentioned. We joined this with the users
19 00:02:00.809 ⇒ 00:02:05.569 Luke Daque: table from postgres, so we should be able to see all the users details here like
20 00:02:06.879 ⇒ 00:02:12.439 Luke Daque: like the matrices for those users as well like, whether the email type is personal or corporate
21 00:02:12.569 ⇒ 00:02:17.719 Luke Daque: or like. If it’s an employee or not. So it’s already tied up to the event as well.
22 00:02:19.449 ⇒ 00:02:22.819 Luke Daque: Yeah, like, the get user id sign up method.
23 00:02:23.409 ⇒ 00:02:27.669 Luke Daque: And yeah, it. This should also have the.
24 00:02:28.349 ⇒ 00:02:31.622 Luke Daque: I think I just updated this. They should already have the
25 00:02:33.109 ⇒ 00:02:37.429 Luke Daque: the maximum, or like the the plan highest plan.
26 00:02:38.219 ⇒ 00:02:43.249 Luke Daque: I believe. Or maybe this isn’t updated. But in the fat users it should be updated.
27 00:02:43.799 ⇒ 00:02:48.069 Luke Daque: should already have the the plan as well.
28 00:02:50.229 ⇒ 00:02:52.729 Luke Daque: Yeah, and.
29 00:02:52.730 ⇒ 00:02:55.829 Mitchell Wright: Let me just look at that real quick. I don’t see that that column.
30 00:02:55.830 ⇒ 00:03:03.270 Luke Daque: Yeah, me just double check. Maybe I didn’t materialize the the same.
31 00:03:17.780 ⇒ 00:03:20.869 Luke Daque: It’s a yeah, the Pr still open. But.
32 00:03:20.870 ⇒ 00:03:21.850 Mitchell Wright: Oh, gotcha!
33 00:03:22.220 ⇒ 00:03:25.350 Luke Daque: But yeah, it’s basically looks like this.
34 00:03:27.180 ⇒ 00:03:30.989 Luke Daque: If I just preview this, it’s not yet in Snowflake, but
35 00:03:43.480 ⇒ 00:03:49.070 Luke Daque: show you here how it should look like, meaning
36 00:04:04.105 ⇒ 00:04:05.380 Luke Daque: one.
37 00:04:12.030 ⇒ 00:04:13.719 Luke Daque: Yeah, it’s it’s in here.
38 00:04:14.510 ⇒ 00:04:17.399 Luke Daque: So the highest plan basically is just using.
39 00:04:17.720 ⇒ 00:04:26.235 Luke Daque: So I did try to map it out. But it appears that like stripe already has this?
40 00:04:32.120 ⇒ 00:04:34.699 Luke Daque: yeah, not not all users have them, though.
41 00:04:35.520 ⇒ 00:04:36.906 Mitchell Wright: Yeah, so
42 00:04:37.600 ⇒ 00:04:41.191 Luke Daque: So probably not all users are subscribed, or something.
43 00:04:41.983 ⇒ 00:04:47.879 Mitchell Wright: That’s true, cause you can have a free plan which wouldn’t show up in stripe.
44 00:04:47.880 ⇒ 00:04:48.540 Luke Daque: Gotcha.
45 00:04:49.580 ⇒ 00:04:53.150 Luke Daque: But it did somehow look like this for for the users that have
46 00:04:54.075 ⇒ 00:04:58.240 Luke Daque: plans, subscriptions. So yeah, these would.
47 00:04:58.240 ⇒ 00:05:09.250 Mitchell Wright: And then 4 4 users is height. So let’s see, highest plan.
48 00:05:12.000 ⇒ 00:05:17.299 Mitchell Wright: And is that gonna that’s gonna potentially differ from current plan right?
49 00:05:17.660 ⇒ 00:05:19.779 Luke Daque: Yeah, this would be different from current plan.
50 00:05:19.780 ⇒ 00:05:23.630 Mitchell Wright: Yeah, can we also get a current plan on the user.
51 00:05:23.630 ⇒ 00:05:26.460 Luke Daque: Sure I can add that as well.
52 00:05:27.940 ⇒ 00:05:32.089 Luke Daque: So but a user can have multiple plans, though, right? If
53 00:05:32.370 ⇒ 00:05:34.039 Luke Daque: I think I saw like usage.
54 00:05:34.040 ⇒ 00:05:34.780 Mitchell Wright: Oh!
55 00:05:34.780 ⇒ 00:05:35.400 Luke Daque: Since.
56 00:05:35.710 ⇒ 00:05:37.469 Mitchell Wright: You know what? Maybe
57 00:05:41.110 ⇒ 00:05:42.410 Mitchell Wright: maybe
58 00:05:42.570 ⇒ 00:05:50.120 Mitchell Wright: that’s a good question. Well, can they be part of a team? Is that what the other plan would be.
59 00:05:50.590 ⇒ 00:05:55.000 Mitchell Wright: or does each plan get superseded? I’m not sure actually.
60 00:05:55.000 ⇒ 00:06:03.520 Luke Daque: Like this is an example of a user that has like multiple plans, or like, well, a subscription would
61 00:06:04.470 ⇒ 00:06:08.509 Luke Daque: multiple plans and show. So yeah, just a single user. But he has.
62 00:06:08.510 ⇒ 00:06:12.309 Mitchell Wright: Can you send me that customer id in slack.
63 00:06:12.800 ⇒ 00:06:13.540 Luke Daque: Sure.
64 00:06:14.030 ⇒ 00:06:21.469 Mitchell Wright: The well, both the user Id and the customer id would be, oh, wait. So that’s different. User ids.
65 00:06:21.470 ⇒ 00:06:24.990 Luke Daque: Yeah, like 2 2 users for a single such.
66 00:06:24.990 ⇒ 00:06:29.680 Luke Daque: But like, they have multiple like 4 plans for each user.
67 00:06:30.830 ⇒ 00:06:36.689 Mitchell Wright: Oh, that’s weird. Yeah. Send me. Send me the user ids and customer ids. There. I’d like to look at those.
68 00:06:36.690 ⇒ 00:06:37.490 Luke Daque: Sure.
69 00:06:38.270 ⇒ 00:06:40.919 Mitchell Wright: So I can just understand what’s going on there.
70 00:06:50.020 ⇒ 00:06:54.149 Luke Daque: Send both the 2 examples.
71 00:06:54.960 ⇒ 00:06:56.289 Luke Daque: There’s still more, though.
72 00:06:58.140 ⇒ 00:07:01.630 Mitchell Wright: Yeah, yeah, those will be great.
73 00:07:02.460 ⇒ 00:07:03.130 Mitchell Wright: Cool.
74 00:07:03.980 ⇒ 00:07:06.469 Mitchell Wright: Yeah. Okay.
75 00:07:06.710 ⇒ 00:07:13.420 Mitchell Wright: Well, so are they always on teams plans. Is that the situation.
76 00:07:13.420 ⇒ 00:07:17.350 Luke Daque: That’s a good question. I didn’t look into that, I can, I, can
77 00:07:17.560 ⇒ 00:07:21.399 Luke Daque: we? I can probably add also, like maybe a few that would
78 00:07:22.420 ⇒ 00:07:27.130 Luke Daque: maybe just a tag, whether it’s a in a team plan or not, or.
79 00:07:28.470 ⇒ 00:07:46.920 Mitchell Wright: Yeah, cause I’m unsure. I’d have to. I need to go back and like, look at it because I I don’t think you could have multiple individual plans. And so I would want them to. Probably we’d want probably yeah column for, like on the fact user table, to be
80 00:07:47.400 ⇒ 00:07:53.150 Mitchell Wright: the whatever their individual plan would be.
81 00:07:53.150 ⇒ 00:07:54.060 Luke Daque: I see.
82 00:07:54.060 ⇒ 00:08:00.650 Mitchell Wright: And then in organizations, you know, if they’re part of an organization, then we can have, like an organization member table.
83 00:08:02.350 ⇒ 00:08:07.509 Mitchell Wright: something like that. But for the fact users, really, I just want to get.
84 00:08:08.370 ⇒ 00:08:13.049 Mitchell Wright: I guess I didn’t specify their highest individual plan.
85 00:08:13.050 ⇒ 00:08:14.100 Luke Daque: Gotcha.
86 00:08:15.660 ⇒ 00:08:16.740 Luke Daque: Okay, I’ll change.
87 00:08:16.740 ⇒ 00:08:18.970 Mitchell Wright: That makes sense. Yeah, cool.
88 00:08:19.970 ⇒ 00:08:20.550 Luke Daque: Yeah.
89 00:08:22.680 ⇒ 00:08:31.189 Luke Daque: cool. Yeah, that’s essentially like what I’ve been doing. I’ve also added all the other stuff that we discussed last Wednesday. Like for the users.
90 00:08:31.380 ⇒ 00:08:35.220 Luke Daque: Yeah, I’ll I’ll like the highest plan the get. Get.
91 00:08:35.669 ⇒ 00:08:38.209 Mitchell Wright: Yeah, yeah, that’s perfect.
92 00:08:38.470 ⇒ 00:08:42.590 Luke Daque: Yeah, subscriptions. I think we could update some stuff in here as well.
93 00:08:44.650 ⇒ 00:08:45.400 Luke Daque: Yeah.
94 00:08:45.730 ⇒ 00:08:51.810 Uttam Kumaran: Yes, right ideally. I wanted to get a few views there that just had events tied to users.
95 00:08:51.950 ⇒ 00:08:52.930 Mitchell Wright: Yeah.
96 00:08:53.840 ⇒ 00:08:56.379 Uttam Kumaran: In real, basically the core events.
97 00:08:59.220 ⇒ 00:08:59.830 Luke Daque: Yeah.
98 00:09:01.900 ⇒ 00:09:07.590 Luke Daque: So yeah, for some reason, my, the reel wasn’t working earlier.
99 00:09:08.930 ⇒ 00:09:15.150 Luke Daque: But yeah, I’ll be the what I’m doing right now is I’m trying to create the events
100 00:09:15.693 ⇒ 00:09:20.349 Luke Daque: dashboard for real that’s already like joined with the users
101 00:09:20.580 ⇒ 00:09:24.919 Luke Daque: pack users table that we have that way. We can like see all those.
102 00:09:25.302 ⇒ 00:09:31.040 Uttam Kumaran: Yeah, I think we, we did. We already share the the core events that we’re
103 00:09:31.240 ⇒ 00:09:33.450 Uttam Kumaran: yeah. So basically, we are starting with
104 00:09:33.560 ⇒ 00:09:45.609 Uttam Kumaran: token events, template events, subscriptions, organizations, messages. And then basically, yeah, I was like, let’s shove it all into one core fact, events table. And we may.
105 00:09:46.205 ⇒ 00:09:55.630 Uttam Kumaran: I think I think we’re gonna make a decision on what to put into Json for like a if it’s like metadata versus keeping in a core events. But.
106 00:09:55.630 ⇒ 00:09:56.120 Mitchell Wright: Hmm.
107 00:09:56.120 ⇒ 00:10:00.570 Uttam Kumaran: I like. I like to have these structures because
108 00:10:00.870 ⇒ 00:10:03.060 Uttam Kumaran: it’s easier to add more events.
109 00:10:03.700 ⇒ 00:10:05.070 Uttam Kumaran: And it’s a.
110 00:10:05.070 ⇒ 00:10:07.879 Mitchell Wright: Yeah, I think that’s a great way to start out
111 00:10:08.290 ⇒ 00:10:10.899 Mitchell Wright: for sure. So I’m on board with that.
112 00:10:14.167 ⇒ 00:10:22.992 Mitchell Wright: like you said, it’s easy to add new events, and maybe at some point down the future we might have more specific
113 00:10:24.830 ⇒ 00:10:32.669 Mitchell Wright: events, or whatever, but like more individual you events, but I think, like a general activity. Event is.
114 00:10:32.670 ⇒ 00:10:39.539 Uttam Kumaran: Activity. Schema, yeah, exactly. So we want to basically shut all that. If we have more conversion events.
115 00:10:39.710 ⇒ 00:10:45.230 Uttam Kumaran: I mean, some people go the distance. And they sort of model everything. I’m
116 00:10:45.760 ⇒ 00:10:51.039 Uttam Kumaran: I am less interested in that because then nobody on the development side understands how to interact with that.
117 00:10:51.290 ⇒ 00:10:56.139 Uttam Kumaran: Yeah, that’s like. So right now, in like data modeling
118 00:10:56.270 ⇒ 00:10:58.830 Uttam Kumaran: activity, schema is sort of like
119 00:10:59.550 ⇒ 00:11:06.130 Uttam Kumaran: the like a big conversation it has been for a few years, but like shoving everything, modeling everything as an activity.
120 00:11:06.460 ⇒ 00:11:09.729 Uttam Kumaran: and then going from there that way. It’s easy to add more in
121 00:11:10.610 ⇒ 00:11:14.980 Uttam Kumaran: structure, really saying that way. You’re not left with like star schema shit everywhere.
122 00:11:15.340 ⇒ 00:11:16.480 Uttam Kumaran: However.
123 00:11:16.850 ⇒ 00:11:25.220 Uttam Kumaran: I’m like, I can’t, even if I get it. It’s like I. It’s like some we have to. We need like data teams to understand that I still think it’s a little bit tough.
124 00:11:25.760 ⇒ 00:11:26.640 Mitchell Wright: Yeah.
125 00:11:27.636 ⇒ 00:11:30.620 Mitchell Wright: Yeah. Cause I’ve seen. Yeah,
126 00:11:32.950 ⇒ 00:11:39.457 Mitchell Wright: I think for us right now, just a general activity event, like, what you guys are doing is the way to do it.
127 00:11:40.050 ⇒ 00:11:45.220 Mitchell Wright: and if we need to, at some point we can like create, you know, individual events.
128 00:11:45.450 ⇒ 00:11:47.679 Uttam Kumaran: You can take them out from there. Right? Yeah.
129 00:11:47.680 ⇒ 00:11:48.450 Mitchell Wright: Yeah, yeah.
130 00:11:48.450 ⇒ 00:11:56.589 Uttam Kumaran: You’re mostly doing counts by certain dimensions, and that events table will get very large. So you want to save a little bit on cost there.
131 00:11:56.760 ⇒ 00:12:09.319 Uttam Kumaran: You don’t want like tons of replication. And then, ideally, when when we join, we just take it from events, we take the event type that you need, and then also it helps. Because if you want to look at conversions between events.
132 00:12:09.540 ⇒ 00:12:10.080 Mitchell Wright: Yeah.
133 00:12:10.080 ⇒ 00:12:12.449 Uttam Kumaran: If they will want to do that.
134 00:12:13.300 ⇒ 00:12:26.319 Uttam Kumaran: you wanna look you, you want to have all that in one place, otherwise you will be taken to events, table joining on user, then joining on like, yeah. So it’s just like, so you could see the whole. You could take a user and one table. See all the events they’ve done.
135 00:12:26.520 ⇒ 00:12:29.629 Mitchell Wright: Yeah, in in in like sequence, exactly.
136 00:12:30.050 ⇒ 00:12:58.100 Mitchell Wright: Yeah. Yeah. Cause? Because, yeah, cause right, we’re gonna want, like, page view event project got started prompt, submitted user logs in user signs up and like, yeah. And so then we can just go through and we can follow the whole life lifecycle of a user and then sessionize everything. And yeah, it’s gonna be really good. I think I I’m totally on board with that direction of of doing doing events.
137 00:12:58.100 ⇒ 00:13:06.459 Uttam Kumaran: And it’s nice. Because again, you you guys are very heavily in on measuring on the on the events side, like we have other
138 00:13:06.910 ⇒ 00:13:08.680 Uttam Kumaran: software clients that are just.
139 00:13:08.730 ⇒ 00:13:14.460 Uttam Kumaran: They don’t. They’re not even looking at much on the user side. It’s purely just like revenue financials
140 00:13:14.480 ⇒ 00:13:42.339 Uttam Kumaran: and like more on marketing. So I think we there’s a lot of opportunity here to actually see the customer journey in the usage side, and then also do exactly what you wanted, which is, look at where they came from, how that impacts usage across any dimensions. And ideally, as you get analysts and they’re tasked to go like I don’t know how internally it’s structured in terms of products, but each product area will want reporting on their product or their set of events. They own
141 00:13:44.230 ⇒ 00:13:48.869 Uttam Kumaran: Ryan, and this is a very easy way to to supplement, to, to kind of feed all those all those folks.
142 00:13:49.250 ⇒ 00:13:56.820 Mitchell Wright: Yeah, okay, so this is, this is fantastic. And I think that so
143 00:13:57.820 ⇒ 00:14:02.080 Mitchell Wright: you’re gonna love. When I finally get the
144 00:14:02.920 ⇒ 00:14:13.334 Mitchell Wright: to data engineers on board, because I think they’re very much aligned with what you’re thinking as well as far as how to do eventing. So
145 00:14:13.880 ⇒ 00:14:15.600 Mitchell Wright: yeah, it’s gonna be.
146 00:14:16.520 ⇒ 00:14:18.030 Mitchell Wright: It’s gonna be really good.
147 00:14:18.350 ⇒ 00:14:19.350 Uttam Kumaran: Awesome. Okay?
148 00:14:20.640 ⇒ 00:14:35.040 Uttam Kumaran: So I think, Luke, like, let’s try to get some of you early next week with events tied to users. And that way we can start to map that. And then we do have a bare metrics video from Wednesday that we’re gonna start to pick off metrics there and and start to make sure are available here.
149 00:14:35.500 ⇒ 00:14:41.890 Luke Daque: Sure. Yeah, I should already have something later today, because I just that the rail wasn’t just working for some reason. But
150 00:14:42.590 ⇒ 00:14:44.590 Luke Daque: yeah, we already have the the fact.
151 00:14:44.840 ⇒ 00:14:48.149 Luke Daque: Events with the join with the users. They would. So yeah.
152 00:14:51.760 ⇒ 00:14:54.619 Mitchell Wright: Awesome. No, this looks great. I love it.
153 00:14:55.250 ⇒ 00:15:00.479 Mitchell Wright: Yeah, I feel like this is, this is like really starting to come together. Now, it’s exciting.
154 00:15:00.800 ⇒ 00:15:14.170 Uttam Kumaran: Yeah, I’m glad we’re it. I I think that we I honestly, the sources haven’t been that hard. I think we just. There’s just a lot of data that it took to get in. And now it’s now it’s fairly model. And then the real thing saves a bunch of bi time.
155 00:15:15.590 ⇒ 00:15:23.289 Uttam Kumaran: because we’re basically just developing the dashboards that there’s not. We’re just developing the semantic layer and real just makes that super easy. So
156 00:15:23.670 ⇒ 00:15:27.269 Uttam Kumaran: we don’t have to dedicate like another full work stream to to bi.
157 00:15:28.300 ⇒ 00:15:30.200 Mitchell Wright: Yeah. Definitely.
158 00:15:31.030 ⇒ 00:15:34.379 Mitchell Wright: Awesome. Okay. Anything else.
159 00:15:36.850 ⇒ 00:15:37.710 Uttam Kumaran: That’s it.
160 00:15:37.910 ⇒ 00:15:39.460 Luke Daque: Yeah, think, we’re good.
161 00:15:39.460 ⇒ 00:15:45.229 Mitchell Wright: Okay, cool. Alright. Well, thanks, guys. Then we will talk next week.
162 00:15:45.390 ⇒ 00:15:48.549 Uttam Kumaran: Okay, thank you. Have a nice weekend.