DiscoverGrowing Software
Growing Software
Claim Ownership

Growing Software

Author: Darby Frey & Ethan Gunderson

Subscribed: 0Played: 1


Follow along as two software engineers build and grow indie SaaS products while working their day jobs. Hosted by Darby Frey, co-founder of Lead Honestly, and Ethan Gunderson, founder of Glean.
19 Episodes
Darby and Ethan talk through being on call as an indie developer, using slack to store time series metrics, and the upcoming launch of Lead Honestly for Google Workspace.
On this exciting episode of Growing Software -- The pros and cons of managed database providers, side project objectives, the story of, and Darby figures out his Google API permission scopes.
Darby and Ethan go over the results of the previous episodes mini experiments.
Darby and Ethan talk through some idea validation and customer interview plans, dogfooding products, and how difficult it must be to build medical device hardware.
15: An Effective Pivot

15: An Effective Pivot


Darby has some successful onboardings after pivoting and Ethan gets stung by a bee.
Darby changes directions on the new version of Lead Honestly, and then tries to convince Ethan to do the same.
Darby talks about the experience of on-boarding a new power user, where to find a community for your product, building communities, and a dive into some potential features of Glean.
This week on Growing Software -- Vacation brain, wildfires, traveling, and an impromptu conversation on personal productivity. Also, talking about software.
11: The Mom Test

11: The Mom Test


