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