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