Since people are whining about "real life", here's how you do it;
You fire coaches, coaches leave; that already exists. The existing coaches do not accept salary less than what they made last year. The same is ok.
You have a pool of coaches that are available, and the salary they made last year; that is the baseline for the salary they will accept (maybe a little less, say up to 10%, maybe not)
You have an "interview" process; you invite coaches for an interview, they accept or reject the interview immediately (no cycle). You now have the pool of coaches with whom you can negotiate.
You have a cap on the number of interviews per coaching position - probably 5. You have intelligence within the software that will, behind the scenes, figure out that each team will not be shafted out of a coach by position based on the number of interviews and with whom. If a scenario is created where a team could be shafted, a coach with multiple interviews will reject the interview request, thus forcing the team to seek an interview with another coach elsewhere.
This interview process lasts 3-6 cycles.
Now, you have salary negotiation. Highest bidder on each coach wins. Because no one can get shafted out of a coach, worst case scenario is that an owner has to hire their least wanted interviewee.
No data is made available as to how many interviews that coach has. Thus, you may be bidding against yourself and only yourself, and never know.
This is the correct solution.
You're all welcome.