back to all episodes

#6: From CTO to Indiehacker with Cory Zue

Details

In this episode Cory tells us about his journey to become a CTO of Dimagi, then going full indiehacker with his Django Projects: Place Card Me, SaaS Pegasus, Repo Story and other project. We also talk about writing habits, code quality and best practices, learning new language, python best practices and other fun topics. You will learn a ton about being a Django indiehacker from this conversation.

Show Notes

TIMESTAMPS

0:00 - Introduction

0:40 - Cory's Background

4:00 - As a CTO you learned from you colleagues or they from you?

5:59 - Cory's and Mine Milestones in Indiehacking Journeys

7:10 - Cory's Writing Habit

11:00 - How did you end up living in South Africa

12:30 - The Story behind SaaS Pegasus name

13:20 - What is SaaS Pegasus

15:10 - Does anyone review your code?

16:40 - How are you think about Best Practices?

21:30 - Learning from community of customers

22:40 - What is the source of most of your clients?

25:15 - Charging Corporations

26:30 - Roadmap for SaaS Pegasus

30:58 - Other Projects Cory works on, Repo Story

35:15 - Learning Different Programming Languages

37:40 - How you think about business logic in Django

39:30 - How you deploy project?

41:40 - Django ORM vs SQL

42:35 - How you handle backups?

42:50 - CBV vs FBV

44:50 - Outro

Cory's Personal Website

SaaS Pegasus

Dimagi

Jonathan Jackson

Chris Oliver

Jumstart Rails

RepoStory

Chat Stats

Place Card Me

Built with Django

Rasul Kireev

Transcript

[00:00:00] Rasul: Hello, everyone. Welcome to the build with Django podcast today. I have chorizo on my on the podcast. And yeah. Welcome Corey.

[00:00:07] Cory: Yeah, thanks. Good to be

[00:00:08] Rasul: here. So very quick intro see if you like that, Corey. So Corey is a humble, handsome, and a very likable Django developer who used to be a CDL Dimagi and now works full-time on his projects, which are SAS, Pegasus place card, meet chat stats.

[00:00:22] I think it's recently been the addition of a repo story and some other fun projects that you can check out on his website that will put in the description, but I think it's chorizo.com. Yeah, again, welcome. And thanks for coming. So the first question I'd like to start, if that's okay with you is your background.

[00:00:38] On all the podcasts that you've been when people ask you to talk about yourself and, to tell you about the users you start with with how you went on a sabbatical and you decided to become an indie hacker. And it seems to be like your life is starting from there, but I think your role as CTO and as a CTO is also very interesting and probably is also a big part of your [00:01:00] life and the reason who you are now.

[00:01:02] So if that's okay with you, could you please tell our listeners and myself how did you come to be, to become a CTO at Dimagi? And just maybe a quick intro into your life before, before in the hiking.

[00:01:14] Cory: Yeah, sure. Cool. Yeah, so I I start. I guess getting into software development in college, I was at MIT and I graduated and I went to Oracle for a year.

[00:01:26] And I described that period of my life as like living in the movie office space. Like it was it was just like very low stakes I would work four hours a week or something like that, but it was like, like nobody like I would finish my work and then I would just I would tell my manager that I needed more work and then it would take them, a few days to figure out what to do.

[00:01:45] And year after year of that, I was just bored and and looking for something else and a friend of mine. His name was Jonathan Jackson. Who's the founder and CEO of Dimagi. We were we lived together in college and he was like, Starting this new [00:02:00] thing. We are looking for coders, come and join.

[00:02:02] And so I jumped ship from Oracle. I went to a company, his company called Dimagi at the time. It was basically like they were the two founders and and an intern and me there were like a few other people who came and went very quickly. But so the short answer of, I remember the long short answer of how I became a CTO is that I joined a three person company and one of them was the CEO.

[00:02:26] The other one was the CMO chief medical officer cause we were in healthcare. And then I became the CTO. So yeah, so that was in 2006. And then my sabbatical started in 2016. So for basically 10 years I was a part of that company. I the company was relatively successful. We didn't have any sort of rocket ship, Silicon valley growth or anything like that.

[00:02:47] But every year we added, maybe a 40% growth. And so that went from three to four, four to six, six to nine, but then, it starts going, 10 to 15, 15 to 25 and it starts to [00:03:00] get big. By the time I stepped down and went on sabbatical The company itself was probably about 120 people.

[00:03:05] And my, it was a tech company. The tech division was maybe something like 35 people or something. And so there was no, I just grew and learned in the role. I, I honestly, I could barely code when I first started working. No, I, I had a computer science degree, but I had no professional experience.

[00:03:22] If I'm sure if I looked at the code that I wrote in those first few years now, I would laugh at how horrible I was getting better. But yeah. So for the first maybe, five to seven years I was, it was a small team, so everyone was an individual contributor, Jack of all trades.

[00:03:39] I was doing mostly coding. I was getting better at coding as well as like project management and communication and some of the softer skills. Cause. Our company was, we were always like working for other organizations at that period. And then, in the second half it became a lot more like architecture, design management skills, organization building sort of these like bigger picture stuff.

[00:03:59] Rasul:

[00:03:59] That [00:04:00] cause I also remember that you mentioned that you started learning Django and because people who work at Dimagi, they pushed under it. Yeah, that's a cool new thing back when it was a new thing. And let's use that. So with that in mind, would you say that you more learned from the people who joined in the sense of programming as opposed to as as opposed to otherwise around?

