The issue with this and JobTest is the way in which the sources and sinks are mocked in the JobTest. Since that is all in memory, the way in which data is passed around is very different. In our case we have to actually get the data on/off of a hadoop cluster as files, which means that we need to know how to serialize it. But I agree: we could definitely share some of the logic around args handling and stuff.

And yeah making it immutable is a good idea.