I disagree that compromise is necessary. I've found that one merely needs to avoid any organization that routinely hires MBAs and HR directors as a good litmus test for whether or not the place will try to grind me down. That can be hard to do in software development, especially if you end up getting stuck in consulting[1]. Hence why I freelance now. I work 20 hours a week and I gross more than I ever did working for The Man.
People always tell me, "Oh, I could never do that, I like knowing I have a regular job," but they don't realize that A) they could get fired at any minute just because their boss doesn't like them, and B) I've had the same client for the last 3 years, which is longer than I've stayed at any job I've ever had before.
As long as you're working for someone else, as long as you aren't making the actual profit off of your work, your work will always be treated as a cost center, rather than an income center. You will never be paid the full value of your work, because there would be no point to paying someone to do the work if there were no profit in it for the employer. Ultimately, I'd like to get out of freelancing, but for now, at least freelancing lets me demand a higher portion of the margin. I've found it also seems to set me in a position of being a peer to my client (we are both business men) rather than a subordinate. It's a small difference that makes all the difference.
[1] It's incredibly hard to transition from a job in consulting to a job in a product-based software company. I think it's mostly that there are so few of the latter compared to the former, but I suspect the latter looks askew at people with a history at the former as well.