I hate the NFL system because that sport by its nature absolutely chews up the bodies and sometimes minds (concussions) of its players. And for that players can be cut at any time or be forced to "renegotiate" their contracts or be cut. The only way I can see to make that system fair is to make employment at-will on both ends - the owners can cut a player whenever they please, but the players can also quit a contract when they want. To keep the backstabbing at a minimum players could only sign with another team at the start of the following year, not jump teams from week to week.
The NBA is at another extreme - one that favors the players getting paid almost without exception. You offer and sign the contract, you're paying that amount, barring a buyout later on. This leads to players who aren't able or willing to contribute still collecting huge paychecks. In the NFL the owners can screw the players at will; in the NBA it's sort of the reverse, once the contract is signed.
What I'd like to see in both leagues is a compromise structure - say, a team can cut a player, but a set portion of the remaining salary agreed to in the contract must be paid to the player. The % of guaranteed money should be somewhere around 50%, and on a sliding scale based on league experience. The guaranteed money you pay still applies to your cap, but not your luxury tax figure. So, teams can cut their losses by getting rid of a non-contributing guy (NFL system) but they are responsible for some of the money they promised at signing (NBA system). Protects the owners from players slacking, without letting them completely write off the mistake, and gives the players financial security beyond their next paycheck, as well as cutting down on trades for financial reasons. The biggest problem with this is that the wealthiest teams could sign players with impunity, knowing they can just cut the guy and write it off, but they do this in every system currently used anyway.