Smoke Testing is critical because it validates your software to ensure it is stable enough to proceed with further testing. Preliminary testing is used to catch the high-level functional errors of an application. Smoke Testing guarantees that the critical functionalities of an application are in place and performing normally before clearing the way for further detailed testing.
Sanity testing is a kind of Software Testing performed after receiving a software build, with minor changes in code, or functionality, to ascertain that the bugs have been fixed and no further issues are introduced due to these changes. The goal is to determine that the proposed functionality works roughly as expected. If sanity test fails, the build is rejected to save the time and costs involved in a more rigorous testing