What would be the difference between a fault tolerant and robust design?
The most important difference is that robustness takes into account external factors. A more robust system will function in spite of some conditions that would impair the normal function of a less robust system. More robust systems might be referred to as sturdy, heavy-duty, perhaps even overbuilt; less robust systems might be referred to as delicate or fine-tuned.
For example, I own an antique watch. It works very well under normal operating conditions but its parts are somewhat delicate. If I drop it on the ground, the glass and/or some internal components of the watch are very likely to break (based on experience, I'm afraid). If I put it through the washing machine, the soapy water is very likely to rust and corrode some internal components. I could dent or scratch the metal case without a great deal of effort; although this probably wouldn't affect the mechanical function of the watch, it would certainly impair its aesthetic function.
In comparison, most modern watches wouldn't stop functioning if you dropped them from your wrist or pocket. Their windows may be acrylic, mineral crystal or sapphire, any of which is more durable than the glass in my pocket watch. Their cases may use a harder metal or polymer that resists dents and scratches better than my pocket watch. They can be designed to be waterproof. They can use quartz movements.
These are all qualities that make a watch more robust, but not more fault-tolerant. None of the failures I described above are really the fault of the watch or its components; they are caused entirely by user error. Unlike robustness, fault-tolerance is concerned with faults that are expected to occur, especially within components of the system.
A ground fault circuit interrupter (GFCI) is a great example of fault-tolerant design. A ground fault occurs when the current in a circuit is allowed to flow directly to the ground. The classic example involves using a hair dryer in the bathtub, but there are many ways ground faults can occur that don't involve user error.* A residential electrical system is usually in place for decades; we do expect that at some point, ground faults are expected to occur, and except in cases of user error,** they occur within the components of the system.
If the circuit runs directly from a main line, a ground fault can seriously threaten life and property. With the addition of a fuse on the circuit, if a ground fault causes the current in the circuit to exceed some upper limit (overload), the fuse burns out and current stops before anything important melts or catches fire. Circuit breakers do the same thing but unlike fuses, they don't have to be replaced when they're triggered; they can be reset at the electrical panel, which can mean less downtime and expense. GFCI circuit breakers additionally protect against leakage, which involves smaller currents that can still be dangerous even if they wouldn't melt a conductor or start a fire. These technologies make the system increasingly more fault-tolerant.
Which techniques or design principles are applied to ensure a fault tolerant design, and which are applied to ensure a robust design?
Both of these qualities exist on a spectrum. If someone points at a design and says, "That's a robust design," what they mean is that it's relatively robust in comparison to some reference point they have in mind. Different people have different reference points, so I think it's better to be explicit about what comparison you're making. Note that in the first part of this answer, I didn't say my antique watch is not robust—just that it is less robust than modern watches.
This is a pretty broad topic, but I'll take a stab at a summary treatment.
Robustness can come from many places, but is usually closely related to cost. Take fasteners as an example: stainless vs. galvanized; screws vs. bolts; the smallest size rated for your load, or the next size up. In each case it's a trade-off between robustness and cost. As long as either option meets the basic requirements of the design, this is a business decision more than an engineering decision.
If someone is telling you that you have to produce a robust design, ask them, in comparison to what, and by what metric? You need a specific definition of "robust," whether it's comparative ("make it more water-resistant than our competitor's product") or quantitative ("make it water-resistant to 15 m"). Once you have that definition, you can forget about the word "robust."
Fault-tolerance is something that can require a bit more imagination and due diligence on your part. Managers who lack experience with the specific product or technology you're working with, especially those without technical backgrounds, may not be able to tell you what faults to expect. They'll say something like, "The user should be able to replace broken components without interrupting operation of the system," and you'll have to do the work to figure out:
- In what ways can each component fail?
- How likely is any component to fail, in each of the ways it can fail?
- What other components will be affected when a component fails in a particular way and what will be the overall impact on the system?
As you gather this information, be sure to consider the assumptions your design relies on. All assumptions break down at some point, and knowing how your system will behave in those circumstances will help you to identify faults that could occur. Once you've identified what faults to expect, it's usually more straightforward to figure out how much it will cost to mitigate particular risks.
Some general principles:
- If a process needs to maintain some minimum capacity, and a critical component is likely to fail at some point, make the component redundant (e.g., more engines than needed for basic flight) or provide a fallback (e.g., the ability to perform an unpowered landing).
- Always use tested products and components, even if it means you have to do the testing yourself.
- Provide a mechanism for your customers/clients/users to give feedback about failures as they occur. You'll hardly ever anticipate every possibility and being able to retrofit or adapt an existing design is important.
* Stripping too much insulation during installation; pests chewing on wires; running wires through studs without a nail plate; cutting flex conduit improperly/not deburring; etc.
** You could also argue for expanding the system to include users as internal components—especially children and pets—but that's another discussion altogether.