233: Cheating on Work with Work

How do you resist the siren call of shiny new features when you're months into a project that really matters?

Adam finds himself six weeks into a 12-week build when his boss floats a couple of juicy AI integration ideas. Ben relates this to his own tendency to get distracted by massive refactors mid-feature. They dig into strategies for staying disciplined—like using future work as motivation, finding small wins along the way, or accepting that sometimes work just has to feel like work..

Follow the show and be sure to join the discussion on Discord! Our website is workingcode.dev and we're @workingcode.dev on Bluesky. New episodes drop weekly on Wednesday.

And, if you're feeling the love, support us on Patreon.

With audio editing and engineering by ZCross Media.


Transcript

Spot an error? Send a pull request on GitHub.

[00:00:25] Intro

[00:00:25] Adam: Okay, here we go. It is show number 233, and on today's show we're going to discuss how not to cheat on work with work. So that'll be interesting. But first, as usual, we'll start with our triumphs and fails. It would be Carol's turn to go first, but she couldn't make it. She had a really rough day at work, so we're giving her the night off, which means it would be Tim's turn to go first, but he's on vacation in Portugal.

[00:00:44] Adam: So it's just me and Ben tonight. Hi Ben. So I guess I'm gonna go first 'cause I think you went first last time.

[00:00:51] Adam's Triumph: Hiring Success

[00:00:52] Adam: So, I'm gonna go with the Triumph. And that's just simply that we hired somebody. They haven't started yet, but we, you know, I mentioned a couple of episodes back that we were on the hunt and I had been working through ZipRecruiter and stuff.

[00:01:04] Adam: And, as it turns out, we ended up hiring somebody that we didn't find through ZipRecruiter. We found them through the podcast Discord. So,

[00:01:13] Ben: Very cool. So you got someone to finally do those SOC compliance reports.

[00:01:17] Adam: Other duties as assigned. Right.

[00:01:19] Ben: Yeah. Very cool. That's exciting.

[00:01:23] Ben: Yeah. Thank you. I'm excited. They'll start later this month, so, Is it, what time zone? I know you're on the East Coast. I know you're in Philadelphia. Thereabouts,

[00:01:32] Adam: Yeah. Yeah. So with this new hire, we'll be up to eight people, I believe. So there's currently 1, 2, 3, 4, 5 of us in Eastern Time zone. We have somebody in the Cleveland area, I believe that's central.

[00:01:50] Ben: I think. Let's go

[00:01:50] Adam: I think that's central. It might be on the very western edge of Eastern, but pretty sure she's central. And we have somebody in Phoenix, which that's their own, they're in their own little time vortex thing there, but our new hire is West Coast, so they're

[00:02:05] Ben: Alright. That's cool. I, I'll tell you, I think the partial overlap in time is the best because they're not bothering you early morning. I feel like you can get your work done, you know, not counting the other five people in your time zone, and then when your day is done, they still have, well, I mean, I guess it depends on

[00:02:28] Adam: Time. Yeah,

[00:02:29] Ben: On how you organize it.

[00:02:30] Ben: But if they still have time at the end of the day, then they're not bothering you and they're kind of heads down and you get that little extra window of support, if any, you know, if a client has an emergency, maybe there's, I just think there's a lot of value to having that slight overlap. I mean, you know, East Coast, West Coast is more than slight, but it's, you know, a couple of hours difference.

[00:02:49] Ben: And I think that actually has a lot of benefits.

[00:02:53] Adam: Yeah. I won't fight it. I mean, certainly just being remote has opened up the candidate pool. Right. I feel like we got some really good quality candidates and made it a lot harder to pick somebody. And that was great. You know, we really are happy with who we picked, but, potentially a downside in that we had that time difference and little lag there in communication sometimes, but I'm sure it'll be fine.

[00:03:18] Ben: As long as you don't schedule that, you know, all hands meeting 8:00 AM

[00:03:25] Adam: No, we, we

[00:03:26] Ben: No,

[00:03:26] Adam: Yeah, we have a weekly team meeting that's currently at 10:00 AM Eastern on Mondays and that's like 7:00 AM for our guy in Phoenix. But then I think, when is it, it's not daylight saving time or maybe it is daylight saving time 'cause they don't do daylight saving time. It becomes like 6:00 AM for him.

[00:03:47] Ben: Yeah, which is rough. But I don't know. You see how it goes. You know, some people are just morning people and they love the idea of getting stuff done early 'cause then, so if someone shifts their day, so let's just say for sake of discussion that West Coast moves ahead three hours in their workday. So you're starting at what did you say, 10 o'clock?

[00:04:09] Ben: Is that, was

[00:04:10] Adam: That's that team meeting. Yeah. I usually start my day at nine personally,

[00:04:13] Ben: So let's just say 10 for the sake of discussion. They start at seven. But then if you are normally done at, let's say what, five or six? I don't know, let's say five for the sake of discussion, then they're done at 2:00 PM and there's a lot of people who kind of love that

[00:04:29] Adam: Yeah, for sure. Yeah. If I had that option, I would take that. I take that all day.

[00:04:34] Ben: Anyway, congratulations.

[00:04:35] Adam: I guess I do kind of have that option and I don't take it, but it is what it is. So that's what I got going on. What do you got going on, Ben?

[00:04:44] Ben: I am gonna go with one triumph and one failure. The failure's not really about me, but it's just top of mind for a moment.

[00:04:50] Ben's Triumphs and Fails

