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