[00:04:23] Cory: Yeah. That's it, it's a good question. So when I first joined. Most of the projects I was working on were a mix of Java and C sharp.net projects. And for those first four or five years I was learning the most from our CEO, Jonathan Jackson, who hasn't touched code in probably 10 years, but at the time he was an excellent coder.

[00:04:43] And so I learned just a lot of sort of general software engineering best practices and lessons and stuff from that. When we adopted Django intern, like for most of our web applications we were all learning it together to be honest. First. A funny story. [00:05:00] Funny.

[00:05:00] I don't know. I don't know if that's what see, but I so my first project ever using Django our company did a lot of work internationally. And so we were we were going to Nigeria to to help build a web-based SMS systems to track the distribution of bed nets in Nigeria.

[00:05:17] So it's this random thing. We were partnering with UNICEF. And I remember I had I read the book learning and Python on the plane. I was going to do this big Django project. And I had literally like barely could have been pipeline before. And I had to, like, when we got onsite, I had to like, keep the book hidden for anybody else to know that I didn't, know Python very well.

[00:05:35] And then sometimes I would ask some dumb question or I'd write something in this. Unintuitive way and people were like why did you do it that way? Instead of using, let's scratch it or something like that, I'd be like what now? So it was, it was learning from peers.

[00:05:45] It was learning from partners, that particular project, there were a few UNICEF developers who were quite experienced and and had already been working with Django for a fair amount, but mostly just learning on the job and doing my best, not to mess up too much.

[00:05:58] Rasul: Okay, cool. Now we move on to your [00:06:00] Indy hacking journey and recently posted he published a post, about your, about reaching the financial dependence as an indie hacker. First of all, congratulations on that. It's a big achievement for sure. And

[00:06:11] Cory: I knew on a starting attorney.

[00:06:13] Rasul: Thank you very much. Yeah. I think I mentioned on Twitter, but I'm still going to plug it in here. I could shoot about two years ago, it was in February. You posted about your goals making $1. I don't think you started it back then. I think we just mentioned it. That was a goal. And so it inspired me a little bit as well in a sense that I was already trying to hack at that point, but I didn't have any specific goals yeah, I just need to earn, and then I saw this, much simpler goal locate.

[00:06:39] We just need to take it one step at a time. And then yeah, I decided to take that goal as well, make $1 in six months and that it took me two years. And very recently, yes someone paid a hundred dollars for it. So something that I offered on this website that we're doing the podcast for.

[00:06:53] So thank you so much for being the inspiration for me. And I think for a lot of people I don't think this podcast has a lot of listeners [00:07:00] yet. But I'd say probably 80, 90% of people know you. So yeah. Thanks for putting yourself out there and making blog posts and and stuff like this.

[00:07:08] Actually, it's very interesting as well. I was listening to other podcasts that you did. And you mentioned that two of your heroes were Paul Graham and Tim urban, who, are famously obviously all about writing. So let's say it's it's fitting that the, he also share with the world through writing.

[00:07:23] Actually I had a question about that as well. Would you say again, those two people are huge in writing. Like in the last 10 years, I don't know how many words they publish probably a crazy amount. Would you say you were happy with how much you publish and

[00:07:34] Cory: share? Oh, interesting question.

[00:07:36] Maybe in terms of word counts? Yes. In terms of quality, I think, no as you and others may not like the overwhelming majority of my public reading is just takes the form of these just like monthly updates of here's, here's how much money I made last month. Here's like what I was working on.

[00:07:52] Here's what I'm thinking about doing next. So it's it's almost like an accountability live journal for anybody who wants like more of a behind the [00:08:00] scenes perspective of what this thing is like instead of the highlight reel or whatever else you get from most places.

[00:08:06] But I think most like most of what I read is very autobiographical and only interesting if you like, know who I am and I've been like, paying attention to me for awhile. And I do wish that I were better or was able to write more it's like salient generalizable takeaways about, about indie hacking, about coding about,

[00:08:27] Rasul: I think your last last works were very influential both in the first of all the JavaScript writings that you did for the suspects as well.

[00:08:35] Some Stripe tutorials were also at least for me, they were very useful. I think for JavaScript it's been popular as well, because you did a bunch of talks for Jungo Colin and stuff like this. And also the one recent piece about Corona about COVID was very big. Or obviously don't want to talk about it too much here, not too much related, but it's still very curious how you mentioned that most of them.

[00:08:58] So your old APS and COVID [00:09:00] very long piece where you shared where you share your opinions about vaccination, stuff like this, and showed some vulnerability. I think the word is. And you mentioned that the reception was mostly good. Is that still the case today and there's still being do people still contact you about it or it's a light down a little bit that

[00:09:16] Cory: don't yeah, I would say it's mostly that died down at this point.

[00:09:21] It's I still get the occasional comments or retweet or something like that, but it is yeah, it feels like the, the internet is such that these things come quickly and then they go quickly and everything in the world moves on. D the overwhelming amount of feedback that I got was.

[00:09:36] Was supportive and positive. I don't know where I would. It's a 6,000 word things, so you'd have to you'd have to like really want to get mad about something and be like, spit on my way. Like you'd have to really care. And it's, I think one of the points I was trying to make in it was that this is like a situation that deserves a lot of nuance and consideration.

[00:09:57] And so it didn't trigger the [00:10:00] sort of reactive oh my God, this person is, some right-wing Trump list or something like that can often Come up with more strongly expressed it in. Yup.

