Software development as an engineering discipline

I'm currently working out at a customer site in Parramatta (a small city about 25 km west of Sydney). I happen to live in the Eastern suburbs of Sydney, so been spending 2 hours in traffic daily...

this means I've had a lot of time to  myself - listening to Norah Jones and pondering about all sorts of weird things...

As I drove past several magnificient bridges around Sydney, it occurred to me that the structural engineers really know how to build 'robust' things - my next thought was - are we the software architects and developers lesser beings? for building applications that don't always provide certain service quality guarantees??

So I started to think of the instances in my career path where I have seen software having reliability/robustness problems. And it striked me that they all had something in common - they were all software under unexpected load! In several instances - when I spoke to the people involved in such projects, an example comment from the developers/architects would be: “well, the application was designed to cater for 1000 users only, and over a short period of time, the application/business grew so popular, it now attracts 100,000 users, so I don't wonder why the application is no longer stable”.

Walking into the lift of the customer building - getting ready to go up to the 8th floor for the first meeting of the morning - 'beep' - too many people trying to cram into the tiny lift - a couple of people gracefully steps out of the lift, until the alarm went off, and lift proceeded to safely carry the rest of us upwards.

Perhaps we are doing a fine job of building software - I'd like to think us architects/developers are very smart beings - afterall wasn't there some academic studies that indicated programming is by far the most complex task human beings undertake? however - we probably need to start set the right expectations for the users - we need to do a better job in educating them the importance of understanding the capabilities and limitations of our software - eg. every lift I see around the place have a clear specification for the weight and recommended number of people it can carry safely at any one time - and the lift engineers don't stop there - they raise their alarm and refuse to provide the service for carrying passengers if the lift is overcrowded. As long as the 'pre-condition' of “total weight in lift is less than X” is satisfied, the lift would be happily performing the service to it's expected standard.