This thesis is concerned with the optimal design of a system composed of several subsystems (stages) which maximizes the system performance (e.g., reliability, availability, etc.). However, the system performance depends on the number of redundant units allocated to each of the subsystems. This leads to the problem objective of allocating the optimal number of redundant units to each subsystem subject to various managerial constraints on resources such as total budget (cost), weight, volume, etc. The thesis investigates four different instances of the problem. The first instance considers a series system consisting of several subsystems with no repair facilities where each subsystem can have several parallel redundant units in order to improve the system reliability under some managerial (resource) restrictions. In the analysis, the prolem is transformed into a nonlinear integer programming (NLIP) problem where the system reliability is an objective function to be maximized and the number of redundant units at each subsystem is a decision variable to be determined. Then, for the NLIP problem, a new solution procedure, which is composed of three subprocedures (Initial Step, Bounding Step and Branch-and-Bound Procedure), is proposed. The solution procedure is tested with various numerical problems and shown to be very efficient by comparing with some other reference works. The second instance treats a standby redundant system consisting of several subsystems each having its own repair facility. The objective of the system is to maximize the system availability under those constraints, where the availability is expressed as a function of the number of standby units at each subsystem. The availability function is derived in the approaches of M/G/1/K queue analyses. For this problem, the above mentioned branch-and-bound procedure is also applied very efficiently. The third instance is an extension of the second instance where the maintenance service for all the subs...