Functional Requirements, gaya ng ipinahihiwatig ng pangalan, ilarawan ang mga function ng system na idinisenyo. Ito ay isang paglalarawan ng kung ano ang magiging system at kung paano ito gagana upang matugunan ang mga pangangailangan ng gumagamit. Nagbibigay ang mga ito ng malinaw na paglalarawan kung paano dapat tumugon ang system sa isang partikular na command, mga feature, at kung ano ang inaasahan ng mga user. Ipinapaliwanag ng mga di-functional na kinakailangan ang mga limitasyon at mga hadlang ng system na ididisenyo. Ang mga kinakailangang ito ay walang anumang epekto sa functionality ng application. Higit pa rito, mayroong isang karaniwang kasanayan ng sub-classifying ang non-functional na mga kinakailangan sa iba't ibang kategorya: - User Interface - Reliability - Security - Performance - Maintenance - Mga Pamantayan Sub-classifying ang non-functional na mga kinakailangan ay isang magandang kasanayan. Nakakatulong ito kapag gumagawa ng checklist ng mga kinakailangan na dapat matugunan sa system na idinisenyo. Ang mga di-functional na kinakailangan ay kasinghalaga ng functional na mga kinakailangan. Kung tinukoy ng mga functional na kinakailangan kung ano ang dapat gawin ng isang system, inilalarawan ng mga hindi gumaganang kinakailangan kung paano ito gagawin. Halimbawa, ang bagong application ay magbibigay sa amin ng panghuling listahan ng lahat ng konektadong user. Iyon ay bahagi ng mga kinakailangan sa pagganap. Kung sinasabi ng kinakailangan na ang system ay gagana lamang sa isang Windows at isang Linux system, iyon ay magiging bahagi ng hindi gumaganang mga kinakailangan. Ang tanging pagkakaiba sa pagitan ng dalawa ay ang sistema ay hindi maaaring gumana nang hindi natutugunan ang lahat ng mga kinakailangan sa pagganap. Sa kabilang banda, ibibigay sa iyo ng system ang ninanais na resulta kahit na hindi nito natutugunan ang mga kinakailangan na hindi gumagana.