Dan was sitting in his office when Bill poked his head in. "Knock, knock…anybody home?"
"Come on in," said Dan. "What's up, Chief?"
"I have an apology and a question," said Bill. "Do you have time for either?"
Dan moved out from behind his desk and took one of the two chairs facing it, then motioned for Bill to take the other. "Don't know about any need for an apology, Bill, but I always have time for my Director of Development. What's on your mind?"
Bill fidgeted for a moment, then said, "I want to apologize for some of my comments this morning. I think I was too gruff or blunt, as usual, and it wasn't called for."
"Apology accepted, Bill," said Dan, "although frankly, I'm not sure it was as bad as you seem to think."
"Probably because you're all getting used to it," said Bill with a dry laugh. "That doesn't make it right, though, and I felt like I needed to say something to you about it."
"So what's causing you to feel so tense, Chief? I would have thought that by now you would have realized that we're all on the same team."
"I do when I stop to think about it. Part of it is the new ways of doing things on this project, and part of it is the tight schedule we're working on. You said yourself that we're working under the gun. Now that we're actually building RMS, all of us in development are really feeling the heat, me especially. And that leads to my question."
Bill hesitated, took a deep breath, and said, "You know we've got Beth and Sam as the primary developers on the project. Well, I've run into a problem that I don't know how to solve, and I want your advice."
Dan waited for Bill to continue. "I guess the best way to put it is that both Sam and Beth are slowing us up, but in different ways. I'm afraid if I don't figure out how to deal with them, we're going to miss our target dates."
Dan whistled. "That's a problem, all right. I'm glad you came to see me about it, although I certainly wouldn't have expected this. I mean, Sam and Beth are both excellent programmers. What sort of problem could make them both turn into stumbling blocks?"
"It's kind of strange, really," said Bill. "They are almost mirror images of each other. Let's start with Sam.
"Sam is an excellent programmer, with what I call a 'programmer's mind.' He usually comes up with creative solutions, ones that other programmers look at and realize they would never have thought of. That's his strong suit—his ability to find creative ways to solve the programming challenge. He just seems to sense intuitively how an app should fit together. As a result, he is also one of our fastest coders."
"So what's the problem?" asked Dan, puzzled.
"He's sloppy, plain and simple," said Bill. "Once he has figured out the proper algorithm, he just doesn't care about the grunge work of writing all the supporting code and such. He makes careless, stupid mistakes, then doesn't take the time to double-check his code. We're having to go back and clean up his work after he thinks it's finished, and it is slowing us down."
"I've known people like that at other companies," said Dan. "What's the problem with Beth, then? I have a hard time imagining her writing sloppy code."
"No, she writes immaculate code, and that's exactly the problem," said Bill. When he saw Dan's confusion, he continued, "She writes perfect code, Dan, but she takes forever to do it. She turns out one component for every four of Sam's. When she finishes her pieces of the project, they will be documented to the hilt and will have everything lined up perfectly and working smoothly—but she won't finish, at the rate she's going, until sometime in 2001. I just don't know what to do."
"Hmmm." Dan got up, walked over to the window and looked out for a moment. Then he turned and leaned against the windowsill. "You know, Bill, this isn't unusual. Programmers often fall into one of these camps—either the creative genius too busy writing code to be bothered with details, or the detail-oriented by-the-book type who writes more comments than code and is scared to let his or her creative juices loose. The key, of course, is to get them to cross-pollinate." He thought a moment more, then snapped his fingers. "That's it!"
"Cross-pollination, of course. It's the only way."
"I don't know, Dan," said Bill, "I think Sam may already have a girlfriend."
"No, not like that," said Dan, laughing. "I mean we've got to get their good habits to rub off on each other, while at the same time keeping the bad habits in check. Here's what you do." Dan outlined his plan.
Bill looked at him in admiration. "You know, that's one of the best ideas I've ever heard. I've always wanted to do something like it, but I never would have thought of it in just this way. I see now why those IT folks at your old firm thought so highly of you."
Dan looked surprised. "How do you know what they think of me?"
Bill smiled as he rose to leave. "You're not the only one with contacts in other companies, you know."
"Come on in, both of you," said Dan. Marta and Mike walked into his office and sat at the small conference table as Dan brought his notepad over and joined them. "How is the testing going, Marta?"
"Well, here is the chart showing all the items to be tested and the results," said Marta as she handed Dan a number of pages stapled together.
"Wow, this is impressive, Marta," exclaimed Dan as he perused the various pages. "How did you produce this? It looks like an Access report."
"It is, sir," said Mike. "As we put more and more pieces through the test harness, and as we began testing features, it was getting too confusing tracking them on paper or on a whiteboard. So, I built a simple Access database. Also, I modified the test harness to write the final results of its tests directly to the Access database, so that we can compare results over time if we test something more than once."
"Cheap regression testing—good idea," commented Dan approvingly. "I see you've also listed your target metrics."
"Yes, it didn't seem prudent to do any sort of performance testing without also having something to compare against."
Dan continued looking through the numbers and notes, taking in the various tests and their results. He suddenly stopped and looked up at Marta. "What is this circled test on page four? It looks like a pretty significant miss of the mark."
"That's the problem we want to talk with you about, Dan. The test you're looking at is the new method Bill mentioned at our last full team meeting. Remember, the one about listing timesheets to be reviewed?"
Dan nodded. "Sure, I remember. Didn't seem like any big deal at the time. What's this performance gap I think I see, if I'm reading the chart correctly?"
Marta shifted uncomfortably in her chair, and then looked at Mike. "Why don't you explain it, Mike? I don't want to let my lack of understanding get someone else in trouble."
Before Mike could say anything, Dan said, "No, Marta, you're the head of Testing, and it's your job to present the problem calmly and clearly so we can deal with it. If you've mistested, we'll find that out only by examining the problem directly. And if you're right, you've done your job and kept us from delivering a bad product. So, you tell me, not Mike. What's the problem here?"
Marta took the chart and pointed to the last set of numbers. "When we started doing the testing, we didn't set metrics for individual objects, we just recorded the results. When we started testing features, though, Mike and I set target metrics for response time, based on what we thought was reasonable."
"Sounds good to me. Go on."
"For the feature of calling up all the timesheets to be reviewed, we set a target metric of 5 seconds for the record set to appear. That's the number you see in this column."
"Got it. Then this next number must be the result of the test, correct?"
Marta nodded. "That's right. As you can see, the result set came back in approximately 2 seconds."
Dan looked confused. "So what's the problem? They hit the metric with room to spare. I must be missing something."
Mike shook his head. "No, sir, you're not missing anything; there's another test we haven't told you about yet."
Dan smiled. "In other words, 'shut up and let us finish.'"
Mike grinned. "I wasn't going to put it that way, but as usual, you have correctly assessed the situation."
Dan laughed out loud. "I've been accused of having some politician in me, Mike, but I believe you have me beat. Alright, I'll be quiet, and you tell me about the other test."
Marta took control of the conversation again. "The results for the first test are based on the test data Bill and his team are using in their daily work, Dan. Mike and I wondered, though, what might happen with a larger data set. After all, Ferguson and Bardell has over 800 employees, so a year's worth of timesheets comes to over 40,000 rows of header information, not to mention the individual timesheet line items. We decided to find out."
"So," continued Mike, "I created a copy of the SQL database, then created about 30,000 sample timesheets with some random data in each one. Took me about an hour to figure out how to do it so that I could guarantee enough randomness to make the tests meaningful. Then, we tested the feature against the substitute database."
"And," concluded Marta, "the results were different. Significantly so, in fact. That's the number you see in the last column."
"Fifteen seconds?!" Dan couldn't believe his eyes. "That's horrendous! Why, with response like that, some of our users will assume their machine is locked up and reboot it. We can't live with that." He stopped and looked at Marta. "But, I still don't understand why this is your problem. It seems to me that this is a problem for Bill's crew."
Marta looked even more troubled. "It would be, if they were willing to accept it."
"Ah, I see," said Dan quietly. He paused a moment, then asked, "So which is it, they deny the results are valid or they think the metric is unrealistic?"
"Both," said Mike, his shoulders slumping slightly. "Even after I explained the testing procedure to Sam, he said I didn't know what I was talking about. They claim that the metric should be more like 10 seconds, and that the new machine we'll be using for SQL Server will get the results down to that."
Dan thought for a minute, then said, "I think a 10-second response time is at the outer limits of acceptable, especially when you consider that we'll be at 1200 employees by this time next year. Their comment about the new server, though, may be valid." He sat back in his chair, his chin on his chest, thinking through options. Finally, he said, "Here's what I would do if I were you." Picking up his notepad, he listed several steps for them to take. When he finished, he turned to Marta. "Do these make sense to you? Do you think they will work for you?"
She looked at the list dejectedly. "We can try them. I'm not sure what Bill will do, though."
"He's not a crazed grizzly, Marta; he's just a protective mama bear who looks out for his cubs. Show him the truth, though, and he will come around. Just ignore the growling."
Tim moved straight to the credenza and grabbed a pastry in each hand. "What's the occasion, boss-man? You finally break 100 hitting the little ball with the big stick?"
"No, Doughnut Dude, that's not it at all, even though I did break 100 last weekend," said Dan as the rest of the team gathered in the big conference room.
Jane snorted. "Aren't you awake yet, Tim, or have you really forgotten that today is the Scope Complete Milestone meeting?"
Tim exclaimed, "Whoa, that's right! I did forget." As Bill came into the room, Tim thrust an eclair at him. "Congratulations, Chief!"
Bill looked at the mangled pastry in disgust while the rest of the group laughed. "No thanks, Tim; you eat mine for me. Looks like you've already got a good start on it."
"Don't mind if I do." Tim downed the eclair in one bite.
"Alright, everyone, let's get started. Dan looked at the agenda in front of him. "As usual, the first item is Agenda Building. Does anyone have anything to add today?"
"I do," said Bill quietly. "I've got something I'd like to say when we finish the agenda today."
"Alright, Bill," said Dan as he added Bill's name to the bottom of the page, thinking, "I wonder what that's about."
While all attendees opened their project binders, Dan continued. "As Jane has already noted, today is supposed to be the day we hit the Scope Complete Milestone. Let's begin by reviewing the two internal releases we've done."
The team spent about 30 minutes discussing the alpha and beta releases of RMS. The alpha had been distributed only to members of the project team, and the beta had been released to a small group of users enlisted by Jane and Marilou. Overall, both releases had gone well, with the beta release revealing some especially important issues to be addressed.
"You know, Dan, that was sort of sneaky, what you had Marta do with the beta," said Bill, looking up at Dan with a slight smile. Marta looked at Bill, uncertain where this was going.
"What do you mean, Bill?" said Dan innocently, even though he knew exactly what Bill was referring to. "I don't recall doing anything sneaky."
"Oh, you didn't do it," replied Bill. He looked at Marta as he said, "You just had her and Mike do it."
"Well, Bill, it seemed to be the only way to get you and Sam to realize Marta was right," said Dan. He was wondering whether Bill was about to deliver some sort of angry declamation or biting commentary, when Bill grinned somewhat ruefully and said, "Well, it certainly was effective. Got my attention, as well as Sam's. Pretty effective, yes sir."
"Would somebody clue the rest of us in on this big trick Dan had Marta pull on you?" asked Jane.
Dan and Marta both started to explain, but Bill cut them off. "Here's the scoop. Marta and Mike, in one of their tests, thought they found some response times that were below standard, especially in the timesheet review feature. They tried to tell Sam and me about them, but we blew them off, saying that their metric was unreasonable and that a better box would take care of it. So, they bided their time until the beta pilot group was working with the Win32 client, and then they sprang their trap."
"It wasn't a trap," said Dan. "We just wanted the beta to be as realistic as possible."
"Well, it certainly was realistic, down to the phone calls and e-mails I started getting!" said Bill with that same rueful smile. "After we had installed the beta RMS app on the pilot group's machines, Marta, Mike, and Tim switched the back-end SQL database to one they had prepared with 50,000 timesheets in it. The response time blew up to about 13 seconds, and the users blew up at Sam and me."
"What about the faster box as the answer?" asked Jane.
"They took care of that, too," said Bill. "I went over to complain, thinking they were still using that P-100 we'd been testing with. Turns out Dan had called in a favor from our hardware guy, and he'd brought over a brand-new quad processor box that was four or five times the box we had originally spec'ed. So, it clearly wasn't the box. Sam and I had to admit that the response time was too slow, and the code was the problem."
"I'm really sorry, Bill, but I just couldn't see any other way to convince you," said Marta, obviously distraught.
Bill scowled. "Now you listen here, young lady. You did exactly what you should have done. Sometimes the only way to convince a hard-head like me is to let me lie in the bed I've made. Don't ever apologize for doing your job." He paused, then continued, "Reminds me of when I helped put in one of the first real-time gunnery computers. We had a gunnery chief who didn't trust these new-fangled devices and always argued with us when we showed him the gunnery numbers the computer put out. One day we ran the computation, and he told us we were wrong and we were tired of his attitude. So I asked him which numbers he wanted us to use, his or the computer's. Of course, he was on the spot, so the only thing he could say was to use his numbers. We overshot the target so badly we almost hit a destroyer." Bill laughed at the memory. "He realized his stubbornness came close to causing a catastrophe. He's not the only sea dog who needed to learn that lesson."
Jane smiled and patted Bill on the arm. "At least you learned it."
"Enough mushy stuff, said Tim. "I want to hear what happened next!"
Bill laughed. "Well, after Sam and I each got an earful from every one of the beta testers, we decided we'd better look at the code. Turned out, in his hurry he had used a particularly inefficient method of getting the record set. It didn't show up with a small table, but popped right up whenever the table grew beyond 10,000 rows. He changed the way the method worked, and the response time dropped to under 5 seconds."
Everyone clapped as Bill shook hands with Marta, who was obviously relieved. "I'm sure glad that turned out as well as it did," she said. "Now I've got a question for you, Bill.
"Mike and I noticed that at one point Sam was turning out code much faster than Beth, but that it wasn't always very good code. Some of our test harness trials failed, and it was almost always Sam's code that was the culprit. Then, we began to notice a change, until by last week Beth had caught up to Sam in quantity and Sam had almost caught Beth in quality. What happened?"
Bill and Dan exchanged looks. "Sorry, professional management secret," said Dan. "No can share. That's why Bill and I get paid the big bucks."
"Hey, no fair!" exclaimed Tim. "I want the big bucks too; remember, I'm the one with the student loans that I'll be repaying till 2020! Cough it up, guys."
Bill leaned forward conspiratorially. "Two words, Tim: code review."
"Code review?" said Marilou. "I thought we talked about a third-party review and decided we didn't have the time."
"I didn't say third-party, did I?" replied Bill. "This was second-party review." Then he chuckled. "Actually, it was Dan's idea. And it worked like a charm."
"Very simple, really," said Dan. "I told Bill to have Sam and Beth start each day by reviewing each other's code from the day before. Beth saw how much more code Sam was turning out, and her output picked up immediately. Sam saw how much cleaner and mistake-free Beth's code was, and his quality started picking up. Neither wanted to be shown up by the other. In the end, we included the code written by the other contributors to the project, and rotated the reviews. It didn't add that much time to the project, and it greatly improved both quantity and quality." He looked at Bill and said, "Of course, it only worked because we have good people working in development, who want to do the best work they can. That's a commentary on their manager and his ability to hire, train, and retain good workers."
Bill nodded his thanks. "So, are we there? Have we hit Scope Complete?"
Dan moved to the overhead and said, "Let's look at the deliverables and the objectives and see if we're there." The team worked through the deliverables list, checking off each one as the documents were placed on the conference table. Finally, Dan said, "OK, it looks as if we've covered all the deliverables. How about the objectives? Can someone call them out so we can see if we agree on them?"
Jane began. "Agreement on the planned feature set, and whether or not it has actually been developed." She picked up the revised Functional Spec and read off each feature set. The team discussed whether they and the users agreed that the feature set should be part of Version 1, and whether or not the beta reflected the feature appropriately.
When they had worked through all the feature sets, Dan said, "Alright, it looks like we feel the current version hits all the feature sets. Now what, Jane?"
Jane looked at her notes. "Baseline materials to support user performance."
"How about it, Marilou and Jane?" asked Dan. "Have we got all we need to support the users?"
Marilou nodded. "I was worried about it at first, because it looked like I would never get a frozen user interface to work from. But when you put me into the dev team meetings, I was able to start getting what I needed sooner, and in the end we hit the schedule, although it was close."
"Good," said Dan. "I'm glad that worked out." He turned to Tim. "What about you, Tim? Are you and your staff ready to roll out all the pieces of RMS?"
Tim nodded. "Yes, we've got a pretty good set of support documents, if I do say so myself. And of course, the incident with the AutoCAD server pushed us to another level of professionalism as far as test beds and production servers are concerned. We have added a number of topics to our overall network management notebooks, and my staff is much more aware of the logistics issues involved in rolling out a new application. I think we're ready for the next phase."
"Which leads us," said Jane, "to the last point: the stabilization process, including application pilots and additional testing."
"And that means Marta and Tim," said Dan. "Are you both ready for the next phase, since you two drive that phase together?"
Marta nodded. "I wouldn't have believed it when we started, but I actually feel confident about our testing methodology, and I also feel confident in my grasp of the issues. Tim and I have already met to plan the work, and we believe we are ready."
"Excellent," said Dan as he closed his notebook. He looked at the team members one by one. "The final mark of the Scope Complete Milestone is that we have a product that is ready for testing and has no additional feature code to be written. It may have bugs, as we discussed earlier, but there is nothing standing in the way of handing it over to the stabilizing crew. Are we there?"
Each person nodded, and Bill said, "I think we've written a very strong version. Sam, Beth, and I agree that we're ready to hand it off. In fact," he continued as he reached into his bag and brought out a CD-ROM, "we burned a final copy of the Win32 client last night for Marta and Tim. It isn't the final release, yet, but it's looking pretty golden to us." He handed it to Marta and said, "Test it in good health."
"Thanks, Bill. Here's hoping we don't find anything that needs changing."
"If you do, don't hesitate to come right to us and tell us. We don't want to hit any destroyers." Bill turned to Dan. "I asked for a moment at the end of the agenda. Are we done?"
Dan started to nod, but Jane interrupted him. "Wait a minute. We can't be done with this milestone. Our customer isn't here for it."
"That's right," said Marilou, "no Jim. Where is he, anyway?"
"I forgot to tell you," said Dan. "He and I met yesterday afternoon late, and we went over the same points that we just went over this morning. He had already seen the beta, and feels that it meets the aims and goals for Version 1. He told me he thought it was good to go, but that the final decision was up to us this morning."
"Sounds like the trust level is going up," said Tim. "That's a good thing, I think."
"In fact," replied Dan, "Jim specifically said that if we were satisfied with it, especially Bill and I, that was good enough for him."
"And that leads to my item," said Bill. He looked at the members of the team before he continued. "As you all know, I've been pretty much of a naysayer throughout this whole process. I thought the MSF thing was just a bunch of needless overhead, and I resented having non-programmers involved in a development project. Well, I was wrong."
He paused as if to let that statement sink in for a moment, and then continued. "In the beginning, Dan said that his goal was to make the development department look good. It remains to be seen whether that comes to pass. But what I'm convinced of, now, is that doing development this way ensures we won't look bad. The Envisioning Phase makes sure we build what the user really needs. The Planning Phase helps us be realistic about that and not make promises we can't keep. And doing the Developing Phase as we have, with a team working together to cover all the bases, has kept us from making a big code boo-boo that wouldn't have shown up until about a year from now, when we hit table sizes as big as we tested for last week. The long and the short of it is, I've seen how this process keeps my folks and me from failing. That is worth a lot to me. If we look good when it's over, that will just be icing on the cake."
After a moment of silence, Dan said, "Bill, thanks for those comments. I had never thought about it, but I think you are exactly right. Doing development this way is a good insurance policy. My goal, though, is still to make you and your people the heroes when we're done. We'll see if we hit that goal."
Leaning back in his chair, Tim said, "Well, all this feel-good talk reminds me of eclairs—mushy and sweet! Mmmphh!" Tim shoved the last eclair into his mouth.