[00:04:53] Ben: So I'll start with the triumph, which is that I have, I think I mentioned on a couple of previous episodes that I've been working on this website, Big Sexy Poems. I have just, it was an Angular based proof of concept for a long time, for years.

[00:05:04] Ben: No server side component. It was just deployed on Netlify as a client side only application. It would store to your local storage in the browser as a just a temporary cache. I have been working on translating it into a ColdFusion based application, and I have, it's nowhere near done. I don't have a plan, but it's not done.

[00:05:24] Ben: But I have deployed it to a server and here's the part that, so, so that in and of itself, I think is a triumph. I set out to do a thing and I did a thing to some degree.

[00:05:35] Adam: Congrats.

[00:05:36] Ben: But here's the thing that is like a triumph that makes me nervous. All of the code for this application is on GitHub publicly, which kind of terrifies me because I'm basically saying, anyone who can find a security vulnerability, here's the code and that code runs on my server.

[00:05:54] Ben: But I'm calling that a triumph because I think what it's doing is it's making me not cut corners. And anytime I have a thought of, well, maybe I'll come back to do this, or maybe it's not gonna be such an issue here, I'm like, no, literally people can see this code. If this is a problem, I need to deal with it now, not later.

[00:06:15] Ben: That is not to say that I don't have security vulnerabilities in there and flaws and issues, but it is just making me hyper aware that I am opening myself up to an attack with every keystroke. And, I dunno, I like that. I'm afraid of heights, but this is like my version of like parkouring over the tops of buildings, which by the way, have you ever seen those videos?

[00:06:39] Ben: Those people are insane.

[00:06:40] Adam: Yeah, for sure.

[00:06:41] Ben: So that's my triumph. The failure has nothing to do with me. But I dunno if it was this, I guess it was last week. Was it Facebook? No. OpenAI. One of the peoples, released some product where you can basically just get a stream of AI generated TikTok style

[00:07:02] Adam: Oh, Sora.

[00:07:03] Ben: Sora,

[00:07:04] Adam: Yeah. This is OpenAI. It's called Sora.

[00:07:07] Ben: But it's not just the product, it's, I mean, it's not just the video generation technology. It's now that there's a thing where you can just keep swiping, keep swiping, keep swiping, and apparently they'll just keep giving you videos. And that makes me really sad. There's something about that that is deeply troubling to me, not the least of which is my default instinct as we become more AI oriented is, okay, I just can't trust anything anymore.

[00:07:30] Ben: You know, if someone sends me a video, I'll just be like, well, unless I can go to NPR.org and find that same video, I'm like, maybe it's entertaining. But it is by no means fact.

[00:07:40] Ben: I'm good about that. I think there are so many people in this world that honestly don't even care if a video is real or if

[00:07:49] Adam: Yeah. Mm-hmm.

[00:07:51] Ben: Or if it's problematic.

[00:07:53] Ben: I mean, I've already seen people share things on Facebook that are, to me very clearly fake, and I feel like they're sharing them in a genuine, like, oh, look at this. How, like, how amazing was this to find? I don't know. It just makes me a little bit terrified for, for us.

[00:08:10] Adam: Do you think that they're passing it off as not AI generated in bad faith?

[00:08:15] Ben: No, I don't think they know is the, that's the thing is like, I think, like I was saying, like my default is that I just can't trust anything anymore. And I feel like a lot of people will continue to just blindly trust any video they come across if it looks pretty realistic.

[00:08:32] Adam: It used to be video was like, you know, video. Yeah. Like video or it didn't happen, right? Like pictures can be faked. It's really, really difficult to fake video. And now, like, it's real easy. There was a, I mean I think this was in direct response to the release of the Sora app. Somebody, you know, used Sora to generate a video of Sam Altman, the CEO of OpenAI, like shoplifting.

[00:08:58] Adam: Stealing. I think it was, it was stealing an Nvidia GPU, and

[00:09:03] Ben: I heard about that.

[00:09:03] Adam: Yeah. And, and it's like, okay, well, you know, now we can't trust videos as evidence in court anymore.

[00:09:11] Ben: Right. I mean, I feel like every crime drama that I ever watch, they're always, gimme the CCTV videos and

[00:09:20] Adam: Zoom

[00:09:20] Ben: How do, how do we even catch? It's like you have to just catch people red handed.

[00:09:24] Adam: Pretty much.

[00:09:25] Ben: And by red handed, I mean in person,

[00:09:27] Adam: Yeah.

[00:09:27] Ben: Not on tape. Oh,

[00:09:29] Adam: Gonna be an interesting few years, that's for sure.

[00:09:32] Ben: Oh, man.

[00:09:33] Adam: May you live in interesting times?

[00:09:35] Ben: It makes me a little sad and nervous to be honest.

[00:09:38] Adam: Yeah, for sure. Me too. It's a, it's gonna be a tumultuous, shaky few years and we're just gonna have to continue to do the best that we can to make sense of this new world.

[00:09:49] Ben: So that's me and, I guess that's all of us.

[00:09:53] Adam: That is what one plus one equals, the math is math thing on that one.

[00:09:56] Staying Focused on Long-Term Projects

[00:09:56] Adam: So now is when we move on to the main topic of the show, how not to cheat on work with work. So basically the thesis of this is like, you know, what do you do when your boss dangles a juicy idea that you really wanna work on, but you're already like waist deep in a longer term project.

[00:10:12] Adam: Like, you know, you're six weeks into a 12 week project that's really actually like super important, but then your boss dangles this idea in front of you, Hey, what if we did this? And it's super interesting, like, you know, it's like, oh, I would love to drop everything and just spend the rest of my week working on that.

