N version programming is a process where multiple programs are generated independently from the same specification of the software. It consists of N number of individuals or group of developers that do not share their programming process. The developers use different algorithms and different programming languages to produce multiple version of software modules, so that different developers will commit different mistakes and all the identical faults will be greatly reduced. This is a useful technique to improve the quality of software and performance. This type of techniques is used in a software that helps to switch train tracks, perform flight control on modern airlines and electrical voting. It can tolerate hardware and software faults but not correlated faults.