A cloudy feeling of dread
Hey, everyone. Welcome to build your SaaS. This is the behind the scenes story of building a web app in 2020. I'm John Buda, and I haven't seen the sun in over 2 weeks, which is cool.
Justin:I'm not used to you improvising. I'm Justin Jackson. I do product and marketing. Follow along as we build transistor dotfm. It it's dreary there in Chicago.
Jon:It's miserable.
Justin:Yeah. You were saying you might have to get out of town.
Jon:It's just like endless. I mean, I think it happens every year. I should be used to it, but for whatever reason, this time of year and everything from the new year is just like just this cloudy dread. Mhmm. I think there's supposedly sun coming this Sunday.
Jon:Well, by
Gavin:the time people hear this, it'll be, like,
Jon:that's the big news here is Sunday is gonna be sunny in 50. Like, put on your put on your swim trunks. Go to the beach.
Justin:Yeah. People people are excited. Yeah. I wonder if you need to just create a repeating calendar item for yourself that says, January 5th, get out
Jon:of Just town. GTFO. Yeah.
Justin:Where wherever that might be, go go find yourself a a tree house somewhere.
Jon:Possibly. Well, yeah. A tree house with no roof and lots of sunshine.
Justin:Yeah. I mean, it it yeah. It really does. I think here, we when we get snow, there's just so much to do in the snow. Right.
Justin:That You also even if
Jon:it's Yeah. But it's sunny after it snows there, probably.
Justin:Yeah. I mean, it can get sucked in in the valley, but we get, if you go to the mountain, you're you generally above the clouds there.
Jon:Right.
Justin:I mean, this is important stuff, man. I I'm sure there are a lot of listeners that feel the same way.
Jon:Yeah. If you live in the Midwest, near the Great Lakes, I'm sure you can feel the pain.
Justin:Now the the the flip side is during the summer and fire season here in the Pacific Northwest, it can be terrible. That's true. Smokey and awful. I remember I had just visited you, and then I was flying back into Kelowna, and it was like flying into the burning apocalypse of hell. Like, it's just red skies and completely smoke covered.
Justin:And and we're like I just come from sunny Chicago, and I was like, oh, man. Take me back to the Midwest.
Jon:Yeah. Everywhere's a trade off. I don't think there's anywhere that's perfect. It's either
Justin:Yeah.
Jon:Fires or earthquakes or hurricanes or extreme heat or cloud cloudiness and horrible winters, and that's just anyway.
Justin:Yeah. You just you just gotta you gotta move around. You gotta get put your laptop in a backpack, put your thumb out, grab a grab a ride.
Jon:And just buy a buy a Volkswagen bus and just
Justin:Yeah. Drive around. For sure, man. You can do that if you want.
Jon:It's possible. The transistor the transistor, mobile.
Justin:I don't know. I'll spend some money. I'll I'll spend some marketing budget on that.
Jon:Slap a big sticker on the side of it. Yeah.
Justin:For sure. For sure. We we need to have, transistor Westies. We need to have transistor surfboards, transistor snowboards.
Jon:Yeah.
Justin:This is all
Jon:You know, I did I did meet with our accountant last week, and I think we could probably expense that. Mhmm. Totally fine.
Justin:For sure. I mean, it's marketing. Right? Uh-huh. Alright.
Justin:I have a question. I I saw this tweet from DHH, and I do not understand it. Monoliths are the future. I don't what is he talking about?
Jon:Okay. I saw that too, and it is related to I think it's something he's talked about quite a bit and and a a blog post on changelog.com. Okay. Yeah. There's been a trend over the last, I don't even know, 5, 6 years
Justin:Okay. Of
Jon:taking what are regarded as these monolithic apps. Like what our, our app is a monolithic app. It is one code base that runs one stack of Rails software. Right?
Justin:Yes.
Jon:Okay. Every time we deploy, we deploy the entire thing.
Justin:Yep. So Laravel, Rails Yeah. All of the
Jon:By default, those things are, I would say, considered monolithic. Right? So if you're working at a company and everybody's working on the same code base and it's every deploy is just the same
Justin:the same thing.
Jon:Yeah. It's the same thing. It might have an API on it, but
Justin:it's always the same thing. And Go is are Go apps typically more microservice driven? They
Jon:could be. I mean, yeah. I don't know. This isn't necessarily related to Go particularly, but,
Justin:I just remember setting up a Go application on my computer, and it was like, what is going on? It was like, everything was a separate
Jon:I mean yeah. Go I mean, Go is easy to compile down to these separate binaries that you can throw anywhere, and they have, like, web, kind of a web server built in. So so microservices, the trend, and I don't have a ton of experience working with this stuff, but I did a little bit Yeah. At my last job. And, typically you are you have different code bases for different kind of pieces of your business or logic.
Justin:Yes.
Jon:So like you'd have an app that's like the storefront and then an app that is the admin and an app that is the API and an app that is, I don't know, like payment processing, and all those things are deployed separately. They all kind of talk to each other and have to know about each other. Yeah. And I think the idea was supposed to simplify the code base because each one is smaller, But from my experience, it's not it's like more resilient to problems where if one goes down, then not everything goes down, but there's there always seems to be a central component to that that's, you know, every microservice has to communicate to the same thing anyway.
Justin:Yeah. Yeah. So here's my experience. I I again, I've only worked on one thing that was structured like this. It was a Go application, and it's exactly like this.
Justin:There's a bunch of components. They're all kind of independent, and they would talk to each other.
Jon:Yeah.
Justin:But in my experience, first of all, setting it up was crazy. It was not easy to set it up. And, the next thing was that that duct tape between all of those elements seemed very fragile to me. Like, there there's always something like, what went wrong? How come this isn't running locally?
Justin:And then you have to, like, go down this entire crazy stack of things to figure out.
Jon:Yeah. How do you know where the problem is? And then if you're writing tests on that code, it's, like, for one microservice that might use another microservice, then you have to write tests that, like, stub out that other service, and it's like talking to a fake service. It just for so I think the the the point of this blog post and other posts that DHH has written in the past is kind of trying to make the point that it's really less efficient to do it this way, especially for small teams. Like
Gavin:for us, it's
Jon:like me working on the app. Right? I don't wanna maintain multiple apps.
Justin:Yeah.
Jon:Even for small teams in the past I've worked on, it it can be a little bit cumbersome. But I think it kind of can lead to some inefficiencies and hiring a lot more people than you need.
Justin:Mhmm. Yeah. I could totally see that. I the again, just what from what I remember and setting it up and, like, trying to test things and trying to figure out how to deploy things, it yeah. It just seemed really complicated.
Justin:And I kept asking, like, why, like, why can't we just why can't we just have this in one code base? And then, you know, even even for finding things, like, right now, a dummy like me can go into my code editor and click find in all documents, and then just, like, search everything for a little bit of content or code or whatever. And that just the simplicity of that is so helpful. I don't have to ask you, like, okay. Where is that thing?
Justin:Like, where is it hiding? I can just go and find where it is. And, I can run it locally. I can issue a poll request. And it it just seems like the process is simpler.
Jon:I mean, for sure for sure, you know, places like Facebook, they're gonna they're gonna have to split off services.
Justin:Yeah.
Jon:They have to. But for a new company starting out, if you I feel like if you choose from the beginning, you're like, we're gonna do microservices from the beginning.
Gavin:It's just
Jon:you're I don't know. I feel like you're gonna be spending so much time on the architecture of the app and actual than the actual product.
Justin:Yeah. You're over engineering.
Jon:Whereas, like, for us, I mean, we could there are places we could potentially split things off into their own app. Like, down the road, if this thing is massive Mhmm. There are and but that's more for that'd be more for, like, efficiency sake of, I don't know, processing analytics in the background or some like, something like that. Mhmm.
Justin:Yeah. Yeah. So oh, and this is interesting. I'll I'll pay I haven't actually read this, but this looks like an interesting take on it. Because Shopify has written something.
Justin:They have one of the largest Ruby on Rails code bases in existence. This is called deconstructing the monolith. Yeah. Something software that maximizes developer productivity. And I wonder what they ended up doing.
Justin:So they have something called a modular monolith. Anyway, I'll put I'll put this in the show notes too.
Jon:Interesting.
Justin:I I the reason I searched that is as you were talking about this, and then you're, like, you know, if you're Facebook. And I I keep thinking about that stuff, like because because people talk about complexity and power and all these things. And I'm I think my opinion now is, like, if you need that much complexity, then you're building something evil. I I mean, maybe that's not a universal law, but I just said it out loud just to see how it would feel. Yeah.
Justin:There there's just something about, like, even you know, I wrote this book called Marketing for Developers. And I I kind of, maybe naively, wrote a lot about how people can set up user tracking and how retargeting works and all this stuff. And now I look back on that, and I go, man, that was a bunch of marketing complexity. And what do we really get out of it?
Jon:Yeah.
Justin:What do we get out of it? Did it make the world better to have all this this retargeting? Well, from a privacy point of view, definitely not. From a a code complexity point of view, definitely not. Like, it added all of this cruft to our applications and our marketing sites.
Justin:And, and then from an efficacy point of view, it might I mean, I know retargeting campaigns can work, but it's like this. There are things that work way better that aren't, like, trying to squeeze the last drops of juice out of a lemon. You
Jon:know? Right.
Justin:Like, once you get to that level, you're you're real like, retargeting is, like, squeezing the last last drops out. Not just, like, in a micro perspective, but a a big macro perspective. Like, if you're in an industry, like, direct to consumer, once everybody is doing retargeting ads and everybody's, you know, marketing to you on Instagram stories and Facebook feed and Twitter feed. The the efficacy of those things, you're only gonna get a few drops of the lemon because so many other people have squeezed it.
Jon:Mhmm.
Justin:And and the trade off is that you've got to introduce all of this complexity.
Jon:Yeah. Yeah. That's what it seems like to me is especially if you're thinking about this stuff from the, from the start is it's just introducing complexities too early on. Yeah. Like, I can't imagine trying to build this and think about having all these services run independently.
Jon:And, you know, there's tools that are, like, self discovery. So these your your some of your systems can find other systems on the network and talk to each other and discover when new ones are added.
Justin:Yeah.
Gavin:Just I I don't know. I just I just thought of like, if
Jon:if transistor was big enough to where we had Facebook or Apple level data centers and you were, like, walked into it and you just saw these rows of servers, you're like, this is transistor? It'd be terrifying. I don't want. Like, what are these things doing?
Justin:And those machines, like, all pulse when they when you enter the building. Yeah.
Jon:And then the building
Justin:starts to shake and then it, like, electrocutes you and sucks you into the machine and then you're stuck there forever.
Jon:Yeah. And then you're in that sort of black mirror.
Justin:I mean, I think one of the threads that's been in our show from the beginning is questioning some things. Questioning how big do you need to be. Right. Questioning how complex does your software need to be? Does your business need to be?
Justin:And, actually, this relates to something we were gonna talk about last week, which is this this blog post I wrote called, margin, justinjackson.ca/margin. And the, the one of the observations I met I I I made is that typically, like, when you're when you're in a squeeze the last drops of the lemon situation, your response is often to add more complexity. Right? So there are certain industries, I'd say, definitely, like, the make money online kind of sell online courses to people who wanna create online courses. Like, that whole market is running on marketing steroids.
Justin:Like, they're using every single tool tracking, retargeting, drip sequence, automation sequence, dynamic content. Like, it just it's crazy. And, in my experience, the that there there's quickly diminishing returns there. And I I recommend in this post to look for business models that have good margins with minimal complexity.
Jon:Mhmm.
Justin:Choose work that gives you lots of breathing room. I think it's something to keep in mind. Only the another thing I said, because I was talking about this these 2 snowboard shops that I owned in my early twenties. And we were just, like, adding everything. Like, we just kept adding more to the store, hoping that it would increase our margins.
Justin:We we built a mini ramp in one of our stores and and charge people to ride it. We did events. Like, we we would do, like, video premieres. We published a magazine. We ran contests.
Justin:I started a retail collective in our town. We started doing bike repairs. We we were like it just we just kept adding more and more because we're chasing after, like, okay, we gotta make this business work. It's like, we're just pushing on this thing and trying to get the machine running. You know?
Justin:And the way to get the machine running is just to add more parts. And it was, like, throwing good effort after bad fundamentals. Because because the primary model was lousy, and adding more complexity didn't fix that. And I think I just define I think I just described Facebook. Right?
Justin:Yeah. It's like when the primary thing you've built is just a shitty thing, or I shouldn't I mean, I don't wanna belittle some of the the small business. Like Yeah. It it wasn't in Facebook's case. It was just, like, they built a shitty thing.
Jon:I don't know if the I don't know if the primary thing that they build is a shitty thing. It became a shitty thing.
Justin:It became a shitty thing. Yep.
Jon:They're selling you
Justin:Yes.
Jon:Out to advertisers and everyone.
Justin:But it it's it's interesting to think on both scales. Like, the small little independent business person like me, I was you know, this was my dream. I was running a snowboard shop, and I just got, into this vicious cycle of trying to add more things to the business, trying to make the business work. And the conclusion in this blog post is, like, if you're in that cycle, you gotta get out.
Jon:Yeah.
Justin:On the other side, there's these big massive corporations. Facebook, Amazon, Twitter, and the complexity of those businesses and their tech stack and, you know, everything they're trying to do. I I think there's something we need to think about that stuff. Yeah. And and, I mean, we've benefited from some of that.
Justin:I don't wanna I don't wanna pretend that, like like, we use Amazon Web Services, and there's some benefits there.
Jon:Yeah. I mean, we don't yeah. We certainly don't have to use them. It's like an evil option, but it's there's other I mean, the alternatives are not fantastic. Yeah.
Jon:I'm actually cure like, I know Basecamp switched to Amazon because they used to run their own servers out
Gavin:of a data, like, warehouse. Right?
Justin:I think I have Rackspace or something. Yeah.
Jon:Yeah. And, you know, they talk about they talk about model this a lot and how they use them. And I think their infrastructure costs are still really high.
Justin:Mhmm.
Jon:Regardless, it it's not I don't think microservices are meant to make your infrastructure cost cheaper. So, like, Basecamp will scale, I wanna say horizontally instead of vertically. Mhmm. Right? They they add more servers instead of splitting out parts of the code into something else.
Jon:Yeah. Which is fine. I'm curious. They've alluded to to, like, new things they're gonna announce this year, one of which is a new a new product, but the other thing they talked about is they're gonna release, like, some new development tools or I'm curious to see how this plays into the whole monolith talk, but Mhmm. I feel like what they're gonna do is release either some new stuff for Rails or some JavaScript packages that work with Rails that are kind of along the lines of of Alpine.
Jon:Mhmm. Right? It's like it's like, here here's how we're gonna develop or here's how what we use to develop this new app, that we're making, and it's Rails plus this, like, interaction layer on top, which is which is based on maybe stimulus JS, which they built internally Yeah. Or or something else. Or I feel like they they came up with this new this new way to build their new app that they wanna talk about, and I don't really know what it is.
Jon:But
Justin:But but there's gonna be the addition of some JavaScript stuff.
Jon:Yeah. I don't think they're gonna go, like, the one the single page app react route at all.
Justin:Yeah. But
Jon:the there's something something that they figured out works really well for them, in the context of, like, a monolithic app.
Justin:Yeah. Interesting. I I think these conversations are so fascinating. Because if you're technical, I think and if you're technical and nerdy, there is part of me that's, like, super interested in, like, okay. Like, how does this you know, how does artificial intelligence work?
Justin:How do you, you know, how does how can data science make our world a better place? And and so sometimes I think I do tend towards, like, wanting to dive into these complex topics. On the other hand, there are these patterns that that we have think about, like like, LA's, road system. Right? It started simple, and then they just kept adding to it and adding to it and adding to it.
Justin:And what was once a simple way to get around is now this, like, complex hellhole of of traffic. Right?
Jon:And
Justin:and how did that happen? Did that happen just, like, in a year? No. It's been decades decades decades of patterns that then reinforce new patterns. And then what you're left with is this, you know, crazy complex thing.
Justin:Whereas if you compare it to New York and New York's transportation system's not perfect, but the simplicity of the subway and how easy it is to get around that city is I don't know. It's it's an interesting contrast
Jon:that Probably also speaks a lot to, like, it's almost impossible to add new subway lines. Yeah. Like, you can't just dig a line easily.
Justin:Well oh, but this is these are design decisions, design patterns that, you know, at some point, people made decisions. Right?
Jon:Yeah.
Justin:And we we're making those same decisions in our applications. What patterns are we gonna reinforce? We we make these same decisions in the tech industry. Like, simply the fact that react has become such a massive thing. Like, it it's like one pattern reinforced another, reinforced another, reinforced another.
Justin:And now we have, you know, these React based apps. And whether that's good or bad is maybe another discussion, but that that and then we can extrapolate where will we go from here because it's not like it's not like things don't always just take a hard left turn. Often, they just you just keep continue to add complexity on top of the pattern you have.
Jon:Mhmm.
Justin:And I think yeah. It's just interesting to think about that stuff. And and going back to, you know, the way transistor works, I mean, we have, like I don't know. I wanna say 10 main screens maybe. And even that, like, we were we were looking at how we might refactor the UI, like, clean up the the interface in a way that is, you know, better or whatever, like, for the user.
Justin:Even with just 10 pages, changing things, going, like, in a different direction, like, saying, oh, let's amalgamate these 2 screens, and then move it over here, and then let's change this UI. Like, the pattern we started with, which was kind of just like, okay. Well, we need to build something and Yeah. Cards Against Humanity was our first customer. So we kinda, like, built it for them.
Justin:And then and and you brought brought old patterns from the app that you'd built before, and and we applied some of those patterns.
Jon:And then you have these, yeah, screens with, like, 30 input fields on it. You're just like, well, just I guess we'll just add something here instead of thinking about a new context for all this stuff and splitting it up.
Justin:Yeah. And it's tricky because you can introduce a new pattern, but human beings really even bad patterns, they get they get attached to, like like, you know, like JavaScript is, like, not a great language. But introducing something new to replace JavaScript just has not happened. Right. And so now we're stuck with it, and it's gonna and now it's getting reinforced at a different scale.
Jon:But JavaScript. Yeah, JavaScript as language is actually kind of great now.
Justin:Oh, really? Yeah. Well, see, there you go. But, anyway, the I think the the principle still stands in it. It's interesting to think about both in our businesses and I mean, this is kind of a continuation even of what we were talking about last time.
Justin:And even a continuation of what we were talking about at the at the top of the episode, which is, like, right now you're feeling a little bit down because it's gray. Mhmm. And there's this idea of, like, well, what patterns can I implement now? And some of those might be more complex than others. Like, you could get one of those sad lamps.
Justin:You could start taking all sorts of supplements. You could, you you know, you could use calm on the tropical theme or whatever. But there may be a simpler solution, which is, I don't know. Like, Austin is sunny this time of year, so I'm just going to drive to Austin or fly to Austin, or I was hoping there might be a a little a better climate option. But, you know, I'm I'm gonna drive south and
Jon:I'll run. I'll just run there. Just run there. See? That's the yeah.
Jon:That's no no carbon footprint.
Justin:Exactly. Take a
Jon:long time, but I'll get there and I'll be in shape. So
Justin:That's true. That's true. You should get one of those, wolf the wolfram. Have you seen the wolfram dude's little?
Jon:I think you mentioned that before.
Justin:I'll post it in the show notes, but he's got, like, this this harness that he uses to walk around with his computer all day. So he tries to like do most of his work outside. Now, That would be amazing. We get you, like, one of those harnesses, and you're, like, jogging down, like, the interstate, like, working on transistor state.
Jon:Can you imagine that? But
Justin:maybe that's the simpler way to go. Right. Maybe it's worth doing. I didn't yeah. Interesting.
Justin:Folks, I'd. We've been getting a lot of feedback last few episodes. So if you wanna talk to us about this topic, if this resonates with you at all, if you disagree, if you think, you know, something we said isn't right, reach out to us at build your sass atjohmbuda@mijustin. Go to transistor.fm and talk to us in the chat. You can email us at shows at transistor.fm.
Justin:Yeah. Let us know what you think. John, we have 2 new Patreon supporters. Why don't why don't we thank everybody?
Jon:Yeah. Thanks, everyone, and especially the new the new supporters here. Mason Hensley. Oh, this is gonna be tough.
Justin:Yeah. I think it's I think it's a
Jon:Is it a silent j? A yeah. Yeah.
Justin:I think I think it's a yeah.
Gavin:Borjas Solaire? Borja Solar? Solar? Solaire? It's probably Solaire.
Gavin:Solaire? Bor Borja Solar.
Jon:It depends on that right.
Justin:Yeah. Just let us know. And it it's especially helpful, like, because we wanna say your names right. So if if you have a pronunciation that you wanted to send us, yeah, send it over.
Jon:Because a lot of people probably say Borgia Solar.
Justin:Yeah. Yes. So if that's not it, let us know.
Jon:We also have Ward Sandler, Eric Lima, James Sours, Travis Fisher, Matt Buckley, Russell Brown, Evandro Sassy, Prady Yumna Schimbecker, Noah Praill, Robert Simplicio, Colin Gray, Josh Smith, Ivan Kerkovic, Brian Ray, Shane Smith, Austin Douglas, Simon Bennett, Michael Sitvert, Paul Jarvis, and Jack Ellis, Dan Buddha, Darby Frey, Samori Augusto, Dave Young, Brad from Canada, Sammy Schubert, Mike Walker, Adam Devander, Dave Junta. Junta. And Kyle Fox from get rewardful.com.
Justin:Thanks, everybody. And, I was gonna I had a few things. I Matt Buckley. Every time you say Matt Buckley, I think the image that comes to my mind what what image comes to your mind?
Jon:Matt Buckley?
Justin:Yeah. Do you think of anything?
Jon:No. I think of Jeff Buckley. Oh, okay.
Justin:So I'm always picturing, like, a musician.
Jon:He is a good musician. Yeah. Did you see the movie about him or his dad? How about his dad? No.
Jon:Oh, it's great.
Justin:There's a documentary about him?
Jon:No. It's a fictional well, it's a movie they made.
Justin:Oh.
Jon:A film, not a documentary about him, but also his dad because his dad is a musician.
Justin:Okay. I'll look for it.
Jon:Well, We can post it in the show notes. I forget the name of it.
Justin:Is it greetings from Tim Buckley? Possibly. Okay. We'll we'll look that up. And then the only other thing I was gonna say was, got a nice email from Colin Gray.
Justin:So thanks for emailing
Jon:us, Colin.
Justin:Yeah. And we will see you folks next week.