Source: https://student.cs.uwaterloo.ca/~se101/Process.pdf