[00:10:09] Rasul: I promise I only have a couple more personal questions and then we're getting into the nitty gritty of Django

[00:10:14] Cory: and I wasn't expecting to talk about covenant, but I,

[00:10:17] Rasul: I tried to make it as short as possible, but I think it was a big part of your recent kind of online persona.

[00:10:21] Cory: Going back to the JavaScript thing, the one thing I'll say about writing there is like I don't consider myself to be like a great writer by any means, but I'm definitely a great writer compared to the average software developer. And so that's been like a cheat code for me for marketing and things.

[00:10:36] It's just that I can talk about code in a way that's just like a little bit more accessible to to the average person, like a software developer who doesn't also write a lot down. And I think that's been one of the. One of my like secret weapons in terms of being able to like market particularly Pegasus, which is a product that is in the code of space.

[00:10:56] Rasul: Makes sense. Yeah. So a couple more questions just out of curiosity. So I [00:11:00] know that us citizen born in in U S Boston and a little bit curious, how did you end up choosing to go to South Africa and yeah. Why are you there right now?

[00:11:09] Cory: Yeah, it's it's a fluke.

[00:11:11] Basically my now wife girlfriend at the time we were working together for Dimagi in Boston and She was itching to live abroad for a bit. I was maybe on the fence but like the idea. And so we decided to move abroad, but not that responded to quit our jobs. And to mind you had offices in three places, it was in new Delhi, India Dakar, Senegal, and Cape town, South Africa, and deli is a nice place.

[00:11:39] It's I think the. I love the aspects of it. It was, there's a lot of pollution. It's got a lot of bustle, whatever the car is also a very nice place. I don't speak French which was a bit of a problem. And so we led it on Cape town. And I think when we got here, we both probably thought we'd be here for a couple of years and then go back [00:12:00] to the states.

[00:12:00] But for anyone who's been here knows Cape town is like the world's greatest kept secret. It's, it's beautiful. It's got mountains, it's got oceans, it's got wineries and restaurants and like a cool vibe. It's the cost of living is very low. The people are super friendly. And so we just two years became four years, became six years.

[00:12:23] And at this point we're yeah, we don't know how long we're here for or go anywhere else.

[00:12:30] Rasul: Thank you for updating us on their private till your life. Now let's transition slowly into your project and let's start with suspects is your biggest project. And so can we start with a little bit, the naming, how did you decide on the name?

[00:12:45] Is it something relating to something about Jenga ponies and horses? I dunno, what was the issue there? But I know there's some sort of, pony, horse Pegasus thing going on, but

[00:12:55] Cory: yeah, exactly. So the pony is like the unofficial, I [00:13:00] think a mascot of Django. I don't know if it's unofficial. And it was probably a bigger, maybe a bigger thing.

[00:13:07] Earlier on back when I was let me Django and five, 10 years ago, whatever. But yeah, so the idea behind Pegasus was like, oh, it's like Django, but with wings, like it's even, it was great. I can, you can run, but can you fly? That's and so the, yeah, it was basically like, get your Django SAS app, higher and faster.

[00:13:25] Like your horse now has wings.

[00:13:27] Rasul: Actually I realized that I haven't even mentioned what suspects he says. For maybe someone who doesn't know, it's essentially a I think you've said it, that one of the other podcasts as well. It's very nice putting it. If Django is, a framework that has batteries included, then suspect is a framework that has extra matters included for Django.

[00:13:43] So you help developers get up and running with a lot of. Thinks that they would think is a hustle to set up such as Stripe and maybe salary for background tasks and I think education and many things, and it's evolving. So [00:14:00] that's what

[00:14:00] Cory: one,

[00:14:04] and then just Jenga has, Django comes with a ton but it does stop at a certain point. And it's, it's not going to do anything in terms of it's, it intentionally tries to be unopinionated about your UI, your approach to JavaScript and front end development. It's not going to come with these sort of features that are maybe SAS specific, like teams and subscriptions and and complicated user management and stuff because Django can be used for anything.

[00:14:30] Not just SAS stuff. Yeah. Yeah. So I guess this is trying to. B Django, but for a more specific niche with people who want to get started with a little bit more. Yeah. That makes sense.

[00:14:45] Rasul: Makes me think of if it makes sense to build a SAS Pegasus competitor, where they focus instead of SAS, they focus on something else.

[00:14:52] But I don't think it's there other kind of profitable, sustainable ways of doing that. I don't know, personal

[00:14:59] Cory: website, [00:15:00] internal homegrown. Yay.

[00:15:03] Rasul: It sounds like that. Yeah. One question that has been on my mind and then intrigued me is in I'm sure you've seen this at Dimagi and other companies that people work for that have multiple developers working on the project, you would generally write code, submit a pull request.

[00:15:18] And then someone would review your code. Does anyone review your code for suspects?

[00:15:22] Cory: The 300, some odd customers I'll look at it like no. Nobody reviews my nobody besides me reviews my code before it gets into Pegasus. Because the product is the code. My customers will see the code and then they'll send me a feedback and sometimes they'll point out bugs or things that I did poorly a year ago though, talking about various things.

[00:15:44] So that's my that's currently my primary external feedback mechanism. I also do review all of my own code. So my development workflow is the same development workflow I did at Dimagi. I work on branches, I've submit, pull requests. I review the pull requests and it's yeah it's one part [00:16:00] of a habit.

