Let's Bring Secret Sandwich to Life!
Let’s bring Secret Sandwich to life! Joel Hooks and Jason Lengstorf will start work on the Secret Sandwich web app.
- Guest: Joel Hooks
Links & Resources
Read the transcript
Captions provided by White Coat Captioning (https://whitecoatcaptioning.com/). Communication Access Realtime Translation (CART) is provided in order to facilitate communication accessibility and may not be a totally verbatim record of the proceedings.
JASON LENGSTORF: Hello, everybody, and welcome to another episode of “Learn with Jason”. Today on the show, we have Joel Hooks, one of my good friends, the creator of egghead.io, or co creator, I guess. A professional shit poster, what else?
JOEL HOOKS: I think they’re quality, man. That’s rough. Have I been shit posting the whole time? I wondered what the kids were talking about.
JASON LENGSTORF: I’m sorry. I didn’t realize I was unintentionally insulting you.
JOEL HOOKS: It’s just best to be quality tweets, not shit posts.
JASON LENGSTORF: They’re quality to me.
JOEL HOOKS: That’s good. You’re my audience.
JASON LENGSTORF: Will says that you are an advice guru. Chat if you want to throw other job titles to Joel, I highly suggest doing that. But, yeah. So, Joel, for those of us who aren’t familiar with your work if you want to give a little bit of background?
JOEL HOOKS: Man, that’s a good question. I have been working on egghead for about seven years. Before that, I was doing consulting and training and teaching workshops and that sort of thing. Prior to that, I was a 3D animator. I shifted careers in software in my mid 30s, about 35. I have been doing it almost a dozen years professionally. I tinkered with computers since I was young like TSR 80 style doing turtle graphics and that sort of thing. It’s something that I have been around but finally figured out that I didn’t want to be I wanted to get in on the software bucks, to be honest, at the end of the day. Which has been modestly successful. I enjoy the lifestyle of a software developer and really dig it. I still love coding, probably more than most things. But egghead is a bootstrap business. We didn’t take venture capital or anything. The nature of that means I had to wear a bunch of hats.
JASON LENGSTORF: Mm hmm.
JOEL HOOKS: We have distributed the hats and I’m actually getting like, I have had to be the lead developer, lead marketer, project manager and do all those things. Even the stuff that I don’t enjoy doing per se. Just have to do the work, just fucking do it which I have on my wrist to get in there and do what needs to be done. It’s not like a Nike playoff. I get up and I do the work that needs to be done on a daily basis.
JASON LENGSTORF: Yeah. This is something I have always appreciated about your take on things. You bring a perspective that is kind of counter to what I have come to expect in tech tweets. So many people in the tech industry are venture backed companies and I’m one of them. A lot of us are working at companies that have bottomless resources. We can hire anybody we want. We have tons of resources. You’re coming from a standpoint where the money you have is money coming out of your pocket. So how you structured your business, how you have gone about hiring, how you have gone about delegation, all those things are fascinating to think about. I think that’s something that’s really I want to dig into it a little bit today. What we’re talking about today is an app that’s not going to be venture backed. It’s not going to have a big budget.
JOEL HOOKS: We can hope.
JASON LENGSTORF: So I feel like this is the thing that I want to talk to you about this because you are a demonstrated expert bootstrapper. You have grown and seen a business flourish without having to take outside investment. For those of us looking to build apps that we think can make money like secret sandwich may not be something that gets pursued as a money making venture, but an app like this where you create events, let people create accounts and do things together, you can extract value from that. Charge membership fees, charge for upgrades, find ways to do integrations and actually make revenue off that. As we are thinking about the app, I want to be thinking about it from that standpoint of, I’m not going to have the budget to hire somebody to maintain this. I’m not going to have the budget to get someone to come and do this the correct forever scaleable way. I’m going to build this myself. How do I do it without it becoming a full time job, detracting from my ability to live my life. When you go about thinking through this stuff, what are the questions you’re asking?
JOEL HOOKS: It’s funny. You listed those qualities and to be honest, there is some measure of sacrifice, I think, to be able to do that. In terms of, like I talk a lot about a calm workplace and that’s something I’m interested in. But there are many weeks where I was doing 80 hours a week. I don’t expect people that we pay to collaborate with us to do the same. But that balance is tough. I seek it now and it’s been tapered off. People say you shouldn’t hustle or you don’t need to, I don’t buy into that completely. At the end of the day you have to do extra. I have worked two jobs for so many years of my life. Egghead, even starting that was two jobs. Like I was doing my day work and making money. We started to work on egghead. Transitioned off of a full time job, but I was still giving workshops, preparing workshops, doing training and consulting to further that. It was quite an intense process. I don’t know. The dream is to have the freedom and autonomy but at the end of the day you’re dealing with clients. Clients being a range of them from your paying customers to the people that you serve that collaborate with you to, with us as the instructors and you have to deal with all the people and create an environment that fosters their success as well. I think money, like venture capital would make things easier. Certainly faster. The decision process is way different if you have $15 million. Like I can hire all the coolest cats in town and we can get to work on building stuff and somebody can do R & D and you get this ability to do but then they expect in return, right? It’s a form of debt like a big credit card bill you eventually have to pay back or you can just quit, too. This didn’t work. You’re not putting it on the line. Like there is no pillow or padding when you bootstrap. Usually. There can. I pasted the 30 by 500 link in the chat. To me, if you want to understand and build a business that’s bootstrapped on your terms, there is a repeatable path that if you are willing to do the work and follow the fucking recipe because people want to get in and, like, do you want to do this on rails or in a willy nilly fashion. VC allows that. You can explore and do things. You have the money and the capital. If you’re bootstrapping you don’t have access to that. Personally, I like to follow a recipe.
JASON LENGSTORF: Yeah.
JOEL HOOKS: Follow good advice and if somebody has given me good advice and I have seen they have done the work and Amy will talk about this a lot. Gurus that never have done the work and want to give you advice are usually giving you toxic advice.
JASON LENGSTORF: Mm hmm.
JOEL HOOKS: At best, bad advice. Maybe good advice. Your rolling the dice. Often toxic advice. So you have to pay attention to is this person giving me advice have they done the thing? Amy and Alex have. So I’ll follow them and do what Amy tells me and follow her advice and then see the results.
JASON LENGSTORF: Yeah. I was just going to say, the comment about following the recipe, I think, is such an undervalued thing. We have a tendency to read something and then we look at information and go, great, I’m going to do 80% of that and we’re confused when it doesn’t work. My mom does it with actual recipes. She’ll find a recipe, start baking and go, well, I don’t want to put that much butter in. She’ll substitute something and be like, well, that’s not a good recipe. No. You didn’t cook the thing that you set out to cook. You started making shit up halfway through and now you’re bummed that you did a bad job. I think that’s an easy thing to forget that you stopped following the advice at some point and then call the advice bad.
JOEL HOOKS: Yeah. You’re exactly right with the food analogy and recipes and actually cooking. I have done that. I love to cook in my life. That’s why we’re talking about sandwiches today. It’s a connection we share. You sit down to cook a French meal and say, I don’t like carrots, celery and onion so I will leave out the mirepoix and you end up with bland, shitty food. You end up eating, but it doesn’t taste like restaurants. I have to go to restaurants to get the food. Someone else has to serve it for me. If you can’t follow directions you don’t deserve good food.
JASON LENGSTORF: Absolutely.
JOEL HOOKS: 80% is being generous with the amount people will follow. At egghead now, base camp has been an inspiration to us. I see what they do and I love the books they have written and their remote work and calm work places, no VC and DHH is out there fighting for the little person. Out there fighting the good fight. I love what they do. With no exception the way they run projects is interesting. They use a process called shape up. Ryan Singer wrote a book on the process they use. We’re trying to adopt that. At every stage of the process there is always a desire that, yeah, well, when we were doing agile or scrum, we can bring in this terminology and pick a mix and bring that in. It’s so difficult not to go off the rails, right?
JASON LENGSTORF: Mm hmm.
JOEL HOOKS: Frankly they gave us ruby on rails which is where the analogy comes from. I can bootstrap a business on rails. If I can follow directions and see somebody that’s been successful and literally follow what they do, you can make changes later. But like we want to oh, I have read the thing. Now I’m going to try something new or apply my preferences to the thing they’re telling me to do. Your preferences got you where you are today. If you were going to follow a recipe, follow a recipe. That’s what I’m good at. I’m not an inventor. I don’t invent, I follow recipes.
JASON LENGSTORF: Another side of that, too, is I think a lot of people see that the stuff that really shakes things up are people who innovate. So you get it in your head that the way that you make a big splash or a big impact is by taking an existing set of rules and iterating on it like you’re going to make a change, switch something up. All of that is probably somewhat true, but you have to have done the thing to be able to remix the thing. You can’t just step in and immediately start remixing if you don’t know the source material, right? I think that’s such a it just it’s hard to teach, right? It’s a cliche. You only understand that if you have lived the experience. It’s like this. If you do the thing the way you’re told and not the way you heard it might be different, try it. You get to see the results and try something new. From there, you can make adjustments, but you don’t make adjustments before you have seen the result. You have to cook the recipe once and then you can change it. Otherwise you’re just making wild guesses at an unknown outcome and that’s chaos. You’re reading books in the first place because chaos sucks.
JOEL HOOKS: Chaos is fun and interesting. It just depends on your goals. I enjoy a good measure of layered entropy in my life. It’s exciting for my brain and things are dinging all over the place and I get notifications from six sources and it feels like a game. You’re right. Iteration means you have to do something at least once, probably multiple times. Expertise is layered knowledge over time. So to truly give a system a chance, like following the system for me is always the place to start. Even though with me personally the instinct is to apply my preferences. I fight that. Like, oh, I think this already. My world view says this is true. So instead of following this advice we’ll do the thing. I fought for years with those instincts when I did 30 by 500 originally. Amy says that, but you know I know stuff, too. I’m going to do what I know.
JASON LENGSTORF: I have a smart brain. I should listen to my smart brain.
JOEL HOOKS: My mom says I’m smart and handsome, so I’m going to forge ahead with what I know is right and true. Instinct is almost like a design thing. To me, I have been thinking about design lately and how design isn’t just the visual elements people usually ascribe to design. If you’re not designing or not following something that’s been designed for you, things happen. They tend to happen on accident instead of on purpose. You have happy accidents, but if you are not designing I tell my kids to do it on purpose where they’re like, I broke that on accident. I said, maybe next time do it on purpose where you intentionally do the thing and don’t break it. That’s design is doing it on purpose. You can design in all sorts of ways. Like design a business or lifestyle design is a thing. It’s true. If you don’t design, take control, follow paths you are exploring and there are elements to that and good design often follows exploration. But at the end of the day you have to stop and, you know, kind of move forward. For me, the recipe is a great way to before I iterate, I do the recipe. We’re doing it with shape up. We’ll layer our experience on top of it and evolve it to match our needs. But first we’re going to follow it to the letter, I guess.
JASON LENGSTORF: Yeah. That’s a really good call. I had Dan Moll on and we were talking about design systems. He said when you make any decision, whether it’s a default decision and you make things happen or make a conscious choice you are always designing something. You have emergent design and there is a place for that. When you don’t know what the outcome should be, you just need to watch and see what happens, that’s when to let things drift. See what happens with emergent design. When you know the outcome and the thing you’re doing, you know where you want to go. You should be intentionally designing the process. If you haven’t done it before, you should look to somebody who has intentionally designed the outcome before and follow their process exactly. Then if it doesn’t work, you can make adjustments. Or if it gets you close but not all the way there then you iterate and explore more. The mixing of intentional and emergent design is usually a recipe for sadness in my experience. You’re pretending you are doing something intentional, but instead you are undercutting the good lessons by calling audibles and introducing unknowns. That leaves you in a rough spot.
JOEL HOOKS: As you start adding variables. If you go to egghead.io it’s a rails app that’s not on rails. We deviated quickly. I’m a developer, I don’t like ERBs, this, that. So we deviated. Now we have a weird hybrid react app that pages load slow and nobody wants to work on it because it sucks so hard. My personal technical decisions over the course of seven years created this monstrosity. Now we are looking at what to build again, eggs on toast. That’s where I’m at now. Exploring where the technology is. Is this a Gatsby side, a Nex side, like a blazing cutting edge jam. I don’t know. We’re figuring it out. What are the next rails? That’s a design process, too. Sean Wang has one of my favorite descriptions of this. He talks about different modes. When he’s in explorer mode, he’s exploring, riffing, taking what comes and absorbing it. It’s fast and the blog posts come quick. There are different modes in his learning and evolution as a professional and programmer where he switches modes and gets more into a tighter sequence. Like here’s the stuff that works. I’m going to buckle down and find out the design, the recipe for this. To me, that’s pretty powerful. I think this comes up in test driven development a lot, too. People are like, this doesn’t allow me the freedom to do whatever. You can still riff. Like we are doing today. Riff all you want, but then take it to the side. Write unit tests that will prove out the design that you riffed on, right? I mean, you can explore. Exploration is an important part of growth and to enjoy life. I need to explore, try new things, do weird projects and have fun. But when it’s time to do the thing, how are you going to do that? Putting it on rails and following a proven system is a great way to do it. I think.
JASON LENGSTORF: Absolutely. So with that, maybe we should switch over and start looking at some screens here. Before we do that, a quick shoutout. Thank you for subscribing. I appreciate that. Also, if you want to watch read the show, we have live captioning being done by White Coat Captioning at LWJ.DEV/live. That’s being done be by White Coat Captioning made possible by our sponsors netlify, Fauna, Auth0. Let’s go to desk top view. This is part of a series we have done. So Marissa Morby came on the show and we worked through some UX work flows and prototypes. We came up with this workflow which we’ll go through in depth but this is what somebody does when they get inside of the app. Then Leslie Waara came on the show and we did some actual design. We took the UX workflows and started thinking about how that would apply in an actual design context. That started to lead us toward the mobile design here. I completely forgot we also did an episode with Maggie where we created a logo and this was super fun. We came up with well, Maggie came up with this amazing logo. I love this so much. This is the secret sandwich logo. How much fun is that? We took that, combined it together and ended up with this kind of event layout. We weren’t able to do the whole layout and that’s okay. We’re just having fun with it. Like I said, this isn’t something that’s going to make money. Just a thing we’re doing because we made up a fun game together. Joel, Christina Joel’s wife, Leslie, her husband Matt and Marisa, my partner, we have this escalating dinner party. We make different meals and we kind of go all out. It’s a lot of fun. We riffed on this game, right? So it was like, what if we made a game where we each drew somebody’s name out of a hat like secret Santa but then we had to make a sandwich that person would pick out of a line up as being the one that’s their sandwich? It’s a way to combine things we all love sandwiches, hanging out with friends, silly games and severely overengineer it and turn it into an app.
JOEL HOOKS: I think we can keep our engineering at least to a modestly overengineered
JASON LENGSTORF: Yeah. I think you’re probably right. We’ll go for instead of overengineered, just engineered, I think.
JOEL HOOKS: I haven’t looked at any of this. You showed me some links. I was asking, hey, what are we going to do on this fun adventure? You were like, oh, we can just wing it. Here’s some inputs and figure out what we do next which is very exciting and very much more on the side of chaos and exploring than being on rails, I would say in terms of how it relates to our discussion.
JASON LENGSTORF: Yeah. It’s kind of fun because we can take this list of goals and talk through it. I think this will inform the architecture of the app. That’s actually really worth discussing. I feel like one of the major pitfalls that I have seen on a lot of engineering teams is they tend to choose the thing they know because they know it and not because it’s the right tool for the job. Sometimes that gets so focused that you’ll see somebody trying to shoehorn, well, we’re going to make this is absolutely going to be a Gatsby app because we know Gatsby and maybe it isn’t the right tool. But if you know Gatsby you probably know React and in a lot of cases that’s the right tool depending on what flavor you’re using. If you know React you kind of know java script so maybe scale it back and build a basic template site without a lot of front end complexity because all you want people to do is look at pictures on a screen. There are a lot of ways to scale it around and look at what you’re trying to accomplish as far as making the goals fit inside your current world view. That said I’m sorry. I was like, did I ask a question? I didn’t.
JOEL HOOKS: I brought up Whimsical, too, because it’s blurry on Zoom. I’m looking at the workflows and exploring.
JASON LENGSTORF: Yeah. So what I zoomed in to on my screen is what Marisa identified as being our user stories or outcomes. One thing I have liked about the way she approaches UX and research in general is she’s always trying to think of what somebody wants to do and doesn’t talk about implementation or solutions. She looks at, this is the end state. She looks at things you can true/false evaluate and that’s a valuable way to look at a project. She helped us come up with a group of users and we came up with eight outcomes. We are not going to get anywhere near actually building a working app today. But I think we can get a good foundation started and think through how to make sure we are giving ourselves the right tools to accomplish these outcomes. The first ones are around party hosts. We want them to create events and invite friends to those events. We want to make sure party hosts have some moderation for photos because we want people to be able to upload. There is a photo uploader persona here. We want them to be able to post photos to an event and that can be a host or attendee. When the event is over we can all collectively pool our photos and share them together so we have an album. We also have the roles of the participants, sandwich makers and eaters. Sandwich makers need to join an event and the sandwich makers need to be able to draw a name. Like be assigned to the person they are going to make a sandwich for.
JOEL HOOKS: The sandwichee.
JASON LENGSTORF: The sandwich eater needs to add personal details. The way we were thinking about the game is each person would be able to list important stuff like allergies. But then general questions and we thought the more off the wall they were the more fun the game would be. We don’t want somebody to say, my favorite sandwich is a BLT. That ruins the game. But if somebody says, you know, my favorite pop punk band is New found glory, what kind of sandwich would you like? Maybe chips on white bread. There you go.
JOEL HOOKS: Mustard, too.
JASON LENGSTORF: Yeah. Yeah. Exactly.
JOEL HOOKS: BLT is a good fucking sandwich.
JASON LENGSTORF: It is. We thought it would be more fun to ask indirect questions. If we’re just listing favorite sandwiches the game is over fast. But if we’re being ridiculous and I’m trying to sculpt a sandwich that reflects you, Joel, as a beautiful individual human soul I’m probably going to make you something way more interesting an a BLT. It may not taste good but I hope you pick it out of the line up.
JOEL HOOKS: It’s a little survey at the end of the day.
JASON LENGSTORF: Right. Exactly.
JOEL HOOKS: I think Marisa I have worked with her, so I know it to be true. We would be approaching it from a jobs to be done perspective. Describing the jobs this application and this sandwich party need to do for the people involved with them. The outcomes they want to achieve. How we get there is very much secondary to actually achieving the outcomes, right? There’s infinite ways to get there. We want to be sure we are pursuing the outcomes we want to achieve.
JASON LENGSTORF: Mm hmm.
JOEL HOOKS: Is that a summary that works?
JASON LENGSTORF: That’s an excellent summary. Thinking through this, I can see a few things we need. We need to create events. So we need a data storage mechanism. We need invites. So we need a user management system. We would need some kind of transactional e mail so we can well, it could be text messages or whatever.
JOEL HOOKS: As it happens and I don’t know if you are interested in this. I have been not satisfied with my current event and ticketing provider and have done a full data model for a system that would be more like a ticket or event based system which I don’t think is perfect for this, but might be good to explore. It’s all about events and attendees and that sort of thing. I can send you a link if that’s interesting.
JASON LENGSTORF: Yeah. Let’s definitely do that.
JOEL HOOKS: This is super secret egghead stuff. So nobody
JASON LENGSTORF: Nobody look at it.
JOEL HOOKS: Don’t steal my work. This is important. I’m kidding. It is super secret. But not in this case. Where should I send it?
JASON LENGSTORF: You can put it in discord.
JOEL HOOKS: I could give everybody access but that would be chaos.
JASON LENGSTORF: If I have access, everybody can see it.
JOEL HOOKS: So many chats. I have three chat windows on my screen right now with your face.
You hackers, you dirty hackers.
JOEL HOOKS: I have seen what happens on the show when you give people access to shared spaces.
JASON LENGSTORF: Full blown bedlam.
JOEL HOOKS: It was Sara’s where you had CSS, the thing open. People were in there. They were helpful. And chaotic at the same time.
JASON LENGSTORF: Yes, it’s a lot. My favorite thing about this show is because it’s live people can mess with us. My second favorite thing about the show is because the chat is not evil, they are usually playfully trolling and not keeping us from doing the work which I appreciated very much. Okay. Cool. So this is an event data model. Looks like we are in Rome.
JOEL HOOKS: This is another approach. Honestly, you should probably start with jobs to be done if you’re doing something and following the ethos of how to do this and what’s a repeatable process, that’s a great place to start in the design process. I did it and it’s not present on this page. Where I go after that, I have to really start thinking about the data and the structure and what kind of data we’re dealing with. To me that speaks a lot in terms of how I’m going to approach the solution, like when I’m going to reach for it. These days, my first instinct is always Gatsby. It replaced create react app for me. I don’t think that’s appropriate for everything. This was me going through, thinking about what does a live event have? You start at the top and you have a live event. Somebody will be the presenter. In this case that’s a host. But I’m thinking about this in a generic sense. What is a generic event system? There will be a schedule. This has to occur someplace. Then everything has activities, right? So the schedule is the broad macro schedule. Then internal to that schedule there’s going to be activities and that belongs to the event schedule. It has to occur somewhere. It can be a URL or a physical address. This is something that will happen some place. It gets different when we break down here because a live event package. This can be other stuff. If you have gone to a concert where they also offer a camping spot, festival style where you can add add ons or get access to the cooler tents or whatever. It can be anything. Or you purchase it and get stuff with it. So that can be activities, physical goods or things that come with it. That one is not necessarily relevant to this. Then we get into purchases and the E commerce aspect of this. Purchasing is interesting because it’s not necessarily a transaction. It could be zero dollars in the sense that I’m committing to the sandwich event. So in effect I’m purchasing that which gives you your ticket.
JASON LENGSTORF: There is a world where this could be you know, depending on how seriously we took this, we could say that you do pay a ticket price, but that’s going to go in on like a commercial kitchen where we can all have the space to cook and eat together.
JOEL HOOKS: How do you manage that, too? As the host you don’t need to be on the hook for that. We’re all friends and want to kick in and all the expenses are covered and you’re not left holding the sandwich bag at the end of the day. Sorry.
JASON LENGSTORF: It’s going go a sad sandwich bag with just the folding flap, no seal.
JOEL HOOKS: Mayo is seeping out. It’s just mayo and chips. The post punk mayo chip sandwich.
JASON LENGSTORF: Oh, Jesus.
JOEL HOOKS: Once you have made the purchase or the commitment
JOEL HOOKS: We’re upsetting well, okay.
JASON LENGSTORF: We have upset Chris. That’s one job to be done of “Learn with Jason” accomplished. Would you be able to have people kick in to cover the cost of throwing a secret sandwich.
JOEL HOOKS: Regardless of the cost or what it means you end up with a ticket. A ticket is just your confirmation e mail. It’s pretty obvious. This is your golden ticket, lets you in the door. This is a casual event with friends but still we’re trying to keep a head count. We need to know how much we need to cook. That’s all valid so the ticket fits.
This gets into what you’re talking about. What happens then? We want to make sure we show up, everybody is thinking about this. Hey, there’s stuff due. Fill out your survey, do this. That kicks off the event reminder sequence. This is a sequence of, you know, what actually this could be anything. It talks about e mails and SMSs as you scroll down. The sequence doesn’t necessarily mean one specific thing. It means some sort of system will be in the background to remind you that the thing is going to occur.
Because this is an event you have a ticket for, SMSs are great and a combination of e mail and SMSs are fantastic for getting people to actually show up.
Also having people pay, even if it’s a friendly event, having people kick in and pay will have them actually show up. If you are actually doing this and everyone wants to have a good time if it’s a free event, good luck. Even five or ten bucks a head, whatever the cost that needs to go in, having paid will make people show up for it. Then reminding them and that sort of thing is interesting.
JASON LENGSTORF: Yeah. I think that’s a good thing to call out, too. Just in general. The challenge of building any type of community is you want to build it before you charge for it. But at the same time people value things that they have paid for, even if it’s a dollar. Any type of investment makes something feel more important. So I have noticed that where I could just try to give away whatever and there are places for that. Discord is a great thing to be free. It would be weird to charge somebody $5 or well, really not. That’s a way you create an exclusive community.
JOEL HOOKS: I disagree with it.
JASON LENGSTORF: Sorry. As I was talking through I thought, I don’t think I agree with myself on that. But there are situations that are weird and situations that aren’t. But in general, if you want someone to invest in something, the best way is to get them to legitimately invest. I think with secret sandwich it would be great if you could get someone to pay ahead. Like you’re going to kick in for a space or we’ll do a big ingredient list and everybody will make sandwiches together in my kitchen and you’re going to pay your $10 to cover ingredients or something. Whatever it is. Those types of things, as you said, will just help make it feel more real, more concrete like it’s more real happening. It is a real event with real value.
JOEL HOOKS: For sure. I have seen this a lot. We ran a photography business for years. If you gave away free photography, no shows, the more you charged up to like Christina was being flown to a location across the country and doing $10,000 photo shoots. Those people respect you. They are there, attentive. When you follow up, they answer. Free stuff, there’s value and Patrick McKenzie, patio 11 on the internets is famous for the charge more mantra. Charging anything is a start and then ratcheting it up. Scroll up real quick. Thinking about, just click that.
JASON LENGSTORF: This is cool.
JOEL HOOKS: This is where I was thinking about it. Jobs to be done. That was the data model was my final product. This is how I think and I use this particular tool for my notes now. It kind of changes. I have migrated off bullet journals and paper in the last couple of years because of notion and Roam. If this was any notebook I would be holding it up and we would have a miserable time. Sean’s learning gears article is linked right there. I’m exploring and thinking about this stuff. I dropped a link in chat earlier, too. But
JASON LENGSTORF: Wait, where am I?
JOEL HOOKS: Good luck. You broke
JASON LENGSTORF: I’m in. I’m good.
JOEL HOOKS: All right. We’ll scroll down and look at the thoughts. What are we thinking about with this? Why not use an off the shelf solution? I have a lot of reasons for that. I’m not going to rag on anybody for their current implementations. It’s all good work. This was another thing to me. I want to go out and find, like where are other people doing this kind of thing? The prior art. So the examples. Zoom does a good job. Ticketmaster had their data model for events. Concert tickets. I don’t know. That was a weird one out of the Google search. Eventbrite, Tito. I don’t want to invent this wholecloth. How do I put my data and data model on rails, too? How extensive do you need this object oriented model to be is an interesting question when you start out. This is very geared toward this is going to be probably built in with rails as the back end. That’s where I’m going. I haven’t bought into the back end side of the modern jam stack revolution as much yet.
JASON LENGSTORF: I mean, it could honestly so I’ll make a confession. I have written two lines of ruby in my entire career. I do think I have ruby installed on this machine though if you want to scaffold up
JOEL HOOKS: Oh, my God, no. We’re not going down that route. The thing is rails requires a certain level of buy in. To get on rails, you have to know like I don’t know. It wouldn’t be appropriate for this. You have to think about your team, too. It’s so important. You can build stuff on your own and when I built egghead originally I wasn’t thinking about a team. I did use rails and followed a tutorial line by line. Followed a tutorial to build my business. So in that sense I was on rails. I had seen it before. But what’s the future? Where do I want to be? Who is going to work on this and who do I want to contribute to the project is really an important question to ask at this point as well. You know, one of my favorite books is called “Apprenticeship patterns” and one of my favorite chapters is called “breakable toys.” It’s fantastic. If you code software for a living and you aspire to be a crafter and push that, I think it is really a wonderful starting point. The idea of a breakable toy is I can build this thing, explore and if it breaks, it’s not the end of the world. It’s mine. That’s how projects like this start out a lot of times. But at some point you’re also going to want to bring other contributors in, I would assume. Because here we are.
JASON LENGSTORF: Is this the book?
JOEL HOOKS: That’s the one.
JASON LENGSTORF: Let me throw a link in. Yeah, I’m very on board with that as a general sentiment. So I think go ahead.
JOEL HOOKS: Is this level of what level of architecture would you start with if you were approaching this? If you’re saying we’re going to throw down some code and get it bootstrapped.
JASON LENGSTORF: I think looking at what we are trying to do, knowing that we need some kind of data, so we need to think about what our back end is going to be. We need an invite system so that’s transactional messaging and then we need a processing pipeline. A way for people to upload and hold a queue and moderate would go into the back end. We need a way to get messages into the system, data out of the system, and some kind of rules and permissioning. So I would start thinking about what systems have that baked in?
JOEL HOOKS: Firebase, Tulio.
JASON LENGSTORF: Hasura and SMS. We could do socially distant secret sandwich over video using Tulio’s.
JOEL HOOKS: They’re dope.
JASON LENGSTORF: I have had Nathaniel on the show a couple of times. He’s awesome. We have built fun stuff. So check that out. I had him on a little bit ago. We did a text message to vote for a poll. He’s going to show up and we’ll finish it soon.
JOEL HOOKS: Like Zork over text? Like a fun text based adventure game almost like D & D. You could do asynchronous Dungeons and Dragons in a Zork like world.
JASON LENGSTORF: That would be really wild. Dang, that would be super cool.
JOEL HOOKS: Like the monster appears, an image shows up. That would be fun. Think secret sandwich is interesting almost just over e mail. Like as the primary communication channel. It’s a group text and a lot of the communication for dinner events, that’s where it happens. Not that we can’t use e mail, but if you went SMS first and thought about e mail later. E mail is fine. Sending e mails is pretty straightforward, but you could almost eliminate it entirely from the initial design because of the nature of what we are doing. Everybody has their phone in their pocket now. You probably have yours within two feet. Leslie probably has hers within two feet. Everybody who would come to our sandwich party has the phone. I don’t know their relationship with e mail because it varies widely.
JASON LENGSTORF: Taking it a step further if you think about how people actually participate in social events there is a good chance somebody would arrive to the party having not answered the questions. So by doing it over SMS they could sit at the table and answer them quick to start the game as opposed to opening their e mail app and dodge through the e mails they were supposed to ignore. I think that kind of meets people where they are which feels important.
JOEL HOOKS: The conversion rate on text messages are sky high. When you text people, they get the message. If you’re developing an application you have to be cognizant of the privilege of being in somebody’s pocket. I think that’s important. I have lost apps where they don’t respect it. What’s the stupid one where you can buy gazebos and stuff online? Wayfair.
JASON LENGSTORF: I have never shopped for them before.
JOEL HOOKS: Wayfair is the only place where, hell, yeah, Prime me a gazebo. But they aren’t respect I don’t know about you, but I’m concerned about my Bed, bath & beyond 20% deal expiring tomorrow. They have sent me so many text messages. Over and over and you unsubscribe and they still show up. I use the 20% because you can get it, but it’s like all the time. I want an inflatable gazebo now, Chris. Great idea.
JASON LENGSTORF: Do you think that’s a bouncy house?
JOEL HOOKS: It is. It’s fun. My house is fun. We have a lot of stuff.
JASON LENGSTORF: Speaking of fun, if you follow Joel on Twitter you will notice he got a griddle.
JOEL HOOKS: Smashburgers.
JASON LENGSTORF: That tweet started a fight in my house because I started ordering a griddle. It was like watching a slow motion scene because I think Marisa realized what I was doing.
JOEL HOOKS: I can see her face.
JASON LENGSTORF: Her face dropped just like dead eyes. She was like, I’m coming for you right now. She came over, slapped my hand off the keyboard. She was like, absolutely not. You don’t need it. Yes, I do.
JOEL HOOKS: Wait until you see it in action. I can have 20, 30, 50 people at my house and make kickass Smashburgers so everybody gets the best ones. We have half a cow we ordered. So we have the fresh grass fed local meat we’re smashing into burgers. COVID makes me sad, too, friend.
JASON LENGSTORF: I know.
JOEL HOOKS: We’re 15 minutes away from each other, but I’m not able to share smashburgers with you.
JASON LENGSTORF: I know. It’s been such a bummer. We went to have a socially distant lunch in the middle of a dog park. We pissed off the dog owners because we were sitting in the place where you go to give your dog water. So we were like hogging this whole table and nobody could come over.
JOEL HOOKS: Was it raining?
JASON LENGSTORF: It was a little bit. We sat outside and ate burgers far apart from each other in the rain. It was great, but also like, oh, I’ll be really happy when the pandemic is over.
JOEL HOOKS: I agree.
JASON LENGSTORF: Let’s see. Nicky found the tweet. Let me pull it up real quick. This is the one. Look at this griddle. I almost bought it. I rarely impulse buy things. Being friends with you, Joel, and being friends with Chris Biscardi, I have made a lot of expensive impulse purchases being friends with you.
JOEL HOOKS: You look good on camera though.
JASON LENGSTORF: Yeah. All of this, everything happening here is more or less a Joel Hooks, Chris Biscardi special. All right. We should probably focus up. Hold on. Let me send a reminder here.
JOEL HOOKS: That’s sandwich related.
Should we focus up and write some code?
JASON LENGSTORF: Yeah. Okay. So bringing this back around, if we are thinking about I think the data model you brought up is completely applicable here. SMS as a primary driver, I’m very on board with that. That makes sense. So then Twilio is kind of the default choice. If we’re doing SMS, Twilio is where we are going. That’s one architectural decision made. From there we need to think about where do we want to store our data and how do we want to get that data to, like, the UI? So the default for me is to go jam stack with it. So some kind of like mostly static front end and a database we communicate to through API end points or serverless functions.
JOEL HOOKS: The default for me is to start with a flat file of java script for my data.
JASON LENGSTORF: How would someone write to that? Like
JOEL HOOKS: We’re not worried about writing, right? We eventually need to. The dynamic nature of a website brings in just an absolute metric ton of complexity. I almost always start file on disk is a database for one thing. So if I’m using Gatsby and that’s what I would use for this. I don’t think there is any need to explore beyond that because Gatsby is great and fine and perfect for this particular project.
So if I’m starting with a Gatsby file I’m going to make a transformer eventually. Make a source for myself. Write a plug in. Like I have a Gatsby plug in epic react source, right? That’s something I was working on yesterday. I went to our API and I just generated a bunch of java script files and put it in a flat file on disk.
What’s cool is I can swap it out for a live source. Thinking about what does a sandwich party look like. How is it structured? That’s one of the hardest questions to answer and it speaks to the project if you’re thinking about it. The problem being that typing out long form java script files is not the best and most interesting broadcast.
JASON LENGSTORF: Well, I think
JOEL HOOKS: Necessarily. Here you go, friends, we’re going to type out Jason files. Remember the quotes.
JASON LENGSTORF: Yeah, I think let me close this and re open it so it doesn’t try to bring in a bunch of files. What I think will be interesting about this is thinking through our actual data structure. I think we could do this in a way that’s very you can just think about it as a regular thing. So we need an event. We need some kind of well, we need a user role and that’s going to need to have host, attendee, and probably a public in case you want to share your event publicly.
JOEL HOOKS: Is that what Auth0 is good at? I never used it.
JASON LENGSTORF: It can be good at that. It gives you a pretty straightforward way to add authentication through social channels. Sign in with Google, with whatever as well as custom use Auth0.
JOEL HOOKS: Like SMS authentication?
JASON LENGSTORF: Great question. I don’t know. Let’s find out. Let’s see if they have a platform.
JOEL HOOKS: Auth0SMS.
JASON LENGSTORF: Multi factor, pass wordless is cool.
JOEL HOOKS: Passwordless authentication with SMS is something they have. That would be really cool.
JASON LENGSTORF: Enter your phone to sign in or create an account. Okay. And then can I try this?
JOEL HOOKS: They have a whole tutorial article on this that I’ll drop.
JASON LENGSTORF: I showed my whole phone number on screen. That was stupid. Don’t text me, everybody.
JOEL HOOKS: You need to get a burner for this project.
JASON LENGSTORF: I really do.
JOEL HOOKS: This looks like marketing. The thing I sent has the diagrams and architectural pathways.
JASON LENGSTORF: Perfect. Let’s look at how it works. They enter a code. Goes to the passwordless API, authenticated. This is perfect. We basically our app says, enter your phone number. If you enter it and you’re in the database you get a login code. Enter the code and you’re in. That’s pretty awesome.
JOEL HOOKS: Does it handle all your user information?
JASON LENGSTORF: Auth0 will.
JOEL HOOKS: Your profile is what I mean.
JASON LENGSTORF: So I think I have an Auth0 account. Let’s look.
JOEL HOOKS: I’ll bet you just made one if you don’t.
JASON LENGSTORF: Yeah.
JOEL HOOKS: Secret sandwich.
JASON LENGSTORF: Whatever. Let’s create a tenant. Call it personal. That’s fine.
JOEL HOOKS: This is an interesting choice for me. At egghead I think about this a lot. Service versus owning it. I’m always going to get some kind of service whether it’s or AWS. I would not use Auth0 for egghead. I think it looks like a great product. They have a lot of advantages. It’s just so core I would never use it for egghead. I’m going to be working on this for decades. Secret sandwich oh, look, it’s using Twilio.
JASON LENGSTORF: Does Twilio offer this?
JOEL HOOKS: I think Twilio offers a lot of stuff. Oh, look at that.
JASON LENGSTORF: Mobile passwordless SMS authentication. This is a straight up we have to build an API for that. That may not make sense.
JOEL HOOKS: With Laraville. We would all be learning. To me, Auth0 is purpose built. It solves problems. We have strong community support. There are people we have direct access to. You have Twilio folks on, Auth0 folks that come on your show. It’s interesting picking these because we can incorporate their skills and expertise. We don’t necessarily have to go in and use things. If we narrow down what we think feels right and expand on that, I think we are making good progress.
JASON LENGSTORF: Yeah.
JOEL HOOKS: As far as what we’re talking about today.
JASON LENGSTORF: Yeah. This looks pretty cool. We can definitely do this. I know for a fact you can use Auth0 for user management because that’s what I use for when I built the Gatsby store, this is Auth0. This is an Auth0 log in. I stored the connection between the shopify accounts and all that in Auth0. So that’s definitely something that can be done here. This makes sense. Since it is integrated with Twilio, that’s even better. We’ll be building custom Twilio stuff and we can just have the same service hooked up to our passwordless presumably so it’s all managed in one suite of services that are all connected together.
JOEL HOOKS: I also would say having e mail as the backup and I think primarily when dealing with things e mail is the primary and SMS is the backup. So it’s switching that. You will enter your e mail because if your phone number changes we want to be able to recover it, that sort of thing. But SMS first. I love that for this particular as a user and a potential host that makes sense for me.
JASON LENGSTORF: It makes sense thinking about it, it makes sense for a lot of event driven stuff. Especially in person events. I don’t check my e mail. It’s not a thing that I look at to see if anything happened.
JOEL HOOKS: Check it two hours later and see that I missed my notification. I check e mail at the beginning or mid morning and like towards the end of the day. It’s not something I’m paying attention to notifications. Can you imagine trying to track e mail notifications?
JASON LENGSTORF: No way.
JOEL HOOKS: Imagine the hell your life would be. It’s just garbage where my phone is something I pay more attention to. That’s a whole can of worms. imessage pops up on my computer. As long as you aren’t abusing it being some venture capped jerk with this thing then you are in pretty good shape. It can be so prone to abuse. I want to be cognizant of that. How much you’re communicating and that you are communicating with them and delivering value and not just trying to serve your own ends is really an important aspect of this. This isn’t a marketing app. I’m just soapboxing.
JASON LENGSTORF: In general though, that’s an important thing to consider when you’re planning any app. What’s going to make this easier to use? Like, if you weren’t the builder, if you were the user, how would you want to interact with this app? If I was thinking as the builder I would have defaulted the e mail. I never would have considered SMS. Just that one step of thinking about, yeah, how are people going to interact with this? Text their friends about having this thing and then they want to create a secret sandwich and then move their whole friend group to e mail? No. That’s a terrible idea. Text them a link that they put their phone number into that texts them a couple of questions and now they exist in the system. That’s a dope workflow.
JOEL HOOKS: Jason is pointing out that the magic of SMS passwordless connections is not a free service that Auth0 provides.
JASON LENGSTORF: Okay. So we’ll have to look at that. What I think we can do is a little more assessment on the actual wiring of all of this and figure out, like, is this something that’s worth paying for? I’m going to say off the bat, probably not. We are already paying for Twilio SMS.
JOEL HOOKS: If you didn’t have a whole show around building shit on a whim then perhaps purchasing it would be it. But we can roll our own SMS. Twilio is actually going to cost you as well. It’s pennies compared to
JASON LENGSTORF: Right.
JOEL HOOKS: Tens or hundreds of dollars of potential cost with Auth0.
JASON LENGSTORF: The twist especially on this show is the things that I build stay up as demos. If I build something on a five dollar a month container I have to either break it in the future or continue paying for it for the rest of time. So I’m fortunate that I have a ton of digital ocean credit so it offsets and referrals pay for the demos. I don’t know that I would do them without an explicit deal. So it will kind of impact I’m sure that I could probably talk to Auth0 since they sponsored the show and figure out a way to make it work as a demo. But practically building an app for myself do I want to spend $10 a month for something to make me laugh? I don’t know. I do that for a lot of things and it adds up fast.
JOEL HOOKS: Also to me it’s thinking about you know, I have been thinking about this in the context of what you’re doing here at the meta level. You could use a service, sign it up and it’s done. Then I’m looking at the article and they have architect diagrams and show how these work flows occur and they have planned a “Learn with Jason” with you. Twilio, I think we agree is a couple of buck as month at most and is a solid base. Auth0 would get you to the finish line quicker, but that isn’t necessarily the goal with the project. This is bringing in multiple experts and it’s the joy of building that goes into it. There is a lot of value in constructing this passwordless SMS authentication is an interesting exercise like learning and growing as a developer. I’m actually interested in doing this now and doing the work that would go into creating something like that. I would never not use Twilio. I don’t know where you would go? Is there an alternative?
JASON LENGSTORF: That’s a great question. I don’t know if there is an alternative. They have so thoroughly crushed the market that there was never like a need for a competitor. It’s sort of like Stripe. There are payment competitors but Stripe owned the developer payment processing market so it’s kind of like it could feel foolish right now to try to enter that market. Do you know what I mean?
JOEL HOOKS: Unless you’re Amazon which they do, indeed, have a service.
JASON LENGSTORF: I feel like there is an Amazon service for everything.
JOEL HOOKS: There is. Amazon SNS is what it’s called. Multi factor authentication, one time passwords.
JASON LENGSTORF: What does the N stand for?
JOEL HOOKS: Notification system?
JASON LENGSTORF: Oh.
JOEL HOOKS: Amazon notification simple notification service.
JASON LENGSTORF: Naming things is hard.
JOEL HOOKS: This might be a viable alternative to Twilio and Auth0 for this particular purpose.
JASON LENGSTORF: Yes. But actually this is an interesting thing because it starts to address where you draw the line for trade off. So on this end it looks like the Amazon service is cheaper, I believe. .645 cents per message outbound. Twilio pricing is a little bit higher than that, I think. Actually, no, I think it’s cheaper. Let’s see. A little bit higher. .75. So you could save a tiny bit of money which would matter if you were super high volume. But the trade off is AWS is a little more time intensive to set up. It’s going to be more time intensive to maintain. So the volume starts to be really important there because you’re going to spend more time keeping it running. This is actually I think what’s interesting in discussions like this is where are you drawing the line for the scope of this app? Because we are optimizing for low cost because it’s just for fun, not serious and kind of doesn’t matter if it breaks because it’s just something we want to do that makes us laugh. If we were trying to do something where we wanted paying customers and it needed to be up with minimized cost it would make sense. You should pay Auth0 to solve the problem and maintain it for you. You should pay Twilio to handle that stuff and make it just work so you don’t have to invest time. I think, you know, there’s nuance to that discussion for sure.
JOEL HOOKS: I haven’t even loaded this service up. My experience with any AWS service is it’s not for the meek or faint of heart from the technical perspective. You are going to get in there setting up AIMs and dealing with their documentation. I don’t know how many services they have. It really is a trade off. That’s why Amazon doesn’t crush literally everything. Because of the dense nature of what you get into. I actually think the Twilio two factor log in looks pretty cool.
JASON LENGSTORF: Yeah. So I’m going to be honest. I have only heard the name Authy. I don’t know what they do.
JOEL HOOKS: Looks like a library that makes this kind of thing easy. Well, easy is a loaded word.
JASON LENGSTORF: Yeah. Two factor authentication. It’s owned by Twilio.
JOEL HOOKS: Yeah. This is Twilio OTP. I searched Twilio OTP to get here. I was missing one time password. It wasn’t in my vocabulary. Came up in the chat and then in Amazon stuff. That’s the common thread. OTP is what we are looking for.
JASON LENGSTORF: Got it. So this puts us in a space where we would still need to manage our users if we used this. So Twilio would give us the ability to get the one time passwords but we need a way to authenticate that which we would probably still want something like Auth0 or another solution for.
JOEL HOOKS: I would probably firebase that. At that point, like firebase has a lot of this already built. That’s my first inclination. What would you use, chat? What would Chris Biscardi do? I don’t know if you ask yourself that, but I do.
JASON LENGSTORF: Absolutely. I have a chat command. That’s how much Chris we listen to here. Nicky recommended
JOEL HOOKS: Smart folks are saying firebase.
JASON LENGSTORF: Magic.link got dropped. I have never heard of this. This is cool.
JOEL HOOKS: It is cool. I would trust this site as far as I can throw it based on this is so biased and maybe crappy of me. Feels like somebody’s featured on product hunt, growth hacking. Feels like somebody everything about this screams I don’t want to do business.
JASON LENGSTORF: Endorsed by thought leaders is a concerning headline. I don’t want to disparage anybody.
JOEL HOOKS: I’m not dissing anybody’s work. If you happen to watch this, if you have heard of code smells, this gives off VC smells to me. It doesn’t feel long term. I don’t know. That’s a personal bias. Magic announces $4 million of funding is the banner at the top. I don’t know if you saw it.
JASON LENGSTORF: Yeah.
JOEL HOOKS: I didn’t see it until just now. That’s funny because just the nature of the site screamed that to me. That Eric Elliot means the best. I would avoid that kind of talk, Jason. It’s not you, Jason, but Jason in the chat.
JASON LENGSTORF: Browniefed.
JOEL HOOKS: I’m not here to police your chat.
JASON LENGSTORF: They are unruly. We should police it. Firebase seems like a pretty solid solution. Good news, everybody. I have an episode coming up with David East from the firebase team soon.
JOEL HOOKS: You all should work on secret sandwich if you can.
JASON LENGSTORF: I’ll ask if he wants to do this. It could be really fun. This project provides a great like, we don’t have an idea, do you want to work on this dumb app? We can just, you know, put a bunch of fun and silly ideas into it. I think that would be a lot of fun. If you’re interested in learning about firebase, this will be a good episode. Definitely do add that to your calendar. While you’re at it, add the whole “Learn with Jason” schedule to your Google calendar. Let’s see. We are actually coming up on time here. We have about 14 minutes left. From my standpoint, this is what I wanted to get out of the call. I wanted to talk through the various things you’re going to trade off when you think about using third party providers, balancing how much time to put into it, what to spend, what we should be asking in the first place and how to connect dots between a detailed design from UX. We have the research, knock ups. What are we doing to draw the connections between those points and what actually goes on the screen? How do we convert ideas into code? I think just the sheer number of questions we have asked and talked through shows that the first step shouldn’t be to open up the editor and start writing code. There are so many questions before that.
JOEL HOOKS: That comes with experience, too. We are drawing on our mutual experience, the experience of your fine chat. And what tools are available and what’s right? Everything has trade offs. The famous saying is there are no silver bullets and that’s true. There is no perfect solution. Everything will have give and take whether it’s cost or time or longevity or VC smells. Everything has some measure of cost and reward. For me, Gatsby on netlify using Twilio and Authy and firebase and firestore for data that’s a really good start for proof of concept. All those services will be here for at least a decade. That’s important to me. How long do we want this? How long are we serving secret sandwiches? Five years is probably a good line. How does it last five years. Magic.link, they are providing a real solution to a real problem. Will they be here in five years? I don’t know.
JASON LENGSTORF: It’s a valid question. They’re brand new. We haven’t seen a lot from them. If we know we want five years maybe that’s too risky a bet.
JOEL HOOKS: You are putting time and money on the line. How hard will it be to change, too?
JASON LENGSTORF: That’s a big one.
JOEL HOOKS: Speaking of Chris Biscardi, he has a wonderful podcast and a summary he wrote about designing for deletion or planning for deletion when you code.
JASON LENGSTORF: Oh, yeah. If I search deletion will it work? This is such a good article.
JOEL HOOKS: The podcast episode is great, too. This comes toward the end of it. They’re talking about Gatsby and Chris’s experience on the Gatsby team and building it up. Can’t recommend it.
JASON LENGSTORF: Is this the podcast?
JOEL HOOKS: That’s the episode. They are talking about several things in there. That really stuck with me. I know it’s not like Chris didn’t invent this idea, but it was the first time I heard of it. If you’re building a system and you can’t delete it, you will be stuck with it for a long time. I have experienced this personally with egghead. It comes in for us with our subscription models and the way we originally approached how we dealt with subscriptions through Stripe. They just announced this week this billing dashboard.
JASON LENGSTORF: I don’t know if you played with it. It’s so cool.
JOEL HOOKS: Egghead is probably going to move and use it for business. There is so much code devoted to that in our application. In rails there’s something called a before hook. So it’s a before save hook. This is an automatic call back that happens before the thing saves to the database. They are the most dangerous, insidious, shitty bad decision you can make for a core system that goes as far as from if you can’t delete code you’re stuck with it. I could put that sticker on the system. We have narrowed it to one method. Just spider ten drills that are like some sort of horror movie where it looks like mold growing, like ivy plants, little hooks in the entire code base. This is a decision I made like three days into building egghead from the tutorial I mentioned. I made one decision seven years and at least I feel like probably a quarter million dollars of effort in dealing with this decision. As you mentioned early, that isn’t coming from my coffers of VC money. That’s like straight out of my pocket. As a consultant, I understood it and if you work for a telecom they’re like, stop talking about cost, we don’t give a shit.
JASON LENGSTORF: That’s the saddest sentence, but I get it. Those always bum me out.
JOEL HOOKS: When it switches and you’re like, if you’re doing your own bootstrap thing and you start paying for a design, paying for UX, paying for research, paying for your poor decisions you made on day three it’s just a weird sentence. When I hire somebody it’s like, well, I’m writing the check and I’m bringing it to you. So that experience is pretty visceral.
JASON LENGSTORF: Mm hmm.
JOEL HOOKS: That’s why this article from Chris really struck me. If we could delete that code, if I could just go in and be like, just kill that. Spend six weeks and delete it. Instead, I spent six months this year trying to wrangle it and make it to where we can understand it so we could even talk about deleting it.
JASON LENGSTORF: KandyKane asked in chat why it’s so hard to remove the single hook. When you write code, if you are not thinking about containment, not thinking about API surfaces then you end up like you said, it just sneaks its way into other parts of the code base. Then you can’t change one thing. You have to change everything. Because it’s like, all right. To remove the one hook, you could go in and delete that hook. I’m not talking about your code base specifically. I’m thinking about where I have seen this go bad. You know, you go in like, all right, this function is the problem. I can’t delete this function because the way we wrote this function was bad to begin with. This system over here uses the wrong use of the function and takes advantage of a way it breaks to get a certain outcome. This system over here wrote a proxy around the function that if we delete they have to rearchitect a bunch of stuff to make it work. Now it’s not like, oh, we can fix it. We’re going to break the whole system. We have to ground up rewrite because multiple systems are depending on this one bad decision we made. It sounds like that’s kind of the situation you find yourself in. That was true at IBM, true at every company I have worked at.
JOEL HOOKS: The nature of legacy code. You said architect. If you think about it this way it’s a load bearing wall. I can’t go down stairs and bash out a wall in the house willy nilly and not worry about it. That wall is carrying the entire weight of the structure of the place where I live. To properly do it, we have to engineer, manufacture a beam, take it out and put in supports while we take it out. We have to take out the original structure and move it in while we maintain the structural integrity of the entire thing while we all have to eat while this business goes. I can’t go in and knock out the load bearing wall of the subscription infrastructure. What that means is tomorrow we’re messing with people’s money at that point.
JASON LENGSTORF: Mm hmm.
JOEL HOOKS: We have 1500 unit tests in egghead and a vast majority are dealing with our subscription infrastructure. We don’t write superfluous tests. We test what’s important with money and the instructors and the member audience paying us, keeping us alive. We have to respect it. Once you have done that when you make naive decisions because we’re all just learning and guessing, right? We’re doing educated guessing as we go along. When we do that, you have to live with it. It’s viral decisions. It creeps to the code base. It wasn’t intentional. It’s maybe a bad design sometimes, but it wasn’t designed for deletion. When we get this, put it in our new steel beam to hold up the thing, it will be designed for deletion. Modular so we can move it. I don’t think I would move off of Stripe because I love them so, so much. So much. It’s going to be a different system. It’s a live and learn. It’s an expensive mistake, one I get to pay for and deal with and have to adjust for. I’m not going to say it doesn’t make me sad. Ouch. I would rather have a vacation house than to replace a subscription model.
JASON LENGSTORF: For real.
JOEL HOOKS: That’s literally what you’re talking about. This is a pretty nice cabin on acreage.
JASON LENGSTORF: Yeah. It is kind of these are the things that you can’t predict the future. You can’t predict how something is going to evolve. We could build secret sandwich and we could find out this is actually super popular. We might quit our jobs and start secret sandwich incorporated and this is the thing we do and who knew it would get this big? The decisions we would make in that future are very different than the decisions we make now thinking it’s a silly hobby project.
JOEL HOOKS: Ha, ha sandwich. Versus this means me eating or not.
JASON LENGSTORF: Yeah. Thinking of that we shouldn’t try to predict the future and say, well, this is just a hobby project. Let’s spaghetti code it and not worry. But we also shouldn’t say, well, maybe someday this will have to support millions of concurrent users and architect the hell out of it. Instead, we say we don’t know what will happen. We don’t want to spend a lot of time. Build good walls so if we need to swap one out, we can.
JOEL HOOKS: Mm hmm.
JASON LENGSTORF: That way, at least, we are optimizing for deletion. If we shifted in the future and want to sunset something, no, everybody fill out your stuff on a page. We delete the whole auth system and the rest doesn’t break. We need to scale up? Sure, drop in Octa and we have enterprise scale or whatever. We want to add a super database? Cool, hire an AWS architect and get a bunch of AWS services so this thing will handle the apocalypse. All of the decisions if we build the site in a way that it’s separated by clean boundaries and if we are thoughtful it can be a hobby forever and will be easy to maintain or it can scale infinitely. This could be where we have replaced every part while it was running. The app of Theseus.
JOEL HOOKS: I can’t remember. I was thinking about business and bootstrapping and the danger of turning your business into a really fucking expensive hobby.
JASON LENGSTORF: Yes.
JOEL HOOKS: That can happen quick. If you’re not designing it. Just going about it and following whims and I have been guilty of this on many occasions. It’s a business. You’re making money, but you have created a very expensive hobby. I try to be cognizant of that. This sort of thing. I get the idea of separation of concerns and architecting applications and the idea of planning to delete. I understand it, but in the moment you can make things and things sneak up on you and it springs up like, oh, ha, ha, you chose wrong.
JASON LENGSTORF: Mm hmm.
JOEL HOOKS: Happy Gilmore, the price is wrong pops in my head. Like Happy standing over you with his golf club laughing at you because you made a bad decision in your past as a developer.
JASON LENGSTORF: I could talk about it all day, but unfortunately we are out of time. So, chat, I want you to follow Joel on Twitter. Go check out egghead. There are tons and tons of useful learning resources there. I have made a few. If you want to look at them, I have a short link to it, I think. I hope the link works. That’s a link to just my stuff. Definitely stay tuned.
JOEL HOOKS: Experience my shame. I’m kidding. It’s wonderful. We have so much good content on the site. You’ll see what I’m talking about and why we are going to reengineer it. We are working on the idea of paths. Right now you’re dropped into egghead. If you scroll back up, I lovingly refer to current status of egghead as a slot machine. If you know what you’re looking for the content is good. We’ll put walls around it and help people more as the next phase of evolution. But there are several hundred amazing courses across the bounds of web development. They are really quite awesome.
JASON LENGSTORF: It really is.
JOEL HOOKS: Ask Jason and Chris Biscardi and Jason Brown and all sorts of chat illuminaries here at “Learn with Jason”.
JASON LENGSTORF: One for shout out to White Coat Captioning for doing the live captions. That’s made possible by Auth0, sanity, Fauna and netlify. Thank you very much to the sponsors. Check the schedule. We’ve got a lot of really fun stuff coming up. Look through the calendar. See the guests coming up. Mark your calendar and join in with us. Joel, thank you so much for coming on. This was an absolute blast and I feel it was super useful.
JOEL HOOKS: I made one boop drop.
JASON LENGSTORF: I know. It’s all right. Thanks, y’all. Chat, stay tuned. We’re going to raid and, Joel, thank you very much. We’ll see you next time.
JOEL HOOKS: Thanks, Jason. See y’all.