<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Evan</title>
    <description>The latest articles on DEV Community by Evan (@thebguy).</description>
    <link>https://dev.to/thebguy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4069077%2F233c719d-e708-4fc6-a41c-5bdd6f5642b2.jpg</url>
      <title>DEV Community: Evan</title>
      <link>https://dev.to/thebguy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thebguy"/>
    <language>en</language>
    <item>
      <title>The Whole Loop, One Window</title>
      <dc:creator>Evan</dc:creator>
      <pubDate>Mon, 17 Aug 2026 23:22:13 +0000</pubDate>
      <link>https://dev.to/thebguy/the-whole-loop-one-window-561g</link>
      <guid>https://dev.to/thebguy/the-whole-loop-one-window-561g</guid>
      <description>&lt;p&gt;I've spent years working with Git.&lt;/p&gt;

&lt;p&gt;Not just using it, but living in it. Feature branches, code reviews, releases, hotfixes, open source, side projects, client work—the rhythm becomes second nature.&lt;/p&gt;

&lt;p&gt;And yet, over time, I noticed something strange.&lt;/p&gt;

&lt;p&gt;The moment I needed to do anything beyond committing code, I was expected to leave.&lt;/p&gt;

&lt;p&gt;Leave the Git client to create a pull request.&lt;/p&gt;

&lt;p&gt;Leave it to review changes.&lt;/p&gt;

&lt;p&gt;Leave it to check project traffic.&lt;/p&gt;

&lt;p&gt;Leave it to manage branches.&lt;/p&gt;

&lt;p&gt;Leave it to use AI.&lt;/p&gt;

&lt;p&gt;Leave it to enforce the kinds of guardrails that prevent simple mistakes.&lt;/p&gt;

&lt;p&gt;It never felt intentional. It was just... accepted.&lt;/p&gt;

&lt;p&gt;But the more I thought about it, the more one question kept coming back:&lt;/p&gt;

&lt;p&gt;Why am I leaving?&lt;/p&gt;

&lt;p&gt;That question became GitDesktop.&lt;/p&gt;

&lt;p&gt;When I first started planning the project, I wasn't trying to build a better GitHub Desktop.&lt;/p&gt;

&lt;p&gt;I wasn't trying to cram every Git feature imaginable into one application.&lt;/p&gt;

&lt;p&gt;The original idea was much simpler.&lt;/p&gt;

&lt;p&gt;I wanted to build a calm Git client I could leave open all day.&lt;/p&gt;

&lt;p&gt;Somewhere along the way, that idea became five words that ended up guiding every feature I built:&lt;/p&gt;

&lt;p&gt;The whole loop, one window.&lt;/p&gt;

&lt;p&gt;It wasn't a tagline.&lt;/p&gt;

&lt;p&gt;It was a design constraint.&lt;/p&gt;

&lt;p&gt;Every time I wanted to add something, I asked the same question:&lt;/p&gt;

&lt;p&gt;Does this help me stay in the flow, or does it send me somewhere else?&lt;/p&gt;

&lt;p&gt;Pull Requests shouldn't begin after you push&lt;br&gt;
One of the biggest workflow interruptions for me has always been creating pull requests.&lt;/p&gt;

&lt;p&gt;The workflow looked something like this:&lt;/p&gt;

&lt;p&gt;Stage changes.&lt;/p&gt;

&lt;p&gt;Commit.&lt;/p&gt;

&lt;p&gt;Open GitHub.&lt;/p&gt;

&lt;p&gt;Create a pull request.&lt;/p&gt;

&lt;p&gt;Write the title.&lt;/p&gt;

&lt;p&gt;Write the description.&lt;/p&gt;

&lt;p&gt;Maybe ask AI to help.&lt;/p&gt;

&lt;p&gt;Everything about that process felt disconnected.&lt;/p&gt;

&lt;p&gt;The repository was already on my machine.&lt;/p&gt;

&lt;p&gt;The diffs were already on my machine.&lt;/p&gt;

&lt;p&gt;The commit history was already on my machine.&lt;/p&gt;

&lt;p&gt;So why did the workflow suddenly move into a browser?&lt;/p&gt;

&lt;p&gt;When GitHub introduced Copilot-powered pull request generation, I actually thought it was a great feature.&lt;/p&gt;

&lt;p&gt;But I already preferred Claude.&lt;/p&gt;

&lt;p&gt;I didn't want to switch assistants depending on where I happened to be working.&lt;/p&gt;

&lt;p&gt;I wanted the workflow—not the provider.&lt;/p&gt;

&lt;p&gt;That eventually led to one of my favorite features in GitDesktop: Local Pull Requests.&lt;/p&gt;

&lt;p&gt;Not because they're technically interesting.&lt;/p&gt;

&lt;p&gt;Because they challenge an assumption I don't think we've questioned enough.&lt;/p&gt;

&lt;p&gt;We tend to think a pull request begins the moment we push.&lt;/p&gt;

