This thesis outlines a research program that began in 1981 to find better ways of programming Telecom applications. The central problem addressed is constructing reliable systems from programs that may contain errors. The research resulted in the development of a new programming language (Erlang), a design methodology, and set of libraries for building robust systems (OTP). This technology is used in a number of major Ericsson and Nortel products and small companies exploit the technology. Case studies of large commercially successful products are presented to demonstrate that these ideas work in practice. At the time of writing, the largest of these projects, the AXD301, is thought to be one of the most reliable products ever made by Ericsson. The thesis also discusses areas where the system could be improved.