I think a more CS way to think about it is shipping out a MVP vs. shipping out a 100% perfect, 100% feature complete, 100% bug free, 100% documented, product.
I think everybody would be happy to start a project and ship out that 100% finished product, but you'll spend your entire life working on this and die without succeeding because it doesn't exist. So the choices are to 1) not bother, 2) do what you can (MVP), or 3) work until you die as a failure. OP would want me to choose 1 or 3, it seems.
Choosing to work for a defense contractor with restrictions on projects gives them nearly as much benefit as without the restrictions. The fruits of your labor are still easily funneled into military projects and at a minimum they are keeping the company alive longer while serving the military.
This isn't someone doing 80% of what's required. It's them doing active harm to a cause while continuing to take credit for pretending to help.
I'm not an idealist. The world isn't black and white.
Of course. If you like to make ice cream and the only organization employing people to make ice cream is the mafia, you stop making ice cream professionally.
You should absolutely change jobs if your current one is immoral, and careers if it comes to that. This much is obvious.
The problem is in the hurdles making that difficult or unrealistic. In America, this process could leave you and your family homeless, maybe bankrupt if anything goes wrong. This fear leaves (maybe most) people in jobs they know to be immoral, and society is that much worse off because of it.
I think you should be doing whatever you can do* to create a society in which people are not forced to act immorally, such as you have been.
You can believe that people have a moral obligation to do good, without believing that people have a moral obligation to maximize good in every aspect of their lives.
Humans make mistakes; it isn't possible to live the "ideal monk" life. The real question is how small problems are handled? Compromising when the problem isn't a "big enough" ethical problem inevitably[2] pushes that boundary back in a cycle of normalized small, easily avoided deviances. Instead, if a hard line is taken against small problems when they are still small, a lot of larger problems can be avoided.
[1] https://en.wikibooks.org/wiki/Professionalism/Diane_Vaughan_...
Not seeing the distinction here. If you're an idealist the way hueving indicated and don't live as a monk, you're necessarily compromising on your values every day. And not on trivial or inconsequential things either, since you could easily donate to a variety of non-trivial causes.
What you're suggesting just sounds like reflexive goalpost-moving: the compromises I make are okay, the compromises others make are not.
"This ideology is impractical/contradictory but still effective in a group" is a potential valid point to make in another context, but irrelevant to what we were specifically discussing here.
Refusing to work for a defense contractor has a real long-term impact because you are depriving them of your labor. Working for a defense contractor but not on specific projects is meaningless because they still profit from you and support the military.
If you cut back on living expenses, you could give thousands every year to hungry kids or the environment or [insert good cause here]. Those are all things that really matter. Especially over the course of many years, you could make a real difference. You don't get to handwave away this point just because it's inconvenient to your argument.
You're trying to find a loophole in your own logic to excuse your own behavior that violates your self-proclaimed values. I get that nobody likes cognitive dissonance, but it's quite obvious you're not being internally consistent here.
You still eat meat in one of the most important times not to eat meat (in front of others) if you are truly driven by ethics for animals. You refuse to work on defense-funded projects because companies in your field have a pretend isolation mechanism (here's a hint: unless they are actually separate companies, they aren't isolated) that allows you to think you aren't supporting the military despite working for the company supporting the military.
This type of behavior shocks idealists. Even though it's better than nothing, just doing little bits here and there where convenient actually makes it harder to change the status quo for idealists (because you think you're helping when you're not).