To say that it is depressing is to say nothing. That is, for six months (or more) people were sitting, doing something, getting paid for it. And in the end we have this. Copy/paste design superimposed on the copy-paste code. And they didn't even bother to check the values of the variables in the code! So what have these people been doing for six months?
Having watched projects from the Financial QA Analyst (Testing) side I can give a plausible answer to this question. I was in all the meetings that I will describe and watched this process happen again, and again, and again, and again… The grunts doing the actual coding have zero to say about what the code does. It is simply their job to take the specifications and make them function, as best as they can.
Their direct Management is in contact with upper management who makes the actual decisions. Upper Management can make changes on the fly, and on a whim, not caring or knowing what effects that change will have ‘downwind.’ The PM (Project Manager) is kind of a moron who thinks they can manipulate time and make things happen much faster than they actually can.
So Upper management (The Big Chiefs) made the decision for this new ‘product’ in FoE. Meetings were had, lunches eaten, plans discussed… They all agreed on a certain plan of action and set it in motion. Functional Specifications were written up and approved. Financial estimates were made, based on those specs, and approved. The PM drew up a timeline for the project and it was approved. All down the line, approvals, approvals, approvals.
And everyone was happy!
Coding starts.
Upper Management, in all their wisdom, decides on a change. It goes through the change process and meeting are held, lunches eaten, discussions held and finally the functional specifications are updated. The PM manipulates dates around to ‘make things happen faster’ as the final product release date is still the same.
And everyone was happy!
Coding restarts
Upper management, in all their wisdom, decides that another change is necessary. The change process starts… The IT manager reports that it is too late in the development to make this change. There is no way they can go back and redo code to fit this in and meet the deadline the PM has set.
This, of course, is unacceptable to upper management. This latest change must be implemented and the final release date must not be changed. The developers will just have to find a way to make it work.
The IT manager goes back to the programmers and presents them with that proclamation. Having no choice in the matter, they start looking at the code…
Upper Management, in all their wisdom, decides another change is necessary. The change process starts… management informs IT that it is a minor change, they are simply going to back out the first change several paragraphs above. This, of course will put them back on the original PM timeline and the project can be completed on time! They ARE the problem solvers of Upper Management!
There is no need to rewrite the specifications, just go and use the previous version. Well… Let’s take that old version and just save it using the new version number.
The IT manager goes back to the workhorses and reports that they are going back to an earlier version of the specifications, the last change is out. The IT manager leaves to go have meetings with the PM…
The programmers gather around the coffee machine. They look at each other.
“What about this change, does it still stay?”
“I do not know, I was wondering about this other thing over here…”
“That should be fine, we can comment it out and not have to rewrite that whole section. They will put it back in with the next change in two days anyway!”
“HA HA HA” Laughter all around the coffee machine.
So the programmers go back to work, removing pieces of the previous version while trying to meet the PM’s deadline.
As you can imagine, the code is now a complete disaster. They grabbed the settlement buildings from really, really old code which had been through 10+ years of updates and changes. They injected new code along the way, to give the old buildings new parameters and added new functions to the old, old Iron Age building codes. They threw the whole thing onto a new background and met the PM’s deadline!
And everyone was happy!
Upper management, in all their wisdom, decides that another change is necessary. It is a minor change, it will take like 2 seconds… …. … … …
The IT manager presents the final product to upper management and meets the PM's deadline! Upper management smiles and tells everyone they are going to run with it.
They present the project to Beta testers. There is really no documentation because the programmers who would have written that documentation are not really sure how things are going to actually function. They understand there are likely to be many changes to what is presented, so why waste time even trying to represent the documentation. They will write it after the final version is ready for production! Maybe.