software development factors