hello_world_logo.gif (12859 bytes) maple_leaf.gif (1004 bytes)

This could be your company's banner advertisement

February 1999

Pilot Issue

About the Author

Jonathan T. Ng

Jonathan Tin. Ng
is a recent SoftEng. graduate from  Simon Fraser University.

Simon Fraser University

Hello World!
Editorial
News
Events
Sponsors
Hello World! Teams:
Editors
Sponsorship
Site Design
Member Universities
Past Issues

Developing Rapids:
Effective examples of how to drown your software development schedules

-- Jonathan T. Ng

There has been a lot of talk these days about Rapid Application Development. With the advent of development tools such as Visual Basic, Delphi and C++ Builder, companies are continually promised the hope of developing bigger and better software in less time. Furthermore, customers are equally excited about their new software arriving months ahead of schedule. Reality however, is often very different. In today's world, as our companies continue to strive to meet the false expectations of their own marketing departments and customers, software engineers are stuck having to make ends meet on the technical side of things.

How bad can it be, you might ask? As a recent graduate of a software engineering program at SFU, and having the chance to experience an array of different working environments, it is most unfortunate that far too many companies are jumping on the Rapid Development bandwagon without realizing what this entails.

Done correctly, Rapid Application Development (RAD) is possible, as author Steve McConnell points out readily in his book titled Rapid Development [McConnell, 1996]. However, McConnell is also very quick to point out that not every company can achieve this, and that more often than not, estimating software schedules is much like building a house without a clear floor plan. In my personal experiences, I have found this readily to be the case. I haven't yet found the perfect environment in which the delicate balance of satisfying customer demands vs. budget constraints has been achieved, but I certainly have found many examples in which this was attempted, but failed.

Here, therefore are my two biggest pet peeves. (I've listed some other ones too without examples) If you wish to ruin your software schedule, be sure to follow in the footsteps of some of these examples.

 

1. Staff your project with incompetent people

RAD requires proper staffing. According to McConnell, developing software in the shortest amount of time possible requires a team chosen from the top 10 percent of the talent pool. Even efficient and nominal schedules require at least the top 25% and 50% of the talent pool respectively. In one of my recent projects, I had the privilege to work in the role of a database administrator for a Y2K assessment and upgrade project.

The project essentially involved taking inventory of over 2500 PCs and Macintosh desktop workstations in a relatively hostile health care environment. I was told upon joining the project that we were already behind schedule and that I had only "a few days" to complete a prototype database in Microsoft Access that would be able to catalogue every piece of information about these workstations. This included hardware configuration, serial numbers, software, room numbers, and even user drive mappings! Seems simple enough of a task, I thought, although I promptly objected to the time schedule and platform. With my objections noted, I told my project manager that I would try my best to get the database done in time for the entry forms to arrive.

Along with a team of helpers, a map of the system was created using a simple entity-relationship diagram. By day four, we had already inputted the results of our fast prototype design into the database with some sample data and forms. Swell! Armed with this, I approached the project team with the prototype database design. This is when I began to notice the incompetent staff. Our database design was correct, but the paper forms used to collect the information had no resemblance to the electronic database. The designer somehow had the idea that repeating one set of information 3 times would be a good idea. I cringed at the thought of being a data entry person having to enter all the 2500+ paper forms when the forms were clearly not normalized!

The project did not cease to have incompetence problems. The day before we were due to arrive on the client site to begin our inventory, we were abruptly held back. Why? The management of the team had forgotten to purchase the 1600 licenses of an inventory program required to help assess each machine! Let's do some math. That's 1600 x $10 US a piece. That's over $25 000 CDN unaccounted for in the budget! It gets worse.

Among the team of explorers (people who actually went to inventory the workstations), the majority consisted of intern MCSEs (Microsoft Certified Systems Engineers) who essentially were fresh out of a series of career retraining courses. Most of these team members used to do other things, and now switched to IT as part of a career change. Although most of them performed adequately on the job, a few were completely dumbfounded when they encountered a Macintosh for the first time in their lives! Not only had they never seen such beasts, they were unable to figure out how to use them given the obviously biased knowledge they had learned from their MCSE course.

As a result of these and other mishaps in the project, the customer took advantage of our incompetence and tried to find every loophole in the contract to try to get us to do more than we had bargained for in the original Y2K assessment contract. Not only did this bring undue schedule pressure to an already overscheduled project, it brought undue stress to all team members involved. Within two weeks, 5 people (of 13) had left the project.

 

2. Methodology?! What's that?

A successful project always has methodology. This methodology may not be an established software methodology, but it must be one that works. A couple of years ago, I was working for the federal government on a biometrics research project. I was to help design a new product that would essentially bridge the interfaces between two numerical analysis programs. As I always do in my private consulting, I recommended that we hold a design meeting. Never had I been met with such opposition and surprise.

It wasn't until much later did I fully understand the strange "methodology" that they wanted to apply to the project. Being research scientists (and having heard the glories of rapid prototyping), my team thought we would go about doing this application by experimentation! When I asked them what their requirements were - I was told - "we really don't know yet, code us something, and we'll tell you if it sounds right!". Gotta love it, eh? These customers not only had false expectations, but they expected us to do our jobs in less time, without any methodology, and without solid requirements.

The project never got completed. As far as I understand, almost every developer since then who has attempted this has failed, because of the (nearly impossible) work requirements!

Well, there you have it. My two pet peeves about software engineering. Here are some more, but I will leave them to future months to elaborate.

3. Get managers who are over worked and only care about the bottom line.

4. Use the cheapest tools available. Also, if it comes from a big reputable software company - it must be good!

5. Your manager's schedule is always right.

 

Conclusion

The moral of the story is don't buy into the Rapid Development hype. Rapid development is possible, and when done correctly can be quite a miracle to watch. However, if you're a company or a team wanting to design a product or implement something for a customer, please save yourself some grief, and plan it correctly the old fashioned way! Chances are, if you've got one of the factors mentioned above, you're better off using old fashioned conservative schedule estimates and come out on budget than guestimate a "rapid development" schedule without the proper knowledge of what it entails.

 

References

[McConnell 1996] McConnell, Steve: "Rapid Development,
Taming Wild Software Schedules", Microsoft Press, 1996

Columns
MFC Corner
Development
Security
Feature Articles
Intelligent Search Algorithms

An Introduction to CGI Programming

Abusing Design Patterns

The Carleton Student Engineering and Computer Science Linux Initiative

Beyond Y2K

Linux: A General Introduction To A Great FREE Operating System & it's roots

What is a Hacker?

Neats vs. Scruffies: A Comparison of Two Methods of Developing Artificial Intelligence

Make Your Code Sexy

TCP/IP - A Brief Overview

The Months of the Pilot

February 1999

Pilot Issue

This could be your company's banner advertisement

hw_publegal.gif (2694 bytes)