A pleasant walk through computing

Comment for me? Send an email. I might even update the post!

Navidrome IIS Reverse Proxy

This is a quick post, not a full How To.

BLUF
To use IIS as your reverse proxy for Navidrome: a) enable WebSockets, and b) clear the Accept-Encoding header's value

I recently replaced my long-running (and woefully unmaintained) Subsonic self-hosted music server with Navidrome. This was initially (relatively) painless, as Navidrome has:

  • A native Windows installer that also installs a Windows Service
  • Straightforward ability to point to my existing library
  • Reasonably easy to import playlists I exported from Subsonic

There were a few barriers.

  • The documentation didn't seem as clear as I'd have liked on how configuration options work. Specifically, that options can be set in the navidrome.ini file OR server environment variables, and that the option names are not the same. But, in fairness, this was probably me being impatient.
  • Navidrome organizes songs completely based on tags. This makes sense, but initially showed lots of my albums as separate songs. It was tedious (but worthwhile) to tag those songs to include Album Artist. The tagging guidelines documentation is very useful here . . .
    • Except, that in some cases the Year tag is what would cause albums to show separately. I'm pretty sure this has more to do with a bunch of MP4 (.m4a) files I have. Someday I'd like to convert those to MP3 and then reget the album info.
  • My previous Subsonice reverse proxy didn't work with Navidrome.

The last one is the subject of this post. I lost about eight hours on it. The reason to use a reverse proxy is because the Navidrome application (web server) doesn't support SSL. But, if using the app publically (not just within one's local network), SSL (HTTPS) is essential for security. Most of the web examples of using a reverse proxy with Navidrome use nginx. I came very close to installing and using nginx, but that would have required me switching all of my other sites to use it to. Ugh.

I use Microsoft Internet Information Server (IIS) on purpose; I'm a Microsoft stack developer, and need to understand the tools. And it seemed like it should work. But I kept getting an HTTP 500 error.

