Scarce resources, rapid change
It turns out that in building architecture there is (of course there is) an architecture of scarce resources and rapid change. What characterises this architecture?
Built for immediate and specific need
This architecture is typically about fulfilling an immediate need - buildings to house people and workers following natural or man-made disasters, hospitals for refugee camps, schools for growing 3rd-world communities, accommodation for the poor and under-represented in slums and shanties. There’s usually no long-term plan, often no goal other than getting the building made and usable in the shortest time possible.
Use of available materials
It’s expensive and in many cases impossible (physically and/or financially) to ship in materials for this kind of building - to a war zone, disaster area or impoverished community. Buildings are therefore designed and constructed using local materials: in many cases this means using established and traditional materials and practices, but often new materials that happen to be available are pressed into service - for example, pallets on which food and medical supplies have been delivered.
Pragmatic and innovative
There’s a very strong pragmatic component to this architecture - you’re just not going to get those steel girders or that reinforced glass, so you have to solve problems with what’s at hand. This fosters innovation.
Strong political component
More often than not this architecture is concerned with supporting communities that are marginalised - who can’t afford big-ticket architecture and expensive materials in the first place, and who will have been affected more badly by war or disaster (because they didn’t have the resources to evacuate or mitigate) than their wealthier compatriots.
What has this to do with software, in particular what can it suggest to us about the changing ecology of software development? And what is different, what is special about where software practice finds itself?
The political angle is interesting. Environments as different as Adobe’s AIR/Flex and the Google App Engine are breaking down the barriers of entry for developing rich web applications, desktop applications and web services. Whether we like it or not, more and more people will be writing software of all kinds for all sorts of devices. The systems, patterns and environments that exist to support this form the new landscape of development - it’s one in which the well-controlled certainties of existing (best) practice simply don’t exist.
In the age of multicore desktops with gigs of memory and terabyte hard disks, scarcity of this sort of resource is no longer an issue for most software developers. It’s always been of concern to developers for mobile devices, of course, but - whether by serendipitous good fortune or via some deeper synchronicity - as these platforms are approaching ubiquity, the possibility of moving most or all application processing to the cloud is here. This supports an application model where mob developers can build both the mash-ups and the services that contribute to them.
What remains scarce, of course, is time. The new application developer is pragmatic - PHP, Python, Ruby, social network development platforms, the Google APIs and other services constitute the available resources, and we’ll see more and more surprising combinations to build services and applications that may have a lifetime measured in days or weeks rather than months or years. Though Ivan Moore and others have been promoting this approach as “post-modern programming” for some time: what has really just struck me is the way that changes in the ecology of software are now making possible a far-reaching change in the centre of gravity (centre of power?) of development.