Not Vibe Coding - THIS Is How I Use ChatGPT and Copilot

Not Vibe Coding - THIS Is How I Use ChatGPT and Copilot

• 906 views
vlogvloggervloggingmercedesmercedes AMGMercedes AMG GTAMG GTbig techsoftware engineeringsoftware engineercar vlogvlogssoftware developmentsoftware engineersmicrosoftprogrammingtips for developerscareer in techfaangwork vlogdevleaderdev leadernick cosentinoengineering managerleadershipmsftsoftware developercode commutecodecommutecommutevibe codingwhat is vibe codingcursor ailovable aiai newsai agentchatgptcopilot

I was told that it's not Vibe Coding if I'm actually having an intelligent conversation back and forth with the LLM instead of copying and pasting code directly.

So... I guess I'm not a Vibe Coder.

But here's how I'm using these tools to help me with my software engineering for BrandGhost!

📄 Auto-Generated Transcript

Transcript is auto-generated and may contain errors.

Hey folks, I'm just headed to CrossFit. Should probably get my GPS set up here before I start driving. Um, I figured I was going to do a little bit of a chat about uh AI just because it's a short drive and I had a I don't know interesting experience yesterday which kind of started talking about before. Um, not quite vibe coding I guess but you know pair hair designing on a notification system. So, I was going to talk a little bit about that, how that went, and then uh a little I don't know, maybe another smaller use case for me that I should lean into a little bit more. Um, and actually, it's funny because the that smaller use case is probably going to be something that will help uh with the original scenario I'm about to walk through. So, I've been using uh chat GBT to to help design the notification system that I have in uh Brand Ghost.

And for those of you you're new here, uh one of the things that I'm building on the side is a social media like scheduling content creation platform because I am a content creator and I post to all sorts of different social media platforms. And I need to build a notification system because the reality is when you have uh content that is going out to many different platforms, there's all sorts of things that can go wrong that are like either outside of our control, it could be the platform uh like the social media platform, it could be the user, could be anything. and like losing authentication or something because the user changed their password like that kind of stuff. So, you know, tokens become invalidated. So, we want to make sure that we can like tell users so that things just aren't failing silently and because that would be kind of crappy.

You go post to, you know, 15 different social media platforms with one post and then you're like, well, wait, why isn't why aren't my posts showing up to Facebook? I had it configured to go to Facebook. So, we want notifications and um so I was using chat GBT to help design this and just to to kind of walk you through why this is a little bit more of a complicated thing to build than just go find an email library is that I didn't just want notifications to be uh something that as soon as the server runs into an issue that it goes no problem let me just go you know send this off to our Azure email service. Um, that's what I started with originally and as we actually like what it was just mostly me as a user and then once we started having paying users and like these notifications suck, I'm going to turn them off.

Um, and the reason for that is like I'm I'm definitely a power user on the platform and the way the notifications would work is like I would lose my mind if they were constantly coming into me. I had notifications for successes uh because I manage like two personal brands for me. I have one for dev leader. I have a separate one for code commute which is what you're watching right now. And then brand ghost itself because it's a business. The three brands that get managed it's like you know 20 plus social media accounts. It makes probably I don't know like 20 plus posts across um across those you know times x number of social media platforms and if it were to give me successes and failures like every day like it would just be so noisy. So anyway, it's turned off, but I said if I want to go build this because users need it, like I need to do some type of intelligent batching.

And if we're going to do batching, I want to make it configurable because I want to make sure that users have like if they have different use cases for our platform that they're be able to like kind of navigate that properly. We can have defaults and stuff, but um like for me, I would never want to get a success email personally, but some people may want to have a success email because they want to make sure that what they're sending is going out as expected. And if they don't see that success email, it's an issue. So the the notification system, the way that we I say we as in good old chat GPT and me the way that we were building this was I said look I need to make sure that instead of just server encounters something that's notification worthy go blast to the

email service I said I need to start by um recording it when I say recording it I need to persist existed somehow because if I need to support batching that has to happen over a period of time. I'm not just going to like keep a notification in memory until some arbitrary period of time when it maybe needs to be batched with something that we haven't encountered yet. and by the time it's ready to be batched up uh that like I have all these notifications sitting in memory not going to be a good pattern especially because if we redeploy the server and we lose all the notifications that are pending that would be a big problem. So notifications instead of going out to email right away, notifications get written to the database. At that point, the notification sort of like chain of work is done, right? Notifications written to the database.

That code path stops executing. What I do from there is I have a separate uh job that runs and this runs on its own interval and it will actually just be responsible for batching up notifications. Originally my thought was that I will just have this second job not just be the batcher but just the delivery mechanism. Um the challenge is that from a scalability perspective again do I need to be thinking about scale and stuff like right now like no. Uh but I already had a notification system. So this is me just going I want to build the next thing that I feel better about. So from a scalability perspective, if we have a bunch of users, I want to make sure that um this part that's doing the batching isn't sitting there like trying to query and then also has the responsibility of sending things out.

