Why do you "try to minimize use of threads"? That's a pretty
silly goal, really.
Might be I misunderstand something but ...
"try to minimize use of threads": keep major parts of
products single-threaded and use multitasking (and savvy workforce)
only where it gives major performance advantages.
That strategy seems to be not overly silly because:
1) the number of programmers who can come out with sequential
algorithm of passable quality (or to maintain one) seems to be lot
bigger than number of programmers who can produce and to deal with
explicitly parallel algorithm for same problem.
2) different algorithms are less or more parallelizable and the number
of highly parallelizable algorithms seems to be lot smaller than
number of serial algorithms that are rather difficult to turn into
parallel. The serial-only algorithms are usually more robust and
also more efficient if ran single-threaded.
3) synchronization and thread safety costs something and it may be
not rational to pay that price where it is not needed (things may
still be "embarrassingly parallel").
4) despite decades of work by compiler researchers, automatic
parallelization has had only limited success.
I agree with rest of the post that suggested to learn and to understand
multithreading as marvelous tool, just that strategy to minimize its
usage do not contradict with that.