Bei mehrstufiger Logik wird meist nach den Kosten (Anzahl der Gatter) optimiert, da vor der Technologie-Abbildung für die Performance noch keine genauen Informationen über das zeitliche Verhalten von Gattern vorliegen. Wie bereits erwähnt, wird stattdessen die Anzahl der Logikstufen zwischen Eingang und Ausgang des booleschen Netzwerkes als Maß für die Verzögerung verwendet.
Bei der Optimierung wird das System der booleschen Gleichungen umgeformt, um die Anzahl der Literale zu reduzieren und damit Fläche zu sparen. In erster Linie geht es um die Erkennung von gemeinsamen Unterfunktionen, die nur einmal implementiert werden müssen. Diese Unterfunktionen werden als Zwischenvariablen ("ausklammern") eingeführt. Die Abbildung auf der linken Seite zeigt die Gatterdarstellung folgenden Gleichungssystems vor und nach (unten) dem Einfügen einer Zwischenvariablen (b+d).
x = a+b+d= a+(b+d)
y = bc+cd = c(b+d)
z= be+de = e(b+d)
Dieser Schritt senkt die Kosten, da er Fläche spart (mehrfache Implementierungen werden vermieden), kann aber auch die Anzahl der Stufen erhöhen, wodurch die Schaltung langsamer und damit die Performance schlechter wird. Ein Beispiel dafür zeigt das folgende Gleichungssystem und die rechte Seite der Abbildung.
x = abc+cde = c(ab+de)
y = def+abf = f(ab+de)