[00:16:00] And it's one part just like coding and reviewing are like. Different activities. And when you're coding, like sometimes you just want to get something working and then when you're doing it oh, why did I do that? That way I should ask like a thing that happens as true. I find building in mature, like I spend enough time doing software development and immature organizations to realize that a lot of these processes are still useful, even if you're a team of one.

[00:16:24] So so yeah, I, I'll break up a piece of work into 20 different commits just because I'm in the habit of doing that and things like that.

[00:16:31] Rasul: Yeah. Yeah. Not all corporate practice, a bad somewhere in fact very useful. And so when it comes to. Called quality. Usually when it comes to indie hacking, people say, you don't care about tests.

[00:16:44] Don't do all this number. You just have to care about, stuff working and et cetera, as long as it worked for you, it's good. But for you it's a little bit different because your product is code, you want it to be best practice. Good.

[00:16:58] The reason why people [00:17:00] say it should just work for you is because the only person using it is me. And so I, first of all, I know it very well. I know the older gutches of the code. I can fix it very quickly, but let's say if something goes wrong with your code, people it's much harder for them to fix it and they have to compute.

[00:17:15] And so you have to think about, obstruction realizing. So it works for everyone. Do you just lean on leaning on your, experience of a developer or you still when you develop, I'm not sure exactly how to phrase the question, but what I'm getting at is that, how do you ensure that, it's best practices?

[00:17:32] How do you know where, how do you know where you don't know if you're doing the best thing possible?

[00:17:38] Cory: That's a really good question. It's a really hard thing. It's something I wrestle with a lot. But yeah, at on first, first line of defense is just trusting my own instincts. And so I, by the time I was, my last few years at Dimagi, I was spending probably, five times as much time and energy reviewing other people's code, helping them.

[00:17:58] Then I was writing my own code. [00:18:00] So I like, I've learned like when I started working, even on my first project, even when it wasn't had, no intentions of anyone else looking at their code, I still broke the code as if I, as good as well as I can. And, I try not to take shortcuts.

[00:18:14] I just, I've been around long enough to know that any shortcut you take is just going to cost you, down the line. So that was like a decent foundation. But you're right though, like with Pegasus specifically, it was. It was honestly the hardest part was declaring the MVP because, when you're looking at your code, all the shortcuts you've taken and all the design decisions that you like labored over, and weren't sure whether you made the right one and all those things.

[00:18:38] And so like for a long time, I was just like, I didn't want to release Pegasus because I was worried that people would look at the code and be like, oh, this guy doesn't know what he's doing. And so it was a big, like mental I dunno like a confidence and exercise and being confident enough to put my own code out there and not have it be judged poorly by other people.

[00:18:59] [00:19:00] And so it's always a. It's always a off, right? And there are people who are like code purists and, everything must have the most beautiful architecture and every class must have a hundred percent test coverage and be perfectly linted and typed and whatever else. And and then there's people who, won't do any of that.

[00:19:18] And don't even they don't even like space consistently or something. And somewhere between those things is where I sit. And like my personal philosophy is write the best code you can, but not at the expense of achieving the business goal. And so no Pegasus feature that comes out.

[00:19:38] Obviously no, no code will ever be perfect, but no, no Pegasus feature that comes out will ever be at the level of code quality, like design quality abstraction, whatever else that. I would prefer. And at some point I just have to make a trade off of this thing works. It's going to help a lot of people.

[00:19:56] It's pretty good. I think the code is pretty good. I think that, the feature is pretty good. I'm going to ship it. [00:20:00] I'm going to move on to something else because like it's diminishing returns from Iran to like, make this thing. Perfect. Yeah. And that's like a constant a constant like mental exercise that I'm just like doing with everything that I thought I worked on in that I built.

[00:20:11] One thing I'll add is there are things that I'm confident about. Like I'm confident that I can write relatively like canonical, like Python and Django code that, is reasonably like modular and split up and has tests and follows mostly best practices and that type of thing.

[00:20:29] There are places where I feel way less confident, like. When I first started learning view and I was writing like some VJs of UJS front-end example for Pegasus and, it was, there was another one of my first time, like using view and I'm like, am I doing this right? I have no idea.

[00:20:43] And for that stuff I expect that the quality is lower. I also do have there are members of the Pegasus community who are more knowledgeable than I am and all these different things. And so I do get a lot of good feedback Hey, why didn't you use, yeah. Why didn't you use TypeScript instead of [00:21:00] JavaScript?

[00:21:00] And I was like, I don't know, like this TypeScript good. And they're like, yes, TypeScript is good. Oh, okay.

[00:21:03] Rasul: That's not very useful feedback. That's just like normal people saying, like, why don't you use this? Why don't you use this?

[00:21:10] Cory: Yeah. Although, yeah. I think even just Python typing I was a little skeptical of, but But a lot of people that I respect said no, like pretty good.

[00:21:21] And then I start using that oh man, like how have I not been using this for so long? So it's, it is a good, like the, cause there's a Pegasus slack community where there's 200, some odd Django developers who are all most of them are indie hacking types. Some of them are, some of them work for companies or whatever else, but but everybody's got the same goal of building these apps with with Django and with Pegasus and is bringing different, experiences and opinions to the table.

[00:21:45] But it's. Place for me to get feedback about oh, is this, do you think this feature is a good idea? How do you feel about types, TypeScript? Which CSS frameworks you like? And so it's nice. Cause I can support them. They can support each other and we can I can use it as a [00:22:00] proving ground for like ideas or questions that I'm wrestling with.

[00:22:03] That is very nice

