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