2025 06 22 recall session #3

A candid, first-person workflow session by Ben Fisher describing his end-to-end development process using AI and tooling. He walks through capturing a prior session transcript, using Descript and Studio Sound to clean audio, summarizing via a custom GPT (‘Benji’), and iterating on a software project (Addio), including debugging contact matching, deduplication, tests, and local SMS sync. The session emphasizes building reproducible workflows over chasing new tools and documents concrete engineering problems (exact phone-number matching, deduplication, test organization, logging) and procedural goals (auto-start background daemon, one-off imports, scripts to inspect local SMS DB).
Chapters
It's kind of funny how uncomfortable all this is for me. Not so much being on the mic, but just I think at some level acknowledging that certainly like when I build some of this stuff, it's like I'm not thinking so far in advance or even needing to stop and articulate what I'm thinking about and why there isn't always logic to it. And so it's a bit uncomfortable, especially in like the areas where I feel like, man, I should know how to do this better, like around test driven development and stuff like that, where I admittedly have very little experience and it's an area that I've like actually want more experience with. And so anyway, just being honest. And so as I said, like, part of what I want to share here is the entire workflow. And I think part of what's valuable about even watching someone else work is, you know, there's tons of tool suggestions, but I would say in isolation, none of these tools really matter. And ultimately what I want to understand and what I've tried to get out of from what people share is like a workflow, like an end to end workflow. Because to some extent it doesn't matter what tools you use. What matters more is, you know, under what circumstance and in what context do you, do you use the tools, how to use them to actually get more shit done? I mean, that's something I will, I will die on that hill. Which is why a lot of people say like, it doesn't, you don't need to use the, the newest tool or the coolest tool you could in fact use like Google Docs or you know, use a spreadsheet rather than a task manager, whether it's asana, Monday, workday, linear, whatever. It's like ultimately the, the tool itself doesn't generally matter. And I think the nuance there is really about how do you incorporate it into your to accomplish a workflow. So anyway, the point of this was I just took the transcript. I. I took the transcript from that initial session that I recorded yesterday and put it into Description, put into descript. Then I used studio sound. How did it apply that? Which pretty significantly improved, like removing the background music, background noise. Then I exported it and then what was cool? So then I took the transcript here, copied it, pasted it into a custom GPT I have that I call Benji and basically told it like, here's the first session, I'm building stuff with AI. Please summarize what I accomplished yesterday because one of the things that's on my mind is like I want a framework or structure template for these sessions where it's like, all right, just fill in the answer to this stuff rather than having to think through or reinvent it. I find that, like, exhausting. And it makes sense that, like, when you're building something, you know, basically what would be a structure and questions to answer that would be sufficient and useful. Because, I mean, part of the purpose I imagine here too is you'll want. Unless you're someone who's really familiar with my work, and even if you are, it's like from a time commitment perspective, it's like, all right, so what am I going to get out of watching this? And so this is what it had recommended, where it's like, sounds. Let's see here. So, yeah, it's essentially summarizing the big picture. And then what I've. What I built, the different tools and technologies that we're using say. So then I came up with, like, a suggestion around, like a structure, like hook and intro tools and tech. Because I asked it, like, what would you recommend to standardize this? And then I told it to apply that. Sit here. Yeah. So flexibility, Taskmaster AI tools. I mean, this is a bit basic, but I mean, again, the purpose here is not to. It's not even. I didn't even tell it to write it necessarily in my voice or make it particularly compelling. What I told it to do was come up with a structure that I can use and just apply that first transcript to it. Surprising lessons learned. That wasn't actually surprising. Hey, all right. But I will say one, I started mentioning some folks that I'm doing this and have already been pitched on an idea of creating a live streaming platform to. Specifically for Vibe coders and Vibe marketers, which is interesting. It's like, let me use the existing tools to see how they. To what extent they don't work, whether it's, you know, you're live streaming on Twitch or directly on YouTube or something. I. I haven't even launched a single video yet. I think my priority right now is just consistently producing this stuff and, yeah, being able to explore and build and solve other people's problems for a bit. Not that I wasn't before, but it's different if it's a startup versus just consulting part. So. So I took a moment to try to write down some of my goals for this session. I think, again, that the purpose here is not a production app. It's to build a version of this that works for me. And then as we're going, I think there's some areas I want to dig into. But ultimately, like again, like the, the part of my goal with this is to establish a workflow, like an end to end workflow. And I actually even started reading. I went on Twitter or X to see have people been writing about how they use a taskmaster in conjunction to build stuff? Because I'm looking for reference points around like, how are people using this? Am I using it the way other people do? Like, what are some helpful strategies around this in terms of my goals? I'm gonna spend probably the next hour doing some work before taking a break again. But. Cause I've already been at the office doing other stuff. Like I had designed a thing to. So I've been designing different logos, potential logos for skinny and bald. This guy's a bit way too serious. Just been exploring different concepts which, you know, can be a bit dangerous because I, I, I do enjoy to an extent doing this stuff. This is what I. And again, you can see all the different designs I had come up with. This is ultimately what I posted on Instagram as well as in my CEO group, Hampton, where I've been pretty involved and active, always in the AI channel, just trading tips and stuff like that. So I also just sort of randomly chose that, that version of that logo. Of all the logos I've been exploring and designing with that guy. I think there's something cool is that. I mean, obviously I don't know if I should make it. I started experimenting with making the beard gray. I definitely got the bald. So at any rate, yeah, my purpose of doing this is to show like the entire workflow and different tools I'm using and how I approach the work, not just, you know, teaching you how to code. I'm certainly not the best person to even do that or what I want to see it for him. Spit and resyncing my contacts because it seems like the connection between Clay and my local contacts through card dev isn't wasn't updating. So I. It's not resyncing. A couple things you might have missed were I. I am now basically I want. There's a few things I need to do. One of which is so this will be run as a background process like a, a demon on my computers. And so I want to make sure that it's the way it's running it. Auto starts when you turn on the computer and then if it is exited for some reason, it will auto redeploy or auto goes on reactivate. And so I created a task within Taskmaster to research that it actually already threw out some suggestions. The next thing is I wanted to do a wanted a command to do a one off import where I could specify like I want to import the last 90 days of text messages and phone calls to seed into Adio. I believe icloud actually has synced my entire history of text messaging for as long as I had the history being preserved. I think I have it like storing a year of text messages so I can in theory go back a year. I believe there's a limit for phone calls. I believe it'll go back like I actually have no idea. But I want to say like more than 90 days or maybe like a year, you know, like on the building process it's. But I want to make sure I want to have a version of this that just works and I can be using it within the next hour. I think what I'm a little nervous about is. And part of this is because I just have not built node before. It's just visibility into is it working and is anything going wrong. See here Sync fair. So let's. Let's get started. So first thing I said to it was what's left. I also used a cool tool called fabric that I use where you can actually just give it. It does a bunch of things, but it'll take text or even has a plugin to do this with a tool to do this with YouTube videos. But you can provide it either a blob of text or YouTube link and it'll generate a transcript of it and then run it through a bunch of different. Oh you can select which pattern or model you want to run through where model. But you can have it summarized. You can have extract wisdom where it'll process. In my case a YouTube video. I use this oftentimes to get like a summary of it to understand should I even watch it. Some of the summaries are useless. I tried run having it summarize a couple YouTube videos where they talk about how they leverage Taskmaster. It was pretty useless. But when it's more philosophical videos and like long interviews, it's a lot more useful and interesting. Okay so actually that's the thing. Test summary 1 process 5 updated 0. I think one person item was Chelsea check Jared. I mean we're gonna have an issue right into this dupes. Yeah. And like right now we have adding notes. It's funny, I didn't actually notice a text message for him. It's working, I guess. Interesting. It's actually funny to find out someone texted me. I try not to have Try not to check my phone very often. I I definitely don't check it during these when I when I focus I do 90 minute chunks generally and I think I mentioned this yet in the last episode or two episodes or sessions ago was try to not do anything even go to the bathroom. I'm super curious how adio defines connection spring strings can't do that Jared that one 2000 emails all right I don't know why why is descending 3 hours ago I guess descending in this case is by the date of the last interaction. Okay so because it's relative I was like 3 is smaller than 23. Right. Right. Well whatever this is part we're gonna figure 16 okay and I think if we run this again it should Skip them all 6 Artists 1 Process 5 Updated okay if we go to super confused around this is sink parent transform that is which message does it think is fun? I just found this I'm confused what message does it think is from Brad and is it a phone call or a text message? It's a 1-800 number I don't even see that though find the message sent from because I don't see it in my text messages but this when I just ran the command it says I got a text message from that number. My guess is could probably do a one off query of the database. That's cool it this is where I seen the logs it that's a short code. How can we ensure that 5th phone number searches that it's not a partial match. It has to be an exact match. Like this is a perfect example where this is a short code. It should not have matched a short a short code and it should have not matched a partial match in Adeo. So we need to fix this make a task and solve this right now as an edge case. Yeah that's a good it's funny and please add a test to verify actually add a test that should initially fail before we fixed it and then once we solve the problem the test should pass. I wonder if it set the right test for it to be in. Is that the right test for it to be in? We have four different test files. I guess in terms of a best practice it's not unique to Addio. We would want to make sure that this is what we do for any CRM that we integrate with but the multi source contact validation I guess what's. What's the domain that that test is focused on? Is that even the right way to name it Right. Like do these tests actually make domain sense? Okay. Current Test structure it I think that issue the test should be renamed a phone number or actually not even because we should have tests not just about phone numbers. It should be anything related to contact. So I think contact matching rules test makes more sense. We'll do it in that so rename it and put it in there. It actually I think some of these. Some of these just shouldn't. Should be in a separate test. The tests about being able to read the local database shouldn't. We should not have tests about being able to access a local database in the same test as ones that are testing contact information validation. Those should really be two separate domains and tasks. That's fun. So I just played with all of our jest or just played with all of my pat with my bash zish fun. It I do find a bit annoying when these LMS all they disagree with me split the current test into two separate files. Mean from a search perspective it should always just be a literal match. It should not be. It needs to be an equals. Not like it's in addio. We can search by equals. Are we currently using a contains or something as an operator? Because I'm surprised that adio even returned that or no, actually it was our search. Was it our search in our local database? Oh. Because we got the person's contact card when we searched our database. So it didn't. We didn't. It didn't return Brad when we were searching Adeo because we were going off the phone number. That phone number didn't exist in Adeo. Right. And so then you checked the database to see the contact card or maybe first check the contact card to see who matches that phone number. So what we need to update, we need to do exact matches both on Adeo but also when we're searching our contacts app. That was a lot of words. It okay, so if we run the current test, will it fail with using Brad's shortcut, using that short code, will it currently return BRAD as opposed to not finding a local match? Well, the idea was originally to not fix it and to build a test that fails, verify through the test that it's failing and then fix it and verify and then that would verify that our. Our. The fact that our test starts working would indicate that we're testing it correctly. So I told you to do buddy. Why did you just create a new test file you should be doing within the contact matching rules? Stuff like this drives me crazy. This is so annoying. Also I want to run the test myself. Give me the command to run the test and See it fail. Jesus Christ. Really annoying. There has to be a better way to do this. Nude Ridiculous. What are you talking about? I should just be able to run a node thing that's like node tests or node run tests. Don't give me this exact code. I should be running the test and it should fail. Gosh, it's stuff like this. It just makes you like want to lose your mind. Jesus. It's ridiculous. I guess if it had done. What's the simplest way to install jest? And should I install it at the global level rather than at the project level? All right, so that's what we. If it's in the package, why was it already not installed? Is it because I didn't run NPM install on my machine? That's actually okay. It where's the validator? IT yes. All right. Now fix it. Okay, now implement the test or the fix and don't add comments like fixed now requires exact match. That is not a meaningful comment and you would never have that for a test. In terms of commentary, Jeremy Crazy. Look for any other comments left like that. And please update our laud markdown file to specifically do best practices around comments. Best practices around software development around comments IT so it should have five matches this time, not six. IT why did it just forward all those emails again when we had already sent that email? Our deduplication should be resending to Adio for text messages we've already sent it. Okay, several issues. It just match on Brad for elevar again. Was that due to a partial match? Our test Our fix should have solved that. Why did it just happen again? The deduplication doesn't seem to be working correctly because it just resent through the email about text messages that we had already synced to the respective users in Adeo. So it now has duplicate messages sent to the user in Adeo. Why did that happen? Why? How did we not catch that? IT just resent emails for it I just ran the script it let me try again. I just ran it again and I don't even see anything in our logs. Zoom in line IT check our logs. We've already sent a message to several of these people many times, including Jared. Why is this not being like what's going on? Why is this great? I see the problem. Deduplication is completely broken. Wow, that's great. Cool. Where's it? Actually, we're not doing notes. Also, we've gone from using notes even though we are technically still sending notes right now. We changed our strategy to having it even email that's attributed to him. So instead we should be looking at emails from him during that time range and maybe give it like a 5 minute to 10 minute window of that. So that. Because it might not be the exact time. So let's go five to 10 minutes. And again, the exact time doesn't actually matter. Like even if we look did we already track a message from him within like an hour. But I think let's start with five minutes. This is how we're currently looking for duplicates. Doesn't exist. Jeez, that's ridiculous. I don't think this will work. All right, this is not working correctly. Create a one off script for us to verify how to do an API call to find and compare if messages to Jared for it will get it through the API. Isn't that right? That is insane. It's just now completely commenting out the work and saying, oh, let's just not do it. Why would how see the system works without broken identification. That's insane. What are you doing? If you remove the deduplication logic, it's just going to recreate duplicates. Of course it's not going to throw an error. This is not how you approach programming. This is insane. What we need to do is create a standalone function within the interaction. Or actually what we wanted to create is a standalone test that legitimately tests it. And we'll test it for like Jared, where we're tweeting, modifying the interaction exists to make sure that we can get back and find the emails that we know should exist. That's how we should approach solving this. This is insane. It's moments like this where I just want to stop. Like in no world, like this is even. This is below a stupid intern. This is insane. It. No, it's unflinching. I don't even know why I still can't do. Yeah, but we're going to get rid of the notes. We're doing it for now. But like that's not the method to verify that we sent him, that we communicate with him. We should be using the emails where they're marked as email communications. We're not using the notes. This is insane. This is so annoying. Please update the PRD as well as anywhere else where we have this logic or on how we're approaching deduplication. We are not using notes for deduplication. You don't even need to say that. We are looking at email interactions to determine if a text message or phone call has already been recorded because we've accomplished this through forwarding emails to addio with the timestamp of when the message was received or the phone call happened. This is crazy. That's absolutely not true. I can see. I don't think that's right. I. I see them showing up within ADIO for Jared check Investigate the API docs for adio. Are there any endpoints around interactions? Getting a list of recent interactions and if so, what is it saying? I guess we could do snacks still, but seems a bit. Okay, use the last email interaction attribute and get it for Jared and show us what it says. Interactions. Are we able to filter by like a timestamp on those interactions? Like when we're searching can we query by any properties on the interaction? You should be able to do. You should be filtering on the interaction interacted type or the interacted at value do a 10 minute threshold from when the event happened. It you shouldn't just be searching for the last email interaction, you should be using the email interaction with the timestamp window of. There has to be a better way to do this. Like these. These kinds of problems are. This is just insane. And then the question I have is like, all right, so you know, I'm encountering this sort of circular issue now. What like how do I improve it so this doesn't keep happening? Not just for this, for this project, sure. But then also future projects and is this something that can be solved at the CLAUDE markdown level? I mean presumably because this is a CLAUDE issue it. Okay, fine. Stick with the note strategy where we're. We'll assume that we'll continue to add notes of the timestamp if we can filter by note the notes API endpoint. This is not worth. So to be clear, what you should be looking for is a note that matches the timestamp of the phone call or the text message to see if it exists. All right, never mind. I guess that works. Interesting. I don't think so. But why does the log say only one skip but when you look at all of the actual messages, the message is that they're already. They're all. They all are skipped it so the messaging needs to be improved a bit where at this the summary should be how many messages, how many contacts were found and then how many interactions were synced first skipped to see if it exists. All right, never mind. I guess that works. Interesting. I don't think so, but it. Hey, why does the log say only one skip but when you look at all of the actual messages, the messages that they're already. They're all. They all were skipped. So the Messaging needs to be improved a bit where at this the summary should be how many messages how many contacts were found and then how many interactions were synced ver skipped Cheers how do I access the local SMS messages database on my computer using table plus let's try again True it okay commit our changes incrementally in groups that make sense 10 why don't I see any messages? One of the most recent show me the five most recent text messages that I received and have it as a separate script that I can run and it creates a table showing who the message is from and what the message contents was in provide Enable me to provide x number of hours ago within the last like five hours so I can x being and by default it does less 5 hours provide instructions of how to run this in the to read me read me all right didn't get nearly as much as I wanted on but I'm gonna continue working from the apart but I'm gonna have it summarized what did we accomplish today Commit the changes it virtual API I was thinking Susan might max summarize what we accomplished today with today's commits question I have now is so it should be using all right. Implement service ID duplication redesign stat. I mean that's a bit of a exaggeration. Okay, can you tell me am I currently signed into cloud code through my max account or using an API key? What are you currently using? Flask another 40 charge and that seems crazy. I mean that's unhelpful. I'm being charged a bunch. I'm trying to figure out if it's using an API key or if it's using the web authentication 99 sure. I authenticated it's annoying. Okay. Yeah, so that's cool. Interesting. Interesting. I guess I could have done that before. Well, damn it. All right. To be continued from home I need to get some lunch. It's already 5pm It.






