1) The ability of the system to carry out ACID (atomic, consistent, isolated and durability)
2) The ability of a system to recover from errors
3) The ability of a system to detect inaccuracies and inconsistencies in the transactions executed on it.
4) The ability of a system to work in a consistent manner over finite intervals of time and repetitively exhibit the same behavior consistently through out.
Based on the type of system, the intended use etc. Different systems will have a multitude of criteria it has to satisfy for the system to be called robust.
A simple example would be tires, we expect the tires of the car to go flat, hence every car comes equipped with a spare wheel and a set of tools to change the tire. Hence, though there is an inherent weakness in the system (A car) we try to overcome this weakness via redundancy.
But the same tires when used in an airplane has a totally different functionality it has to work without fail time and again, its compounds, the stress testing etc. are totally different.
When we examine data systems we always notice that from an architects point of view performance and security always drive the system design, the robustness is a responsibility that is thrust upon the underlying platform. This means that the systems are secure, reliable and has a certain optimal level of performance but not robust.
The difference between robust and reliable is subtle. A robust system is one that can perform without errors time and again, reliable systems just state that they can recover from any error and maintain the integrity of data.
The question which needs to be asked is: Do we need to add an element of redundancy into our systems to ensure that systems can be made robust?
For example should we create a local cache that records and users transaction and then updates a master database? so that in an event of a crash of any particular application the user is automatically redirected to the place where he was when the transaction was first committed?
Should such cache's be stored in a system environment rather than an application environment? What happens when system's itself crash?
The answers to these questions lie in two aspects:
1) How hard does the shoe pinch? Lost transactions are not new to us, we will be entering some data in a form and all of sudden boom we experience a crash, but somehow since PCs have become popular they have done so on the Windows platform. People from the earliest users of PCs have developed an tolerance towards crashes and lost system data, they like car drivers have spare tires (back up hard disks etc.) and a tire changing kit (Window copies for formatting and re-installation.). Thus, for most users making a computer robust has not been a requirement which can supersede ease of use, cost of the software etc.
2) Monopoly: Windows has been the single largest OS in use since the PCs started adorning our homes. No OS has even gotten close to getting a sizable share of the market as Windows does, it has around 98% of the market share making it an outright monopolizer of the PC market. One of the outstanding feature of this OS is that it is very easy to use, and has visual aids that will make even Homer Simpson a power user of his PC. These features may not be present in Linux but on the other hand it is highly secure, robust and doesn't let its users down, but even then only 2% of the users prefer Linux, thus proving that most PC users don't rate robustness as a feature of importance
Newer operating systems like chrome OS are the reprieve for people who need a robust operating system. Simple, fast, easy to use and having in browser apps all these make it one of the best OS systems that will be much much more robust than Windows. Google is a company that believes in robust transactions, Google docs, Blogger all these are highly reliable and better performing system than any we have seen like even 5-7 years ago. You keep typing in blogger and every now and then your data is saved and whats even cool you never loose your data due to any system malfunction.
The secret behind this type of robustness is redundancy, we all know that our data is not being stored on a single web server anywhere, it is stored on a cluster of servers, probably virtualized and then backed up in another location.
Cloud computing and virtualization with fail-over clustering are other examples where enterprises can benefit from multiple systems providing same functionality. But these systems would be limited by the robustness of client systems that are connected to them if a distributed application environment is being used. Only when used as in-browser or terminal applications can these systems become robust
Thus, when we analyze systems on a whole we have to summarize that our current technology permits systems to be robust only when there is an element of redundancy, hence, the fundamental question, is robustness and redundancy two faces of the same coin? Can't we have system work in a robust manner with no redundancy? Currently it looks like the more redundant a systems functions the more robust it is.