Parser theory: How to systematically compute FOLLOW sets?
The simple way to do it is the same as the simple way to compute FIRST sets, using a least fixed-point algorithm in which a set of inclusion rules are applied repeatedly until a fixed-point is reached:


Initialise all the sets to empty.
For every production in order, use the rules to add elements into the sets.
(As a slight efficiency, rule 2 only needs to be applied on the first pass. I didn't apply that to the trace below.)
If any set was modified during step 2, do it again.


So, here are the productions in order (I added the missing $*$ to $T'$, and inserted an augmented start rule $S$, which avoids the need for your special case rule 1):

$$\begin{align}
S &amp;\to E\; $ \\
E &amp;\to TE' \\
E' &amp;\to +TE' \mid \epsilon \\
T &amp;\to FT' \\
T' &amp;\to *FT' \mid \epsilon \\
F &amp;\to (E) \mid id
\end{align}$$


Set all the $FOLLOW$ sets to $\{\}$
First pass. I left out productions like $F\to id$ which don't match any of the rules.
$$ \begin{array}{c|l|l}
S \to E\; $       &amp;\text{Add }\$\text{ to }FOLLOW(E)     &amp;FOLLOW(E) = \{ \$ \}\\
E \to TE'         &amp;\text{Add }FIRST(E')-\{\epsilon\}\text{ to }FOLLOW(T)
                                                     &amp;FOLLOW(T) = \{ + \}\\
              &amp;\text{Add }FOLLOW(E)\text{ to }FOLLOW(E')
                                                     &amp;FOLLOW(E') = \{ \$ \}\\
              &amp;\text{Add }FOLLOW(E)\text{ to }FOLLOW(T)
                                                     &amp;FOLLOW(T) = \{ + \$ \}\\
E' \to +TE'       &amp;\text{Add }FIRST(E')-\{\epsilon\}\text{ to }FOLLOW(T)
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(E')\text{ to }FOLLOW(E')
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(E')\text{ to }FOLLOW(T)
                                                     &amp;\text{no change}\\
T \to FT'         &amp;\text{Add }FIRST(T')-\{\epsilon\}\text{ to }FOLLOW(F)
                                                     &amp;FOLLOW(F) = \{ * \}\\
              &amp;\text{Add }FOLLOW(T)\text{ to }FOLLOW(T')
                                                     &amp;FOLLOW(T') = \{ + \$ \}\\
T' \to *FT'       &amp;\text{Add }FIRST(T')-\{\epsilon\}\text{ to }FOLLOW(F)
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(T')\text{ to }FOLLOW(T')
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(T')\text{ to }FOLLOW(F)
                                                     &amp;FOLLOW(F) = \{ * + \$\}\\
F \to (E)         &amp;\text{Add })\text{ to }FOLLOW(E)      &amp;FOLLOW(E) = \{ ) \$\}\\
\end{array} $$
There were various changes, so we repeat step 2.
(Step 2, second pass)
$$\begin{array}{c|l|l}
S \to E\; $       &amp;\text{Add }\$\text{ to }FOLLOW(E)     &amp;\text{no change}\\
E \to TE'         &amp;\text{Add }FIRST(E')-\{\epsilon\}\text{ to }FOLLOW(T)
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(E)\text{ to }FOLLOW(E')
                                                     &amp;FOLLOW(E') = \{ )\$ \}\\
              &amp;\text{Add }FOLLOW(E)\text{ to }FOLLOW(T)
                                                     &amp;FOLLOW(T) = \{ + )\$ \}\\
E' \to +TE'       &amp;\text{Add }FIRST(E')-\{\epsilon\}\text{ to }FOLLOW(T)
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(E')\text{ to }FOLLOW(E')
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(E')\text{ to }FOLLOW(T)
                                                     &amp;\text{no change}\\
T \to FT'         &amp;\text{Add }FIRST(T')-\{\epsilon\}\text{ to }FOLLOW(F)
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(T)\text{ to }FOLLOW(T')
                                                     &amp;FOLLOW(T') = \{ + ) \$ \}\\
T' \to *FT'       &amp;\text{Add }FIRST(T')-\{\epsilon\}\text{ to }FOLLOW(F)
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(T')\text{ to }FOLLOW(T')
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(T')\text{ to }FOLLOW(F)
                                                     &amp;FOLLOW(F) = \{ * + ) \$\}\\
F \to (E)         &amp;\text{Add })\text{ to }FOLLOW(E)      &amp;\text{no change}\\
\end{array} $$
(step 3, second pass) There were some more changes. Once again.
(Step 2, third pass)
$$\begin{array}{c|l|l}
S \to E\; $       &amp;\text{Add }\$\text{ to }FOLLOW(E)     &amp;\text{no change}\\
E \to TE'         &amp;\text{Add }FIRST(E')-\{\epsilon\}\text{ to }FOLLOW(T)
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(E)\text{ to }FOLLOW(E')
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(E)\text{ to }FOLLOW(T)
                                                     &amp;\text{no change}\\
E' \to +TE'       &amp;\text{Add }FIRST(E')-\{\epsilon\}\text{ to }FOLLOW(T)
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(E')\text{ to }FOLLOW(E')
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(E')\text{ to }FOLLOW(T)
                                                     &amp;\text{no change}\\
T \to FT'         &amp;\text{Add }FIRST(T')-\{\epsilon\}\text{ to }FOLLOW(F)
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(T)\text{ to }FOLLOW(T')
                                                     &amp;\text{no change}\\
T' \to *FT'       &amp;\text{Add }FIRST(T')-\{\epsilon\}\text{ to }FOLLOW(F)
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(T')\text{ to }FOLLOW(T')
                                                     &amp;\text{no change}\\
              &amp;\text{Add }FOLLOW(T')\text{ to }FOLLOW(F)
                                                     &amp;\text{no change}\\
F \to (E)         &amp;\text{Add })\text{ to }FOLLOW(E)      &amp;\text{no change}\\
\end{array} $$


So the $FOLLOW$ sets are:
$$\begin{align}
FOLLOW(S) &amp;= \{\}\\
FOLLOW(E) &amp;= \{ )$ \}\\
FOLLOW(E') &amp;= \{ )$\}\\
FOLLOW(T) &amp;= \{ + ) $\}\\
FOLLOW(T') &amp;= \{ + ) $\}\\
FOLLOW(F) &amp;= \{ * + ) $ \}
\end{align} $$

That's a very simple grammar, of course. You might want to try it out with a more complicated one, although it is typical that it terminates after very few iterations and that many of the steps are obvious no-ops.