[00:22:04] Rasul: that I had this feeling lately that a lot of businesses, whatever their product or services the community aspect of it being added on is always a good thing. And I think, I feel like a lot of people in doing this, which is very good. Especially like with a smaller community spreading get people a little bit more passionate to heal, more contributing because you can always get, just a bunch of workers.

[00:22:25] I think that cold, something like that let's move it a little bit under business perspective of suspect SIS and I think. Some of the biggest gains, but further increase in users you had during your black Friday deals. Am I right about that?

[00:22:41] Cory: Yeah, for sure.

[00:22:43] Rasul: And outside of that, how would you say you get what's the source of most of your clients?

[00:22:51] Cory: It's a mix for sure. I think top is SEO. And so I, yeah I rank pretty well for things like, Dango boilerplate and [00:23:00] SAS boilerplate, and the types of, if someone knows that they want a boilerplate then they then they're likely to find me, especially if I want to use Python there, and then I basically just have a giant like awareness to to sale funnel, I guess I would say.

[00:23:16] And so the way I generate awareness is through two avenues, I guess one is through the Django community by writing writing content about Django working with Django and JavaScript or dangling Stripe or, background tasks and other things. But so basically every major feature in Pegasus could be one or more like blog posts.

[00:23:34] And so what I do is I just take these things. I like think about them. I write up a really long comprehensive guide to how I've done it. And then I say oh, by the way here's this I guess this thing that already has this for you and a bunch of other stuff, maybe you want to go check that out.

[00:23:47] I do a similar thing with conference talks and and so that's in the Django community and then there's also in the indie hacking community. I. Kind of do regular updates on, my my revenue strategies, I'm thinking through all that stuff. And so [00:24:00] those two semi overlapping, but mostly distincts, circles of people all become aware of me.

[00:24:06] Some of them get on the biggest email list and then, or, they become Twitter followers or whatever else. And then I just give them updates about what's going on. And then here's this anything that's in Pegasus tears know there's anything that I've been working on. I think there's like a, there's a long tail of people.

[00:24:18] And that, that was probably like, at least at least half of the, I should look closer at that actual data. But my guess is about half of that, the black Friday people were people who had long been aware of me or long been aware of Pegasus. They were they had seen regular updates. They had, it, it looked interesting.

[00:24:33] They were interested in trying it and then like the black credit sale gave them an opportunity to purchase it. And so that's. Yeah,

[00:24:40] Rasul: I would agree with that because I feel like I'm on the same page with those people. Cause I was this close to also buying the license.

[00:24:47] And the only reason I didn't was because I knew that I probably not going to do any pro separate projects this year. I'm like, I have a couple of different thoughts about the things that I want to do [00:25:00] this year. So I was like, okay, I'll leave it until next year. Maybe do another black Friday and we'll see how that goes.

[00:25:05] Cory: Yeah. I guess it's a double-edged sword that way. If people just they're just waiting for the sale, but yeah, that's true.

[00:25:12] Rasul: You also mentioned at some point that you noticed that one of the clients, one of the users of a suspect as this was a person from a big corporation, When we don't know what it is, you have never mentioned it. And I think that's fine. But have you I know you gave it some thought did you find a, an interesting solution to the problem where you want to charge more from the people who are from a big, corporations?

[00:25:36] Cory: No.

[00:25:37] Rasul: No.

[00:25:39] Cory: Oh yeah. I think there's something there. I think I could play with legalees or I could play with different restrictions around like number of developers that are allowed to use it, or, there's different ways I could try and get it. All of this is very it's impossible to enforce because once you have the code, can prevent you from copy pasting it and sending it to someone or [00:26:00] something.

[00:26:00] But I think at bigger corporate nations, Look at the fine prints and presumably not want to violate the terms. So I think I could do that. I don't, it's not like a interest. It's not like an interesting problem for me to work on. And so it's, it makes sense not to worry about it and and I'm making enough money from Pegasus right now that I don't I don't feel the need to squeeze out every possible nickel and dime that I had even out of, these billion dollar companies,

[00:26:27] Rasul: that's a good position to be in.

[00:26:28] So w what'd you say is the kind of roadmap for, let's say five, 10 years for for suspect assists. Are you thinking about actively improving it, adding things to it, or you at some point kind of wanna, reduce the amount of time you work on it then? Perhaps work on other things.

[00:26:46] Cory: That's a great question. I have no idea. I think I like to think long-term, but I do it in I don't do it necessarily at the product level. But yeah, five, 10 years. I think at some point there's [00:27:00] a question of whether Pegasus will ever become more than a boilerplate that you download.

[00:27:07] And a lot of a lot of. People who make similar products often end up building SAS products in sort of adjacent spaces. So there's this guy, Chris Oliver, I think his name is, but

[00:27:19] Rasul: he has, I was just about to mention him. Yeah. Something like that. Yeah.

[00:27:23] Cory: Yeah. So he's got a boiler plate called I think jumpstart rails.

[00:27:26] It's similar to Pegasus, but in the rails world. But he also has a SAS product that lets you deploy your rails app to servers and he's got a bunch of stuff. And so I think like when you make a boiler plate and when you have a community of people deploying Django apps and building like you, there is this sort of opportunity to, to some other stuff in the space that, you have the audience right there.

