00:00.76 James Welcome back everyone to Merge Conflict, your weekly developer podcast talking all things in the wide, wide world of software engineering. I am one of your hosts, James Watson-Magno, and with oh me always and forever in my heart, the one, the only, the ultimate tour guide of Seattle, Washington, Mr. Frank Kruger. How's it going, buddy? 00:17.59 Frank Very good, but I think I'm more of of a two nines kind of, I'm with you. i think sometimes you've gone off on your own. So I appreciate the enthusiasm, but I only do two or three nines of uptime on this podcast. 00:31.93 James We're trying to get it back to to five, trying to get it back to five nines. 00:32.39 Frank Everything's going great. I'm trying to get, someday we'll be five nines. 00:38.65 James I do think that there's maybe, there's ah I think there was a, I did one podcast with Maddie once and ah ah maybe it did, a maybe one with Sean and maybe one with Heather, I think one time too. 00:43.35 Frank I think there's two or three. 00:51.06 James If I, if I am 525. 00:51.54 Frank Three out 500, not too bad. well yeah so Do you count the first two nines? 00:55.51 James five hundred and i 00:56.68 Frank like If you're 99.9, is that three nines or one nine? 01:00.79 James I believe that it is the the dot after the dot is how many nines it would be two nines. 01:05.53 Frank The dot, yeah. 01:07.01 James Yeah. 01:07.93 Frank Yeah, buddy, i'm ah I'm a one niner. Well, it's wonderful to be here on my one nine. 01:12.44 James It's pretty good ratio. 01:15.45 James Uh-huh. Well, it's it's good to have you. And we are recording on a beautiful Saturday night, which kind of good because there's some news this week. have some family in town, you have to show them all around. I was actually in Redmond for VS Live, which is pretty good. 01:25.05 Frank Mm-hmm. ah 01:28.02 James I did a few sessions. And yeah, there was some pretty big announcements on the internet around GitHub, our favorite platform for doing get things and storing our source code. 01:42.10 James and put it somewhere, but put it up there or um or on Dropbox. 01:43.93 Frank Mostly. just Just assuming that my hard drive is going to fail. it's It's my number one place of paranoia that my if my hard drive fails, I'm not out of business. 01:53.43 James Exactly. It's okay. You got to put my code somewhere. ah Yeah. So I don't know if you woke up on, on Thursday, And you went to GitHub.com and the hamburger button was replaced by a pancake. I don't know if you noticed this or got saw anything on social media about it. 02:12.79 Frank James, can I be thoroughly honest with you? As as the premier tour guide of Seattle, I have done zero software development in the last week. So I am so behind. Do you don't know how many AI years I've missed in the last one week of not doing development? 02:27.51 Frank Let alone GitHub. I don i don't know. i'm I may be just a few months behind on GitHub, missing one week. But no, I missed it. I missed it. Tell me tell me the joys of pancakes, please. 02:38.81 James Well, let's just say for the last week or more, um let's just say the marketing team and the developer relations team, including the one that I am on, have been dreaming up a few ideas around one of the biggest releases that GitHub has had for the core product in a long time is stacked PRs, now which we're going to talk about today. 02:47.80 Frank hey 02:57.58 Frank Oh. 02:58.30 James ah And because they're stacked PRs, what else do you stack? You stack pancakes and or waffles and or waffles. 03:02.74 Frank ah I see what you did there. You snack your waffles. You... You... 03:08.54 James Wow. 03:09.30 Frank but I... 03:09.69 James I like a lot of waffles. If I'm going to be eating waffles, I might as well stack them high. Well, normally, okay, so if I'm making waffles, okay, let's roll this back. Pancakes in here and inherently... 03:18.00 Frank Let's break this. This is important talk here. Yeah. Break this down. 03:20.90 James Inherently... You are stack, if you go to my Twitter account right now, there's it's me surrounded pancakes. um Inherently, you stack pancakes and they're served to you on a plate unless you're just getting a solo pancake, which sometimes I do. 03:33.51 James and then it's just like a solo one. It's like a side of pancake. Because I'm at a breakfast place, like Elmer's or something. I'm like, let me get a side of pancake. 03:39.40 Frank Yeah. 03:40.88 James Uh, normally when people do get waffles, normally, like I would say pancakes are normally stacked. 03:40.90 Frank Yeah. 03:44.80 Frank Mm-hmm. 03:46.73 James Waffles are normally solo. However, when we make pink or when we make waffles at home, how I like to make waffles is I put them, we have like a double waffle ah maker so you can flip them. 03:51.90 Frank oo 03:57.53 Frank Oh, okay, yeah. 03:57.77 James So I usually do, I'm usually going and making a bunch of them and then I stack them up. It's like I stack them. So I make them all ahead of time, like before we eat. And then when Heather and I sit down if we have friends over, 04:10.55 James I then put those waffles back in the waffle machine, reheat them up, and then serve them hot and fresh, right? 04:15.46 Frank Oh. 04:17.01 James Because if you're making a bunch of waffles, I only got like one waffle machine. I want to eat many waffles. So you got to like reheat them up. 04:23.64 Frank Yeah, fascinating. 04:24.57 James So, yeah. 04:25.18 Frank So you're saying you have a stack of waffles and a queue, some kind of like eating queue for these kinds of waffles. That seems like a critical part of stacks and queues merging together here. 04:31.83 James We do. It's an eating cue. 04:37.14 Frank um Anecdotally, I'm... I got to tell you, in Stanwood, Washington, as the premier tour guide of Washington State, I have to tell you, their pancakes are plate-sized. And you might think with a plate-sized pancake, you don't need a stack. But guess what? They're still stacked. You are getting so much pancake. So I'm excited to learn what you would do with your stacks of pancakes. Is this even software? Are we even software engineers anymore? I am so lost in our metaphor. 05:05.37 James Yeah, we absolutely. 05:05.82 Frank Yeah, totally. 05:06.32 James Yeah, yeah, totally. 05:07.03 Frank Making software here. 05:07.16 James Yeah. ah 05:08.86 Frank And delicious breakfast, if you're not hungry yet. 05:09.18 James Making software. Yeah. um Well, the stacked PRs came out. So a few things happened on that day. There's tons of pancake memes because we stacked the pancakes and the hamburger button turned into a pancake. 05:22.59 Frank Okay. Cute. 05:23.87 James Additionally, i did have the ability. I'm pretty sure it's in the product, at least for the next week it will be. In the GitHub Copilot app, there is a little Mona minigame where you collect commits, but I changed it to commit ah to collect PRs. 05:36.84 James And then once you get so many PRs, they turn into pancakes and then they go from there. 05:40.60 Frank Oh my god. 05:40.72 James So I did. Yeah, they let me merge that in, which is which was hilarious. 05:43.74 Frank this is This is why they never should have given you commit privileges. 05:44.66 James That went into the merge queue. 05:47.63 Frank I knew this was going to end poorly. 05:50.49 James I mean, anyone can commit. However, it doesn't mean you're going to your PR is going to get accepted. So because it's going to go into some review queue. 05:56.11 Frank Right. 05:57.57 James And then if it does get accepted, it's going to go into a merge queue, which we're going to talk about. 06:00.54 Frank What? 06:00.57 James ok 06:01.43 Frank Never heard of that. 06:01.67 James Okay. Okay. So this is interesting. So let's first break down stack PRs. Let's talk about a pull request. What's a pull request, Frank? 06:10.27 Frank A pull request is a bunch of commits that I group together. let's Let's not call it a stack of commits because that would be confusing to our thing. But I've got a bunch of changes i want to make. Or it could just be one. you know One is a special case of many. 06:24.09 Frank And a pull request is I want someone to check out my code. I want someone to review it and take a look-see at it. Oftentimes it's myself. ah Mostly because I'm in like a fugue state when I'm programming or vibing. And I need a later Frank, a more responsible Frank later to go review that code and make sure it's actually worthy of being um ah merged into the master branch. It's also a good time to run some scripts, run your CI, see if everything's building. Did you break the test? Should you add some tests? It's just your kind of... um 06:59.99 Frank Yeah, it's your moment to relax and reflect upon all the code that you maybe hastily wrote and should check out before actually merging into the product. 07:10.64 Frank That's what a PR is. How close am I? 07:13.27 James yeah that's perfect. And normally if you're living on main, you'll create a branch off of main and then you'll make those changes, those commits, you'll collect those commits and then you will put them in, often squash them down, flatten it down and then boom, one thing in. 07:26.30 Frank oh yeah. 07:28.10 James Very, very nice. That's why I do almost 100% of my work is in branches because I try not to ever really commit directly to main. Because normally we have some gates, like you said, CI, CD, just making sure like I didn't break the bill that want me to always be shipping. 07:41.75 James So we have these little branches and those are nice too, because then multiple people can be doing pull requests into an area and then you can review them and then you can like kind of pull things back. 07:53.66 James You don't have worry about merge conflicts as much. And there are, then you can resolve them. 07:56.01 Frank Oh, 07:57.18 James X, Y, Z into them. So let me ask you a question then, Frank, let's say you have a, um, a pull request, uh, there are a feature that you're working on and it gets like unruly, like unruly large. 08:01.31 Frank yeah. 08:09.17 James like what What happens when that PR becomes tens of thousands of, of, of code change. 08:09.35 Frank Oh. yeah 08:14.64 James And, and and what if, for example, you have not only started to make changes to like the front end, but you change the backend and then the database, but because you're like, well, I got to finish all of it. 08:24.93 James I got to finish all of it in this one PR. Do you go down that route or do you do the thing where you are like, okay, what I'll do is I will like make multiple PRs against main Or do you do the thing where you're like, okay, I'm going to make a branch off the branch, off of a branch, and then then I'll have three or four PRs, and then I'll figure out the order, although I forgot, so I hope I don't merge things in the wrong order. 08:40.92 Frank Wow. 08:48.23 James like how how what What's the process? Or do you just like YOLO it into one ginormous merge PR because you don't care? 08:54.55 Frank wow 08:55.33 James Yeah, 08:56.25 Frank I just realized I do all the above to be thoroughly honest. 08:59.61 James me too, me too. 08:59.65 Frank As a get anarchist, I do love my branch of a branch of a commit to a branch of a branch of a branch. I do enjoy that um because when you finally do get it up to main, it's kind of very satisfying when you're like merging along the way without merge conflicts, obviously. 09:16.25 Frank um But I have to admit, ah the best way to squash something is to have a lot of somethings to squash. So when I see like 50 commits on a PR, I am just itching to hit that merge squash button because it's going to feel so good. 09:23.32 James Yeah. 09:30.21 Frank When you see 10,000 files changed, 100,000 lines of code added, 200,000 deleted. But it's also incredibly scary because I do, i know where where you're getting at here. 09:42.16 Frank though Those big commits are scary. and i've certainly had projects that are long running, kind of living in their own branch. And we're committing against that branch. 09:52.28 Frank But you're like, we really got to get this puppy in Maine. But everyone on the team is a little bit afraid of it. And by team, I mean like two, three people. But you know that's the world I live in. 10:00.08 James Yeah. I don't know. 10:01.72 Frank But even with two, three people, it's amazing how like you can create that branch that is Give it time. It's diverging from main more and more and you're getting more and more nervous about bringing it it into main. And then you're like, we we just got to merge to main. Like, I don't care the state of this anymore. I applaud your main should always be shipping. 10:20.50 Frank I'm not there. Sadly, I tend to abuse main as a dev branch. And I use branches and tags as my shipping things. So if I if i create, ah let's say, a 1.16 release, i' I'd have a 1.16 branch or tag that, most likely a branch, that I can um do small changes to if I'm like trying to do bug fixes and such. 10:43.99 Frank Sadly, and this is everyone's probably rolling their eyes and yelling at me, please write to James. um I tend to use main as the dev branch. But yeah, i big commits, or big PRs, tricky, but it's so satisfying to squash them. 10:56.84 James Yep. 10:59.54 James It totally is. Yeah, I agree. I'll say I also do all the above. i have recently got into your workflow on some of my apps, which is the tags as release versions. 11:10.25 James In fact, I've made entire GitHub Copilot app, like canvases for release management tools that help me like make the change log, tag the releases, and then go into different flows, kick off different actions um ah to to actually make these things happen. 11:16.60 Frank Okay. 11:24.27 James So normally what I do is I have main and it's always just like, Is it clean? Can I at any time peel peel off a release if I wanted to from it? 11:31.80 Frank Right. Yeah. 11:32.63 James And then what I do is I will tag a ah tag a release. 11:32.86 Frank Yeah. 11:38.56 James And then when I tag it, that will kick off an automation that then like ships a build basically. Because some people are like, hey, whenever I commit to main, then do a release. 11:43.62 Frank Yep. 11:47.48 James And I was like, well, that seems like too many bills or you're wasting too many actions. 11:49.32 Frank Yeah. 11:51.76 James So I like to be intentional, which is like, okay, when I do a PR or I commit to Maine, even if I do commit mainly like do the CI stuff, but do a sweep, right? 11:52.73 Frank Yeah. 12:00.21 James That's that's doing gates. And then when I tag it, do the full release build, which goes through the entire shenanigans. 12:05.98 Frank o 12:06.50 James And that's what I've been using because those builds usually take longer and you're shipping and you're doing, you're signing, you know, if you need to sign a build with apple, why do you do it on every commit to Maine? 12:06.82 Frank Yep. 12:13.18 Frank Yeah. 12:16.10 James For example. 12:17.91 Frank If you're like me because you're a sadist, um you just like this have built all your builds fail January 15th or whatever. 12:26.17 James be sure like, oh, it's that time of the year, you know? 12:28.25 Frank Everything goes down. You're like, oh, my apps are all garbage now. 12:29.98 James Yeah. 12:32.63 James Oh, no, I'm not looking forward to that because it's definitely to happen to me at some point here in the future. And I'm like, oh, no. um Well, I think 12:39.61 Frank like... 12:40.98 James I think the other thing I do, Frank, is like, I'll start working on a branch and then I'll start working on a feature. And I was like well what if this feature like also did this and then also did this? And like, sometimes they're related and then sometimes they're not. 12:51.03 Frank Yeah. 12:51.83 James So like either if they're not related, then they would need to be like maybe broken up. 12:52.13 Frank Yeah. 12:55.73 James But sometimes they are like, okay, well, like I did this, but like now I can do this other thing. But like inherently it's like, um I'm doing a bunch of things on top of each other. 13:01.44 Frank Well, there's a tricky... Yeah, there's tricky parts to branches, especially if you're just adding in a branch. Life is good. life Everything's easy. You can have multiple parallel branches. No one's interfering with each other. 13:15.99 Frank But the moment you do a refactoring or change like a data path or a control path in your app, well, now you have a proper breaking change that may not be user-facing breaking, but it's going to break every other branch that's based off of the same branch point. 13:26.21 James Yeah. Yep. Yeah. 13:33.50 Frank And those those are always the trickiest ones to deal with. And sometimes the trickiness is like, hey, I'm coding this new feature. I don't want to code against the old architecture. I want to code against the new architecture, which I know is sitting in a branch, but that branch will get committed in the future. 13:48.79 Frank so you know what going to do? I'm just going to commit it to that branch. Or at least what i what normally I do is I would branch from that branch. And that's when we're getting into your um anarchist git usage, chaotic git usage, whatever you call it. 14:02.72 James Well, I think up into this point, like ah there's, you know, this concept of that we're going to get to a stack PR is not new but by the way, because other companies like meta had like sapling and like, there's ah a graphite had stack PR and there's other things, but it was obviously very, very, very, um, 14:11.46 Frank OK. 14:20.59 James hotly requested feature. In fact, when Jared came in a ways back, he was like, yeah, we're going to do stack PRs. Like, like what was the number one, the number one thing that people want, it was like stack PRs. 14:30.71 Frank okay 14:30.86 James Cause like a lot of times for large, you know, companies or even small companies or different size companies, When you're working on features and you're doing reviews, even if you're working with AI now, by the way, and I'm doing code reviews, if I all of a sudden put in a 20,000 line review because I decided to implement the front end, the back end, the auth later, the database layer in one huge PR, it's got to figure out all of those. 14:41.10 Frank Yeah. Yeah. 14:47.58 Frank yeah 14:51.64 James And maybe you do want it to review all of them together. But inherently, ah should be able to say, okay, like here's, you know, a review of just the database changes or just the API level or just the front end layer or something else, and then go for it. 15:06.29 James And inherently, when you're working in this mechanism, it's very, very complicated unless you've pre-planned that to start figuring out how to split these into multiple PRs. 15:15.90 Frank Yeah. 15:17.20 James Because what you end up having to do is say, okay, i have main, And then I have ah my main task and then I'm going to like make another branch on top of that branch and then another branch on top of that branch. Or maybe there is another branch on top of main and and they're all related. 15:26.53 Frank Yeah. 15:29.24 James But how do I configure them? Because what you want is a single, a single PR, like a single PR you know view that says, Hey, Inside this PR is a bunch of sub PRs. 15:42.17 James And then you should merge them basically in this, you know, this order or maybe any order up to you. 15:42.30 Frank yeah 15:48.32 Frank Mm hmm. Yeah. 15:49.43 James And you should be able to to stack those PRs on top of a pool pr a full PR, right? So if you're like hey, I'm going to implement feature, um, 15:54.42 Frank yeah 15:57.62 James you know, store, okay, I'm going to have ah a front end PR and then a back end PR and then a database PR, like I'm saying, and then those all stack and you might want to merge them into, you know, each other or into main directly, but review them separately. 16:11.14 James And you want a view and that's kind of like the high level what stacked PRs are. 16:14.49 Frank Okay. It's actually making a lot of sense to me. um So I have a bunch of questions for you. But first, I want to give you um how I've been handling. i have ah a similar problem in that I've been doing a lot of issues with sub issues, especially in this age of ai where I don't trust it to actually do a giant feature all at once. Usually I'm in some kind of plan mode and I'm like, hey, let's talk about this feature. What parts are going to need to be implemented? Let's break it down into multiple segments. 16:44.86 Frank And this is where I think people use multiple sessions or just have like a Ralph loop running or something. But I prefer to do let's file 10 issues and we will go through those issues one at a time. 16:56.30 Frank And um each one is a PR and I'll review them and break break it down that way. But there's no... um I'm sorry. Well, GitHub has added sub-issues. 17:07.64 Frank So that would be like my meta handler for I can kind of group all these issues together by having um a tracking issue and then make all these sub-issues of that tracking issue. 17:13.49 James Yeah. 17:19.06 Frank So it's sounding like these stacked PRs are kind of similar to that. um I'm curious, is a stack PR an all or nothing game? Or are you can you progressively work through it? Or do these companies basically want, we we just want a place to group all these things together and they will all go into main all at the same time or whatever they're branch pointed off of. 17:43.35 James Yeah, I think that you have the option to merge like one at a time when it's ready or merge all of the stack from like the bottom up. 17:48.54 Frank Okay. 17:50.17 James You know, I believe it's like a, yeah. 17:50.74 Frank Wow, I might actually use this feature then. 17:54.58 James From, from my understanding. 17:54.87 Frank Yeah. 17:55.58 James And then there are other companies that are like building like their integrations with stacked PRs on top of it. 17:56.55 Frank Mm-hmm. 18:01.84 James So they might have different flavors of how it looks like there is a CLI integration and app integration. And I'm sure. It'll show up in VS Code and Visual Studio and allll and CLI already and things like that. But yeah, inherently you can say, oh, I have this pull request and then I see all these stacked items in inside of it that I need to merge before I merge the the whole thing into main. 18:12.05 Frank Mm-hmm. 18:23.35 Frank Right. 18:24.44 James Yeah. 18:24.98 Frank and And unlike issues like PRs, this is not really a Git issue. This is definitely a GitHub issue, right? Because I don't think to this day, I don't think Git has any concept of PRs or anything like that in it or any kind of grouping or any of that kind of stuff. 18:33.27 James Mm-hmm. 18:41.21 Frank So this is definitely a procedures company-wide kind of thing. 18:41.41 James Yep. Yeah. 18:46.21 Frank so that's good that actually um I probably will use it, to be honest, because it's just nice to get that grouping and that sense of accomplishment where, like, you get the task list, you know, four of eight tasks are complete and all that kind of stuff. 18:46.78 James Totally. 19:00.22 Frank But I'm curious. 19:00.25 James Yeah, you're you're kind of you're kind of inherently doing it that way anyways, because you're like oh here's, and I need to do them in this order, and they need to be merged in this order, basically, and that's what it's doing. 19:00.94 Frank Yeah. 19:06.30 Frank Yeah. 19:08.33 James So, i mean, I'll read the documentation. It's like, stack pull requests are two or more pull requests in the same repo where the first or bottom pull request targets the stack's trunk, usually repository's default trunk, such as main, though it can actually be any branch, such as your release branch. 19:22.81 James Any subs subsequent. So and each subsequent pull request targets the branch of the pull request below. So they are stacked, which is in the name. 19:31.35 Frank Oh, you're actually branching off of the branch itself. 19:31.57 James so yeah, the branch. 19:35.45 Frank are Sorry, branch, branch, branch, branch. 19:36.11 James Yep. Yes. 19:37.94 Frank Oh, wow. 19:38.15 James So the, 19:38.46 Frank So we're we're going out on a limb with this one. don't know. 19:41.21 James Correct, the stacked branches form a dependency chain where each branch builds on the one below it. 19:44.70 Frank Wow. 19:47.63 James Foundational changes such as shared types and database schema go in the lower branch and the code that depends on them, such as API routes and UI components go in the higher branches. Each pull request as a stack represents a discrete reviewable change of one or more commits. You can review and iterate on each pull request independently and each one shows only the diff for its layers and the changes between its branch and the breach below it. The key principle last paragraph here, if code in one layer depends on code in another, the dependency must be in the same branch or a lower one. create a new branch when you start a different concern that depends on the one that you built so far. For example, when you switch from backend to frontend work, from the ah move from core logic to tests, or when the current branch already large enough to review. So they have, for example, okay, I have main, I'm going to add my database layer. i'm going to add my auth layer. I'm going to add my APIs. I'm going to add my frontend on top of it. And ath the database depends on main. 20:46.55 James The auth layer depends on the database. The API depends on the auth layer and the front end depends on the API. And then they stack them from top to bottom, just like if you're eating them up basically, and they go, but they can all be reviewed and individually. 20:53.93 Frank So. 20:59.49 James Right. And this, you could do this manually. 21:00.09 Frank Okay. Yeah. 21:01.57 James Like you, you were probably doing this manually where you're like, I am creating a branch off the branch and creating a pull request into said branch. 21:03.22 Frank Sure. 21:07.93 James But now this is just doing it for you automatically. 21:08.85 Frank yeah yeah 21:10.17 James And there is gentic skills to help and CLIs and API is now built in to GitHub and the CLI and things like that to automatically create these stacked PRs for you. 21:25.18 Frank And it's one of those things where a dedicated ui is going to help because if if you're branching off a branch, off a branch, off a branch, you can get lost very quickly. 21:28.73 James Yes. 21:32.86 Frank I i assume you can get lost very quickly. 21:33.46 James Totally. 21:34.94 Frank But a lot of this is sounding like you need a pretty good procedure in place or a good manager who's kind of paying attention to this stuff. 21:45.32 Frank I'm curious if this will play out because it seems to me that it requires a little bit of foresight. In that, you will have a designated first branch point. 21:49.82 James Or 21:54.16 Frank And then branching from there and there and there, that requires planning. That's a little bit waterfall, dare I say the word. As a get anarchist, I don't know, man. 22:01.72 James or Or Frank, here's what you also could do. You could just do everything in one branch and then you run the stack skill that says, bro, I got this branch break, break this in stacks and boom, it's good to go. 22:07.57 Frank Mm-hmm. 22:16.04 Frank Heck yeah. Now we're talking. 22:20.37 James So they also released, they released first class, they released first class support for the CLI, for the app, for the mobile app, for all these things. 22:22.62 Frank Now we're talking. 22:27.07 Frank Uh-huh. 22:27.77 James And the GitHub CLI, not the GitHub Copilot CLI, which also has first class support. But there is a skill built in now where you can just say, stack this puppy and then boom but but but it'll stack it up for you automatically. 22:39.22 James It will figure out inherently for you and it'll burn through them in those sweet, sweet AI credits that you got to use by the end of the month. 22:45.69 Frank Yeah. 22:46.12 James And then you can stack those. periods And I think honestly, that's probably how I'll use it the most unless I am doing this pre-planning. 22:52.11 Frank Mm-hmm. 22:53.66 James Because if I start to like create my PR and I look at my commits and I'm like, uh, bro, I'm like, that's like 40 lines ah of code because I've like added too many things. 23:02.23 Frank yeah 23:03.61 James Like, yeah, maybe I should do X, Y, Z. And I did this recently. So I um i work with the Oh My Posh team, which is Jan. um And I own configurator.ohmyposh.dev. 23:12.82 Frank yeah Oh yeah, that's right. 23:16.28 James And he just released a WebAssembly version of Oh My Posh, ah basically a terminal... you know, so you know, GUI that you can do. 23:24.59 Frank Cute. Sure. 23:26.45 James So if you go to configurator, you can see it here in real time. 23:28.21 Frank Chewy. 23:29.73 James I'll give it to you in the link. So he shipped. So I before had a legacy preview and I was trying to figure out what it would look like based on all these things. So now he legitimately has a, Hey, this is almost, this is going to be like one-to-one what it looks like. 23:42.42 Frank Identical. Yeah. 23:44.14 James It's integrated. So I call it studio beta. 23:45.55 Frank Okay. 23:46.32 James Cause he called it studio. It's the, Oh, my posh studio. And when you add stuff, so for a good example, as you go to like theme library samples and then do all segments and use like every single segment, it just like works one-to-one for all intents and purposes. 24:00.34 James Um, so that was a good example of like, I actually, this, this was like a huge 40,000 line commit because I asked it to do a bunch of things. i was like, okay, like. replace the preview. 24:10.57 James And then I was like, yeah, but but also then change this UI and then change that UI and then change this thing. And then just this thing, right. 24:15.33 Frank Thank you. 24:15.61 James Which all just app depended on the main thing, which was like swap this thing, right. Or add this thing. So I could, and I could have, and I should have to test this feature properly have been like, and stack this puppy. 24:25.74 James Right. Because I then went off and I said, okay, Hey, co-pilot reviewer, go review this 40,000 line change. And then it grinded on stuff instead of breaking down individual parts. So that is a ah pretty decent example of what I probably should have done. 24:40.03 Frank Well, today I learned there's a thing called Brewfather, which is an IPA batch, and I am triply lost in metaphor. So you're you're killing me with this, oh, my posh configurator. 24:50.25 Frank But that's pretty cool. Sorry, just a side tangent. 24:52.61 James Yeah. 24:53.62 Frank This is pretty cool. Good job. Good job, team. 24:55.29 James Oh yeah. The, the, oh, my posh configure is like one of my favorite things because I'm a gooey person and it's like, oh, just edit this, this JSON file. 24:56.28 Frank ah 25:02.01 Frank Yeah. 25:02.22 James was like, no, like, let me just drag and drop things on these prompt blocks and all this other stuff. 25:03.33 Frank No. 25:06.81 James So it's very good. Um, so yeah, that's sack PRS and there was tons of awesome, fun memes and a bunch of really fun stuff on the internet for pancakes. And, uh, it's like in there now. 25:18.00 James So what I'm hoping is what I'm hoping is this Frank is that 25:18.84 Frank Yeah. 25:22.39 James When I go into like the co-pilot app or I go into VS code and I say, create PR, what it should do immediately is run that skill and be like, should I break this down in and then ask me, oh, do you want to stack this puppy? 25:28.09 Frank you 25:32.25 Frank Yeah. 25:35.61 James And I'll probably be like, yes. Like that's the flow i I'm hoping for will just happen. 25:40.28 Frank Yeah, you have me thinking about like the moment i I have it create all my issues because I still like issue-based development. i'm I'm still on that side. um I might just have it say, and go create these six um um PRs that are works in progress and they're all stacked on top of each other because just from a UI perspective, I'm i'm with you. 25:55.77 James Yeah. 26:02.18 Frank It's nice to have it all just kind of grouped together so you know that these are a piece and they're not going to interfere with a whole other set of PRs. 26:07.64 James Yeah. 26:10.40 James Yeah. 26:10.73 Frank I'm really curious to like come back to this feature in a year. like, Frank, did you use Stacks? like I'm curious to find out if this is something appropriate for small teams and large teams or if this is a large team thing. 26:23.93 Frank So i'm excited to actually revisit the topic. Also, can I mention that I learned today, ah the GitHub command line tool has extensions. 26:34.33 Frank My God, what world do we live in, James? 26:34.73 James Yes. 26:36.45 Frank I guess I vaguely knew this with some other things that I've just copy and pasted ah shell commands and just executed them blindly without knowing what anything's doing. 26:47.55 Frank YOLO. um Yeah, so all this stack stuff is in the GitHub command line as an extension. i'm curious if they'll ever put it in the box because it seems like a pretty fundamental feature for GitHub. 27:01.21 James Yes, i agree with you on that. And I recently started using extensions for the GitHub CLI because I started to use agentic workflows, which I think we can do a whole podcast on. I'm using them in very unique, fun ways now that i actually know how to that to work. 27:10.94 Frank Yeah. 27:14.23 James And also that I installed the, once I, so how this actually worked is once I installed the agentic workflow GitHub CLI extension, it gave me agentic workflow custom agent. 27:29.59 James that automatically showed up in my tools, which meant when I wanted to create an agent workflow, it knew what to do and it worked beautifully. 27:29.78 Frank Oh, Lord. Oh, Lord. 27:38.53 Frank Yeah. 27:38.84 James So I just also, I knew that there were incentives, but i never used them. And now I'm just like YOLOing it all the time. 27:42.69 Frank Mm-hmm. 27:44.00 James um 27:44.57 Frank So we have sub-issues, which is way to group issues. We have stacked PRs. I can't wait until we have stacked extensions, which I guess are plugins. 27:53.28 James There you go. 27:54.08 Frank We've already gotten there. Jeez. 27:55.58 James Well, what if I told you that, you know, you can stack your PRs, but what if you could also stack your merges of said PRs into queue, Frank Kruger? 28:11.70 Frank i'm i'm I'm wondering, am I still going to get the same squashing sensation? like I really like squashing things. I think it's very satisfying. 28:19.09 James Yep. 28:20.82 Frank So what would I be squashing? I could cue my squashing. Is that the idea? And so it would squash and merge. what What am I doing? 28:27.58 James Okay. them i me let me 28:29.18 Frank i'm I'm lost in the metaphors. I just want to squash things, James. 28:33.11 James let me Let me define the problem. Okay. the The problem, one of the main problems to solve here is let's say you have a very busy project. Normally for you and me, not a big thing. I work on the GitHub copilot app and the GitHub copilot CLI often. And at any given time, there are 10 to 15 PRS in a queue that are being merged in by the time I, by the time I create a branch off of main. 29:00.63 James And if I go five to 10 minutes later and then commit, make a PR, my branch is out of date already because it moves so fast. 29:04.92 Frank Yeah. Yeah. Sure. 29:09.30 James Right? So. 29:10.39 Frank But that's why we have diffs, and we no longer have to worry about merge conflicts anymore because AIs rule the world. 29:12.12 James This is why we have, 29:15.90 James this is why we have diffs, but often in a world where you have large projects, there is a setting which I use on all of my projects. Cause I actually really like it, which is to require branches to be up to date before merging. 29:30.84 James This is a branch protection. so now, so, so, so, so this is important. 29:32.86 Frank Fair enough. I don't love... Yeah, okay. 29:36.32 James I'll tell you why, Frank, because just because there are no conflicts doesn't mean that you introduce something that possibly broke a test or change some other functionality. 29:48.88 James and I've had this actually happen to me in projects. 29:49.34 Frank Fair. Fair. 29:51.32 James So just because it's green, you know, you want that code to be up to date, but what happens 29:52.04 Frank Yeah. Yeah. 29:57.46 James Frank, when and you want to like merge something in. 29:59.54 Frank never yeah 30:03.01 James So if I'm sitting here looking at my PR, how do I go from, I've updated it. It ran all the tasks. So, so for the GitHub Copilot app, by the time I update and I say, oh, update this, there's no, there's no nothing there. 30:14.35 James It will take. five minutes to run the CI. And by that has finished, something has been merged. 30:18.10 Frank oh yeah okay okay 30:19.63 James So then it's, ah so, so that is where a merge queue comes in. 30:22.97 Frank okay 30:23.27 James And what this does is you basically say, Hey, listen, I'm going to enable merge queues. And then once you say, you know, merge, merge when it mean merge, when ready or add to queue, it will add it to a queue. 30:30.04 Frank Yeah. 30:35.42 Frank Yeah. 30:37.46 James And what it will do is it'll stack, stack things in a queue. So if you, if you add something to the queue, then I do yours will be there. 30:40.74 Frank Yeah. 30:45.26 James And then when mine goes, then it will pull the latest run the tests and then boom. So it just, ah it's a queue. It's a, it's just a merge queue. 30:53.91 Frank I understand cues. 30:54.07 James Yep. 30:54.71 Frank Okay, that does all make sense, except though I got to poke a hole because I'm not understanding. You still have the same fundamental problem of just because you're in a cue doesn't mean the person in ahead of you in the cue, you're not going to break them because you're still rebased from when you went into the cue. 31:12.12 James Well, if when, when I'm at the top, so if you go in first, yours is the one that will then say, okay, I'm going to you're, you're first in the queue. 31:12.22 Frank Or are you rebasing when you after them? Mm-hmm. 31:23.53 James I'm second into the queue. When you go into the queue, you will pull latest remain up. 31:25.29 Frank Yeah. 31:28.17 James Obviously if there's conflicts or something, then you have issues. 31:29.03 Frank OK. 31:31.22 James Um, then it will just bump out of the queue and then it'll be returned to your PR state. 31:34.14 Frank okay 31:36.38 James But else if it's clean, then it will pull it, run your CI and then merge it in. 31:36.63 Frank OK. Yeah. 31:41.46 James And then I will go and then I will now have all the previous changes and your changes and then go from there. That's the cue. 31:47.86 Frank You know what, James? You know what I think? 31:49.02 James Yes. What? 31:50.36 Frank I think this is a good idea. I think large companies should do this. 31:51.86 James It is a good idea. 31:54.83 Frank I think that that would um simplify a lot of fundamental problems big companies probably have. 32:01.11 James Yeah, I didn't even know that merge queues were existed until I started to work on the CLI and the app and then they use merge queues and I was like, oh wow, this is like actually like really smart. 32:07.80 Frank Yeah. yeah 32:11.77 James so 32:12.34 Frank So is that built into GitHub or is that more just a procedural thing? 32:16.92 James Built into GitHub, github.com, just add it to queue. 32:18.26 Frank Yeah. Yeah. 32:20.02 James So yeah, when you go, like right now, it's like you know squash and merge, it'll say squash and add to queue. 32:23.42 Frank Yeah. 32:25.16 James That's it, that's it, boom. 32:25.39 Frank Heck yeah. So I get to squash and add to Q. 32:28.44 James Oh yeah, baby. 32:28.54 Frank Good. don't Don't take the squashing away. That's the best part. 32:32.06 James Exactly. That's very true. you You can always be squashing. 32:34.71 Frank no 32:35.26 James So um now the one thing I actually don't know what happens in a stack PR is I am curious if at the end, at the very end, does it squash all of the PRs, you know, because it's stacking them. 32:44.56 Frank Mm-hmm. 32:48.53 James And then when it gets to the final one, does it squash? I don't know if you'd want to, though. I guess maybe not. 32:53.27 Frank Yeah, I guess it comes down to... Not to overuse the word merge. Can you merge all your PRs into the merge queue? But I doubt that. That seems like a pretty advanced feature, I doubt. 33:06.26 Frank That doesn't sound necessary, given all of what you've told me so far. 33:06.62 James They, yeah. 33:10.53 James Yeah. It sounds like right now in the merge queue, normal PRs work. 33:11.78 Frank But 33:15.85 James And then they're adding support for saying, Hey, listen, add this stacked PR to the merge queue. And then it would bu up up but do it all and then go from there. so that should all work. Yeah. 33:26.14 Frank Well, as the lead developer of a two-person team, i really i I do like the button. I like the concept here, honestly. i don't I'm not often merging many disparate things all at once. So we'll see if I use that queue, but it doesn't sound like it hurts not to use the queue. I like the fact that it's checking that. I'm not a huge fan of rebasing all the time. i get the problem that everyone's running into of what you said. You might be breaking someone else's commit. 33:59.22 Frank um But you kind of you're destroying your history over and over. You're destroying the review history over and over because comments might not apply exactly. 34:07.10 James Correct. 34:09.43 Frank But that seems like an okay okay thing to give up, having a clean review history. 34:09.53 James Yeah. 34:15.87 James Yeah. 34:16.62 Frank What's more important, the code or the review history? The code. So, yeah, fine, fine. 34:20.60 James And it's really gonna depend on the scope and scale of your project. Like I don't think in my apps, I need to emerge queue, but I could see that again, I can see that the, this I use Giddo Copilot code reviews on almost every single PR, um you know, in the cloud remotely, like, and I can do it locally, but I always find that I really like, 34:34.63 Frank Mm-hmm. 34:41.69 James how it adds comments and I can review the comments or the AI i can And like, I really like this like this process that I've talked about, which is like, I plan something, I implement something, I create the PR, I have the in the cloud, review it while I work on something else, usually, if it's independent, obviously, and go from there. 34:59.77 James So I do like the idea that I can I break my main PR into into chunks that are easier for it to review and like make more sense to implement. So I really just want it to be automatic, which I think it is semi-automatic obviously, which is good. 35:09.29 Frank Well, 35:14.08 James Cause I do think if it was a. um a manual process, it would be not as fun to do. You'd have to think about it more. 35:19.80 Frank yeah 35:20.85 James So i actually think it applies more in an agentic world than it used to. so that's my my personal belief that these stacked PRs, well, before were important. i think they're now maybe more important than ever, but you I don't know. 35:34.31 James I'll see how it is once I start to use them a bunch. 35:36.57 Frank Yeah, I mean, just roughly, I'm creating way more PRs than I ever used to now, because I just PR everything, because why not? 35:42.25 James Oh, yeah. 35:45.01 Frank It's just the easiest way to do a code review and all that, check out the code that the, um whatever, the AI is generating. 35:48.92 James Oh, yeah. Uh-oh. 35:51.60 Frank You said something funny before we started recording that really stuck with me, and I just want to bring it up because I think it's kind of interesting. You said this was like the number one requested feature for like a decade now on GitHub, so that's kind of cool that they're finally, hashtag finally. 36:04.49 James I think so. 36:08.98 Frank Usually an Apple thing, but that's that's fun. that like It must feel so good to the devs over there to be like, hey, that thing i thing everyone's been requesting, we finally we did it. 36:19.36 Frank So I'm Bet you everyone's in a good mood over on the team. 36:19.98 James It's there. Yeah. 36:23.67 James ah so I think it was pretty big undertaking, to be honest with you. so And there was like they're going to do a bunch of engineering deep dives, and some of the lead engineers are doing these big like tweet threads about how it all kind of came together and stuff like that. 36:27.58 Frank Oh, is that right? 36:35.23 James So it seemed pretty pretty neat. 36:35.38 Frank hmm. 36:37.66 James So I'm actually going to see if Mona is now collecting PRs. 36:38.42 Frank That's fun. 36:42.36 James Let's see. Is it in there yet? 36:44.40 Frank I'm excited to see what the number two requested feature was now. 36:44.74 James I forget. Not yet. Yeah. Yeah. 36:48.92 Frank Big team stuff. 36:51.61 James Yeah, big team stuff. 36:52.15 Frank I know it. 36:52.69 James Well, 36:53.85 Frank Yeah. Well, that's excellent. Are you going to be talking about that at every user conference now for the next month? i'm I'm curious who who's being affected by it. 37:02.20 James I think... 37:05.11 James I think that once it's, I think it'll be part of my demo flow, to be honest with you, because i think now I can say, okay, like now AI has made this big change and it's actually done a bunch of work. 37:10.48 Frank Yeah. 37:15.90 James Cause actually I was doing this workshop for copilot just yesterday and, um and we're going through this workshop and pretty much I implement backend changes, front end changes, database changes, and then do this whole thing. 37:30.23 Frank Oh yeah, you're basically set up for it, yeah. 37:31.77 James And, For it. And then I literally do commit, push, create a branch go, but now I can say, oh, now run the stack PR and then I'll do the thing. Right. And then you can like say, okay, now we can run code reviews on all of them. 37:40.69 Frank Yeah. 37:42.98 James So I think that'll be like part of my natural flow of it, especially the agentic workflow for that, for not the agentic workflow, but the agentic part of that workflow, I should say. 37:48.86 Frank Yeah. 37:52.34 James Yeah. 37:53.24 Frank Okay. 37:53.29 James Which would be cool Yeah. i Hit a microphone. 37:54.65 Frank Well, now that I'm retiring as Washington's best tour guide, um I guess I'll get back into this software thing, this little software business. I'll try to catch back up with you, James. 38:03.77 James I think if you didn't schedule all of your agents to be firing off different days while your family was in town, I don't know what you're doing, man. 38:05.80 Frank All 38:10.62 Frank right. 38:13.14 Frank You'd be so proud of me. 38:13.29 James You wasted a week. 38:14.42 Frank My family was boring me for a few minutes and I was on my little phone assigning an agent to do some work on an app. So, you know, you you taught me well, sir. 38:26.03 James I like that. 38:26.67 Frank Wasn't at an airport, but next time I'll try to do it at an airport. 38:26.81 James Awesome. Yes. Yeah, I'll tell you this much. Cause I had a bunch of these flights and the star link internet, man, like it on the, on the planes. 38:38.12 James It's very good. 38:38.23 Frank Yeah. 38:38.88 James And dude, I've just been crushing, crushing stuff. 38:39.64 Frank Yeah. 38:43.46 James Like even yesterday I did this, this, oh, my posh refactoring on the plane ride home from, from Washington to Oregon. 38:47.98 Frank Yeah. Yeah. 38:50.38 James And, uh, yeah, it's a pretty short flight obviously, but, uh, it, I, I was on, i got on the plane. 38:53.46 Frank yeah 38:57.69 James And you can connect to the star link. This is my short story and then we'll call it a night. 39:00.66 Frank analysi 39:00.77 James But I got onto the plane pretty early on in the process. So i was like, okay, I'll have like 15, 20 minutes. So I opened my laptop. I connect to star link internet. And then I do a planning session. 39:13.78 James so im okay this is going to take like ah you know, a pretty big, I do a whole plan. I'm like, okay, close the laptop. 39:17.74 Frank Okay. 39:19.38 James And then I say, okay, we get off 10,000 feet. 39:24.70 Frank Okay. 39:25.46 James open the laptop, the plan is ready, reconnect to Starlink, fire it off, order a drink, have a whole conversation, just move my mouse pad just a little bit so the agent keeps running, get off, you know, we're almost at the end, open the pull request, cool, assign it to Coble Library Code Review, get home, merge it in. 39:26.94 Frank Yep. Yeah. okay ah ah Wiggle. Wiggle. 39:45.46 James And that was like my flow yesterday. 39:46.04 Frank Yeah. 39:46.78 James That's how i did it, which is like so absolutely funny that that was like my main flow for it. 39:48.18 Frank Yeah. 39:51.22 Frank That's awesome. 39:51.86 James And it worked out great. Yeah, it was really fun, so. 39:54.23 Frank Yeah, the the last step I have to get, i was actually updating an app that uses um the Xcode builds and would have gone up to TestFlight if I had completed the loop. I didn't fully complete the loop. 40:04.42 James Oh, yeah, yeah, yeah. 40:04.47 Frank So my next challenge is to, you know, make a request and get an update to my app, like, as I'm ignoring my family. Yeah. 40:13.34 James There you go. Ah. Well, Frank, that's going to do it for this week's Merge Conflict. I'm interested if anyone has been using Stack PRs or gotten used to it or like are interested in it or like, wow, that'd be like awesome. 40:26.10 James Like I would totally use this feature or you're using cues. Let us know. Go to our YouTube comment on this video. We'd appreciate it. We are we're doing pretty good, I think, on the on the YouTube so far on that on our puppy there. 40:38.52 James Obviously, we have the main one. Let's look at where we're at. 40:39.96 Frank I'd love to check in. 40:41.02 James Today, today on the merge, 924 subscribers are on our way to 1000 like it by the end of the year. 40:46.85 Frank Okay. We're so close. Tell all your friends. 40:51.36 James Yes. And our monetization train, ah we are two thirds of the way there. So we are at 2100 qualified hours in the last year. 41:00.47 Frank Don't tell people that. They don't want ads, James. But for us, it's good. 41:04.12 James Well, here's the thing. YouTube's going to play those ads anyways. The difference is we will not get paid for it until we won't get paid pennies. 41:08.34 Frank Fair enough. Right. Yeah, you're all getting the ads. but Right, right. Fair enough. 41:13.85 James You're, you're, you're all getting the ads anyways, but we get $0 for it until, you know, cat on over. And actually, um I'm going to do some, some analytics. 41:20.60 Frank Good point. 41:24.40 James It does look like our.net Maui episode was one of the most popular episodes in a long, long time. The one that we did two weeks ago. So it was pretty good. 41:33.08 Frank Fantastic. 41:33.17 James Yeah. 41:34.15 Frank OK. 41:34.23 James Ooh, Also update on the IMAX stuff. I sent you a website. Did you get that? 41:38.55 Frank Oh, I did. i did. um The website was not working great on a telephone, but it was, check me if I'm wrong, it was a way to search for real IMAX theaters in the Grand United States or worldwide. 41:44.60 James No. 41:49.46 James Yes. 41:52.03 Frank What was it? 41:53.02 James In the United States, I forget, Andrew Baker vibe coded this out and I just happened to see it. 41:57.43 Frank Oh, thank you, Edgar. 41:59.38 James I happened to see it on the internet, on the Twitters and boom. So it's actually that you do a seed alerts and a bunch of other stuff. So what's interesting there is only, and we had a whole discussion at dinner, by the way, my team dinner on Thursday, there's like only five of us, but so partial team dinner instead of 20 and not everyone was in town. 42:12.86 Frank Oh, did you? Sure. 42:17.88 James But, um, we talked about this and I'm going show them this website and they're so happy, but there's only 24 theaters in America. 42:27.66 Frank It's sad, isn't it? 42:27.73 James That's it. Mm-hmm. 42:30.86 Frank It's sad, James. 42:30.94 James He lists them all here. So there's a bunch in California. There's one in Vegas. 42:36.17 Frank Texas has them. 42:36.42 James There's Arizona. 42:37.94 Frank Rochester, New York. Go Rochester. 42:40.42 James Go Rochester. 42:40.76 Frank ah 42:41.15 James So. San Antonio, some Texas, some Illinois, some Michigan, Indianapolis. It's called IMAXing. I-M-A-X-X-I-N-G dot I-O. IMAXing. Hilarious. um I used to live directly next to the one in Arizona and I've been to that IMAX and I've seen, i think I saw Avatar in 3D IMAX there. 42:53.62 Frank I love it. 43:01.93 James I'm pretty sure. 43:02.70 Frank I'm so sad because I was just in Sacramento, California. 43:02.71 James It's very big. It's very nice. 43:05.50 Frank i was just in um San Francisco and I was just in Las Vegas. And that those those cities all have it. Don't let your city convert to laser. 43:16.82 Frank Lasers are dumb. Film, people. Stick with the film. 43:19.36 James Film. All right. That's going to it for this week's merch Conflict. So until next time, I'm James Montemagno. 43:24.66 Frank And I'm Frank Kruger. thanks for watching and listening 43:28.29 James Peace.