This article concerns the problem of designing a functional observer. It gives a general presentation and a new formulation for the design of the observers considered by Darouach in 2000. By introducing the controllability and stabilizability notions, the necessary and sufficient conditions for the existence of these observers are revised and proved, and they complete those presented in the article by Darouach. We show that these concepts are important in the proof of the necessity condition for the existence of these observers. We also present a functional observer design algorithm for the general case. The parametrization of all functional observers is also given. Both continuous and discrete time cases are considered. Two numerical examples are given; the first one shows how the results in this article can be applied to design the observer, whereas the results in the article by Darouach cannot be used directly to design the observer. It concerns an unstabilizable system. The second example concerns an autonomous system.