At any point in time, program flow can either be synchronous or asynchronous. Synchronous code is easier to write and maintain but comes with performance overheads and UI responsiveness issues. Asynchronous code improves the performance and responsiveness of an application as a whole but, in turn, is difficult to write, debug, and maintain.
We'll understand the synchronous and asynchronous way of program execution in detail in the following subsections.