Chapter 10—Customer-Oriented Development The companies that have made customer relations a top priority have made many of their development problems disappear, including the problem of slow development. In the end, your customers’ perception of whether your development is slow or fast is all that matters. If you can satisfy you customers, you can satisfy your manager, your company’s brass, and everyone else. 10.1 Customers’ Importance to Rapid Development The number one reason that projects succeed is user involvement. Two reasons that you should pay attention to customer relations on a rapid-development project are: 1. Good relations with customers improve actual development speed. 2. Good relations with customers improve perceived development speed. A. Improved efficiency—customers sometimes don’t realize that a week’s delay in reviewing a key document can translate into a week’s delay in developing the product. B. Less rework—one of the costliest mistakes in software development is to develop software that is ultimately rejected by the customer. C. Reduced risk—establishing good relationships with your customers allows you to do a better job of identifying risks and monitoring them throughout the project. Some ways that customers can pose risk to the schedule: 1. Customers don’t understand what they want. 2. Customers won’t commit to a set of written requirements. 3. Customers insist on new requirements after the cost and schedule have been fixed. 4. Communication with customers is slow. 5. Customers will not participate in reviews or are incapable of doing so. 6. Customers are technically unsophisticated. 7. Customers won’t let people do their jobs. 8. Customers don’t understand the software-development process. 9. A new customer is an unknown entity, and specific risks are unknown. D. Lack of friction—when you don’t get along with your customers, you spend more time managing customer relationships. 10.2 Customer-Oriented Practices A. Planning Some planning practices you can use to build customer satisfaction into your project. 1. Select an appropriate lifecycle model. Provide you customer with steady, tangible signs of progress. 2. Identify the real customers. 3. Establish an efficient method for interacting with the customer. If at all possible, insist that the customer provide a single point of contact. There is no such thing as a rapid-development project in which you have to get the approval of six customer representatives for every decision. 4. Create a win-win project. 5. Manage risks. B. Requirements Analysis Customer-oriented practices increase the proportion of real requirements you can gather. Whenever you gather requirements, the challenge is to gather the real requirements. Sometimes the real requirements are in conflict with the requirements you gather. Sometimes discovering the real requirements calls for digging beyond the surface requirements. Customers tend to interpret requirements broadly, and developers tend to interpret them narrowly. Active customer participation can produce dramatic improvements in productivity, but it is not by itself a guarantee of success. Customer involvement can help development speed tremendously, but it isn’t sufficient by itself to improve productivity. As important as it is to involve your customers in specifying requirements, avoid letting the customers write the requirements spec entirely. Some practices you can use to involve your customers in requirements gathering: 1. Use requirements-eliciting practices that help customers figure out what they want (ex. Prototyping, JAD). 2. Conduct focus groups that help you figure out what the customer wants. 3. Videotape customers using the software. 4. Conduct customer-satisfaction surveys to obtain a quantitative measurement of your relationship to your customers. C. Design Employ design practices that allow your customers to change their minds occasionally. D. Construction Customers like progress more than promises, and they especially like progress that they can hold in their hands or see on their computer screens. Some customer-oriented practices that work well during construction 1. Employ implementation practices that create readable, modifiable code, which will improve your ability to respond to customer change request. 2. Use progress monitoring practices such a mini milestones so that you can inform the customer about your progress. 3. Select a lifecycle model that provides the customer with steady, tangible signs of progress. 10.3 Managing Customer Expectations Many problems in software development arise from unstated, unrealistic expectations. Customers sometimes think that if you’re done with a prototype, you must be almost done with the product itself. Part of your job as software developers is to educate your customers so that they understand software development better, which makes it possible for you to live up to their expectations.