One thing remained invariant about programming: it’s not easy to design good software.
Over the last two decades barriers to entry have come down dramatically. Good tools are now available very cheaply, sometimes free as in free beer. Beginners’ can find loads and loads of easy guides to learn from and sample codes to copy/paste. Web site development has known a similar rapid evolution, culminating in toolkits like Ruby On Rails, Django, Symfony to name a few. There’s a lot of good news for those who want a piece of the action, build their own web site cheaply and quickly. That’s the extent of the good news.
The not so good news is that easy tools don’t make up for unimaginative design. I’m stretching the definition of design here, I know it’s a wide topic. You have to have a good grasp of the problem at hand, you have to have a good approach to solving it, then you’d need to make the right choices while executing your action plan. This is absolutely not a given, the abundance of tutorials and guidebooks is not enough to help one resolve specific issues. In a sense every problem is unique in its context, there’s a tendency to draw parallels between completely unrelated environments or problem domains. The one sure recipe you could apply to a wide variety of problems is know-how and experience. These are mostly available in human beings, not in codes or books.
What often happens is that reality is given distorted views by men in a rush to get quick results. With all the O’Reilly books around people think it’s easy to run development projects, estimations come easily: once you’ve seen a “hello world” example you’re ready to take on anything. Given the right amount of pressure even very knowledgeable people would yield to such simplistic views sometimes. Once you’ve got a bad solution out you are starting with a wobbly legacy, you and your organisation could be in for a roller-coaster ride. That’s when you realise that Ruby On Rails, Twisted Matrix or Django are not the answer you were looking for. By that time lots of money has been spent, damage is done, trust and confidence are in tatters. You’d think people learn from such mistakes, you’d be wrong. What happens next is that someone new comes along and start recommending yet another silver bullet, this time DSL or Ontologies is the answer to all ills. Organisations take the plunge again, not wanting to be left behind.
In IT a good solution starts with a good problem statement within a given context. To give an example i was once out window shopping, checking out the latest digital televisions in a shop. The shop assistant offered to help, I told him that I was comparing the price/value ratio across the various brands and pondering if it was worth shooting for the highest specs. Assuming that I was a total newbie, he suggested to me: this model over there is my preferred one, I’d recommend it to you because it’s got this easy on-screen setup menu. This remark made me smile because the shop assistant didn’t realise i wasn’t worried about the setup at all. I actually had spent hours reading up (boring) technical documentation about HD-TVs offering in the market, I knew what I was looking at. Once the device is setup you often keep it that way and enjoy the rest of the experience. Spending big bucks for an easy setup was not a good answer. This man was not likely to solve my problem, he simply didn’t understand what I needed yet he was offering a “good solution”. I call this business autism, each party is in his own bubble unable to communicate properly to the other. This kind of situation is probably very common in IT projects, I’ve experienced it many times and often look for signs that it is occurring before talking solutions.
Surely the frameworks mentioned are good at solving certain categories of issues. No doubt that in .NET and Java world you will also find good frameworks such as Spring, Struts, JBoss Seam or Atlas. What is wrong is rushing out and implementing these frameworks without carefully considering the problem domain and even the solution domain. If people would spend a little more time listening very carefully to their users or clients, they’d save a lot of frustration and waste during projects and beyond. Not having the right listening skills or solution solving skills is hugely detrimental to a successful IT endeavour.
A lot of shortcomings can be addressed once identified. Business autism is very difficult to diagnose, the inmates are running the prison. Help can only come from outside, if it comes at all.