Sunday, September 14, 2008

Accidental complexity

The other day I attended a presentation (arranged by Valtech) by Andy Hunt, co-author of "The pragmatic programmer". Andy is a fantastic speaker so it's easy to guess that the presentation was fun and interesting. Andy argued that software has nowadays become pervasive. It's everywhere and it has become a fundamental part of the global economy. But are we ready for this? Software development is still too hard and often it's not because of essential complexity (due to the nature of the problem i.e. speech recognition) but because of accidental complexity (no real reason for it i.e bloated tools like Eclipse ;), XML or GOF patterns )

We have to get better at selecting the right tools for the job. More often than not we try to use the same tools and techniques to solve different problems and the result is often not ideal. I've seen horrible webapps that didn't even have any business logic written in Java and using the whole EJB2.x stack for no particular reason. Or just because "the CIO wants to use JEE". Btw, the CIO has never written a single line of code nor did he need to open JSP pages containing hundreds of lines of pure horror.

OK, so who cares? Don't we have bigger problems to solve that technology itself? Of course, but if we allow ourselves to choose better, more focused technologies for the task at hand we'll have more time and we'll be better equipped to solve the really hard problems which often have absolutely nothing to do with technology but, rather, with understanding what the users want. Andy calls this "death by generalization"....got a hammer?

Andy's advice:

Seek specific solutions

Avoid general solutions

Try to remove the accidental complexity

How hard can it be?

"I've never met a human being who would want to read 17,000 pages of documentation, and if there was, I'd kill him to get him out of the gene pool" (Joseph Costello)