Um because if we want to manage retries and stuff like that, like to me it felt like it was doing too much work after I started to see it come together. So I said this thing's job is just to batch notifications. It will on a regular interval query to see what's not batched and if it needs to be and then add it into a batch. That way there's this second job that runs and when that runs it looks for unscent batches that are ready to go and then it's pure responsibility is just to be able to uh like actually transmit the notification. Now I also wanted to design this system with chat GBT such that right now we have email notifications. Actually to start we have Slack and email notifications but the Slack notifications are for us as a development team to debug. That way I can actually have visibility into like what are we going to be blasting out to users and then as we're more comfortable I can turn off the Slack debugging.

But um we also probably want to consider push notifications to the website because probably some people will have that expectation or that ask. So I want to make sure that I don't go design this system and just like paint myself into a corner where there's no flexibility. So I've not built the push notifications, but the way that it works is when it goes to publish, it can fan out to different uh sort of end points. So this is a really good experience for me to go like build this with Chad GBT. Um when I have talked to other people about you know vibe coding their feedback to me has been it's not actually vibe coding if you're like trying to ask questions back to the AI challenge it ask it to make changes like basically giving it feedback. People were telling me vibe coding is just like take what it does and just keep asking for more uh without changing it.

So I guess you know by their definition I've not been you know vibe coding uh or even vibe designing. I don't know I don't know at what part the vibe word gets taken out but uh I've been basically pairing up with it and uh describing my requirements and then when it gives me you know some of the code back or some of the design uh I'm sitting there kind of going through it and questioning if it's going to match up with my my thoughts. So, I talked about this briefly before, but in some cases for the data schema, it was adding in extra columns. Uh, and there was one case where it actually explained to me why it wanted some extra column and how that was going to help for like basically a distributed system requirement that I hadn't thought of. But other times, it's like it's splitting up some metadata that I don't I don't want, you know, I don't need the the data pulled out separately.

it's actually just more noise or the data types were not what I wanted, right? Like a lot of my identifiers are a certain type and it was either mixing strings or integers in in spots I didn't want. So, I'm giving it the feedback to go change. Um, another case where I had to go correct it, and I talked about this in a previous video, was like a triple nested loop for a query. I said, let's flatten that. But overall, it's been really good. like the the direction that I was able to navigate in with it was very positive. I don't think that I would have I don't know like had the momentum cuz it's not like an exciting system for me to build. I don't know if I would have had the momentum for it. I don't know if I would have had like the the interest.

But um at least for me personally, there was enough parts to it that I had an opinion about that I wanted to make sure we didn't screw up. So, uh, overall pretty good. Um, and then it was nice because that bit of code was lingering for a little bit longer than I wanted. And the final part to that was just that I was doing some uh some of the templating for the actual notification. Cuz now that I had the system all working, I was like, man, like I need to make the text not like robotic, right? It's not like here's an exception message for the user. like what the hell are they going to do with that? So, uh had to go look into some text templating and that kind of thing and then uh finally got it pushed up. So, just to to switch gears a little bit, I got that pushed up and then I started looking at some other things we're going to be building.

Um we have an aggregated social media feed. So the purpose of what we built the first time here is that if you have people engaging with your content, you can see all the comments coming in in one spot and that way you can respond to the engagement on your content. So for example, when you guys leave comments on YouTube, I can actually see them in Brand Ghost directly and comment from Brand Ghost. That way I don't have to go into the YouTube app, switch between Brand Ghost, switch between Brand Ghost and Dev Leader, switch from um YouTube over to Twitter where I have multiple accounts to LinkedIn where I have multiple business pages and personal uh Instagram. Like I think you get the idea. It's all one spot, very convenient. But what we want to build next is that what I just described is engagement with your own content.

But what about the people like the other content creators that are in your like call it like your inner circle? There's probably close. I don't know depending if you're a content creator, you might not have this opinion, but I find like there's content creators I'm often like either collaborating with, engaging with, like I'm looking for their content. I want to support them. But going again, going crossplatform trying to do this uh across different apps, it's a pain in the ass. So, we want to build like an aggregate feed again for the people that you engage with frequently. Um, that way, you know, one of your creator friends makes a post and you can say, "Okay, cool. I don't have to go look for their stuff. I just go into brand ghost in one spot and like sort of my inner circle of creator friends is here that I can go, you know, support them." So, that's what I'm building next.

But the nice thing is a lot of that logic is based on what's already there. Twitter was this thing that for since the beginning of building this I had this call it like a bug or a limitation in the Twitter stuff that I could not determine if you responded on the Twitter app. I couldn't determine if uh if you had replied. So, if he replied through Brand Ghost, I knew, but if he replied on the Twitter app itself, I couldn't figure it out. And this is as the the content creator. And so, it's been a while since I've had to look at this code specifically. And because I have to go touch it for this other feature that we're building, I said, "Wait a second." Like, why don't I literally just copied and pasted it was probably, you know, like 300 lines of code. and I gave it to ChatGpt and I said, "Hey, look.

