Software Development Costs: How to Estimate and Reduce