I reject the idea, that because I want to scale, I should have to write thread pools, executors, concurrent queues, and task completion APIs. This is 2012, any idiom, functional or not that doesnt support this as a built in capability is less than worthless. How many times do I have to write, rewrite and debug the obvious just to make a living? And as for the factory pattern, yes you can use it to hide a whole bomb load of configuration and code evil, that you probably should never even have to worry about, if you werent working in such a crap tool