This is what this code is supposed to do. It's supposed to go look for your posts. Then what it's supposed to do is look for all of the comments on your posts that you have not replied to." It's like it's a pretty straightforward requirement, but I said what's happening is that if the user responds, sorry, if a user replies to a comment on the native Twitter platform, we're unable to see that. Okay? So, if the user responds on the native Twitter platform, we're unable to see it. If they reply through Brando, we're able to track it. So, I just said, can you help identify what the problem is in this logic? and it did it like right away and it was like uh like almost like one keyword. So when I was uh querying the Twitter API in my head I was trying to say don't get the my like my comments.

Don't get my comments because I don't want to reply to my own comments. I think I think like in my head it made sense, but it you know very accurately called out if I don't get your comments I can't see if you replied to stuff or not. I was like oh like duh. Yeah. So like I have to do that checking in memory. Um so anyway it spat me out. Like I looked at the git diff and it was like one keyword. It reformatted a couple things like it stayed the same. Uh, and then it had to go do the in-memory check. So, like one more if statement somewhere to say, did I write this or not? Very easy fix. So, in my head, the thing that I was hinting at at the beginning of this video is there's probably a bunch of to-dos or fix me that I have in the code that I'm like, I'm never going to go touch this, but like would be good if I did it.

I'm wondering if as I'm going through my codebase when I come across those if I should just like spend you know a couple minutes copy paste the code out give it to chat GPT and say what do you think cuz I had really good success in this case if the to-do or the fix me is like bite-size it might be really helpful and um I haven't yet had any success with uh agents kind of wrote this I wrote about this on LinkedIn And a lot of people were saying, "Oh, it's how you're prompting it." Everyone's like, "Oh, use this tool." But no reason. They're like, "Oh, you're using, you know, uh, VS Code and C-Pilot. Well, don't like use this." And I'm like, "Well, or you use this different model." I'm like, "The model worked perfectly in chat GPT. It's the same model." So, like, I don't understand.

Like, I asked it the same things. So, I don't know if it's how I'm using the tools, how I'm prompting the model. Um, so I have more digging to do there because I would like to be able to effectively use agents. And if they're not working right now, I want to assume that's a me problem. That's Nick doing something wrong. Happy to be, you know, uh, incorrect here and not not be like, oh, it's just because AI is the worst and it's terrible. like it's no it's if people are having success with it, it's probably me in this case. That's fine. Um but if I'm able to get agents successfully working, maybe I could have like a fix me agent that goes through my codebase and tries to go check out the fix me. Maybe it has to come back. Maybe it goes looking for them and then it prompts me back and it says like, "Hey, I found this fix me.

Can you give me more context?" and then goes and tries to address the fix me or something. I don't know. It could be cool. Um the to bring it full circle with the notification stuff. Um now that the emails today was like the first morning where I had a properly templated email. Great stuff. Um and it batched it which is great. But I looked and it's it kind of looks like it batched the same notification three times. Not a double but three times. the exact same thing. So, it said, "Hey, you had this post that's about a podcast and it failed." And then it said it three times. And I'm like, "Uh, I don't think that's right." Um, so I have to go debug this. And I bet you uh if there's a spot where I am kind of thinking it's going to be uh where the bug is like that it's duplicating things.

I'm going to do what I did with uh the Twitter part and just give it copy paste it to chat GPT and say hey this part is uh tripling up or um you know doing writing multiple database records. That's what I'm going to go check first. Is it actually in the database multiple times? Why is this happening? Why aren't we dduplicating it? Why is the calling part even doing it multiple times? And I'll see if they can answer pretty quick for me. Um, but yeah, just uh wanted to kind of walk you through some AI stuff in terms of tooling that I'm trying out. It's going pretty well. Uh, not disappointed, but I'm not taking stuff blindly. So, that's the video. I'm at CrossFit. I'll see you later. Take care.

Frequently Asked Questions

These Q&A summaries are AI-generated from the video transcript and may not reflect my exact wording. Watch the video for the full context.

How do you use ChatGPT to design the notification system for Brand Ghost?
I use ChatGPT to help design the notification system by describing my requirements and then reviewing the code and design it suggests. I give feedback to adjust data schemas, fix inefficient queries, and ensure the system supports batching and configurability for different user preferences. This pairing helps me build a more scalable and flexible notification system that can handle various notification types like email and Slack.
Why did you decide to persist notifications to a database instead of sending emails immediately?
I decided to persist notifications to a database first because I want to support intelligent batching over time rather than sending an email immediately when an issue occurs. This approach prevents losing notifications if the server redeploys and allows a separate job to batch and send notifications on a schedule. It also helps avoid overwhelming users with too many notifications, letting them configure what types they want to receive.
How did ChatGPT help you fix the issue with tracking Twitter replies in Brand Ghost?
I gave ChatGPT the existing Twitter code and explained the problem that replies made on the native Twitter app weren't detected. ChatGPT quickly identified that excluding my own comments from the query caused this issue. It suggested including all comments and then filtering in memory to check if I had replied, which was a simple but effective fix. This saved me time and helped me understand the problem more clearly.