[00:10:28] Adam: Right, you know, asking for a friend. Of course.

[00:10:30] Ben: So I want to reframe this in a, for a moment though, in a way that I think feels to me very parallel, but I think could lull people into thinking that they're doing the right thing, and that is to reframe it as the guy who said, make the

[00:10:46] Adam: Oh, yeah, yeah, yeah, yeah. Make the, make the first, make the change easy, then make the easy change.

[00:10:54] Ben: Yeah,

[00:10:54] Adam: That was Kent Beck.

[00:10:55] Ben: Kent Beck. Okay, so the reason that that feels like it could be a meaningful parallel is that I can't tell you how many times I've been working on code and I'm frustrated by how challenging it is, and I think to myself, this would actually just be much easier if I did this huge refactor to reorganize the code and then I could come back and do that.

[00:11:17] Ben: And that is not so different from, Hey, here's this really exciting thing over here that your boss gives you, and how do I stay on point and not get distracted by the fancy thing? I think code refactors, at least for me, maybe this is also just probably my personality. I get excited at the idea of cleaning things up because it feels like I'm, I dunno, it's just exciting.

[00:11:37] Ben: It feels like I'm doing something great.

[00:11:39] Adam: It's a little bit of like rearranging the deck chairs on the Titanic, right? Like, you know, it's work, but is it really the work that needs to be done right now? Sometimes, you know, and sometimes the answer is yes, right? Like, I did that today. I'm working on a new series of screens for our monolith app.

[00:11:56] Adam: And we know like the, we don't have a death date on the schedule yet for our current monolith, but we are actively working on porting away from it. And so time spent building especially difficult, like tedious things in that app just feels very much like a waste of time. But it's also like, it's gonna take less time to do that than it would to

[00:12:19] Adam: get the whole like replacement thing on its feet and figure out all of those like shared challenges that are gonna be necessary, you know, session management and all the different things. Those like shared challenges that are across the entire application. It's gonna take more time to knock all that out than it would to just like, okay, set your, your tech ache aside and just do this one little thing.

[00:12:39] Adam: Right? You can knock this piece out in three days. It would take you three weeks to do the whole thing. So do

[00:12:44] Ben: So let me ask you this then. So I, obviously, I don't know what features you're working on, but again, trying to draw a parallel to something that feels like it can be relatable,

[00:12:54] Ben: When I am faced with this, oh, wouldn't it be really exciting to refactor? I will try to find some small slice of that that is still enough for me to sort of wet my beak, so to speak.

[00:13:08] Ben: And I don't go whole hog, but like, is there, is there a way that maybe you could siphon off a little piece of that feature? Or Maybe, or maybe

[00:13:16] Adam: About, of the thing that makes me excited

[00:13:18] Ben: Yeah, yeah. Or

[00:13:19] Adam: My, I'm sorry, my friend

[00:13:20] Ben: Yeah, for your, for your, something to keep your friend motivated, but also not fully distracted, you know, like could you work on some database schema ideas or

[00:13:30] Ben: Something?

[00:13:31] Adam: For this particular thing?

[00:13:32] First AI Integration: Email Error Classification

[00:13:33] Adam: No, I mean, I'll, I will, I'll just say like, this would be our first foray into actually using like real AI API stuff, right? Like calling out to an AI. Like for months and months and months and maybe even years by this point, you know, we've been very staunchly like we are not anti-AI, but we are certainly not going to just do whatever

[00:13:53] Adam: the first thing that comes to mind is for AI. Like, oh, how can we have it generate text for you? Like that's the wrong thing to implement. And we've been very much like, where, you know, why does it make sense? What feature do you want with it? And how would it be useful and how would it be better than what we could do with other code and, you know, all this other stuff.

[00:14:11] Ben: Very, how pragmatic of you.

[00:14:15] Adam: We try to be. We finally came up with not one, but two ideas where it could potentially be really interesting and useful.

[00:14:21] Ben: It's tough too because AI, when you're integrating AI into a product, which full disclosure I have not done, I get the sense that it has to be really thought through pretty well. And then also I think you have to be prepared to continue to touch it and fine tune it and tweak it for a good period after that.

[00:14:40] Adam: I'm sure. Yeah. And that's been

[00:14:42] Ben: You can't just dip your toe

[00:14:44] Adam: And that's been a big part of what we, what causes our hesitation too, right? Is, you know, as a small team, we have to build the thing and we have to build it in a way that it's gonna be pretty solid for a good chunk of time so that we can go build the next thing, right?

[00:14:58] Adam: We can't ever rest on our laurels. And so we don't have the time and the bodies to just let somebody sit there and continually tweak this thing after it's launched for the next 18 weeks. So yeah, the, and part of what makes these two ideas potentially good use cases is that they're not so much like generate something useful as they are interpreting data.

[00:15:21] Adam: You know, it's like, so for example, the messages that you get back when an email fails to send are not standardized, right? You, you get, you know, different, like Gmail always sends the same like error code and some text for different scenarios, right? That email box doesn't exist or mailbox is full or whatever, those particular failure rates are, but they're not standardized across providers and it matters based on the recipient, right?

[00:15:49] Adam: And so you're emailing who knows what domain, and you get just random messages back. And so what we want to do, one of the ideas is to use it to discern the intent of the error message, basically back to say, okay, like here's some examples of like unable to deliver for this reason, and here's some examples of try again later and here's some examples of this and that.

[00:16:13] Adam: And then here's the message that we got back and like, which bucket does it best fit into? And what's your confidence level?

