Monday, January 9, 2012

Fault

My friend Jess Taylor introduced me to road cycling and open water swimming in 1998.  I met him while working for Ibis Consulting in San Francisco, on the PG&E conversion from GASTRACC to GTS.  The software architects on the project designed something that went off the deep end of abstraction and OO to the point that it barely met the functional requirements due to performance.  So they had to cache pre-built objects in memory and then save them in the db, and use complicated triggers to indicate when the objects needed to be rebuilt, all to save time that didn't really need to be spent in the first place if they had been less rigid about how things _should_ be.  I know all non-software-developers don't understand what I'm describing so I'll stop there.  Suffice it to say that a lot of work was done to achieve what could have been done with a less elegant solution which probably would have naturally performed better but wouldn't have been as intellectually stimulating.  The major lesson I learned from that project was that performance needs to be a consideration up front, not after the fact, because design decisions can put major roadblocks in the way of system performance.  For a real world example of this, think of freeways and onramps, bridges and tunnels.  It takes years to rebuild some of these to handle unexpected traffic flow, which justifies a bit of extra time up front to analyze and predict what will be needed in the future.  The same is true of software, except that the divide and conquer methods of construction don't work in software, it's not nearly as easy to scale with additional bodies because of all the coordination and communication that needs to occur and how difficult it is to see the product in intermediate phases.

Oh yeah, on to my topic.  Jess has a PhD in Geology and would show off some of the cool stuff he learned whenever an earthquake hit (which is fairly common in San Francisco.)  Which brings me back to my state of mind, of how a fault line functions, and how similar my own personality is to a geologic fault. Everyone knows the basics of plate tectonics, how rocks press up against each other and eventually release in a movement known as an earthquake.  I feel like my mind and my body work in a similar fashion based on external forces.  With enough pressure, I snap, releasing a whirlwind of excessive energy.  Learning how to control these situations has been a life's journey.  I still don't think I have a handle on any of it, but I do feel an increasing awareness of how it all works as I more frequently take the seat of the observer in my own life.

Last week and this weekend, forces escalated.  I was informed by the man who will most likely become my boss that I should plan to stay at work on Monday until the system works.  Define that however you want to, one possibility might be 6 months, but at the very least it seemed like it'd be a late night or two and a rough week.  We were getting a cd of source code via fedex at 10am.  Source code I had never seen before, from a company I knew well enough from prior positions to expect a fair bit of mess.  So, it was difficult to not fear Monday morning throughout this weekend.  I winced and braced for impact as I entered the building today.

On top of that, my little bro wanted to play paintball.  Getting hit in the mouth by a glob of paint is actually not as much fun as it might sound.  Running around and getting dirty, which could have been a blast at age 10, is much more a source of concern and fear (will I hurt my bad knee tripping over this ditch?  Does this stuff come out in the wash?  How will I get my hands clean afterwards?  What about all the second hand smoke I'm exposed to out here?

Add in a fundraiser run for a different friend, which found me playing a role of keg-transporter, and the only moments I really enjoyed this weekend were the 3 hours on the trail (mostly by myself since my fleet footed friends who run more than once a week dropped me at mile 3) and the hour in Kenna's class Sunday evening.  I crave moments of physical punishment and the release that they bring to my thoughts.  I remember feeling an incredible sensation in pyramid pose, an asana that I've become increasingly fond of, when I could finally let go of all the angst that had built up since Friday.  I started to release boatloads of tension through my practice and ended feeling relieved even though the full moon had me distracted and confused.  I think going 48 hours without a visit to my mat is a recipe for disaster at this point, such is the magnitude of the addiction.  And I think there is something truly centering about pyramid pose.  The scissoring of the hips combined with the hamstring stretch which is different on each leg and the pressing of the crown towards the foot.  All of those waves of energy combine to a swirl that can be delicately intricate over time.  Pyramid also has elements of balance for me, as a balanced challenged yogi.  It has my head below my heart which is the basis of any inversion.  And it is one of the asanas where I need both muscular energy to apply force and organic energy to surrender. The quadriceps engages while the hamstring releases.  It's got it all, and yet it's a very basic posture, no advanced coordination or insane flexibility is needed to feel the incredible sensations of the pyramid.  I'm starting to love it more and more every time.

I got to thinking, about how corporate America is very much a pyramid, with everyone on top fighting for more, taking from those below, perpetually unsatisfied.  That's the part that really gets to me, turns my heart upside down and makes me want to pull the plug.  I still think that I would genuinely be happier as a bum in Hawaii. And we'll see how much energy I put into that intention.  What am I waiting for after all?  I've accomplished anything I set out to accomplish on the mainland, and life isn't really about stacking up some stupid list of checkboxes on a task sheet anyway.

OK, back to my point.  Fault lines.  Finding fault with myself.  Other's faults.  And, the corporate workplace.  So, the cd of source code was delivered.  I was unable to build it since the desktop I grabbed last week when my laptop blew up on me has 32 bit windows 7 instead of 64 and I only had the binaries for 64 bit sql server so I couldn't get the project to build completely without a days worth of downloads or wiping the machine and installing 64 bit win 7.  But, a few hours of code inspection lead me towards the root cause, which wound up being an "s" in the wrong spot.  Plural vs singular, when used in function calls across web services where strings are generally used for names.  Abstract interfaces which would allow the logging of method names (if someone had thought ahead to write that in) and a lot of signature copy-and-paste type of mentality which is what colors the fault lines of this specific vendor.  Ill conceived code is easy to write, just command/control C and command/control V and then edit.  Sooner or later you have an unmanageable mess, but for the short term it gets the job done.  When I have time to write, which seems more and more rare as I get older, I look for similarities and ways to re-factor existing modules into proper abstractions.  I try to use names which make sense and are consistent.  I strive for formatting which supports error recognition.  My code is clean because I am type A and because I dislike debugging messy code since it makes errors more difficult to identify.

A second set of eyes, a fresh set of eyes, typically finds problems that you don't see when you've worked with that section of code for months or years.  In this case, it's very easy to skip over an "s" and read the same thing in both files, which is not something that a computer is able to do.  When the computer compares plural and singular versions of a noun, they do not equate.  When a human does, they often do because of how we interpret the characters on the screen in front of us.

The old me would have blown up upon finding this, after a week of "you don't have things configured correctly" from the vendor to my current boss and also to my future boss.  Mostly because of all the pressure put into my own week and all of the misery induced weekend meltdowns, of how isolated I felt in my opinion about the root cause and my method to identify it which wound up taking extra time because someone lost the first cd of source code.  It's easy to point fingers and assign blame, blame is out there anywhere we choose to look for it.  But it really isn't a game about blame.  The fault doesn't make one bit of difference when looking back at the past, what is done is done and nothing will change that.  The best path for the future, in work and in life, is to treat others as you would like to be treated.  Sure, if I were on the other side of this equation, I would have put more effort into troubleshooting the product that was handed off only a few weeks earlier.  Or, now, knowing that it was something I should have caught, I might profusely apologize.  That won't be happening based on my predictions of the personalities involved.  And it doesn't mean that vendor is evil or bad or incompetent like I might have believed a few years ago.  It just means that people, by definition, are not perfect.  We come with faults, and those faults have to be managed.  Pressure builds and must be released.  And with that release, things settle and go back to some semblance of normal.

For me, normal means seeking my mat, which is where I'm headed right now.

1 comment:

  1. The idea of telling a grown-up employee "you will stay here until you fix this" is truly horrifying. When do we get enough status to be able to decline jobs that come with that kind of culture?

    ReplyDelete