Writing software for a living is to be in a constant state of two steps forward and one step back until your work is good enough to ship by the metrics of an unknown threshold that may including gut feeling, boredom, and/or annoyance.