Rob's Two Axioms of Setup…
I actually have
the better part of two pages started into another blog entry about Windows
Installer Components when I realized that I had never talked about the
"Two Axioms of Setup". These two axioms I'm about to present serve as
the foundation for everything I do in the setup domain. I'll refer back to one or
both of these axioms often.
1st Axiom of Setup - Setup is Governed by a Set of Rules.
The first thing
most people ask when they see that axiom is, "So what are the rules?"
Well, honestly, I've never seen anyone write them all down. I'm not even sure
there is one person out there that knows them all. However, one of the personal
goals I have for this blog is to capture as many rules as I know or can
discover and share them with all of you. If you have rules that you know about,
please feel free to comment back on my blog and I'll be sure they get captured
here.
To give you a
quick example of one of the rules, "Files with a higher version should not
be overwritten by files with a lower version." The basic foundation of
this rule is that files of higher version implement all of the functionality of
earlier versions of a file plus new functionality. If you overwrite a newer
file with an older file, programs that expect functionality that is only in the
new file will be broken. Thus, the rule.
Deviation from the
rules that make up this axiom basically means your life and probably your
customers' lives are going to be difficult. That leads us to our second and
final axiom.
2nd Axiom of Setup - Every Rule in Setup has an
Exception.
At this point most
people call, "Foul! The second axiom basically negates the first
axiom." Honestly, I have to agree. However, all I can say is that reality
really does works out this way. Setup is where the dreams of software design
engineers (as programmers are technically called at Microsoft) meet harsh
reality of user's machines. There have been a few cases where those dreams
exceed what reality can handle.
Anyway, most
exceptions found in the second axiom occur because we [programmers] don't have
the foresight to anticipate the needs of the next version of our creations
[programs]. Getting one complicated program configured is difficult. Getting
the next version of that program configured on a machine that has the original
version is even more difficult. It takes a truly heroic effort to plan the
configuration of the next version of a program while writing configuration for
the first version.
To go back to my
example from the first axiom, I stated the rule that higher versions of a file
implement all of the functionality of older versions. This rule is called
"backwards compatibility". In other words, the new file is backwards
compatible with the old file. In reality, getting backwards compatibility right
is very difficult and in some circles it is considered an impossibility (I'll
talk about the alternative "side-by-side" philosophy another day).
So, there are some (very rare) cases where to get an application working you
actually want to "downgrade" (install the older version of) a file so
that a particular application works.
Now, the second
axiom is not intended to be an excuse to ignore the rules of setup. There was a
case where I was actually been called into an developer's (as programmers are
generally referred to at Microsoft) office where he wanted me to help him get
this horribly whacked configuration on his machine shoved into Office setup.
After I finally understood what he was trying to do I said, "Nope, no way.
There is no way we can get that configuration on anyone else's machine unless
we actually ship you in the box. Want to see the world? Hope so 'cause you're
going to be travelling to a few million desktops soon."
He didn't find
that as nearly amusing as I did but there was no way I was going allow him to
ship a complicated and fragile configuration in a product my Mom (and millions
of other people's mothers) was likely install on her machine. So he and I used
the rules from the first axiom to design a simpler setup story for his feature.
Fortunately we caught this early in the cycle and there was time to redesign
and rewrite the feature.
So there are my Two
Axioms of Setup. I'm sure we will revisit them often.