This post is based on this lecture by Ryan O’Donnell, a part of the playlist for the awesome CS Theory Toolkit course.
The step-by-step version is here.