&lt;p&gt;I don't.&lt;/p&gt;

&lt;p&gt;To me, pushing is the moment a pull request graduates from private work to shared work.&lt;/p&gt;

&lt;p&gt;Before that, I'm still thinking.&lt;/p&gt;

&lt;p&gt;I'm still iterating.&lt;/p&gt;

&lt;p&gt;I'm still rewriting descriptions.&lt;/p&gt;

&lt;p&gt;I'm still asking AI to review something.&lt;/p&gt;

&lt;p&gt;I'm still cleaning up commits.&lt;/p&gt;

&lt;p&gt;I'm still deciding whether it's ready for someone else's time.&lt;/p&gt;

&lt;p&gt;Why should any of that require a remote repository?&lt;/p&gt;

&lt;p&gt;GitDesktop lets me prepare the entire review locally before deciding to publish it.&lt;/p&gt;

&lt;p&gt;Not because GitHub can't review code.&lt;/p&gt;

&lt;p&gt;Because I believe the first reviewer should always be yourself.&lt;/p&gt;

&lt;p&gt;Branches are no longer just branches&lt;br&gt;
Years ago, switching branches was almost free.&lt;/p&gt;

&lt;p&gt;Today, a branch is an environment.&lt;/p&gt;

&lt;p&gt;Switching branches can restart development servers.&lt;/p&gt;

&lt;p&gt;Hot module replacement kicks in.&lt;/p&gt;

&lt;p&gt;Dependencies change.&lt;/p&gt;

&lt;p&gt;Generated files change.&lt;/p&gt;

&lt;p&gt;Environment variables change.&lt;/p&gt;

&lt;p&gt;Migrations change.&lt;/p&gt;

&lt;p&gt;I've had moments where I switched back to an old feature branch just to update it and suddenly found hundreds of files appearing as untracked because .gitignore had changed on another branch.&lt;/p&gt;

&lt;p&gt;Not because I intended to work there.&lt;/p&gt;

&lt;p&gt;Simply because Git required me to visit that branch before updating it.&lt;/p&gt;

&lt;p&gt;Another time, I interrupted active development just to pull changes into a long-running epic.&lt;/p&gt;

&lt;p&gt;Everything restarted.&lt;/p&gt;

&lt;p&gt;The application reloaded.&lt;/p&gt;

&lt;p&gt;The context I was in disappeared.&lt;/p&gt;

&lt;p&gt;None of that had anything to do with the work I was actually trying to accomplish.&lt;/p&gt;

&lt;p&gt;I just wanted to bring another branch up to date.&lt;/p&gt;

&lt;p&gt;So GitDesktop lets me do exactly that.&lt;/p&gt;

&lt;p&gt;Update another branch without leaving the one I'm currently working in.&lt;/p&gt;

&lt;p&gt;Not because it's impossible otherwise.&lt;/p&gt;

&lt;p&gt;Because switching contexts should be a choice—not a requirement.&lt;/p&gt;

&lt;p&gt;Guardrails shouldn't be a pricing tier&lt;br&gt;
Some of my favorite GitDesktop features exist because of incredibly ordinary mistakes.&lt;/p&gt;

&lt;p&gt;I've merge committed directly into development branches because muscle memory took over.&lt;/p&gt;

&lt;p&gt;I've deleted the wrong branch after promoting a release.&lt;/p&gt;

&lt;p&gt;None of these were knowledge problems.&lt;/p&gt;

&lt;p&gt;They were human problems.&lt;/p&gt;

&lt;p&gt;GitHub has branch protections.&lt;/p&gt;

&lt;p&gt;They're great.&lt;/p&gt;

&lt;p&gt;But many of the protections I wanted either happen remotely or are tied to higher-tier workflows.&lt;/p&gt;

&lt;p&gt;That always felt backwards.&lt;/p&gt;

&lt;p&gt;The best safety features shouldn't only exist after you've already pushed your code somewhere.&lt;/p&gt;

&lt;p&gt;They shouldn't only exist for large organizations.&lt;/p&gt;

&lt;p&gt;Sometimes you just want your tools to stop you from making an obvious mistake.&lt;/p&gt;

&lt;p&gt;Local branch protection came from that belief.&lt;/p&gt;

&lt;p&gt;Good guardrails should be available wherever you're working.&lt;/p&gt;

&lt;p&gt;Especially when you're working alone.&lt;/p&gt;

&lt;p&gt;Monitoring shouldn't require hunting&lt;br&gt;
Another habit I've developed over the years is checking on my projects.&lt;/p&gt;

&lt;p&gt;Not because I enjoy dashboards.&lt;/p&gt;

&lt;p&gt;Because I genuinely like seeing whether people are using the things I've built.&lt;/p&gt;

&lt;p&gt;How many visitors showed up today?&lt;/p&gt;

&lt;p&gt;Where did they come from?&lt;/p&gt;

&lt;p&gt;Which repositories are getting attention?&lt;/p&gt;

