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