[00:16:18] Ben: Can I, one other thing that I have, the moment that AI came out

[00:16:24] Adam: Yeah.

[00:16:24] Ben: Thereabouts, the very first thing that I thought of was you use, do you use Postmark

[00:16:31] Adam: We did for a long time.

[00:16:33] Ben: So one of the things that you can do with Postmark, obviously you can send email with Postmark. The other thing that it allows you to do is it gives you something called a mailbox.

[00:16:42] Adam: We did receiving with it. Yeah.

[00:16:43] Adam: Yeah. So for those who are unfamiliar, let's say that, let's say that your email address is support@AlumniQ.com, okay. Right. So please don't email there.

[00:16:56] Ben: If you had that set up as a sending signature in Postmark, what you could also do is then allow it to receive emails where it would use plus style addressing. So someone, I, it's been a little while so maybe I'm losing some of the details, but essentially you could do support plus and like some long garbled ID@AlumniQ.com and that long garbled ID was like anything that you included in your mail metadata.

[00:17:24] Ben: So what it allowed you to do is people could actually send emails directly to your inbound email address and then you could look at this mailbox ID, figure out who those persons are, what it pertains to, and then you can parse the body of their email. That's not really important for this conversation other than to say everybody has at the bottom of their email

[00:17:44] Ben: an email signature and everybody's email signature is different. And some of them are in German and some of them are in Spanish, and some of them are in Portuguese and some of them are in French. And some of them follow the two dashes in a space separator, and then like every single law firm in the world has some gigantic paragraph about how this doesn't denote legal information.

[00:18:05] Ben: And then people have the, if you are receiving this and you weren't intended to please delete it immediately, this is confidential information, et cetera, et cetera. And I had to work on the logic that parsed out the body and tried to separate out the signature, which really was me just literally combing through inbound emails all the time to see if there was anything that looked wacky.

[00:18:26] Ben: And I thought to myself, this would be the most amazing thing if AI could do this, where I could just give it an email and say, just gimme back this content without the signature. And I never got to it, but that was immediately my first use case. I'm like, oh, that would be so hella sick.

[00:18:40] Adam: I could see that being useful for sure.

[00:18:42] Ben: The sad thing is Postmark actually will do that for you, or at least it purports to. But it will like only do it for plain text emails. I think there is some like weird caveat where in the documentation it'll, it'll tell you just it stripped it out. But then I think it's stripped out everything,

[00:19:01] Ben: not just like interesting information. Like I think it would just give you a long string of text, like not even line breaks and bullet points or anything.

[00:19:09] Adam: Yeah. Yeah. I got a little, little Postmark anecdote. It's totally off topic, but I gotta share. It's super fun. So we used their inbound email service. You know, it's basically like you set up an email address, you hook it up to Postmark, and then anytime an email is received, they would call a web hook after they parse the

[00:19:25] Adam: email. Yeah. And they would call the web hook and give you like the different chunks, the discrete chunks, here's the headers, here's the recipient list, here's the body, blah, blah, blah. And all that was necessary was to respond like 200 Okay. Right. To, okay, this one was successfully received. You don't have to retry this one later.

[00:19:43] Adam: But we loved the service so much that I had, I put in like a little Easter egg, which was just this like, I'll say giant, you know, it was probably, so every, my response was 200 Okay. But then the body of the response was an ASCII art of like a big, like hand drawn heart, and then underneath it said, we love you Postmark, or something like that.

[00:20:03] Adam: And, it was nice. And that's, that's all I ever did with it. I never publicized it anywhere or anything like that. And then like months or years later, I happened to see a tweet from them where they had like noticed it and they were like, this is amazing. And I was like, Hey, that's me.

[00:20:19] Ben: That's awesome. Yeah, the Postmark team was always very cool. I thought they were one of my favorite SaaS products that I've used. Just everybody seemed super helpful and I think if you look, I don't know how, it's been a couple years since I've really looked into it, but their meet the team page, team members could upload actual videos of themselves introducing themselves.

[00:20:40] Ben: I don't know, I just thought it was, they seemed like a very people first kind of a company.

[00:20:45] Adam: It's funny you should say that. There's people first jobs.com. And

[00:20:50] Ben: I heard of

[00:20:51] Adam: This was, like a sort of a movement or something, and I'm almost certain it was like started and shepherded for a long time, if not still,

[00:21:00] Adam: by the same company that made Postmark, or at least

[00:21:05] Ben: Oh, well there you go.

[00:21:06] Adam: Yeah. So yeah, you call them people first and I'm like, well actually,

[00:21:11] Ben: You don't know how right you are.

[00:21:13] Adam: Yeah, it's just like an ethos about how you treat your, your employees and how the company operates. But let's go back a few levels on the stack here. Pop a few things off the stack to get back on track on the conversation.

[00:21:24] Adam: So I had mentioned I had done some of that refactoring type work today. And the thing that I did, so we have, you know, we've got this ancient CFML monolith application and a couple of years ago we built a new module for it. And in order to try, like it was kind of an experiment, in trying to make things better for the future,

[00:21:45] Adam: the guy who was working on it had built a lot of stuff in React to try and like, kind of make it easier for us to build admin interfaces in the future. But that was the only, you know, I think that was the last time we did a major new module in the CFML monolith. And so it just kind of sat there and it never got like reused. The investment was made, but it was never paid off.

[00:22:05] Adam: And I started working on this and even though it's only like two or three new screens, I was working on it and I was like, oh, I need, I need an image upload control. Like we, we've kind of like, we have this like image library feature in the app and we, it's deprecated, you know, we're trying to phase it out.

