Developers are not clueless.......

Ok, so I've now seen a bunch of posts on the subject of "why developers don't build scalable systems". Sure, it's been phrased different ways:

“Why don't .NET developers grok scalable distributed computing?
Disinterested Programmers
The Middle 70%

Ok, enough links and enough beating on this poor dead horse. I'd like to point out that I do believe that distributed computing technologies are important, just not to everyone. I also would agree that there are developers out there who should probably have a better understanding of distributed computing technologies and don't (this doesn't mean that everyone doesn't).

I worked as a consultant in a past life and I was had the opportunity to see, add to, repair, and complain about systems that were built by someone who did not know how to architect a scalable application. That said, I think that you are a) preaching to the choir as most people who read blogs are pretty “up on things“ and b) referring to a small percentage of applications (and developers by extension) that actually need to scale in any major way.

Virtually all of the non-scalable applications that I saw (your mileage may vary) in the wild were not scalable because of poor database design and/or inefficient coding routines. The issues that prevented these applications had very little to do with the fact that they did not utilize a properly designed distributed architecture. Sure, some of them could have benefitted from a distributed architecture but that was not the overriding problem. We could make the custom software world a better place if we:

1) Keep all “developers“ out of the database. Let someone who knows how to design a database do most of the design work. Developers, you folks should be providing input in the process and pointing out things that don't mesh with how you think things will work but you should NOT be designing the database.

2) Get developers to read code complete.

I think there are many other important things that we should be harping to improve the quality of custom software in the wild - things like an automated build process, instrumenting code, setting up a proper development environment/model, utilizing design guidelines, and utilizing test driven development. There are so many great concepts that developers should be using in all virtually all applications; given that, I don't see how I can push distributed programming down all of their throats. Honestly, distributed computing falls pretty low on my list of wishes for developers because I believe that it will have a dramatically smaller effect on the big picture of software development when compared with all of these fundamentally important aspects of the software development lifecycle. Then again, maybe it's just me that is clueless.