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