[00:22:20] Adam: We don't really like the way it works and we just kind of want to throw it away and start from scratch and then we don't really have a replacement for it figured out necessarily yet. And so I was like trying to kind of figure out like what makes sense. We're in this weird liminal space where we don't have a good solution identified yet.

[00:22:34] Adam: Like what do I do? And he was like, actually you should use that image upload control that's in that section that I built. And I went and I looked at it. I'm like, okay, this is, this is great. This will be exactly what I need. It's the easy user interface, and I'm sure it's got a lot of validation on it.

[00:22:47] Adam: He just built it and then I was like, oh, yeah, he built it in React. And this is not a React app, right? It's like, like we talked about when I did that thing several years back where I built like a Svelte application. Yeah. And it just lives inside one modal in the thing. It's very similar except it was bigger.

[00:23:03] Adam: It's like it takes over the whole page, right? The page renders from CFML and it's just got like a div with a specific ID on it, and then the JavaScript kicks in and it renders the rest of the app in that div. And, so that's fine except the build chain that he did to like, you know, compile all of that React code into usable JavaScript was very specifically built for his little module.

[00:23:28] Adam: And so, I had two choices, or I had, I started out with like, okay, I really don't wanna do this, but it's just these like three screens. Let's just knock it out, whatever. I started to like copy and paste over. It's like, okay, well I need the index JSX. Oh, and I gotta have my own package JSON for this folder.

[00:23:44] Adam: Oh. And then it uses esbuild to build, and there's a custom esbuild script just for this module. I gotta have that. And that means I have to add to the root level package JSON to run the scripts that call the esbuild thing. It's like just, it's yak shaving all the way down, right? You know? And finally I was like, you know, it wouldn't be that much work to make this like a single solution and just say, okay, these are the various entry points, right?

[00:24:09] Adam: Like that esbuild file, you just say, okay, I want you to build this bundle, and this is the starting point. And it just kind of spiders out from there. It's like, okay, you're importing this and this and this, so I'll go and import those and include all that in the bundle. And so that's what I did. I was just, the biggest commit that I made today was just refactoring that one module so that instead of being like the React solution for this one module, it's now the React solution for writing admin screens.

[00:24:38] Adam: And the only thing in it is that one module. And so the build chain is a little more generic now, and it's prepared for me to go in tomorrow and start working on adding my own screens.

[00:24:49] Ben: Nice. And then eventually you just gotta translate it into Svelte.

[00:24:54] Adam: Oh God. He would shoot me, and he's in the Eastern time zone too, so he'll just drive around

[00:25:02] Ben: Where you live.

[00:25:03] Challenges with Build Scripts and Tools

[00:25:03] Ben: It's interesting talking about the, I know so little about bundling and build scripts. I kind of get something to work. I, I should say, like, I put in as much effort that it takes to just get the build script to work and in a way that doesn't seem awful. And then I just kind of leave it as it is.

[00:25:23] Ben: And I didn't realize how little I know until something just doesn't work the way you realize that they do. And you look under the hood and you're like, oh, this was so different. And I use Parcel as my build and my, my Big Sexy Poems and some other stuff. And it has the same kind of thing where you can give it entry points.

[00:25:40] Ben: So I have given it entry points that are like, this is the authentication entry point 'cause it's so little separate, like really isolated UI and like here's the logged in version and here's like a share version. And they're all very separate and they all have their own entry points and inside they do reuse some of the same code. They might import shared modules.

[00:26:02] Ben: And in my head, I think to myself, well obviously there's a one-to-one relationship between the entry point and the files that get generated. You know, like it hashes things and does some interesting stuff. And I was viewing the source the other day and it was, the member module, which is the logged in thing, like contains parts of the auth module as well.

[00:26:23] Ben: 'Cause I guess it says like, oh this is shared code so anytime someone needs this, I'll just split it off and you'll include it automatically. 'Cause I'm including an HTML file, which has the generated script tags. I don't know, it just took me by such surprise that to see, to open up something in the members area and see the auth files being included.

[00:26:43] Ben: And I kind of panicked a little bit 'cause I'm like, oh is this totally broken? And I just realized it's trying to be smart under the hood. And I was coming at it very dumb in that there's this one-to-one relationship and I don't know, builds to me, I know that the build tools are getting so good and relatively simple compared to earlier days with Webpack and I don't even, you know, Gulp and Grunt.

[00:27:06] Ben: But it still seems like something you really gotta put a lot of thought into unless you're just doing top to bottom Node, then it, then it feels like it's probably just kind of makes sense.

[00:27:18] Adam: Probably. Yeah.

[00:27:19] Ben: 'Cause I'm working on a ColdFusion backend and so I can't just have it magically find all the things and inject all the scripts.

[00:27:27] Adam: Yeah, yeah. I think that from what I see, which, you know, obviously I'm looking through my own telescope or whatever, right? So I'm not seeing the full development community, but the bit that's within my peripheral vision here, I feel like everybody is moving toward these kind of like, was it called batteries included?

[00:27:46] Adam: Build frameworks, right? Like Vite, where yeah, it's gonna do all kinds of good stuff for you, but it's just, you just say, here's, all right, here's my file. And go, right? And it figures it all out. It does the TypeScript for you. It does everything. And it's done. And to me, so many things in this industry feel like they are a pendulum, right?

[00:28:08] Adam: We go from like thick client to like, oh, thin client is the new hotness, so you gotta have a thick server and then you wait four years and it's like, now everybody's going back to thick client, you know? And I feel like in some regards, if you just wait long enough, it'll come back into style, some of these things.

