programs testing time programming source language needs open project cost computer company solution product work program management developer instance domain user application person education specific design employees applications important systems type needed practices code developers support name projects number process content customers business operating data customer create programmers requirements java tests good development option