[00:27:50] You have the market feedback right there. It's a it's complicated because on the one hand, like [00:28:00] Pegasus is a one-time sale, mostly mostly model. There is a, there is like an annual upgrade if you don't get the unlimited version. So I, I do get some recurring revenue that way, but it's mostly a one-time sale, which means that that every month my income starts at zero and randomly climbs up throughout the month to wherever it gets.

[00:28:16] But that, that, so if some massive competitor came and took me out, or if Jane goes somehow decided that they wanted to add, all of Pegasus features into the mango core and all of a sudden Pegasus, like there's risk there, that you would have less risk if you have a subscription revenue and monthly customers and everything else.

[00:28:36] I think that the thing that I personally love about Pegasus. It's it's asynchronous. And what I mean by that as well like people download the code, they like work with the code. There's never going to be like, oh, your, my server is down because Pegasus did something wrong. And like I can, I feel a [00:29:00] little bit bad about doing this, but I could just not check my email for a month.

[00:29:04] And I'd have a handful of like annoyed customers who like to try to like, get in touch with me and ask me questions and I didn't respond to them. I'm usually very responsive. But I could do that and not worry that like the world was going to go on fire or something like that.

[00:29:16] So I never I don't need like notifications on my phone. I don't need like a pager or anything like that. And the thing I like most about Pegasus is it affords me the flexibility to have whatever lifestyle that I want to have outside of Pegasus. Whereas if the more you build, like like mission critical software, the more you want to have dedicated support and certain expectations about how responsive you're going to be and et cetera, et cetera.

[00:29:42] And so it's I've actually designed my list of like articles. I want to write some time, but it's I think there's a lot of criteria for what I am which I would say is like a solopreneur, but like a person who's working by themselves. In terms of the types of products that you choose to build.

[00:29:56] And for me, like the aspect of you're never going to have to [00:30:00] wake up in the middle of the night to like deal with this thing is like a very important. It was an important one. And so I think if I did eventually get to the road where I guess it's has these other things that like, are mission critical for businesses or something like that.

[00:30:12] Like I think that also means I'd have to hire people and it would just take me to this bigger, more ambitious place which I could imagine happening. But it's not like it's not something that's like pulling at me,

[00:30:25] Rasul: actually the role of CTO.

[00:30:28] Cory: Yeah, exactly. That's kinda been there, done that as I think for a lot of indie hackers, like their goal is to grow this big company.

[00:30:37] Like I already have. That job, like I had the job that someone who like started a successful startup at five years later, like I already had that job and I was like, that's not my goal. Like my goal is to be able to surf on a Tuesday and not worry about it.

[00:30:50] Rasul: That's cool.

[00:30:51] That's cool. So I know that you I don't know if you would agree, but I heard, maybe yourself said maybe even Cortland from a hinder hackers, that you're more breadth [00:31:00] over depth when it comes to projects and what you work on with with which work on. So probably not the case anymore since you, most of your work is on suspects right now, but any other projects that I know, place card me is a big part of you in the hacking journey.

[00:31:14] And I think it's pretty much

[00:31:15] What's the word. Passive kind of pilot. Yeah. Same with chat stats. But I think you recently start working on repo story. W would you catch about, and talk about this about for for a moment how's it going

[00:31:27] Cory: if it's as good as you expected? Yeah, it was one of the, one of the upsides and downsides of having a product that makes it easy to build new SAS applications is that you constantly want to just build these applications and I can justify doing any thing with oh, I'll learn and incorporate it back into Pegasus.

[00:31:49] So it is it's wonderful. And it's I guess a little dangerous or something like that. But yeah, no repost story. It was I was in a little bit of a rat and Decided to just [00:32:00] take a week off from everything I was doing and do something totally different. And so in that week I ended up doing just a sprint to build this product, to to provide like analytics about code review.

[00:32:11] And so it still works. It only works for source projects. And I was testing it on all the Dimagi stuff, because most of the work that Dimagi does is open source. But yeah, so you can go to report story that app, you can plug in an open source repo, and then you can see like how active it is, like the breakdown of pull requests and code review by by person and how likely things are to get reviewed and merged and stuff.

[00:32:33] And it I think it's a. Good product idea. There, I later found like a bunch of competitors that do similar things. I think I was my Google search terms. Weren't weren't the right ones to use, but once I figured out which terms to use, I like stumbled into a bunch of, so there's lots of other companies that do this type of thing.

[00:32:49] I think they target engineering managers who want to like, view their team's velocity and see where where their engineers are getting stuck in code review. Or if, [00:33:00] hopefully they're not, judging engineers quality based on how many pull requests they have open or something like that.

[00:33:04] Now but but so I I built this thing. I shifted. And then I was like, I realized that the gap between what I had and like these other products that existed that were already doing this thing was so big that I would have completely lost sight of the original thing I did.

[00:33:22] Like I wanted to do, which was just like, have some fun learn, build another science, learn, something, thanks for Pegasus. And so I just I didn't sunset it. I didn't kill it. I just left it there and I haven't touched it for basically something that week, if you can call it a break, but yeah.

[00:33:39] But I think it's good. I do feel it's important to keep to keep building products or working on production products. There's the sort of Shaun Wang, is that a switched? He has this thing called like the Neta creator loop or something like that, which is where you're like a writer and then you like.

[00:33:55] About being a writer. And then you write about writing about being, but like eventually, if you keep just [00:34:00] like doing the meta content about oh, like here's how I earn, whatever, blah, blah, doing X and then eventually, like you're no longer doing the thing that you originally set out to do.