[00:28:27] Adam: So I'm, part of me is wondering if, you know, we're gonna see these awesome new build tools. You know, I like Vite. That is my understanding is Vite is sort of the backbone of Svelte Kit, like all the build chain there and it works great and I don't have to worry about it. You know, I just, you know, create my Svelte Kit app with their little CLI tool and I put my JavaScript and TypeScript files where they're supposed to go and it works.

[00:28:53] Adam: So I'm, I'm not upset about that. And it's so much better than having to manage a Webpack config.

[00:28:58] Ben: A hundred percent. I never even managed a Webpack config. I tried one time and I could never get it to work. And then Angular, Angular two plus started shipping with Webpack under the hood, but it was the Angular CLI was managing the Webpack build. And you could eject. And I think, I think React has the same kind of thing where you can kind of eject out of the thing that they're doing for you and, you know, you're in the danger zone at that point.

[00:29:23] Adam: Right. Yeah. I know Create React App had an eject feature. I don't know about anything else, but yeah, maybe.

[00:29:29] Ben: I'm so fascinated. Sorry, I just continue on with the topic of build steps for a second. I grew up in the world of Uglify, which I think was like the very first thing that sort of compacted all of the variables down to single things and single letters and concatenated everything. It just made it really, you know, ugly.

[00:29:48] Adam: Try to minify, but it wasn't super intelligent about it. It was just like, what are some the obvious low hanging fruit. Yeah.

[00:29:55] Ben: Right. And now what I keep hearing from a, let's say like a vocal minority, is that compacting code doesn't even necessarily make a difference anymore with the amount of compression that we have and the CDNs that it's almost easier to just leave the code as is. Like you, I think people argue about whether or not there's still value in concatenating files and HTTP/2 and whether or not that dream played out the way people expected it to.

[00:30:25] Ben: But I think that aside, the idea that you need, you might wanna ship like a 14k compacted JavaScript file and then a 175k map file that kind of maps it back to its original source code for debugging, the idea of maybe just not having to compile and ship a map code.

[00:30:45] Adam: But that map is only ever loaded by people who are doing the debugging. Right? Your, your end user on a cell phone doesn't

[00:30:51] Ben: Right, right, right. But what I'm, but I guess people will often not commit the built artifacts to the repository. You commit your raw source code and then a build step run somewhere, and then that's the thing that gets deployed.

[00:31:05] Ben: But those compacted, minified, uglified files don't get committed back to the repo for, you know, good reasons. But I had a thought the other day that if I removed all of the minification, that maybe committing the compiled source code, like not just the raw source code, but the compiled code to the repository wouldn't be so bad.

[00:31:28] Ben: 'Cause it's not like every single character that changes, the entire file is blown out of the water if you don't have all the uglification. Maybe I change this one typo and yeah, it kind of seems stupid that I'm committing the compiled code back to the repository, if it's literally just one line that actually changes because they're no longer uglifying.

[00:31:46] Ben: I'm like, maybe that's not so bad. And like, I don't know, I was kind of interested in that idea, but going back to build steps not working in the way that I thought they did. When I tried to go into Parcel and remove the optimized flag, not only did it stop uglifying the code, but it actually changed the HTML that was generated, whereas when it optimizes, it was just generating script tags.

[00:32:13] Ben: When I removed the optimization, it actually generated an entire HTML file, like with a head and a body and the script tags. I'm like, well, what? That doesn't make any sense. Why was optimizing stripping out the body? And I tried to get ChatGPT to explain it to me and it, you know, it said, oh, of course that makes sense.

[00:32:32] Ben: I'm like, well, okay, thanks.

[00:32:35] Adam: If you don't get it, you must be stupid.

[00:32:37] Ben: Yeah. They're like, well, they're like, if you're not gonna optimize, of course it's gonna generate a body in an HTML tag. I'm like, okay.

[00:32:46] Adam: Yeah. Yeah. I don't know, man. Never been a big Parcel user, but,

[00:32:49] Ben: People who know how to do build scripts, I'm sure all of this would be really obvious to them, but because I'm just sort of flailing around in the dark trying to get something to work, it's just one frustration after another.

[00:32:59] Ben: So now that I get anything to work, I'm like, don't touch it.

[00:33:03] Ben: Don't even look at it funny.

[00:33:05] Adam: Yep. Yeah, I feel that for sure.

[00:33:09] Ben: Yeah.

[00:33:09] Adam: Okay. Yeah. So

[00:33:10] Using New Projects as Motivation

[00:33:13] Adam: How not to cheat on work with work and really, my default strategy is I try to use that new shiny as motivation to push through on what I'm currently working on, which, when I'm in the middle of something that's gonna take like, definitely weeks,

[00:33:27] Adam: I think that's where it gets hard, right? If I just need a motivation to get through a day or two of work to get to work on the new shiny thing, that would be a lot more effective. But where I'm at right now, like the project that I'm on, the real deadline is like end of the calendar year. The optimistic deadline is end of October.

[00:33:46] Adam: And so, you know, like this is a, there's a lot of work left to

[00:33:51] Ben: A lot of work.

[00:33:52] Adam: And so just dangling like, Hey, if you finish this or when you finish this, you get to go play with something exciting is not as motivating as it would be if it was like two days away.

[00:34:02] Ben: Alright, so let me throw this at you. If I can borrow an idea from Seth Godin. We've talked about Seth Godin on the show before. I'm pretty sure. Business

[00:34:10] Adam: A hundred percent sure.

