The concept of totally-dynamic system
During my doctorate studies I came to the notion of totally-dynamic system. In order to imagine what totally-dynamic system is, first think of a simple plain-HTML website from late 90-ties: such a system is static by data (its contents can be manually modified only by its programmers); static by hardware (it runs on a number of servers and this state of affairs can be manually changed by system administrators and usually requires full system restart); and static by software (its software does not change during system runtime, can be modified manually by its creators). So, in runtime, such a system is totally static. Now let us look at modern data-driven application, for example, any web 2.0 service: it is dynamic by data, as its behavior changes depending on data, generated by its users during system runtime; as for other parameters - hardware and software - it is static. Most of modern applications, be it web , desktop or mobile applications, are dynamic by data. Nowadays, systems with dynamic hardware are becoming very popular. Basically, there are two types of such a systems: ad-hoc networks and services that use cloud-computing. Ad-hoc networks are usually dynamically-formed networks of mobile devices like cell phones or smarpthones. The hardware of such a network is the whole set of mobile devices, which are currently connected to a network, and thus, it is constantly changing. As for services that use cloud computing, they receive additional hardware from cloud computing service provider (like Amazon EC2 or Joyent Accelerator) in times of peaks in their load. It is a widely accepted opinion that systems with dynamic hardware are going to flourish in the nearest future, as they are more cost effective in comparison to their hardware-static counterparts. Thus, it is likely that hardware-dynamic systems will replace hardware-static, just like data-dynamic systems replaced data-static. You should also note that all modern hardware-dynamic systems are also data-dynamic.
Now, one last step to totally-dynamic is software-dynamic system: a system, whose software modifies itself during system runtime, adapting to ever-changing environment. Software-dynamic system is not as futuristic as it might seem: such systems were created as early as in 1960-ies during early experiments with artificial intelligence. The key here is the programming language of the software: the more high-level it is, the easier is to create software-dynamic system with it. Probably, the most suitable language for software-dynamic systems is LISP, as its code is actually its main data type – list (LISP function is actually a list, whose “head” (CAR) is function name and “tail” (CDR) is function arguments); thus, LISP program can easily feed its code to itself and modify it during runtime. However, industry-standard languages are moving towards LISP's reflective capabilities, and now some of such a languages are reflective enough to be suitable for software-dynamic system creation. For instance, Ruby, the foundation of Ruby on Rails framework, has very high reflection capabilities and is quite suitable for writing self-modifying programs.
Imagine the system, which is data-dynamic, hardware-dynamic and software-dynamic at the same time. Such a system will behave differently depending on data generated by its users; its hardware will be constantly changing, growing or shrinking; its software will constantly modify itself, be it making good use of newly connected advanced devices or adapting to changes in system's userbase. This is the system I call totally-dynamic. I claim that software engineering is moving towards totally-dynamic systems, and this move is right from the evolutionary standpoint. Animals are natural analogies of totally-dynamic systems: they change their behavior in accordance to data they get from the environment (data-dynamic); their “hardware” change depending on what they do, e.g. their muscles grow due to intensive hunting (hardware-dynamic); their “software” also change during their lifetime and from generation to generation due to evolutionary mechanisms (software-dynamic). Humans are also totally-dynamic systems, just more advanced. Thus, its obvious that totally-dynamic systems evolve under certain conditions. It means that should we create totally-dynamic system and place it in some sort of genetic algorithm, one day it may evolve to an intelligent system, just like intelligent animals evolved from unintelligent ones. This may be the road to artificial intelligence creation. We hadn't much success with the creation of AI within our labs, but who knows, maybe AI will come out of an unexpected place. Maybe the next generation communication service (the descendant of Facebook, Twitter, or FriendFeed), which will be a totally-dynamic system, will one day evolve into an intelligent being.