[00:34:09] And so I do worry about that with Pegasus. Whereas if I just keep building generic stuff that I think people wants, I'll lose touch with the reality of this, these are the actual things that that SAS applications need and the problems they run into and things like that. So I do strive to keep building both my own products, as well as like I will occasionally like Pegasus customers will ask me to help them either get an MVP going or add a feature or things like that.

[00:34:34] And it's always a good way to. Get some more like real world context back into the Pegasus COPUS.

[00:34:42] Rasul: Do you have like a log book or rather, I just noticed the list of ideas that maybe you have, or you want to work on in the future or something like that.

[00:34:48] Cory: Like new products and stuff.

[00:34:49] Yeah. Like

[00:34:50] Rasul: new

[00:34:50] Cory: projects and products. Yeah. Yeah. I have I have a Trello board for each project and then I have a Trello board of like new project ideas. And

[00:34:59] Rasul: I could have one I, [00:35:00] in case you also like in neuro or just feeling creative for

[00:35:03] Cory: something. Yeah, for sure. Although it's also I like having it and also it's makes you realize how little time you have to like, do all the things that you want to do, which can be frustrating.

[00:35:14] Rasul: Unrelated jungle question is. You ever feel like you want to learn maybe programming, which someone that's in a different paradigm.

[00:35:24] Cory: Oh like learning new programming languages, always.

[00:35:26] Rasul: Cause it's different building a different product with Django. It's different to what you're doing right now, but like building something different in a different language is like very different. So maybe like it's even a bigger mind switch or a think about that.

[00:35:42] Cory: Yeah, for sure. I, my framework for technology stacks used to be like for anything serious.

[00:35:48] I would try to pick one new thing and then do everything else with the stuff that I know. With with police guard me, like I knew Django, but I had never touched react. So like I built the front [00:36:00] end in react and so that's like my general philosophy cause you want to be, you want to be efficient enough that you're like feeling good, but you also don't want to stagnate and be using some old tech that nobody's touched in 20 years because like it's the only thing you've ever used.

[00:36:16] So that's a way to stay relevant. I doubt I would ever jump ship like out of if I had like a web framework problem that needed an erm, it's hard for me to imagine not using Django and likewise, I didn't even know her. mean I've used Flaska Fairmount it's I do really like Python.

[00:36:38] And so I agree.

[00:36:39] Rasul: I agree. Yeah, for sure. I just recently I wanted to try learning. They're all drives me, just a curiosity for trying different things, but it was very difficult, especially for the person who started with Python. Everything makes sense and things. We really nice.

[00:36:54] But yeah. Yeah.

[00:36:56] Cory: I've heard good things. I've also heard good things about elixir. That's oh yeah, [00:37:00] there's so much you can learn. Cause there's CSS frameworks, there's JavaScript frameworks, there's, machine learning, there's so much stuff to learn, even just sticking in a generally like a Python Django world.

[00:37:13] Yeah, that's true. Yeah.

[00:37:14] Rasul: I think we have maybe five minutes. And since I did post on Twitter, if anyone has any questions, I would like to focus on that as well. So these are very jungle related. So like gold quality and stuff like this. Then this question comes, I feel like it's a plug for people.

[00:37:29] So this question comes from Ben Cleary, he asks. He'll be interested to hear your opinion on where to put the business logic injector. So for example, would you be storing business logic and in models like that models he calls or are you doing some sort of utility pile where you have any auxiliary things there or any, like where do you get query sets?

[00:37:51] So how do you think about business logic?

[00:37:56] Cory: Yeah, I don't have [00:38:00] strong opinions on this one. I think it's a. I think there's pros and cons to both. I tend to if if business logic depends a lot on, multiple one or more, model fields and it's literally just like returning, some other computer thing or something like that.

[00:38:17] That's the type of thing I'll tend to throw on the model for sure. If it's pure like logic like it's like taking one thing and spit on another thing or that type of thing then I'll tend to put it in more of a utility place or a well-named like module that describes the utilities are for.

[00:38:34] Yeah, I don't like having, a thousand line models, files and I find that usually I think if you have a lot of static methods or class methods on a model, that's often maybe a smell query set stuff, would be an exception to that to that rule.

[00:38:46] But yeah, I dunno. I, yeah, I don't have strong opinions. I think, do go with whatever convention that could be you're working on as much because also like mixed stuff like this, so irrelevant marginally, it's like, [00:39:00] it's not like you're ever just like opening a code, just like reading from the top of the file to the bottom of the file.

[00:39:06] So it's or jump jumped to declaration. So once you learn how to navigate your ID, A lot of these sort of like, where do I put something traces? Don't matter that much. It's I don't know, somewhere, like my ID tells me that it's in there wherever it says.

[00:39:22] Rasul: That's funny. So yeah, a couple of questions from Jason Wallace.

[00:39:24] It's the first he asks how does the relationship between Django project and service look like humans by that

[00:39:31] Cory: X one? Projects and servers?

[00:39:33] Rasul: Yeah. How does the relationship between Django project and service look like? I'm assuming he means how do you deploy projects? That's what I would assume.

[00:39:44] Just push code or,

[00:39:47] Cory: yeah, it depends I, I host several projects on a single on a single VM, essentially a Linode. Like a visualization droplet. But that, that works fine for these [00:40:00] kind of like small hobby projects, low stakes and whatever else on the flip side, like Dimagi is Django app, I couldn't use at-hand, but my guess is that thing is running on order of magnitude, like at least a hundred servers AWS.