[00:34:11] Ben: Yeah.

[00:34:12] Ben: Yeah, yeah. Purple Cow. Yeah, of course. I'm, as I'm getting older, things are harder for me to remember. One of the techniques that he has used in his professional life is he will do some sort of a, let's call it a landing page, for lack of a better term, where he would put something out there that could gather a measure of interest before he even

[00:34:35] Ben: does things. As an example, this was back when I think he was, this is like, I think even before the internet where people could mail in and get a set of DVDs, I think, or CDs for something. And he put advertisements in newspapers selling this product. And he had a deadline in his mind that if he didn't make $2,000 worth of sales, he wouldn't even start the project.

[00:34:59] Ben: But he didn't even have anything to sell yet. He had an idea. And he would see, did anyone wanna send me money at all? If he did, he would go through with the project. If not, I think he ended up, he would just refund people's money and say that it didn't work out.

[00:35:13] Ben: Is there,

[00:35:15] Ben: I've seen that advice in the like business world. So is there something you can do here where you, where you have a call to action might be too strong a word, but you put something in the app that looks a little bit like it would link to the thing that you're trying to build and then, and then if someone clicks on it, you could have a little thing like, Hey, we're working on this right now.

[00:35:37] Ben: You know, click here to be notified when the feature's done, or something like

[00:35:40] Adam: This kind of reminds me a little bit of like when you did office hours at the end of your

[00:35:44] Adam: term at InVision, you

[00:35:45] Ben: This is my, my little dying gasp.

[00:35:47] Adam: Is anybody gonna show up? I don't know if you happen to notice it in the UI. I, I mean, I see what you're saying and unfortunately, I mean, I'll think about it more, but it doesn't immediately sound like it would be a good fit for that approach.

[00:36:03] Ben: I'm just throwing stuff out because I know also because it would also depend on the size of the customer base. I mean, I know you're working with universities and it's not like you work with thousands of universities, so if it's a handful of people or a handful of universities or however many, you know, putting that in front of a handful of people is not as interesting as putting it in front of a hundred thousand people and seeing if 5,000 people click on a thing.

[00:36:30] Adam: Yeah. Remind me after we're not recording, and I'll tell you what our monthly active users that would see this feature, if it did exist, is.

[00:36:38] Ben: Actually, sorry, can we side tangent for one more second?

[00:36:41] Adam: This is like a whole episode of side tangents. Let's go.

[00:36:45] Ben: Going back to an idea that you had, gosh, I wanna say it was like maybe two years ago, where I think you wanted to come up with some sort of a system where people could have campaign variants

[00:37:00] Adam: Like

[00:37:01] Ben: Then Yeah, the A/B testing stuff and then it would sort of auto-tune during the send based on some click interactions.

[00:37:08] Ben: Did anything, did anything ever come of that?

[00:37:11] Adam: Not yet. We've been refining the idea more, but we haven't, it hasn't made it to the top of the work on it pile yet.

[00:37:19] Ben: Not enough hours in the day.

[00:37:21] Adam: I know.

[00:37:22] Ben: What you need is someone who's based in California and actually has three extra hours.

[00:37:28] Adam: That'll magically just like get so much more done.

[00:37:30] Ben: You're like, that's not how time zones work.

[00:37:34] Ben: Yeah. So if anybody has any ideas for how to stay motivated when somebody dangles something that you'd rather go work on, well, can you at least get little done? Even if it's not the coding parts, like, could you have a requirements document or something that you could, you know, I have half an hour, I don't feel like doing anything else. Let me just maybe tweak this readme file a little bit or, you know, find something of value that I can't necessarily put into play today,

[00:38:05] Ben: but in two months, I'll be happy that I had this little nugget set aside for later.

[00:38:11] Adam: Probably. And that's, I mean, it speaks to my process. I think that I don't usually have anything concrete like that. Like when I start to work on a problem, the way that my, I've trained my brain to work over the last 20-ish years is just start working on it. Right? Like I identify the blind spots and the shadows and the rough edges by working on it and running into them.

[00:38:37] Adam: And so I haven't trained myself to, like you're saying, write down a readme or make a spec doc or anything, to try and figure out what is this gonna require? And that might be a good exercise.

[00:38:50] Ben: To be honest.

[00:38:51] Adam: Yeah.

[00:38:53] Ben: Lemme, let me ask you this.

[00:38:55] The Challenge of Abstract Thinking

[00:38:55] Ben: On that note of sitting down, thinking through things, I don't know, we've talked in the past about aphantasia, the ability to picture things in your head. I have a lot of trouble picturing things in my head. I don't know if that's gonna be related to this at all.

[00:39:11] Ben: What I notice is that I don't have the ability to think deeply about things in the abstract. Meaning I can't go for a walk and think through a problem. I can basically think about the first step in that problem, and if I can't write that down, I'm not getting to step two. There's no amount of deep thinking and alone time that will allow me to get past that first step.

[00:39:38] Ben: If I can't write it down, I need to write something down in order

[00:39:42] Adam: It doesn't have to be code, but you just need to like write your thoughts down.

[00:39:44] Ben: Like I need to get the thing out of my head so that I can then move to the next thing.

[00:39:49] Adam: Right?

[00:39:50] Ben: Does that, does that ring a bit, does that ring true at all for anybody? I don't, I'm

[00:39:54] Adam: It's not, yeah, it's not, it's not the exact same for me, but I can relate like, it gets easier to move on past it and to not forget details when I write 'em down.

