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