[LUAU] Hello - My Name is Scott
Jim Thompson
jim at netgate.com
Thu Mar 27 07:36:15 PDT 2008
On Mar 26, 2008, at 8:43 PM, Angela Kahealani wrote:
> Everyone wants practical solutions to problems,
> and that often requires a functional combination
> of hardware and software, so it only makes sense,
> to go solve a problem with a packaged deal..
The worst thing you can say about software is that it works.
http://smuglispweeny.blogspot.com/
I walked out of my cubicle, turned left, went up one maze turn, turned
into the next cubicle. This was clearly a while ago, before email and
even before I had reached the point where I would phone a guy ten feet
away in case they were not there so I could leave voice mail.
I wanted to tell Mike that I had enhanced the julian date function he
had shared with me so he could replace his with mine instead of the
system growing a multiplicity of julian date functions.
Mike was another contractor on some godforsakenly dreary application
being developed at cruising altitude in some megabank, a great guy
always joking well and laughing about everything including his
obsession with the real estate scheme infomercials he apparently
watched non-stop in his free time.
I told Mike I had snazzed his function up nicely, generalizing it or
adding some whiz-bang feature or something, and mentioned he could now
modify his program to use the new version.
Something I need to get across to My Cherished Reader is the utter and
profound honesty of Mike's reaction. Indeed, sufficient googling may
well surface Mike's blog entry detailing in turn his astonishment and
horror at what I had proposed. For when I finished there was a brief
moment of incomprehension and then a dawning and his eyes grew wide
and his jaw dropped and then a huge smile of wonder spread across his
face, his palms rose in supplication for any possible justification of
my madness and at last words came to him.
"But...but...," he stammered for effect. "My code already works!"
It was a grand moment, two solid technologists sincere in their craft
standing face to face with not one scintilla of common ground on the
simplest of questions.
Mike was reeling at the idea that a working module should be touched.
He repeated his encomium ("It works!") and then with no offense
intended and with solid good-feeling camaraderie just started laughing
at me.
Meanwhile I knew without doubt that swapping in my version would
likely take one minute (what's that? about sixty seconds?) and that
application systems should be kept as simple as possible (and so not
have two julian date functions (can you say Y2K?)).
I shrugged -- it was a small matter -- and retraced my path back to my
cubicle before the pheromone trail could grow cold. Well, this is my
blog, so Mike was wrong. Tilton's Law:
• The worst thing you can say about software is that it works.
I think I can prove that with geometry: if a pile of code does not
work it is not software, we'll talk about its merit when it works, OK?
Therefore to say software works is to say nothing. Therefore anything
substantive one can say about software is better than to say it works.
QED. (That last bit is the geometry.)
So what else besides that it works can you say about software,
especially about applications written in tall buildings? Well, unless
one is banking on the relatively high probability that the project
will get canceled before ever it sees light of day, the software will
eventually be asked to do new things or to do old things differently.
So the software must not be brittle and must not have any more built-
in assumptions than necessary and where one builds in the assumptions
it would be nice if they were abstracted out of the core so that new
requirements can be handled as gracefully as possible.
Note that new and changed requirements come along not just after a
successful deployment but also during development, perhaps even more
so because only when users see software do they realize what they
wanted. They should do a study: I bet requirements change more just
implementing the software than they do ever after. Brittle, inflexible
software can be so hard to change during development that projects
never make it out the door no matter how well the software "works" on
the original requirements.
Reminds me of another war story. Schedule "B".
The law on tax shelters had just been changed eliminating the bogus
write-offs those things produced and some financial establishment
needed some contractor to write the software to generate statements
for clients detailing exactly how badly they would be hosed by the new
law. Apparently they had tried it in-house and the guy assigned to it
had quit after working on it for a couple of months to no avail. Jobs
were everywhere back then in the Eighties, why not?
God forbid I should digress: it was a fun interview, really nice group
and nice manager. The best point was when he asked His Kennyness what
was His greatest weakness. Neat question!
Lemme see...no...no...no... I was looking at the floor going through
coding, debugging, DB design, and it was taking a while which I
thought was pretty funny and I am sure they were all enjoying it but
Ireally wanted to come up with something and then it came to me.
"Testing!" I almost yelled. "I am terrible at testing!"
Whew! Reminds me of the time I had a little team (this was before
people realized I should just be chained to an out-of-the-way
workstation and hosed down and thrown food as needed on big projects)
and was assigned a junior nooby who asked me the same question about
three times and who hated me because apparently Hell hath no fury like
a woman gently suggested she might take notes, which was great (that
she hated me) because she was so useless we just had her testing my
code and believe me no software has ever been subjected to such
merciless, sustained, and deliberate abuse as was mine. Every twenty
or thirty minutes we would hear this triumphant rejoicing "Ha!"
explode from her cubicle as she found another bug and imagined another
dagger plunged between my ribs when in fact I was loving the whole
thing because to me testing is just God and Abraham and Isaac all over
again. Where was I? Schedule "B".
Anyway, the task went very well. The manager (another Mike) gave me a
very clear spec and I did my usual structured architectural blah-blah-
blah and the users were very nice and called me every once and a while
with RFEs. Bringing me to my point.
Mike was a great guy but also button-downed and into process and told
me not to listen to the users, make them ask him and he would tell
them, No. So I was always very nice with the users and said I welcomed
their thoughtful consideration and input and could barely restrain
myself from just dashing it off right now if I could just put them on
hold for a second and I will indeed start looking at the matter while
it would help very much if they could just run this great idea past
Mike, he's a bit of a stickler for protocol, terrible bother I know,
hate to ask this of you.
OK, they would say.
Then I would put down the phone and look at the code to see what was
needed. Oh. Scratch, scratch, poke. Done.
Then I would go into Mike's office and tell him the users had asked
for X and he would make a face and I would say I had already made the
change if that would affect his decision.
Mind you this did not happen because I consciously planned for change,
I just worried about things besides whether the code worked. Simple
architectural tidiness went straight to the business bottom line: the
users got exactly what they needed at no extra cost to the enterprise.
How does simple clean design make RFEs easy to handle? Tilton's Lemma:
• Refinements to requirements cannot vary fundamentally from the
original.
It is possible for users to say, Oh my, you have the runners running
the bases clockwise? We wanted them going counterclockwise. It is
notpossible for the users to come back and say, We wanted them going
first to second base, then over to first, then to third, and then
home. Some fundamental force of nature constrains how we can screw up
and keeps it within a metalevel such that refinements to requirements
will never break code all that badly.
[Keep your eyes open for the "We Can Live With the Way You Handled
That" mind-bending illustration of the power of clean design.]
The flipside war story was in a different tall building working on a
system so badly designed that after a certain point it pretty much
stopped evolving at all.
I walked up to my manager and said I had an idea on how to improve
something I was working on for her so that it could be used for other
things.
"No, no, no," she said. "I just need this one thing working before
Thursday's meeting so I can score one on the users. They are out to
get us."
Ah, systems development as an act of war. The system they had
developed was such a horror that the only thing that ever moved it
forward was a team of very well-paid outside contractors who managed
against all odds to add new functionality, pausing from their toils
every several days when one of them would take a design two-by-four
across his skull from said system and lean back and poll the others on
how badly each felt the system hindered them, an order of magnitude
generally being settled on as no exaggeration however often it usually
is.
The IT department ended up with a bunker mentality lobbing back hand
grenade code releases to suppress fire from users strafing us with
gratuitous RFEs as the organization staggered towards collapse and
acquisition, and it being a financial institution to no small degree
dependent on how well it processed information I cannot help thinking
this system was to blame.
But it did work.
More information about the LUAU
mailing list