[00:40:03] Ben: I have tried, like, so as a, as kind of a reaction to the whole social media is destroying the world, AI slop is destroying the world. I have tried to spend a little more time not listening to podcasts and not listening to music and just being in my own head. Like, if I go for a walk in town, I might just keep my phone in my pocket.

[00:40:27] Adam: That's punishment, isn't it? It's so hard.

[00:40:30] Ben: And I think to myself, okay, let me come up with a juicy problem that I can marinate on while I'm walking. And I just, I cannot. I get excited about the notion and I start walking and I just, I get nothing. I make zero progress past that first sort of initial idea. If I'm lucky, maybe I get a random

[00:40:51] Adam: Thought that somehow gets connected to the main thought and I'm like, oh, note that for later. That's a good one to hold onto. And then you get home from your walk and you're like, what was that thing? And I thought that was like gonna change the whole world.

[00:41:02] Ben: But I, I've tried a couple of times and I don't know if it's a matter of practice or if it's just a limitation in the way that I've trained myself to think, but yeah, if I can't sit down and write a little something, a little sketch, you know, probably some sort of a piece of code, then it doesn't, I can't materialize it past a certain point. It's a bummer 'cause I think it'd be much easier to spend time without the phone if I could spend time thinking deeply. I assume this is what the old masters used to do, you know, like your Charles Darwins and your, and your, you know, your Platos and your Socrates.

[00:41:40] Adam: The, yeah, it's a very different world now. I'm, I'm not that type of person at the moment. I imagine it's one of those things where you just need to practice, right? It's like mindfulness meditation or anything else. Right. You know, you just need to work at it. Put yourself in that situation, allow yourself to fail a little bit and just keep getting a little bit better, a little bit better.

[00:42:01] Adam: But

[00:42:02] Ben: I

[00:42:02] Adam: If I do that, then how am I gonna keep up with my podcasts and my YouTube subscriptions

[00:42:06] Ben: Right?

[00:42:07] Adam: And

[00:42:07] Adam: TV shows and Yeah,

[00:42:09] Ben: I, I wonder if I could achieve the same kind of thing by having a conversation with somebody that almost the act of saying it to someone, it would almost act as like an in-memory cache, so to speak. And I very much can relate to, not that it helps my process at all, but I enjoy it more, right? Like, it goes from an exercise in like, okay, I need to solve this problem into, this is a creative, collaborative, fun time. And it becomes a whole different thing. Even if the goal is to get to the same place, like that, maybe that to me is the way my extrovertedness, extroversion, that's the word, comes out is that I like working in collaboration with people on things. That really gives me a little bit of an energy boost. And so as a result, I tend to overshare and create my own podcast and stuff like that.

[00:43:02] Adam: Well, no, I think the collaboration is an important part there because, if I can use a sports metaphor, which may or may not be correct,

[00:43:19] Adam: This is totally, you're, it's definitely gonna land on me and our audience. Go

[00:43:23] Ben: So you're on the football field and they got those, those little down flags, right? You're, yeah. Yeah, yeah. And you're like moving the downs down the field. I feel like if I can talk to someone and then they gimme feedback, it's like that's what allows me to move

[00:43:40] Adam: The chains. Yeah.

[00:43:41] Ben: The line of scrimmage down the field.

[00:43:43] Ben: If I can't get it out of my head and I can't talk to someone, it's like I can't ever get past that first play. And I'm, I think this is on point because I think it's football season. I'm not entirely sure.

[00:43:56] Adam: Yes, it is football season.

[00:43:59] Ben: Go Eagles.

[00:44:00] Adam: That's right. Except that last game was kind of rough, but

[00:44:04] Ben: I don't know. I only know from Always Sunny.

[00:44:06] Adam: Yeah. Go Birds. Yeah. So do we have anything more to say on this?

[00:44:12] Ben: You know, the only suggestion that I have is obviously not gonna work for you, but it is in general, how can I find a little way to wet my beak along the way

[00:44:23] Adam: Yeah.

[00:44:24] Ben: So that I'm

[00:44:24] Adam: I'll definitely be on the lookout for stuff like that. And that's the thing for, you know, for me, what it ultimately comes down to is self-discipline and, you know, just, it doesn't have to be fun. They call it work for a reason, right? So,

[00:44:40] Ben: True.

[00:44:41] Adam: Okay.

[00:44:41] Patreon

[00:44:41] Adam: Well then this episode of Working Code was brought to you by Work, the thing you're supposed to be doing right now. And listeners like you. If you're enjoying the show and you wanna make sure that we can keep putting more of whatever this is out into the universe, then you should consider supporting us on Patreon.

[00:44:53] Adam: Our patrons cover our recording, editing and transcription costs, and we couldn't do this every week without them. Special thanks as always to our top patrons, Monte and Giancarlo. You guys rock.

[00:45:04] Thanks For Listening!

[00:45:04] Adam: We're gonna go record the aftershow. If Ben will stay awake long enough, it looks like on the docket for tonight's aftershow, we're gonna talk about, I have an update on my app Jump Run and some newer stuff that's been happening there. We're gonna talk about some book stuff. I have a book rec, and some other stuff. If you'd like to get access to the aftershow, get new episodes early before they're released to the public, and get the warm and fuzzies from supporting some of your favorite podcast people, you can do that.

[00:45:30] Adam: You can go to patreon.com/workingcodepod. We'd greatly appreciate your support. That's gonna do it for us this week. We'll catch you again next week and until then,

[00:45:49] Ben: Remember, it never feels like work for us to say that your heart matters.

prev episode: 232: Are we Idiots or Maniacs?