Finally, after looking at logs and beating my head against the keyboard (didn't help), I installed Fiddler Classic to watch the traffic. It didn't tell me more than I knew, but then I tried sending my GET request from Fiddler.

And it worked.

Fiddler Compose, by default, only uses two headers. This led to a process of elimination of the headers being sent. Fiddler made this pretty easy since I could copy the headers I sent from my browser request (examinging Fiddler Inspection) directly into the Fiddler Compose, eliminating them until it worked again. It turned out, the Navidrome app's web server doesn't accept encoding (or at least not standard encoding).

Once I knew that, I could update IIS Url Rewrite to include the server variables (not at all well documented how those relate to HTTP headers) and change their values.

Sorry, you'll need to do your own research on configuring IIS as a reverse proxy. There may be a better way than what I've done (because I'm still finding different documentation on how to do it).

Here's the web.config I used. It:

  • Passes requests from https://music.flattland.com to Navidrome
  • Changes the Accept-Encoding request header via a server variable
  • Allows (somehow) WebSockets passthrough
  • Rewrites outbound URL tag values if the Navidrome URL http://localhost:4533 is found
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:4533/{R:1}" />
                    <serverVariables>
                        <set name="HTTP_SEC_WEBSOCKET_EXTENSIONS" value="" />
                        <set name="HTTP_ACCEPT_ENCODING" value="" />
                        <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                    </serverVariables>
                </rule>
            </rules>
            <outboundRules>
                <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
                    <match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:4533/(.*)" />
                    <action type="Rewrite" value="http{R:1}://music.flattland.com/{R:2}" />
                </rule>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
        <urlCompression doStaticCompression="true" />
    </system.webServer>
</configuration>

References

Some of these I didn't use, but may still be helpful, especially if you're trying to mimic nginx.

Flatt's Favorite Development Tools 2024

CONTENTS

My Ode to Scott Hanselman

Scott, you are right, this post took so long!
I could have coded an app. I could have written a song.
But I've yearned to promote my fave tools for years
For the public to read, even if nobody cares.

You're a tool nerd for sure, an App User Supreme
Trying utils in numbers I could only (of) dream.
You pointed the way, you're a software sensei,
Here's my kata in prose, my Tao (meaning "way").

You make coding real cool
Thank you, dude, and stay well.

Scott Hanselman's 2021 Ultimate Developer and Power Users Tool List for Windows - Scott Hanselman's Blog

Why Do Tools Matter?

Let me ask you something? Could you build a house using just a hand saw, hammer, manual drill, and ruler?

Well, sure you could. But why in the world would you?

The DevOps Research and Assessment (DORA) group have conistently found that when software teams can choose their own tools they are more productive and deliver higher quality work.

"Teams that can choose which tools to use do better at continuous delivery. No one knows better than practitioners what they need to be effective."

Developers are power users. In organizations, they need to be entrusted with the security privileges to easily install and remove software. That's part of their job. Which isn't to say their tools shouldn't be audited. That's good security. But security departments should partner with developers and operations to reduce friction to developing valuable software. That's a responsible use of time and funds. Removing barriers to tool choice, along with practical security measures, is analogous to letting your skyscraper contractors use whichever tools they need while following safety protocols.

Below are most of the tools I consider essential in my kit today. They've proven their worth over years and years. The list below includes some apps for SQL data reporting that may not be applicable to your environment. I'm missing several testing tools that the QA person on a team would require. Hopefully I can update with those in the future. I also include some design and testing tools that maybe you don't need to sling code but are valuable on a team. Or maybe you should try them and see!

I'm a Microsoft stack developer and my choices reflect that.

By Requirement

While all of the tools and utilities in this article are valuable, there are some without which development can't practically be done.

Must Have

  • Visual Studio
  • Visual Studio Code
  • LINQPad
  • Git for Windows
  • PowerBI Desktop
  • SQL Server Developer
  • SQL Server Management Studio
  • PowerShell 7
  • Insomnia
  • Telerik Fiddler
  • ShareX
  • Balsamiq Wireframes

High Value

  • Everything else!

Note It was hard leaving LINQPad out of the Must Have section. I'd hate to be without it; the ROI is incredibly high. But it's not--technically--essential. Update 2025 I've changed my mind. I've found LINQPad to be so useful and save so much time that I consider it an essential tool.

By License Type

The only types listed here are Free and Licensed. Some apps (such as LINQPad) have free versions that aren't adequate for daily, high-performance use. In those cases, they're listed as Licensed.

Licensed

  • Visual Studio
  • LINQPad
  • Balsamiq Wireframes
  • UltraFileSearch

Free

  • Visual Studio Code
  • Git for Windows
  • PowerBI Desktop
  • SQL Server Developer
  • SQL Server Management Studio
  • PowerShell 7.x
  • Notepad++
  • Azure CLI
  • Windows Terminal
  • Windows Package Manager (winget)
  • NVM for Windows
  • ShareX
  • Microsoft Remote Desktop (RDC) Manager
  • 7-zip
  • Oh-My-Posh
  • KDiff3 Updated 2025
  • Insomnia
  • Telerik Fiddler
  • FreeCommander XE
  • Oracle VirtualBox
  • Inkscape
  • Paint.Net

By Security

Many apps require UAC to install, but don't require admin rights to run. They may also require UAC with an exe/winget installer but also have portable versions. Apps are categorized below by least-needed privilege. For example, Git for Windows need UAC for the exe installer but not for portable, so it's listed under portable. Likewise if it's non-UAC but also has a portable, then the app is listed as portable.

While portable apps are viable, I recommend using an installer--winget is ideal!--whenever possible. This makes it much easier to keep software up to date and secure.

Install UAC = true

  • Visual Studio
  • PowerBI Desktop
  • SQL Server Developer
  • SQL Server Management Studio
  • Azure CLI
  • Windows Package Manager (winget)
  • NVM for Windows
  • 7-zip
  • KDiff3
  • Telerik Fiddler
  • Balsamiq Wireframes
  • UltraFileSearch
  • Oracle VirtualBox

Install UAC = false

  • Visual Studio Code
  • Oh-My-Posh

Portable

  • Git for Windows
  • PowerShell 7
  • LINQPad
  • Notepad++
  • Windows Terminal
  • ShareX
  • Microsoft Remote Desktop (RDC) Manager
  • Insomnia
  • Ditto
  • FreeCommander XE
  • Inkscape
  • Paint.Net

By Category

These categories are kind of loose, but helped me understand my own tool use.

Development

  • IDEs and Editors
    • Visual Studio
    • Visual Studio Code
    • LINQPad
    • Notepad++
  • Version Control
    • Git for Windows
  • Terminals and Shells
    • PowerShell 7.x
    • Windows Terminal
    • Oh-My-Posh
  • Software Management
    • Window Package Manager (winget)
    • NVM for Windows
  • Diff and Merge
    • KDiff3
    • VS Code
  • Debugging
    • Insomnia
    • Telerik Fiddler
  • Other
    • Azure CLI
    • Microsoft Remote Desktop (RDC) Manager

Design

  • Balsamiq Wireframes
  • Visio
  • Inkscape
  • Paint.Net

Testing

  • Oracle VirtualBox

Data

  • PowerBI Desktop
  • SQL Server Developer
  • SQL Server Management Studio
  • Oracle IDE of some kind

General Utilities

  • 7-zip
  • Ditto
  • UltraFileSearch
  • Ditto
  • FreeCommander XE

Documentation and Support

  • ShareX

The Tools

Visual Studio

https://visualstudio.microsoft.com/downloads/

UAC: Y
COSTS: Free | Individual 45/user/mo | Enterprise 240/user/mo
INSTALLATION: exe, winget

DESCRIPTION

Visual Studio has provided perhaps the best IDE for decades. Not using it for most Microsoft stack development would be like not designing skyscrapers using computer-aided design.

Visual Studio Code

https://code.visualstudio.com/download

UAC: N
COSTS: Free
INSTALLATION: exe, winget, zip

DESCRIPTION

Several years ago Microsoft went from having the world's simplest text editor--Notepad--to creating one of the best text editors available on any platform. VS Code out of the box includes amazing features including file comparison and Git support. Its tens of thousands of extensions let you be super-productive.

Git for Windows

https://gitforwindows.org/

UAC: Y (exe, winget) N (zip) COSTS: Free
INSTALLATION: exe, winget, zip

DESCRIPTION

Git is the de facto version control system today and Git for Windows is the must-have tool for Windows users.

PowerBI Desktop

https://www.microsoft.com/en-us/download/details.aspx?id=58494

UAC: Y
COSTS: Free
INSTALLATION: exe, winget,

DESCRIPTION

If you're creating PowerBI reports, you need this application.

SQL Server Developer

https://www.microsoft.com/en-us/sql-server/sql-server-downloads

UAC: Y
COSTS: Free
INSTALLATION: exe, winget

DESCRIPTION

When developing against a SQL database there are two local choices: Developer or Express. Developer is the superior choice because it includes all the same features as SQL Server, letting you develop with parity.

SQL Server Management Studio

https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms

UAC: Y
COSTS: Free
INSTALLATION: exe, winget

DESCRIPTION

There are other really good SQL tools, but SSMS is still the best overall.

PowerShell 7.x

https://learn.microsoft.com/en-us/powershell/

UAC: Y (exe, msi, winget) N (zip, msixbundle, dotnet) COSTS: Free
INSTALLATION: exe, msi, winget, zip, msixbundle, dotnet

DESCRIPTION

There's a version of PowerShell that's pre-installed in Windows called, naturally, PowerShell for Windows. But the latest version of PowerShell--version 7--is what you want to use. It has new features and is cross-platform. It's also what's used by Azure DevOps Pipelines, so if you're writing PowerShell scripts for ADO you want to use the same version.

LINQPad

https://www.linqpad.net/

UAC: Y (exe, winget) N (zip)
COSTS: Free | Individual 125/major ver | Team 10-user 850/major ver
INSTALLATION: exe, winget, zip

DESCRIPTION

There are a few tools I always pay for because they save me (and my client or employer) ten times over. One of those is LINQPad. In truth, I only occassionally use it for database querying. I mostly use it for code prototyping, debugging, and utilities. I'd estimate using this tool saves me a couple hundred hours a year. You need to buy a license to get Intellisense and other features. It's a bargain.

Notepad++

https://notepad-plus-plus.org/downloads/

UAC: Y (exe, winget) N (zip) COSTS: Free
INSTALLATION: exe, winget, zip

DESCRIPTION

Nowadays I use VS Code for most of my text editing. But Notepad++ still has features that make it valuable to install. For example, it has excellent search-in-files where results are output to a separate pane. I've also found it integrates better into Git as the default editor for things like git commit --amend

Azure CLI

https://learn.microsoft.com/en-us/cli/azure/

UAC: Y
COSTS: Free
INSTALLATION: winget, msi

DESCRIPTION

Sometimes you can gain real automation benefits by writing command line tools. Accessing Azure Portal and Azure DevOps via a CLI is very helpful. Here's one use case: A script that runs a batch of DevOps pipelines.

Windows Terminal

https://learn.microsoft.com/en-us/windows/terminal/

UAC: N
COSTS: Free
INSTALLATION: winget, zip, msixbundle

DESCRIPTION

When Microsoft decided to finally create a professional terminal they delivered in spades. Windows Terminal can run many shells--command, PowerShell, Bash--in a modern tabbed interface. In Windows 11 it has offically replaced the ancient command prompt.

Windows Package Manager (winget)

https://learn.microsoft.com/en-us/windows/package-manager/winget/

UAC: Y
COSTS: Free
INSTALLATION: msixbundle

DESCRIPTION

Winget is apt-get for Windows. It's Microsoft's answer to Chocolaty. It's built into Windows 11. And it's categorized by Microsoft as a developer tool. It's the easiest way to install and upgrade local software, saving developers hours of time. It reduces friction to keeping software up-to-date, which is great for security. For onboarding, a simple script can be created that allows setting up a development machine in 20 minutes instead of two (or more!) hours.

In short, winget is a great productivity tool fully supported by Microsoft.

NVM for Windows

https://github.com/coreybutler/nvm-windows

UAC: Y
COSTS: Free
INSTALLATION: exe, winget, zip

DESCRIPTION

Developing apps using Node has a drawback: by default you can only have one version installed at a time. The solution is Node Version Manager (nvm) for Windows. This mighty tool needs to run with Admin privileges because it installs and switchs the currently active Node version. It's a critical, time-saving tool for situations like upgrading versions.

ShareX

https://getsharex.com/

UAC: Y (exe, winget) N (zip)
COSTS: Free
INSTALLATION: exe, winget, zip

DESCRIPTION

You can pay for SnagIt and get an adequate experience. Or you can not pay for ShareX and customize your experience to be super-efficient. The time to learn this tool is well worth it. I use screen shots every day for writing documentation, creating bug reports, posting questions to other developers. Taking and editing screen shots should be as frictionless as possible. No other tool I've used does it better. You can even perform decent OCR and make short screen recordings and GIFs (very helpful for training). ShareX probably saves me a hundred hours a year.

Microsoft Remote Desktop (RDC) Manager

https://learn.microsoft.com/en-us/sysinternals/downloads/rdcman

UAC: N
COSTS: Free
INSTALLATION: winget, zip

DESCRIPTION

Sometimes you only have to log into one or two servers using Remote Desktop. But other times you need to log into quite a few and bounce back and forth between them. That's when RDC Man, from the venerable Sysinternals (part of Microsoft), is your friend. It's just a way of launching and organizing RDP sessions, but man is it helpful!

7-zip

https://www.7-zip.org/download.html

UAC: Y
COSTS: Free
INSTALLATION: exe, msi, winget

DESCRIPTION

Windows has Zip decompression built in. But 7-zip is still the tool to install when you regularly deal with compressed files. And developers deal with compressed files all the time. It's the best utility for the job, plus the 7z compression is amazing.

Oh-My-Posh

https://ohmyposh.dev/

UAC: N
COSTS: Free
INSTALLATION: exe, winget, powershell

DESCRIPTION

I do most of my Git work at the command line. I take advantage of aliases and the power that Visual Studio and VS Code don't have. The smartest thing I did a couple of years ago was install Oh-My-Posh so I can, at a glance, know the status of my repo. Just this utility has saved me from making dumb mistakes that would have cost me hours of time. I'd be foolish not to use it.

KDiff3

https://download.kde.org/stable/kdiff3/?C=M;O=D

UAC: Y
COSTS: Free
INSTALLATION: exe, winget

DESCRIPTION

Update 2025: I no longer use KDiff3. It's a good tool, but I've found that VS Code's Git 3-way merge is better. However, for folder diffing you need KDiff or something like it. (FreeCommander XE has folder compare, for example)

I'll admit right now I've never used Beyond Compare. I should evaluate it, for sure. In the meantime, what other file diff/merge tools are out there? VS Code does a good job and can be called from the Git CLI. Visual Studio's diff/merge isn't quite as good in my opinion. WinMerge--another free tool--is nice but doesn't open well from Git CLI. But it does compare folders, which VS and Code don't. And then there's KDiff3. It's hard to find the latest version of this tool, so use the link above. What I like about KDiff3 above the other tools is:

  • Opens quickly from Git CLI
  • Has the clearest 3-way merge experience
  • Shows character diffs
  • Has a good folder diff

Honestly, no tool magically resolves Git merge conflicts. They're all taking their best guess. So find a tool or two you like.

Insomnia

https://github.com/Kong/insomnia
https://insomnia.rest/

UAC: N
COSTS: Free | |Individual 5/mo | Team 12/user/mo INSTALLATION: exe, winget, zip

DESCRIPTION

Update 2025: My workplace uses Postman, so I haven't used Insomnia for a long time. I'm keeping it on the list, but I can't fully recommend it.

Postman is the big name tool for testing web services (e.g. REST APIs). But I . . . kind of . . . don't like it. Insomnia just seems like a tool focused on making the work easier, not selling me licenses. In fact, to use it for free, download from GitHub, install choosing local, and use the local scratch pad. I admit, that path is a little hidden, but it's a great way to try out the tool long term.

For QA departments, Postman may be a smarter tool and maybe it's good for developers, too. But I'd give Insomnia a fair chance.

Telerik Fiddler

https://www.telerik.com/download/fiddler

UAC: Y
COSTS: Free
INSTALLATION: exe, winget

DESCRIPTION

I don't reach for Fiddler every day. But on those days I need to know exactly what's going on with my web app traffic, I could either guess for hours or I can run Fiddler and know if a few minutes. It's an essential tool for that reason.

Ditto

https://ditto-cp.sourceforge.io/

UAC: Y (exe, winget) N (zip)
COSTS: Free
INSTALLATION: exe, winget, zip

DESCRIPTION

A utility I didn't know I needed until I had it, Ditto was demonstrated to me by a colleague a couple of years ago. I'm amazed how often I use it, not only for simple cases (I copied something to the clipboard ten minutes ago and have since copied over it. Ditto lets me get that previous copy) but for some power-user situations. I've used it to make several dozen entries where I needed to use three or four different copy-paste operations. A real time-saver!

Balsamiq Wireframes

https://balsamiq.com/wireframes/desktop/

UAC: Y
COSTS: Trial | Individual 129/maj ver | Cloud 2 project 90/year, 20 project 490/year (unlim users)
INSTALLATION: cloud, exe, msi, winget (To install w/o UAC, VC Redist must already be installed)

DESCRIPTION

I love Balsamiq. I've used it for years. It's delightful. It's keyboard-centric, making it quick to create wireframes. The results are, by design, low-fidelity, which signals to customers and users "this is not the final design." The cloud version has collaboration features (which I haven't used). Most of all, the company has made it a joy to use.

UltraFileSearch

https://www.ultrafilesearch.com/

UAC:Y
COSTS: Trial | Individual 25/maj ver | Team(5) 20/user/maj ver
INSTALLATION: exe, msi, zip

DESCRIPTION

You can search for files and folders in Windows. You can even power search--sort of--using arcane commands. Or you can use a dedicated file search tool. VS Code has some capability in this regard, but UltraFileSearch is one I like a lot. It's worth paying for. I'm always suprised just how much I have to search source code. Visual Studio doesn't cut it for refined searching.

I also like FreeCommander's file search.

FreeCommander XE

https://freecommander.com/en/summary/

UAC: Y (exe, winget) N (zip)
COSTS: Free (x32) | Individual 20/year ver (x64)
INSTALLATION: exe, winget, zip

DESCRIPTION

One day awhile back I got tired of having a half dozen File Exporer windows open. Really tired. So I evaluated most of the "explorer replacements" out there and, while several were good, only one let me do everyting I wanted: dual-pane for files, tabs, a pane for favorites, and a pane for the tree.

FreeCommander does much more than file management, but just being able to have one window where I can easily switch folders? It's amazing how much it streamlines my work. It also has a really good file search (though I like UltraFileSearch a little better for power use), batch file renaming, and customizable tool bar where, for instance, I have a button to launch VS Code in the currently selected folder.

Oracle VirtualBox

https://www.virtualbox.org/

UAC: Y
COSTS: Free
INSTALLATION: exe, winget

DESCRIPTION

Back in the day--decades ago--I fell in love with VMWare Workstation. It was the first app that let you install an operating system inside an operating system. It was--and is--magical. But VMWare is now a behemoth. Filling the desktop user's need is VirtualBox. What good is it to a developer? Simply, it's a relatively quick way to test software simulating a regular user's machine. This can be critical for debugging. In fact, I used it while compiling this guide to test every software installation!

Inkscape

https://inkscape.org/

UAC: Y (exe, winget) N (zip)
COSTS: Free
INSTALLATION: exe, winget, zip

DESCRIPTION

By all means, pay huge amounts of money to Adobe if you're a professional corporate designer. But if you only occassionly need to create sophisticated vector graphics, Inkscape is legend. It takes some effort to learn--it doen't hold your hand--but it's worth the time.

Paint.Net

https://getpaint.net/download.html

UAC: Y (exe, winget) N (store, zip)
COSTS: Free | Individual 10/maj ver
INSTALLATION: exe, winget, store, zip (github)

DESCRIPTION

To repeat myself, by all means feed the Adobe leviathan. Photoshop is king. But for most developers, Paint.Net is plenty for basic photo retouching. It's a great tool.

Git Demand Flow

The Issue

Plenty of research says using a trunk-based version control merge/branch strategy is highly effective. But what if a team isn't ready for this?

  • The trunk-based strategy expects that every commit to main is ready for production (assuming it passes all automated tests).
  • If a commit isn't ready for production, a great technique is to hide the change behind a feature flag.

Our team has this situation:

  • Commits need to be tested on demand.
  • But only some of those commits will be deployed to production right away.

For example, we may be working on a larger feature that--for various reasons--has to be released all together. For now, we cannot use feature flags and we can't easily add more discrete testing environments.

Git Flow seems like a solution, but it still expects to merge point-in-time commits into main.

Here is an approach we're trying. It maintains two independent--but related--branches: test and main. Release branches feed main.

Rules

  • No PRs to test or main without a story
  • Latest test can always be deployed to Test
  • A PR to test must be QA-ready
  • Latest main can always be deployed to Production
  • A PR to main must be production-ready

Work flow

I was tempted to use feature branches for longer-lived changes. But we already link stories to features, so using a feature branch in Git seems unnecessary.

It would also require lots of rebasing and forced pulls, the combination of which is asking for trouble.

Besides branching and merging, the flow below refers to tagging stories, moving them into columns, and triggering pipelines. We use Azure DevOps for all of this. You can ignore that stuff if you want, it's not required for the branch/merge strategy.

What matters most is we

  • PR into test
  • Cherry-pick into release
  • PR into main

Flow

  1. Developer begins coding for a story in a branch, e.g. clf/198222-improve-customer-grid-performance
  2. When the story is ready for QA:
    1. Tag story as Deployable
  3. When QA requests testing one or more stories:
    1. PR: merge clf/198222-improve-customer-grid-performance into test
    2. Tag test branch commit to trigger pipelines
    3. Remove Deployable tags
  4. When stories are fully tested
    1. Move to UAT Done
    2. If deployable to production, tag as Deployable for next release
    3. Move Deployable to Deploy Doing
    4. Branch from main to release/[datetime]. Cherry pick story commits into release branch.
    5. PR: merge release/[datetime] into main
    6. Tag main branch commit to trigger pipelines
    7. Delete story branches
    8. Delete Deployable tags
    9. Move to Deploy Done

Wrap Up

This flow seems like it will succeed in keeping both test--and especially main--branches clean until we're ready for trunk-based development.

   Older