[00:40:13] Yeah, exactly. And a bunch of weapon workers and redundancy and distributed databases and all that good stuff. But it depends on your needs, I reckon like when Pegasus, this comes up a lot on Pegasus projects and I will, I often tell people that. The first thing you should do is just if you've ever deployed a production thing before, just do that because it if you haven't, I usually recommend starting on a PA S like something like a Heroku which is usually a really straightforward just like a couple of quick configs and Pegasus, provide some telephones to do this.

[00:40:43] That's it's even easier, but it's very quick to just have the thing there. And down the line, if you get, if you have a really big thing, then like her can get quite expensive. And that's, I think part of their business model is to make it really easy to get up, up and running, but then once you scale and you actually like, probably have money at that point, then you're locked in, [00:41:00] start to pay them a lot.

[00:41:01] Yeah, but then if you're super cost sensitive, you can just host on a VPs and potentially even chair.

[00:41:07] Rasul: For me, it was actually, I tried Hiroko and then for some reason, at the time when I wasn't experiencing it, it makes sense to me at all. I could not get a work on Hiroko. So I was like, okay, I'm going to try digital ocean droplet.

[00:41:17] And surprisingly had couple of good blog posts and I made it work again, surprisingly, but I'm very glad I went that route because, I wouldn't say server management is her thing that I enjoy, but learning about it, certainly it was enjoyable. Not without annoyances, but it's still very fun.

[00:41:31] Cory: Yeah. So the issue with that is just when things go wrong, like when everything is going well on, on a VPN, on a VTS or VM, like it's great. And it's like cheap and it just runs itself, and then you have to patch your kernel because there's a sibling thing that just came out and you're like, yeah, What's going on.

[00:41:49] Rasul: Here's another one. Interesting. So also from Jason Wallace, do we ever abandoned or and just drop down to your sequel?

[00:41:57] Cory: I very rarely. I [00:42:00] haven't had to, on most of my personal projects, I have written a lot of SQL alchemy code and code that it's, I've used it more for dynamic models. And so if you like allow your own users to define her and data models, like a Salesforce type of thing, then that Django, or I'm just doesn't really work for that at all.

[00:42:21] You're not gonna I'm not in class for each of your users things, and somehow they drop it into your code base or something like that, or urgent or generate that dynamically. Maybe you could. I don't know. But so I've done it in that context. But rarely just what sort of like a normal Django model trying to do a fancy joiner optimize or something haven't run into too much.

[00:42:37] Rasul: How do you handle backups in case for next event? I'm assuming that, takes care for you?

[00:42:42] Cory: Yeah. Yeah.

[00:42:45] Rasul: This one is for me. Do you prefer class-based use or function-based use,

[00:42:48] Cory: I prefer function although I acknowledged that class-based views are good for I think there, they let beginners be faster.

[00:42:58] And from that perspective, [00:43:00] I think they have. Place in the Dango world. But yeah, I just, it's, I'm like what the Python does then a Python thing is explicit is better than implicit or, and like simple as, rather than complex. Like it, it's like the class-based views feel complicated and you're always like digging through.

[00:43:19] Class hierarchy to figure out where like particular pieces of functionality is running functional view. It's like the whole thing is right there, which I find very much easier to read.

[00:43:30] Rasul: That makes sense. I personally am very scared of functions. Function-based use. I've been coding with Django maybe two years and I still got enough try to hack my way around.

[00:43:39] Cloud-based use, even if something doesn't work, I'm like, no, there's no way I'm jumping back to function based use, except for the case with the Stripe where you were helping me It was more intuitive to do it that way.

[00:43:49] Cory: Anyway, it might just be while you're familiar with also, I that's why the

[00:43:52] Rasul: question is what do you prefer?

[00:43:54] And the ukulele prefer function. Basics. Yeah.

[00:43:58] Cory: Classmates, you sit in exist for the [00:44:00] first, like five years I was working on. Yeah.

[00:44:01] Rasul: Yeah. Like for people who actually the previous person I interviewed for this podcast, he also started coding the jangle when it, roughly the time when it was published in the world.

[00:44:11] But for some reason she is like very big. And plus BC she's I dunno, maybe simplicity

[00:44:14] Cory: or something like that. It's one of the, it's one of the bigger ideological divides in the Django community. There are strong, experienced, experienced people with strong opinions on both sides, which is interesting like that, that, that means there must be like a real merit to either answer.

[00:44:31] That's probably just a part. I think

[00:44:32] Rasul: I asked basically every question. I didn't ask every question on the sun. I still had a couple in mind, but I'll leave them for the next day. Hopefully there'll be so thank you very much, so much for joining. Is there anything you would like to say to the audience or like how could they can beat you or anything you want to plug in or, oh,

[00:44:48] Cory: Yeah, no, I think he did a good job.

[00:44:50] You can Google for all this stuff. Yeah, it's, that's pegasus.com. It's Pegasus and then Corey Xu zue.com is where I like like blog about my [00:45:00] entrepreneurial journey and all that stuff. And sees you on Twitter, which is where I do most of my social media thing.

[00:45:09] Thank you

[00:45:09] Rasul: very much for joining and answering all the questions and, sharing your experience and thoughts on various topics.

[00:45:16] Cory: Yeah. Thanks. This was fun. Appreciate you. Thank you very much.

[00:45:22] Rasul: Thank you for listening to the bill to Django podcast. Uh, if you'd like to please consider sharing it with your friends or giving it a good review on apple podcasts. Thanks a lot for listening and have a great day.