Chasm Between Sales and Engineering
I have had the misfortune of inheriting a project that probably should have never been in production. Well, while it is very inconvenient. I don't really see it as misfortune. I look at it as an opportunity to show how very patient and understanding I am. Still, there seems to be a huge disconnect between sales and engineering, and their understanding of the difference between a proof-of-concept and a product.
The product that I am working on is extremely cool, and I can totally understand why sales would want to get it out into the marketplace. However, as with all very cool cutting edge proof-of-concepts, they want it to be a product way before it is ready. It would be very intelligent to take the product that they want this to be, and build use-case, and class diagrams to figure out how it needs to work.
One of the things that no one considered is what this application would do to the hardware. Many people in industry seem to think that hardware is a bottomless pit for engineering to do what they will with. Today I was confronted with real disk I/O issues, as in pushing the disk to its maximum ability to accept data and still perform adequately. These are 10,000 RPM SCSI discs in a RAID-5 configuration. Nothing to sneeze at, and they are still being pushed. The application is going crazy on the existing hardware, driving it to wild extremes of trying to cope with the demands of the customer. The application is so hard on the equipment that it has problems when more than 2 people are using it concurrently. If there wasn't an application that had need of planning more, I haven't heard of it.
What I am taking away from this experience is that you should never, ever think of designing a piece of software, whether it is a proof-of-concept, or an enterprise application that will control the space-shuttle's descent. You should build it such that it would withstand a 30 megaton bomb. There is no such thing as over-engineering an application in industry, because sales will find uses for the application that were never considered in the original spec. If you can't unit test what you are building, then you should rebuild it immediately. If you can't separate your application into individual modules that you could write a test harness for and do load testing, then you should rebuild it, or rethink what your application is doing. They say everything makes you stronger, and being tasked with fixing an application in a far away place will definately make me appreciate projects done the right way even more.
Even with all of the crazyness, I love coding, I love solving the problems. I know I'll get to the bottom of this one, even if it does take me a little longer than it would usually, because it was so poorly planned.