Over-Engineering
Posted by ahmadster at January 12th, 2007
I believe this is one of the most destructive and under estimated bugs that inhibit devs (not code, but developers).
The outcome of over-engineering is heartbreaking on so many levels. Not only is the product destroyed, but resources are wasted, careers are ruined, and egos get crushed, in this case needlessly. But worst of all, this disease goes on undiagnosed decimating project after project.
I know I will get lambasted for saying this, but I honestly see this most (not all, most) with devs coming from a specific discipline. One that mainly uses a technology that starts with J and ends with AVA, referred to as J*** from here on.
Consider the following diagram to better understand what I’m noticing.

As I said, this behavior appears to manifest itself mainly within the J*** community. It is already an established fact (if it isn’t, I’m establishing it now) that computer languages and the characters of the devs using them are tightly woven and intertwined. To know a dev is to know his languages.
Case and point, I indirectly got involved in a project that had been in the works for about 8 months already. The requirement was the classical multi-data-sources that needed a single merged view. The solution that was proposed and worked on by your friendly neighborhood J*** dev was a central data warehouse that collects data from many sources into a single Mega-DB. Then that DB would provide that data by merging it chronologically.
In 8 months, work on plug-ins that connect to many different kinds of sources and protocols was about 50% done (to my knowledge). The client was very unhappy, after all that time there wan nothing to show yet.
I cannot take credit for this one, so I must give credit where credit is due. Danny (our CEO) was asked to look at the problem and suggest a solution. Three (3) days later, the site was up and the client was pleased to see data flowing.
So how did he do it? the answer was RSS!
It was very easy for any data source to provide the data in XML. Not just any XML, but RSS XML. Then using any plain RSS aggregator, data would be merged chronologically. No Mega-DB to build and maintain, no periodical data dumps, no plug-ins, and almost no code involved at all.
We did spend some time fixing up a PHP RSS aggregator and adding a search facility, but the solution was dripping of simplicity and elegance, it was art.
I have no idea why all those protocols were used before, I don’t know why they didn’t ask for a standard form of data from all sources, or if a Mega-DB was actually part of the requirement. Maybe there was more to it than what I was told, but it remains an example in my mind of how devastating over-engineering is.
I would advise that you at least be aware of the possibility that you may be committing over-engineering at any time. And be brave enough to re-evaluate your decision (another Agile Software Development principle).

