I was having a discussion with someone from work today and the topic of “perfection” came up. We had been discussing an issue where a co-worker could not determine the source of a problem, primarily because of a recent infrastructural transition in the development environment. The crux of the problem was that said developer was convinced that the changes he/she did were without error, yet was unable to produce the expected results so the only variable in the picture that could contribute to the error would have to be the changed environment.

Now that’s quite a lot of things I could say to that statement, but that’s not the point of this post.

To paraphase his response, his suggestion was to “get the developer to file a defect for now (because it was the end of the sprint). Then when we have the time, we can perfect things later”. Naturally, I had to quip back, “Well, perfection is impossible. It is human to make mistakes.” To put things in perspective, there has been a lot of frustration in the air because things that were working previously had stopped working (as expected) after the transition. People often stress out when unexpected delays occur, particularly at the end of a sprint when people are rushing to wrap things up.

But the reality, as I see it, is to never assume that something can be perfect. The fact is, by being human, our decisions (and its outcome) can never be perfect because we are not omniscient. A decision made a year ago could have been “perfect” for a year but a new requirement or “change in plans” can break it. Sure, you could say, “well, that’s because the requirements has changed!” Exactly, it did. And you didn’t know about it a year ago that things would shape out this way. Hence the solution and/or decision that you made was not perfect.

The best we can do, as developers, is to build something that:

  1. meets the requirements,
  2. be able to handle changes or expansion to these requirements of a reasonable level,
  3. reduce complex business rules to make it easy for successors to your codebase to inherit and extend your work.

If we strive for perfection, or abstract things to the point of incoherency just to support “all possible scenarios”, it will result in a serious waste of time. Because you will never achieve it.

Granted, I didn’t harp all that on the phone call. He agreed immediately that we cannot be perfect, and then he added “So maybe in the future, AI will be the answer”. Ah, another rabbit hole! See, artificial intelligence is still an invention of the human mind. Its tree of decision is still based on a logical formulation by a human brain, which I have just establish is fallacy in the making.

The golden rule is, creation is always an expression of the creator. Once you understand this concept, you will have learned that you are limited in your ways and by extension, so would the products of your invention be. Of course, humans have an inborn conscience that becomes a yard stick in one’s decisions making process. That gut feeling that sometimes cause you to do something completely opposite to what appears to be the most logical action on the surface. And yet it turned out to be the correct thing to do in that situation. But a being of artificial intelligence would not benefit from that “feature” - and that is the true terror of its unpredictable(?) outcome.

In contrast, have you ever woken up in the morning and discovered that your nose stopped working? That it needed a bug fix? Or perhaps a reboot? Did it ever occur to you that the sun might not rise up tomorrow morning? Or that the earth stopped turning overnight? We don’t even give an ounce of thought to such questions. Aren’t you grateful that the moon rotates around the earth at an exact angle that you won’t have half the earth flooded once a day?

When you are God, you can be perfect.