&lt;p&gt;That routine usually meant opening GitHub...&lt;/p&gt;

&lt;p&gt;Then another repository.&lt;/p&gt;

&lt;p&gt;Then another.&lt;/p&gt;

&lt;p&gt;Then another.&lt;/p&gt;

&lt;p&gt;Eventually I had several browser tabs open just to answer one simple question:&lt;/p&gt;

&lt;p&gt;How are my projects doing?&lt;/p&gt;

&lt;p&gt;It felt disconnected.&lt;/p&gt;

&lt;p&gt;The repositories I cared about were already sitting inside the Git client I had open all day.&lt;/p&gt;

&lt;p&gt;Why wasn't that information there too?&lt;/p&gt;

&lt;p&gt;Repository Insights wasn't born out of wanting prettier graphs.&lt;/p&gt;

&lt;p&gt;It was born out of wanting the projects I care about to stay close.&lt;/p&gt;

&lt;p&gt;Bring your own workflow&lt;br&gt;
AI accelerated this realization.&lt;/p&gt;

&lt;p&gt;Every company wants you inside their ecosystem.&lt;/p&gt;

&lt;p&gt;Use their assistant.&lt;/p&gt;

&lt;p&gt;Use their models.&lt;/p&gt;

&lt;p&gt;Use their workflow.&lt;/p&gt;

&lt;p&gt;But developers don't work that way.&lt;/p&gt;

&lt;p&gt;Some people prefer Claude.&lt;/p&gt;

&lt;p&gt;Some use OpenAI.&lt;/p&gt;

&lt;p&gt;Others run local models.&lt;/p&gt;

&lt;p&gt;Tomorrow there will be something new.&lt;/p&gt;

&lt;p&gt;The tool shouldn't force that decision.&lt;/p&gt;

&lt;p&gt;It should adapt to it.&lt;/p&gt;

&lt;p&gt;The same applies beyond AI.&lt;/p&gt;

&lt;p&gt;Whether it's GitHub, GitLab, Bitbucket, or something else, I don't think your development workflow should be dictated by whichever platform happens to host your repository.&lt;/p&gt;

&lt;p&gt;Your tools should work with you.&lt;/p&gt;

&lt;p&gt;Not the other way around.&lt;/p&gt;

&lt;p&gt;Questioning assumptions&lt;br&gt;
As I look back over GitDesktop, I notice something.&lt;/p&gt;

&lt;p&gt;I wasn't really building features.&lt;/p&gt;

&lt;p&gt;I was questioning assumptions.&lt;/p&gt;

&lt;p&gt;Why does a pull request require a remote?&lt;/p&gt;

&lt;p&gt;Why do reviews begin after pushing?&lt;/p&gt;

&lt;p&gt;Why do I have to leave my Git client to understand my project?&lt;/p&gt;

&lt;p&gt;Why should switching AI models change my workflow?&lt;/p&gt;

&lt;p&gt;Why should updating another branch interrupt the one I'm actively working in?&lt;/p&gt;

&lt;p&gt;Why are some of the best guardrails only available after code leaves my machine?&lt;/p&gt;

&lt;p&gt;Every feature traces back to one of those questions.&lt;/p&gt;

&lt;p&gt;The whole loop, one window&lt;br&gt;
If GitHub Desktop adopted every feature I've built tomorrow, I'd be thrilled for developers.&lt;/p&gt;

&lt;p&gt;But I don't think we'd be building the same product.&lt;/p&gt;

&lt;p&gt;Because GitDesktop isn't defined by Local Pull Requests, branch protection, AI integration, or repository insights.&lt;/p&gt;

&lt;p&gt;It's defined by a philosophy.&lt;/p&gt;

&lt;p&gt;I believe developer tools should adapt to developers—not ask developers to adapt to them.&lt;/p&gt;

&lt;p&gt;I believe the best workflows happen as close to the code as possible.&lt;/p&gt;

&lt;p&gt;And I believe every unnecessary context switch is an opportunity to ask a simple question:&lt;/p&gt;

&lt;p&gt;Do I actually need to leave?&lt;/p&gt;

&lt;p&gt;That question has shaped every feature in GitDesktop so far.&lt;/p&gt;

&lt;p&gt;And I suspect it'll shape every feature I build next.&lt;/p&gt;

&lt;p&gt;Because for me, the goal has never been to build another Git client.&lt;/p&gt;

&lt;p&gt;It's been to build the one I never have to leave.&lt;/p&gt;

&lt;p&gt;What's one part of your workflow that always makes you think, "Why do I have to leave?"&lt;/p&gt;

&lt;p&gt;This essay also lives on the GitDesktop blog — &lt;a href="https://gitdesktop.app/blog/the-whole-loop-one-window/" rel="noopener noreferrer"&gt;https://gitdesktop.app/blog/the-whole-loop-one-window/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>git</category>
      <category>ai</category>
      <category>software</category>
    </item>
  </channel>
</rss>
