Sunday, October 6, 2013

A View on Perfection in Software

"For those that could speak low and tardily
Would turn their own perfection to abuse
"
-- Shakespeare, Henry IV Part 2
Act II, Scene III, Lines 26-27

Perfection, the enemy of all.  What, did I just call the most glorious search of all the enemy of all?  What am I mad?

I have bad news for you, that glorious search for perfection, those months modeling and modeling the perfect enterprise solution.  You know that perfect solution which will allow for enough flexibility so that it will last for thousands of years!  It does not exist!!!

There is no such thing as perfect in this world. That may sound cliché, but it’s the truth. The average person admires perfection and seeks to obtain it. But, what’s the point of achieving perfection? There is none. Nothing. Not a single thing. I loathe perfection! If something is perfect, then there is nothing left. There is no room for imagination. No place left for a person to gain additional knowledge or abilities. Do you know what that means? For scientists such as ourselves, perfection only brings despair. It is our job to create things more wonderful than anything before them, but never to obtain perfection.
-- Tite Kubo, Bleach, Chapter 306, Pages 4-6
Wait did I just quote from a manga, a cartoon?!?  Worst, that quote from a cartoon has said that our enterprise solution which cost millions to model and design.  The solution that will last for ever!  That very solution was a waste?!?

In one almost word, yep!

Here I'll give you a quote from a well respected [sic] man, which more less says the same thing.

"In his writings, a wise Italian
says that the best is the enemy of the good
"
-- Voltaire, La Bégueule

Good sir, this is no laughing matter, you sir have stated that our pride and joy is nothing.  Even worst than nothing sir, you say that it was pointless, that it was unscientific, that it was a journey to the deep realms of despair.  You sir are a scoundrel and a ruffian!

Give me a minute or so to explain myself.

Let us take a look at the distribution of matter in the early universe (I know, it will be worth it, trust me).

Here is a picture from NASA which shows us what is believed to be the distribution of matter in the early universe.


OK, what do you see?

Maybe this picture which is also from NASA will help.


What we have here is the timeline of the universe as we currently understand it.

What do we see?  In the first image of the early universe we see that the distribution of matter is not even.  If it was even it would all be one color.  Now the differences are not large but they are there.

And birds go tweet, what else do you have for us sir?

Just that this uneven distribution of matter in the universe is what has brought about everything.  Yep, everything!  Looking at the second image showing the timeline of the universe, we see that this unevenness in the distribution of energy is what allowed for the formation of stars, galaxies, planets, humans, ... everything!

That is all well and fine sir, but what does this have to do with modeling and enterprise architecture?

Well, the early universe was imperfect!  In fact, the universe now is not perfect.  If the universe was perfect, we would not exist.

I'll repeat that.

"If the universe was perfect, we would not exist."
-- Me, paragraph above

All fun and wit aside, we find that we are standing on the edge of a deep chasm.  Perfection cannot exist in imperfection.

What?!?

You cannot create something perfect out of something imperfect.  If you were to be able to create perfection using imperfection you would need something from outside of the imperfection.  See also Gödel's Incompetence Theory (which does not in any way state that, but I believe it will be show as a conclusion that can be made from it, some day).

Sir, you say, what does this have to do with our modeling?

"Have no fear of perfection - you'll never reach it."
-- Salvador Dali

Your modeling will not be perfect, in fact you should do just enough to get an understanding, if any is done at all.  When all is said and done, we need working software not "perfect" pictures.  This is the 2nd principal of the Agile Manifesto, "Working software over comprehensive documentation".  As Brian Marick quotes from Anonymous (which I must say, I have never seen both Brian and Anonymous in the same room at the same time).

"[S]oftware people ... seem [to be] embarrassed to admit that, at some point in the proceedings, someone competent has to write some damn code."
-- Brian Marick quoting Anonymous

It is embarrassing to admit, we need working software not "perfect" documentation.

Do not go looking for perfection, it does not exist.  Instead look for the good and usable, it is much more fruitful.

"If you look for perfection, you will never be satisfied"
-- Leo Tolstoy, Anna Karenina, Part VII, Chapter IV