All of us would like our projects to come together like something out of a textbook, perfect and with few, if any, problems. However, in the real world of rapid application development, we find many things break early and often. In my experience and in the experience of others who contributed their experiences to this page, the problems often arise from conflicts with non-technical management, technical managers whose technical skills are outdated and the political infighting that can surround a software project.
Here are a few examples gleaned from real world experiences in doomed projects and death marches from my own experiences and those of friends and associates. Most are told from the perspective of a lead developer or the development team. While most are from Visual Basic projects, some are from other types of projects, including C/C++ and Delphi ones.
Treat them as both shake-your-head-in-disbelief humor and as cautionary tales of what can easily happen during the course of a project.
Design and Project Startup Phase
* You schedule JAD sessions with your internal client department. One or
more key players won't be able to attend the sessions because of sudden
scheduling conflicts. Your manager says that you have to have the meetings
anyway. The person or persons who weren't able to attend later attempt
sabotage the project out of spite.
* A manager in the client department with a reputation for being uncooperative and difficult to work with has been promoted ‘out of the way’ into a ‘do nothing’ position. She did, however, have a lot of input into to the project design at the start. Therefore, she constantly works to undermine the project hoping to score political points against rival managers in her department.
* When you attempt to draw up uses cases, object models, GUI prototypes, development schedules, and so forth your boss complains that you aren't showing any progress on the project. He wants to know why your team isn't coding.
* You submit a tentative development schedule to your boss. He, in turn, shows it to his boss or an executive committee. They decide that you don't need so much "fluff" in your development schedule like use cases and prototypes. They remove them from the schedule and tell your boss that they expect you to start coding now.
* In order to begin development work, you must have the project sponsor to sign off on the design. Of course, they give cleaning their coffee cup, sleeping in their office, and complaining to their management about your lack of progress a higher priority. Eventually you have to start developing without a formal signoff due to pressure from your boss. This leaves the project sponsor free to complain about the results later or even reject the project entirely.
* If your manager does allow you to do things like drawing up uses cases, object models, and GUI prototypes, and reasonable schedules, his bosses will view him as being incompetent and/or indecisive. He'll be fired or reassigned as a result. A ‘results oriented’ manager (aka a total jerk, a Bill Lumbergh type) will be brought in to replace him to get you back on track.
* You submit your scheduled milestones to management. They cut them in half to meet an arbitrary "drop dead" date to deliver the project that totally ignores your schedule and your staffing needs. Amazingly, this will usually coincide with the annual sales meeting, a merger, an industry event, or even the day before the boss wants to leave on vacation. To meet the new schedule, you will have to hack the entire app together quickly rather than having reasonable project milestones.
* When staffing a project, your manager and/or human resources hires employees and/or brings in contract help based on their cost, not their experience and skills. As a result, you have developers on your team who you will have to train as you go or who are simply dead weight.
* You are handed a GUI design that's completely unworkable. You are told that you must implement it anyway.
* The required GUI design prevents the use of standard Windows controls. This will increase the development time required, but you aren’t allowed to reflect this additional work in your schedule.
* Higher-ups make the decision that the GUI design must incorporate the latest graphics from marketing so that the application will match brochures and other advertising copy. However, marketing refuses to give the team any graphics at all or only provides graphics in a proprietary Mac format that can't be converted.
* Marketing gets into a cooperative mood after a little prodding and provides the necessary graphics. However, when they see a prototype of your app, they complain bitterly that you've ruined the graphics presentation. They even bring a Pantone color wheel to a design session to show you what you did wrong. Unfortunately, they don't understand that your specs call for a maximum of 256 colors or 'web safe' colors. They withdraw their support and proceed to trash your project to company executives.
* Powers that be within the company have decided to use a complex design methodology on all software projects. Of course, the methodology is completely at odds with rapid development strategies and requires a lot of additional work. However, you can't reflect this overhead in your schedule.
* You have already developed a successful application for your division of the company. Upper management likes it and decides that it could be implemented in another division with just a few modifications. When the other division sends you their change requirements they’re much more than ‘just a few modifications’. In fact, it almost calls for virtually a completely new application. Of course, the ‘just a few modifications’ project schedule is the one that stands.
* Your project is stuck in design mode. Sponsors refuse to sign off on the completed design specs so that you can start coding and seem to stall at every turn. Your management seems relatively unconcerned about this although they expect your team to do a lot of ‘busy work’ and status reports but insist that you should not do any actual coding. Suddenly, your whole team is reassigned or fired. You discover that the project was intended to support some executive's political position and your team was the sacrificial lamb when this political maneuver failed.
Coding the Application
* There is a company wide reorganization or the company is sold to another company during the course of your project. Management and/or sponsorship of your project gets shifted to a new group who has completely different ideas about the product should be done. Of course, no adjustment to your schedule or staffing is allowed.
* Your project's sponsor goes to another company or position. The new sponsor decides that you should start over again with her ideas, although you're 3/4 of the way through the original project. Once again, no adjustment to your schedule or staffing is allowed.
* To meet the accelerated schedule your team codes like crazy and delivers the first cut of the product to QA testers. The QA testers can't figure out how to install and run the app but they don't tell you this for several weeks. They complain to management that you haven't delivered a "testable" product to them yet (behind your back, of course).
* Since the project is being proclaimed a failure at this point by it's sponsors and QA, your manager decides that you and your team aren't motivated enough. He decides to have daily 9:00 a.m. and 5:00 p.m. status meetings to help track your progress or lack thereof. These two hours of meetings aren't reflected in the schedule either.
* The division that’s sponsoring your project gets impatient with your progress and sends over one or more ‘black belt’ programmers to help you out. Sadly, even if they are really programming ‘black belts’ it certainly isn’t in the technologies you’re using on the project. But, this won’t stop them from stepping in and recommending and even implementing wholesale changes that impact your project schedule and kill your productivity and team morale.
* Office space is tight and management's solution is to crowd programmers in like sardines, oblivious to the effects of this arrangement on productivity. Supply closets without air conditioning vents are a particularly popular place to squeeze 4 or more heat producing bodies and computers into. Or, they acquire temporary additional space but to save money on furnishings they seat programmers at rickety portable tables and cheap stackable chairs instead of actual cubicles or desks with decent office chairs.
* Your manager gets chewed out by his manager because of your 'lack of progress' on an unrealistic schedule to meet an arbitrary deadline. In turn, your manager calls a team meeting where he cusses out the team and questions their ability as programmers.
* The company CEO or other VIP stops by to see your project and is somewhat disappointed by the lack of progress. He asks if it would be a good idea to add a second and third shift of programmers to help complete the project.
* Due to economic conditions everyone is fearful of loosing their job. They know there are a dozen unemployed programmers who would take their job ASAP. As a result, a rosy and unrealistic picture is painted when discussing the course to the project with upper management while the development team knows how troubled the project really is.
* Your manager, fearful of loosing his job, tells upper management that everything is on schedule. That is on the highly aggressive schedule that has no basis in reality that upper management expects. The development team is then browbeaten into accepting the new, unrealistic, schedule even when they know it can't be done. Of course, the team's manager makes an effort to hide the real situation from upper management.
* The upper managers decide to bring in an outside consultant to analyze what's wrong with the project. The consultant requests a lot of busy work, such as documenting procedures and code that's still under development, that takes the team away from their development work. Of course, the schedule is not changed to reflect this distraction. The project team has lengthy meetings with the consultant so that he can put down the development team's skills in detail, even though he hasn't written a line of code in 20 years and certainly never done any coding at all in the language you're working in.
* Management brings in an outside consultant to evaluate your project. His conclusion? Replace the programming team with people from his company.
* When your manager has a meeting to review the project schedule, this means the entire project schedule, not just the current or relevant items. Even action items that are not slated to begin for several months must be carefully reviewed. Of course, these long meetings aren't on this detailed schedule.
* Upper management decides that cause of your group's perceived lack of productivity is because it isn't being managed enough. Therefore, four more managers are assigned to 'assist' with your project.
* Your manager goes on a lengthy vacation while the rest of the team is denied even a day's leave.
Deploying the Application
* 3 or more departments are given "go-no go" authority
on deploying your project to internal clients. Of course, the managers of
these departments are at odds with each other and demand changes that the
other department heads won't accept. You get into a cycle of making a change
for one department only to have it rejected by another.
* You get a call from the tech support department. It seems a customer is having a problem with your new product. You tell them that the product isn't shipping yet and you call the customer yourself to check out the story. They do have the product and you ask them how they got it. After a little investigation, you discover that their salesperson had taken an internal beta of the program from the QA lab and had it installed at his customer's site. All of this was done with the permission of upper management so as to meet last quarter's sales quotas.
* You are forced to deliver the product to users before it's ready in order for sales people to meet their quotas or for it to be presented at an industry event. You then spend the next several months doing the work you originally scheduled for but you weren't allowed to complete.
* Your team actually completes the project when you originally said it would be done. Of course, everyone has forgotten this by now.
* The sales manager, who has made a huge commission/bonus on the sales of
the new product, well into 5 figures, decides to reward the development team.
His idea of a reward: a "PayDay" candy bar for each member of the team.
* After slaving away on a money making project for the company, your team asks for a simple item to commemorate all of their hard work. Your team and your manager decide on a polo shirt with the product logo stitched on it. After waiting and waiting the big day comes. A company-wide meeting is called and the your manager's boss, after praising the team, says, "The project shirts are here." Everyone applauds. The boss follows up by saying, "Anyone who wants one will need to cut us a check for $49.50."
* The program has serious problems due to the highly aggressive development schedule and/or serious design flaws requested by project sponsors. The answer: fire the programmers involved.
If you have your own project horror stories please pass them along to me and I'll add them to this article (and give you credit, if you want). In the mean time, don't forget your TPS reports.
Copyright 2000-2005, J. Frank Carr