LinksDatadogPrometheusZipkinMetabaseHoneycombThe Mom TestDeploy Empathy
This week Darby and Ethan talk about JavaScript testing, getting feedback from users, and the legality of fireworks.
Does Lead Honestly pass the Google security review? Does Ethan finally ship transactions? All of these questions and more are answered in this weeks episode.
José Valim's blog post on a authentication solution for Elixir's Phoenix
Ethan gives some details on his debugging complaints from last week and Darby gives an update on the lead honestly code retreat and upcoming MVP launch.
Darby laments their progress on launching the new version of Lead Honestly, but has a plan. Ethan shifts his workflow again.
Ethan gives an update on his day dedicated to working on Glean
This week Darby gives us an update on how his week of focus on Lead Honestly went, Ethan contemplates taking a day off, and they talk about the value of live data in database seeds.
Darby gives an update on the new version of Lead Honestly and Ethan talks about his work on the Glean marketing page and how it can drive the product roadmap
Lead HonestlyGleanTranscriptEthan: [00:00:00] Good afternoon.Darby: [00:00:00] Hello? Good afternoon. Happy Thursday. Ethan: [00:00:02] Did you get your, your, did it your shot on Friday or on Monday?Darby: [00:00:06] I did. Yeah. Yeah. It was three hours of driving pulled into the parking lot of this little community center. And walked in, they do the barcodes and everything. It's it was like a military run. I guess what is it? It's not the coast guard. The national guard, I guess yeah. Is running it. They were super nice, super easy.So literally walked in and did the thing and got the shot sat for 15 minutes, got back in the car and drove through.Ethan: [00:00:33] Yeah. That is almost exactly what we did. Yeah.Darby: [00:00:35] Yeah. Yep.Ethan: [00:00:37] Drove North until we were like 20 minutes outside of Canada, like a little hospital in the middle of nowhere.Darby: [00:00:47] Yeah. Yeah, that, it must be the thing with borders. We were right by Iowa, right by the border of Iowa there. Yeah. Had held a little more reactions than I was hoping to not quite as bad as others, but had a little fever and felt crazy for a couple of days, but,Ethan: [00:01:01] Yeah. I had the same reaction to at a hundred degree fever for like almost exactly 24 hours. Which it's unpleasant, butDarby: [00:01:09] Yeah.Ethan: [00:01:10] totally worth it to put this entire thing behind,Darby: [00:01:14] Yeah. Yeah.  What I started realizing. It was like, okay, I can do the, map it out on the timeline now. So it will be fully vaccinated by whatever, sometime in mid may. So then I started making plans with friends. It's so are you going to be vaccinated? You're like, okay.So we're all going to be vaccinated. Let's go hang out and do something like on this day. So I started like sending calendar invites to people.Ethan: [00:01:38] Oh, that's awesome.Darby: [00:01:39] yeah.Ethan: [00:01:39] I'm excited to go and like work out of a coffee house again without the low level anxiety ofDarby: [00:01:46] yeah. Yeah. It's super uncomfortable right now.Ethan: [00:01:49] yeah. Yeah. Always like cagey about it I'm excited to drop my guard, depending Minnesota is crazy right now in case counts,Darby: [00:01:56] Okay.Ethan: [00:01:57] that UK Marriott is rampaging through our state.So that'd be interesting to see how it pans out as we start vaccinating more, but we're back to December levels.Darby: [00:02:07] Oh really? Oh,Ethan: [00:02:09] real bad here compared to the States around us. Yeah.Darby: [00:02:12] I think here, we're just like on the steady plateau of just like the sameness. But yeah the vaccine rollout seems to be improving. It's like everywhere else in Illinois, you can get it except for Chicago. Unless you're, unless you have like risk factors, but it seems like they're pushing to change that real soon and just let it to anyone.And then I heard that Indiana is letting you come over and get it too.Ethan: [00:02:32] Oh, really?Darby: [00:02:33] yeah. So that's an option Hopefully, we won't have to drive three hours for that, the next round.Ethan: [00:02:38] Oh did you not schedule your second one right away? Oh,Darby: [00:02:41] yeah, they didn't do that. I was surprised, but I dunno, it seemed easy enough to do at the first time there.So if we do want to drive, it would be easy, but,Ethan: [00:02:50] Oh, okay. Yeah, we had to, we booked our second one right after they jabbed us with the first. So making that four hour drive to Canada.Darby: [00:02:59] Could you cancel it?Ethan: [00:03:01] maybe I think we're going to make a little trip out of it.Darby: [00:03:04] Okay.Ethan: [00:03:05] Drop the kid off with grandparents then.Darby: [00:03:07] you go. Okay.Ethan: [00:03:09] stay up somewhere by Canada for a day.At least break up the driving. So it's not eight hours in one day.Darby: [00:03:14] There's probably fun stuff to do up there, especially in the summer.Ethan: [00:03:17] there's a couple. Yeah. Land of 10,000 lakes, I think we could probably find oneDarby: [00:03:21] it's probably a few on that drive. Yeah.Ethan: [00:03:23] it's a couple of breweries up there, so he might do something halfway normal and get a beer in public. Darby: [00:03:28] Crazy. Crazy idea.Ethan: [00:03:30] don't know. It's the little things that I miss.Darby: [00:03:32] Oh man. Yeah, definitely.  I will admit I've been to some breweries here. But they're like super good about the distancing and everything. The one we went to  over this weekend is the head of this whole huge outdoor patio. And like the tables are ridiculously far apart.Ethan: [00:03:48] Oh, that's fair. I have gone to some outdoor places. I don't think I've dined in anywhere yet, but that I can remember.Darby: [00:03:55] yeah. But yeah, like now that the weather's better, except for today, for some reason outdoor sitting outdoors is not too bad. good times. All right. So how are things going this week?Ethan: [00:04:04] Yeah, I'll go first. My updates short my, my full-time day job has taken all of my energy this week. I did manage to get some stuff done. So I think when we left off last week, I had. A half implementation of a broken chart. I fixed that. So that actually reports now it looks halfway decent.Like it's not the best, but it looks all right. And then I got a pretty decent start on transaction support. So pulling in transactions and math and that kind of stuff. Still a bunch of work left to do there, but a decent start.Darby: [00:04:37] Okay. So that's like your upcoming work is just to keep pushing on that.Ethan: [00:04:42] Yup. Yup.Darby: [00:04:43] progress there.Ethan: [00:04:44] Yeah, it's definitely a little hard to stay motivated on that part. Cause I think it's like boring. Like it's all like the bones of the project before I can get to cool stuff. Yeah. So I might pivot a a little bit and do some of like maybe some design or marketing work.Just just to change it up a little bit. I'm also terrible at design. So I'll have to, I'll have to ramp up there. Darby: [00:05:04] Do you think you might try to get some professional help?Ethan: [00:05:08] I might I've been thinking about, so my wife is a graphic designer. Like she does stuff like this already, so I think I can get a logo. At a friends and family price out of her. But that's not the same thing as like full brand development, like picking a color palette and typography and that kind of stuff.I did pick up the refactoring UI book which comes with a bunch of preselected color palettes that look good. And Like a font sheet with good fonts where to find them and what they're good for. So I might ramp up there and see what I can do. Which like has a, like a side business decision is a terrible idea.And I recognize that as a self leveling up, I kinda like it. So that's why I turned out to be me with me wasting a bunch of time again, which is a theme of my updates for sure.Darby: [00:05:56] I don't know there's a trade off in all of this stuff, right? Like you could definitely hire, a company to do brand development for you if you really wanted to, but it's probably not a good use of money. Ethan: [00:06:04] Yeah, probably not.Darby: [00:06:06] Don't let my designer friends know I said this, but there's a lot of tools out there, like these color palette, pickers and stuff where it's it's not going to be a revolutionary color palette or whatever, but it'll look good. And I like for a lot of products, like the quality of that stuff, it needs to be good enough,Ethan: [00:06:27] Yeah. Yeah. That's where I struggle a little bit. There's so many competitors in this space that I think if I ever want this to get actual traction and usage, it has to look good and be like usable, have good UX. So I can't totally punt on it, but I definitely want on it a bit.Darby: [00:06:45] Yeah. That's interesting. I think that Yeah, it's probably like it's iterative. Like everything else, you can start with something and grow it from there. I think it is like, it is tough to figure out the right level because design and UX are so important. At what time is it the most important thing, Ethan: [00:07:01] and that's that time is not now for sure. Like I, which maybe this is just, Oh, a different, like a long way to say I should time box this work on it for a week.Darby: [00:07:11] yeah,Ethan: [00:07:12] I come up with in that week is what I'm going to run with until it doesn't work anymore. Darby: [00:07:15] Yeah.Ethan: [00:07:16] and then revisit it.Darby: [00:07:17] Do you think then if you feel like designing UX is really important for this product, do you think that you should, find a partnerEthan: [00:07:24] I thought about that too. Darby: [00:07:25] Yeah.Ethan: [00:07:25] I don't know why I've had it in my head for awhile that I want it to be like a solo founder,Darby: [00:07:30] Yeah.Ethan: [00:07:30] but with my skillset, maybe that's not actually like a truly viable option.Darby: [00:07:34] I think the trade-off is you just have to pay someone then, so you need a friend that's willing to do it. She, or, like the other thing, and this is again don't tell my designer friends, but if you were tasked with this and you, you couldn't have a partner, you would find the cheapest way to, to get the best quality work that you could get.And so people do this all the time with engineering. If you go to other countries where things are a little bitEthan: [00:08:00] Oh, okay.Darby: [00:08:01] Like that's an option and you do that with engineering too.Ethan: [00:08:04] Interesting. I didn't think about it like that.Darby: [00:08:08] Yeah. That's the business that comes on and you're like let's see if all the widgets are equal.These widgets are $10 and these widgets are a hundred dollars.Ethan: [00:08:16] How many different Fiver listings do I have to post to get? Yeah, maybe a little bit more.Darby: [00:08:23] Yeah.Ethan: [00:08:24] How did, so Shay brings the designer or yourDarby: [00:08:31] Yeah. Yeah.Ethan: [00:08:33] how did you meet you decide,Darby: [00:08:34] super lucky there.Ethan: [00:08:35] How did you two decide to partner up on lead? Honestly, first one of you going it alone.Darby: [00:08:43] so you know, this, we had worked at companies together for a long time. Let's see. I think. I think we worked at four different companies together. So we'd been friends and coworkers for a long time. And when we left one of those companies we had a bit of a break and over the months leading up to that, we had just always been saying like, we should really try to do something ourselves.Like we, we had this idea of, we should start something together. Because we had, we'd always felt like there was a good relationship there between like his skill set and my skill set and like the overlap was just right in that we weren't really stepping on each other's toes too much.And then we re we just like working with each other too. We felt like we could have like as far as a founder partnership goes, I think we have pretty good like ability to communicate and that kind of thing. So yeah, then at that time, You said the let's, we've got a little bit of a break.Let's try to do something. And he presented the idea of lead, honestly. And and we just started working on it and we moved to something that we could start selling immediately, like almost immediately, two weeks. And and then we started to get some traction that way. And that's what kind of kept it going, was like that immediate usage,Ethan: [00:09:49] I didn't realize you went from nothing to like a sellable product in two weeks.Darby: [00:09:56] Yeah. Yeah, it was two weeks. It was cause it was I'm trying to remember. Yeah, think, yeah, it was like two weeks over Christmas that year. And that'd be like product hunt launched on either the Monday after Christmas or the Monday after new year's. I can't remember which one it was, but our product was super minimal and it was literally just a landing page and a Stripe form.That fed into a databaseEthan: [00:10:21] nice. Okay.Darby: [00:10:22] and what the product was at the time was sign up and we'll send you an email with your one-on-one questions every week. And so we launched it on a Monday. So then we would have a full seven days to get that first email out to anyone that had signed up. So yeah, we gave ourselves a maximum amount of time and then my emails just went out on Monday.So it was like, all right, we have some customers, we should build a MailChimp integration now. And so we didEthan: [00:10:47] is awesome. It obviously worked too. The product is grown, it's stillDarby: [00:10:50] Yeah. It's grown a ton. But yeah, it was really like that first like momentum because had we tried to build out like what we thought the whole product should be, it would have taken months. And then, we would have never, we probably would have never gotten there cause we would, we, would've lost lost steam pretty quickly.Yeah.Ethan: [00:11:06] Man. So I'm just, I'm really messing up then I need to, I gotta work faster.Darby: [00:11:13] see, it's not about working faster. It's about cutting scope, I think. Yeah. I think what is to me anyway is like the most encouraging thing and what helps to like fight through the challenging weeks of the day job is to have some sort of signal that. People are excited about this thing.If you couldn't sell the whole product right away, could you sell a part of it or could you get like a new, a sign up form, like the classic kind of sign up for an invite or we're going to launch soon, get on the list a thing. That's a signal that can, when you start to see, Oh, look, we had 10 people sign up for that list today.That's encouraging. I should really, you should really keep working when I'm tired.Ethan: [00:11:50] no, that's a good point. I think you're right. I'm going to totally pivot to just working on a marketing page.Darby: [00:11:56] Yeah,Ethan: [00:11:56] Yep. All right. That'd be my week. This week. Yeah.Darby: [00:11:59] Yeah.Ethan: [00:11:59] Something where I can show it off. I can point people to it.Darby: [00:12:03] That's a good idea. Like it makes it more real. You can use that domain name that you definitely bought.Ethan: [00:12:08] yup.Darby: [00:12:09] Yeah. And then the, it starts to actually frame your thinking too, about what the design should look like, because you should probably have some sort of screenshot in there.Ethan: [00:12:16] Oh, it should. Yeah.Darby: [00:12:18] You can maybe fix that broken chart and put a screenshot of it inEthan: [00:12:21] right. Ooh. Ooh. All right. I like this. All right. That's what I'm doing.Darby: [00:12:25] there it is. All right. We've changed your plan.Ethan: [00:12:27] Yep.Darby: [00:12:28] Nice. All right.Ethan: [00:12:29] Cool. So what's up with weed honestly, this week.Darby: [00:12:32] so where we left off last week is I was going to rewrite everything.Ethan: [00:12:36] Yup. Blow it up.Darby: [00:12:38] Yeah. And so it's started on that path. Built like a new application rails, new and started building out this whole Google doc integration feature. And then Shay and I  talked to last week and he liked the idea, we talked through like trade-offs of building something new, building it into the current application, what are the pros and cons of doing that?And I ended that call continuing on the path that I was going on. And then couldn't sleep Friday night because I was thinking about it. And then Saturday morning I changed my mind.Ethan: [00:13:09] In what way?Darby: [00:13:10] So what I did was I said like, all right, I think this would actually be easier if we just baked it into the existing application. There's a few things that just become easier from that accounts and like the whole playbook and questions system. We could just, use that as a, as it exists.But what I wanted, what I really wanted was a way to isolate the code of this new application. So that like the, it wasn't all intertwined with everything else. And if we wanted to pull it out and like to play it as a separate application could. So I started like reading about rails engines and I was like, Oh, this is actually like exactly what I want.So just spin up a rails engine, put all of the application in there and there's it's three points where the code like crosses over like the routes Where we pull in like a link to the user on the old application to the new application. And then when we pull in the playbook questions, cause that's all just pulled from the old application.But there's only two or three lines of code in the old application that actually needed to exist for this to work and everything else lives in the engine. And then the only other catch is that all the database migrations have to live in both. Cause you, you run migrations from the parent application.Not a huge problem cause they're all namespace and everything. So I gave it a name that was pretty easy, easily grep-able within the code and stuff. So it's easy to find everything.Ethan: [00:14:26] Okay.Darby: [00:14:27] but that's, that seems to be working really well. So I took everything. I had ported it over on Saturday and then expanded the functionality a little bit on Sunday.And then haven't worked on it since, but we've got a pretty good plan in place. And then I'm planning on taking PTO next week from the day job. And I just want to like tear into this thing and get a ton of it built out.Ethan: [00:14:47] Oh, that's awesome. I didn't realize that you were taking PTO just for.Darby: [00:14:50] Pretty much. I need a break too, but Yeah.Like I'm not going anywhere. I have no plans. And I really just want to spend a few days writing code, soEthan: [00:14:59] I'm excited for next Thursday then,Darby: [00:15:02] yeah.Ethan: [00:15:03] how much you got done in the week.Darby: [00:15:04] Yeah. I'm hopeful hopeful that we'll be able to get like the whole Google docs interface built out has got a really nicely designed doc. So we've got colors and special fonts and stuff like that. So it looks really good. So I think it'll be  a good interface.And then and that's really just like figuring out how to hook everything into, to write it and all the complexities of Google APIs.Ethan: [00:15:26] That sounds like a lot of fun.Darby: [00:15:27] yeah, I hope so. I hope hopefully I can get it all working and don't get like stuck on Monday on a problem that I just can't figure out for seven days.Ethan: [00:15:37] Oh, those are fun. Those are fun.Darby: [00:15:40] Yeah. But yeah, so that's what's going on there. Let's see. Yeah. We'll see how it we'll see how the week goes, but I've got high hopes.Okay. Let's wrap it up then.Ethan: [00:15:49] rabbit show notes for this episode can be [00:15:54] Yeah.
Ethan: [00:00:00] Good afternoon. Okay.Darby: [00:00:02] Happy Friday. Don't normally do this on Friday, but it's kinda nice.Ethan: [00:00:06] It is a little nice. Darby: [00:00:07] Are you done with the day job for the week?Ethan: [00:00:10] no, I'll have probably another hour after we're done here. But it's Friday. So that's a late day anyways.Darby: [00:00:16] Yeah. Things get real quiet for me around Noon.Ethan: [00:00:19] Is that because most of your team is overseas?Darby: [00:00:22] Yeah. Yeah.  A of, A lot of people kinda wrap up fairly early.  There's usually some stuff that trickles in, but it's much quieter than the rest of the days,Ethan: [00:00:30] Yeah.Darby: [00:00:30] I don't mind it. Yeah. So I'll go first today.Ethan: [00:00:34] Okay.Darby: [00:00:36] Last week we were talking about My idea this Google docs idea that I was workingon. So I had, I don't remember how this started, but my brain just started turning on this idea. And I was like, if we, so we have this application that's running, it's been running for a few years and it's got a lot of legacy assumptions built into it. What if we started over.Ethan: [00:00:59] Ooh.Darby: [00:01:01] And soEthan: [00:01:02] Tell me more.Darby: [00:01:02] started thinking about it and I was like, this is what base camp does.They did base camp to base camp three. They're all like kind of rewrites. And they like leave. I think I don't really know how their process works, but I know that you can go to old versions and still access them. And if you don't want to upgrade, maybe you get like security updates or something and that's about it.So I was thinking our customer base is not that large. And the way that I see this moving in the future is much more like integrated with the tools that the customers are using instead of trying to get them to shift their behavior to a different tool. So in our case, make the Google docs better for them instead of trying to drive them somewhere else.And so if I think about that, we start over. Instead of having like a regular sign up or sign in, you just use Google auth because you're going to be using Google docs, or if you're using say Microsoft products or whatever, and then it's, it simplifies a ton of other things. Like once you get past that, because then you don't have if we're doing it this way, here's the code for doing it that way.Here's the code. It's just there's just kind of one way to do it. Cause there's, we're not building for a whole bunch of different use cases. And so I I rails nude on I dunno, what was it Saturday last week. And so I've got like the full prototype working from like sign-in hook up your Google calendar, hookup, your Google doc, put some data in there, show a dashboard, no styles at all.Of course, but just like the whole thing working. I got that done yesterday. So what was that like six days?Yeah, a ton of assumptions, ton of, no tests, none of that. But wanted to prove out that the whole thing could work and like I'm going to show to share this afternoon. But I think there's actually an interesting approach to this, that that I want to explore a bit.Ethan: [00:02:50] That's really, that is really interesting. So one of the, one of the things we talked about last time was. The idea of this lighter version of lead, honestly, that dumps into a Google doc is as a form of expansion revenue. Like this would be potentially easier to get people to buy that version and then they could grow into the more full-fledged would you still do that with two separate apps, or would you look at it as like actually two separate products.Darby: [00:03:21] Yeah, I think that was my thinking last time. And now I feel like I wouldn't even want to like, try to push them to something else because I think it fundamentally, the tool that you're working in for most of the work that you're trying to do, needs to be like the most powerful thing for that action or for that task.And so I think like a one-on-one doc focused around a Google doc or a one-on-one experience focused around a Google doc, it gives you a ton of flexibility, right? Like you can both type at the same time and you can see the cursors and you can highlight, and you can make notes and comments and format text and, all kinds of things. And to be able to replicate that experience in a different tool, it would just take tons of engineering effort to get there.Ethan: [00:04:02] Look how much engineering effort we put into the Wiziwig editor? That's just a small component of what you get out of Google docs. Yeah.Darby: [00:04:11] Yeah so I started thinking, yeah. Started thinking along these lines, it's like, all right let's leverage the tool. That people want to use any way make that experience work really well. And then add on top of that, like all of the capabilities that we want to have. Really what the value that, that I think we bring to the, like this manager, employee relationship is all of the coaching.The questions that we can ask, the suggestions that we have like this is I dunno at the lowest level, there are pieces of content and that we show to a user at the right time. Like we should make that really good and not spend a bunch of time building like a WYSIWYG editor. So that's like where my head's at with it.And then I started going crazy. Cause I was like if we did this like instead of again, spending a bunch of time building a wizzy wig editor, we could. Make an app that could be, like a true, like single page app for the features that we're gonna take a user to in our application and then just make that an electronic app, or maybe make that a mobile app.Like you could spend time on those things instead of reinventing the wheel. Which I feel like we, we spend a ton of time on, Ethan: [00:05:13] all right. So you're gonna show that to Shay today.Darby: [00:05:16] Yeah. I'm chatting with him right after this. Ethan: [00:05:18] Okay. I'm interested to see what his take on it is or hear what his takeDarby: [00:05:22] yeah. Yeah. It's as I started rewriting things, I was like, yeah, there's a lot of stuff that we'll have to like, port over like all of our questions, our whole question model and the whole playbook thing. Like we would still want that in some way, but maybe not the same way that we have it today.Maybe we could simplify it. And then our pulse surveys, like that's a whole other feature that is I don't think that would really change that much. So do we duplicate that? Probably not that hard to do it but it's this weird kind of middle ground. It's not super, obviously we can just throw away all the old stuff and start over, but I think it would like we'd we get to. Where we want to get to with it much quicker, because we wouldn't be dealing with all the legacy considerations. Ethan: [00:06:01] Yeah. That's really interesting. It's definitely at least worth exploring, would you leave the you'd leave the existing lead honestly, up and running.Darby: [00:06:11] yeah, probably at least for some period of time, maybe give people a migration path if they want. But for some people that won't work because they're not on like Google,Ethan: [00:06:19] So when you leave signups open on it.Darby: [00:06:22] Probably not. Like until we got the new one done Ethan: [00:06:26] I didn't know how far you wanted to go, like the parallel track or this really is like the base camp approach of you're on base camp. Two, we'll leave that forever, but all of our energy and attention is on subsequent versions.Darby: [00:06:41] I think, yeah, I think probably that's what I would say would be the right way to go. And mainly because I don't want to confuse people during sign-up like, you just want it to be like, here's what you click on, just do this. And then you get the thing instead of having to understand what is version one and what is version two and why would I want one orthe other,Yeah. Yeah, it was fun to, to start hacking on stuff again. There's the complexity is of like Google API is there's some, yeah. There's a lot going on there. Yeah. Yeah. So that's that's what I've been up to. yeah, that's about it. Ethan: [00:07:19] cool. I had a pretty good week. This week after we talked last week, I pretty quickly got the deployment stuff figured out so I can deploy to Heroku. Which, so I haven't used Heroku since we were at belly together. been five years, it has gotten so much better. I I think I was a little jaded on Heroku based off of.We were early alpha users of private spaces.And so there was a lot of rough edges there. I don't know if you remember, we had the, we ran out of space in our private space sub-net so we couldn't spin up any more. Dynos do Darby: [00:08:00] I, yeah, I think I do.Ethan: [00:08:01] And so they, yeah they they were going to resize the, what I'm assuming is the underlying VPC for us and subnets.It was supposed to be like a seamless thing and ended up being almost eight hours of downtime,  Which is not fun at all. I haven't really used use them sense but getting I already had a Docker file set up for my existing Kubernetes deploy. And so just telling Heroku, like where to find the Docker file. They build the image or they build the container and then launch it.And then you can even do post and pre deploy steps. So like they'll run migrations. And if the migrations don't pass, they stop the deploy Oh, like just cool stuff like that is built in which wasn't there last time. I don't know. I'm really impressed for $7 a month for my dyno. It is Darby: [00:08:52] nice. you're not using private spaces.Okay. Okay. And I'm curious if that's gotten better. That's how that's always the thing that like bugs me about Heroku is the, like the, your database has to be world accessible. I wish there was a quick fix for that, but other than that, I think it's got Ethan: [00:09:11] Yeah, it's so nice. I have not been giving them enough credit for sure. I am using their database though, so I'll probably migrate off of it. When I actually launched the product, but for now I don't care.Darby: [00:09:24] I I know the answer to this, but why would you want to migrate off of it?Ethan: [00:09:27] Cost would be the big thing. Yeah. Yeah. Yeah. RDS hosting, even with setting up like a multi-age Z cluster is very cheap. That being said maybe I won't though, maybe I'll get to launch and decide that it's good enough for now.Darby: [00:09:47] I think the the, we have the same setup, so Heroku with RDS. And I think the I've heard stories that once you go to all in, on, on the. Heroku database. It's hard to move if you want to. And so I think hearing those stories, I felt okay, enough just to do this in AWS Ethan: [00:10:06] Yeah. Yeah. Yeah, we'll see you. So I got that done. I think funny enough, I'm still running the Kubernetes cluster. I should shut that down. But then, so we talked a little bit about this last week. I was running into issues with essentially like default scopes. Like how can I make sure that the data that I'm accessing is. The scope to the right user and being like really paranoid about this because it's financial data. Like I definitely don't wanna leak someone's finances to a random user. It turns out like maybe two weeks before I was thinking about this problem the elixir and ecto team echo is the database library wrote a whole guide on how to do this. And it is it's so well done. It's fantastic. So I implemented that. And as part of that I also had to change my data model, which made, actually made my data model easier to use. the way that it yup. So the way that glean is set up is there's this top level model called household and then users belong to a household and then accounts hang off of the household and then accounts have balances.And they're rolled up into like institutions. So like I have three accounts at chase. That belong to me. So like the issue I was running into is if I wanted to display all of the transactions across a household, you have to start at the top and then join your way down, like through the object graph to get all of the transactions.So like basically, like you always have to start at the top. You always have to say, I have a household now join in everything downward. Just everything becomes like a little bit more complicated than what you would want it to be. And so the way that this is set up now is every object in the system has a household ID.So every object, every record knows that it belongs to a household. So I can say every query that runs through the system has to have in household like you. So it's not possible to query for data without providing the household ID.So that solves the security problem. Like it's, you can't forget to add it. It just won't work if you don't scope it, which is fantastic.And because everything has a household ID, I can just go and say, give me all the transactions for this household and totally ignore the rest of the object graph.Yeah.  Darby: [00:12:31] Nice.  I suppose the thing you can't do then is like easily move. Individuals between households or something like that. If you weren't structuring the data, that way you, things would be a bit more independent, but Ethan: [00:12:47] Yeah. So you mean if you have a bunch of account data that you want to move to a different, Darby: [00:12:52] Yeah. I don't know. Ethan: [00:12:54] but that's a good, that's a good example. Yeah, there would be. It's possible. You just essentially have to open a transaction and updateall of it. All of it at the same Darby: [00:13:05] Yeah. Yeah. the primary use case either.Ethan: [00:13:12] no. Yup. Yup. I don't know. I think it's, I don't know if I've had a big refactor like this, where the end result is a more secure system, but it's also easier to use, like that almost never happens. It's I got the systems more secure, but because of that, there's like more Gates in place or, more process or whatever it may be.It's never that, Oh, I could query data significantly easier now in a more secure way, like that's. Darby: [00:13:44] I think that's like the pattern of thinking with relational databases. I know I do this myself all the time is it's okay, like you have this very like cleanly structured relational data system. And then you're like, cool, that's great. Let's ship it. And then you go to query and you're like, Oh, this is a nightmare.Exactly. And I think that's a really good example of why wouldn't you just do this? Like, why wouldn't you just put a user ID or an account ID on all of your objects then when you need to search it, you're not like relying on the correctness of the data model that  Ethan: [00:14:20] The other fun part too, is it uses Postgres as composite foreign keys. The account balance belongs to an organization. It also belongs to an account and that composite foreign key ensures that they both agree on the household ID. So the end result is since everything has a household ID and they all have to agree that they belong to the same household ID, you get that referential integrity across the whole object graph. So it's not like you can't like accidentally insert to the wrong household. It just, Darby: [00:14:56] Yeah. That's nice. Yeah. So that's enforced at the database level, so you don't even have, you'll build your validations and everything too, but Rigid Ethan: [00:15:04] Yup. Yup. That was fun. And then I ended trying to figure out what Java script as most things. And yeah, I wanted to get some charts built up. So you can try the first chart is going to be your total net worth over time. So now that I have all the accounts with their balances and those balances come in daily I can start charting that.So it's trying to figure out what charting library to use, how to hook it up into the asset pipeline and all the stuff that I've been ignoring so far.Darby: [00:15:37] okay. Yeah. That's Ethan: [00:15:39] Yeah. Yeah. I laughed when I started Googling for a charting library. So it was like JavaScript, charting library, and then Google automatically filled in 2021. So it's like that's how, like even Google knows how fast this Darby: [00:15:59] right? Yup. Yup.  Yeah. It sounds like you had a really good start and then  Ethan: [00:16:06] So the chart displays my math is wrong somewhere. It, like it was showing a net worth of 800 million. Which is, I don't think. Correct. So I got to figure out where I messed up my math on that.Oh man. Yeah, I think it, I'll figure it out for sure. But I'm guessing I store all values as cents. I'm somewhere. I'm probably not converting that cents back into dollars. And then assuming that it already is dollars. Darby: [00:16:34] Yeah. Yeah.  that can do it. Is there, I know in Ruby there's some pretty like good libraries for this sort of thing. Is, Ethan: [00:16:44] yep. No. There's a good one. It's called money. It even, it does the hard work to have, or not hard work. The boil boiler plate work of you give it a dollar amount. It knows how to change that dollar amount into cents. And then it stores that in the database. It's I can tell Ecto that this is a money type.And it knows to use that library to dump in load values and even handles currency conversion. So it should be pretty easy to handle things besides USD. So it'll know if it's Euro where like it use commas instead of periods Darby: [00:17:21] Okay. Ethan: [00:17:21] stuff. Darby: [00:17:21] rates,Ethan: [00:17:24] Not currency rates. No, justcurrencies. Darby: [00:17:26] impressive.  Ethan: [00:17:28] No, Darby: [00:17:28] don't want that.Ethan: [00:17:30] And next steps for me, I'm going to try to wrap up the charting library work so that, that is accurate. Maybe design it a little bit, and then I'm going to pull in transaction data. So that'll be a relatively big chunk of work. So it's when you bring in an account into the system, try to pull as much individual transactions as I can so that I can build up spending patterns and stuff like that with historical data, but then also getting the web hook library set up for as they come in. 
Download from Google Play
Download from App Store