Saturday, June 16, 2007

Accumulated Wisdom

It's funny what sticks with you. From time to time someone will say something that strikes me as uncommonly wise, and applicable in much broader context. For sure, they may have been quoting someone else, but I heard it from them first. Here are some quotes that keep coming back to haunt me, subject to my faulty memory. (I continually add to this list as I come across new bits of wisdom.)

"Any performance claims a vendor may make should be considered guarantees that their product cannot exceed them." -- Bill Buzbee

"You need to take at least three weeks vacation to realize how trivial everything is at work." -- Bob Dixon

"Negative results are still results." -- Bob Dixon

"90% of producing a product is just turning the crank." -- Glenn Freundlich

"If you and I always agree, one of us is redundant." -- Ken Howard

"Either you design a layered architecture, or you'll wish you had." -- Ken Howard

"To us, it's just another supercomputer." -- Basil Irwin

"Shut up and take the money." -- Bob Kalisch

"Any new high technology has a half-life of about five years." -- Barry Karafin

"I choose not to live in fear." -- Kate Kligman

"Everyone has their own story to tell." -- Marla Meehl

"Obviousness implies understanding." -- Paul Moorman

"I like to write pretty code." -- Tam Noirot

"How to you find the smart kids? You don't have to. You just have to find one smart kid. That kid will know who all the other smart kids are." -- Bernie O'Lear

"Office politics are so bad here because the stakes are so small." -- Bill Patterson

"If you're going to carry a concealed weapon, you have to be Mr. Cool, you can't let anything upset you." -- Mark Passamaneck

"Every time I pick up a telephone handset and hear dial-tone, I know a little miracle has occurred." -- Ron Phillips

"There are a lot of real worlds." -- Al Sanders

"This could make us famous in the organization... or very well known." -- Mike Manuel

"This is just temporary... unless it works!" -- Red Green

"The 'S' in 'IoT' stands for Security." -- Anne Trotter

"You want to know what makes airplanes fly? It's not the Bernoulli effect. It's not the angle of attack. It's money. Money makes airplanes fly. Money, and a lot of it." -- Steve Niessner

"Nothing happens in contradiction to nature, only in contradiction to what we know of it." -- Dana Scully

"Natural selection believes in you, even if you don't believe in natural selection." -- Gary Longsine

"Adventure is adversity recounted at leisure." -- David Braun (who may have been quoting someone else)

And finally, a few things I've said myself, over and over again.

"It isn’t until you see a globe that you realize every world map you’ve ever seen has been lying to you." -- Me

"I've learned over the years that when a pretty girl pays attention to me, it's probably only because she wants to copy my homework." -- Me

"The only thing worse than management not paying attention to you is management paying attention to you." -- Me

"If you waste your peoples' time you are teaching them that it is okay to be wasteful." -- Me

"No design ever survives its implementation." -- Me

"Forward references are a sign of weakness." -- Me

"My entire business model depends on my working outside my comfort zone." -- Me

"When you find yourself saying 'we have to do this', append the phrase 'at any price' and then see how you feel." -- Me

"I'm a product developer. For me to be successful, I have to ship a product." -- Me

"No one has ever shipped a perfect product, and we aren't going to be the first." -- Me

"Terrible jobs are all alike, but great jobs are each great in their own way." -- Me (paraphrasing Tolstoy)

"A friend of mine once asked me what faith or religion or moral code or philosophy of life I might claim to have, and I said in all seriousness that I was an economist." -- Me

"Sure, my boss is an asshole. But at least I'm sleeping with his wife." -- Me (on being self-employed)

"When all you have is a push down automata, everything looks like an LL(1) grammar." -- Me

"There's no kill like overkill." -- Me

“After more than forty years in my profession, I have come to understand that the very best engineers are fundamentally economists with some technical skills.” -- Me

"One of the problems of being a real-time/embedded developer is that we think of 38 microseconds as being a long time. But it isn't a long time. It's only 38 millionths of a second. In the non-semiconductor, non-electromagnetic, non-quantum, non-relativistic world, I'm told almost nothing gets done in 38 millionths of a second." - Me (pondering relativistic effects on the atomic clocks in GPS satellites)

"Trains, container ships, oil tankers, and large bureaucratic organizations all have two things in common: [1] they won't make any sudden turns, and [2] you really don't want to get in their way." -- Me

"We strive for immortality. Some immortality is genetic. Some is memetic. Glory is a form of the latter. But may lead to the former." -- Me

"'Live-long learning' is just another term for 'adulthood'." -- Me

"Getting me to talk isn't the problem. Getting me to shut up is sometimes the problem." -- Me (on being invited to give an impromptu briefing)

"Any sufficiently advanced VR is indistinguishable from reality." -- Me

"Oh no! Not another learning experience!" -- Me

"Rule of thumb: unless the fault is with us, we can't be the only ones seeing this problem." -- Me

"When all you have is a twelve-gauge shotgun, every problem looks like a duck." -- Me

"Whether you realize it or not, everything you care about - the Internet, mobile devices, public utilities, the stock market, scientific research - depends on GPS." -- Me

"I'm just happy to get fed." -- Me

"One crisis at a time." -- Me

Sunday, May 27, 2007

Alternative URL

A notice from Housekeeping: as of a few weeks ago, you can access this blog by the URL http://www.chipoverclock.com, in addition to the usual http://coverclock.blogspot.com/. Either ends up in the same place. I expect the first URL to remain usable even in the unlikely event the host for this blog changes. Thanks!

Friday, May 25, 2007

Survival of the Sickest

Humanity continues to be plagued by genetic diseases like sickle cell anemia and type 1 diabetes. In his book Survival of the Sickest (William Morrow, 2007), Dr. Sharon Moalem asks "Why hasn't natural selection eliminated these diseases?"

For some, like family traits towards hypertension or breast cancer, it's obvious: they don't kill us until after we've reproduced, so there is little or no genetic pressure against them. But for others, like the two I mentioned above and others which can take their victims in the prime of life, this is clearly not the case. So what's the deal?

The deal is this: as bad as these genetic diseases are, they provide some immunity to something that is even worse. They have survival value.

Sickle cell anemia occurs predominantly in populations of African descent. It offers resistance to malaria, because the malformed blood cells are not good hosts for the malaria parasite. Type 1 diabetes is statistically more common in populations of Nordic descent. It offers resistance to frost bite by virtue of the anti-freeze properties of high blood sugar. Hemochromatosis is a genetic disease where the iron levels in the blood are so high that it can lead to organ failure. A huge percentage of the population of Western European descent have at least a mild form of this malady, which in turn gives them resistance to the bubonic plague. (It is also why treating folks with leeches and otherwise bleeding them may actually have made them better.)

Moalem (with co-author Jonathan Prince) offers many other counter-intuitive insights of how dreaded genetic diseases may have kept your ancestors alive, in this medical version of Freakanomics, another book I much recommend. The chapter on epigenetics would have made my hair stand on end, if I had any. The fact that your maternal grandmother smoked while she was pregnant with your mother had a direct effect on the expression of the genes in your body today.

And so it is with large software systems. How does a software application get to be eight million lines of code?

One line at a time, baby, one line at a time.

No one starts out to write an eight million line program, just as natural selection doesn't set out to create genetic diseases. Everything was done for a reason, to provide some necessary capability or to solve some problem. Successful software systems evolve and grow organically, just like biological systems. And as David Parnas asserts in his classic paper "Software Aging" (Proceedings of the 16th International Conference on Software Engineering, IEEE, May 1994), software is no more immune to the effects of entropy than any other artifact in the physical universe.

Continuous software maintenance inevitably occurs in any successful software product. The only software products that don't change are the ones that failed in the marketplace. The fact that this frequently results in an awkward architecture, a compromised design, and spaghetti code just means that the software was a victim of its own success, and the fact that it is rarely economically feasible to scrap it and start over. In evolution we call scrapping something and starting over extinction.

In his book Object-Oriented and Classical Software Engineering (McGraw-Hill, 2002), Stephen Schach cites studies that shows that fully two-thirds of the total cost of the entire software development lifecycle is maintenance (and I have read studies that cite higher numbers). Software reliability pundit Les Hatton cites studies that show that only 20% of code is written as part of initial development; 40% is corrective maintenance or bug fixing, 16% is perfective maintenance or improvements, and fully 24% is adaptive maintenance or simply making changes because something in the external environment changed.

We apparently spend a lot of time just adapting to the latest Linux kernel or Java Virtual Machine release, porting to a new processor platform, wondering if the newest GCC will subtly alter the behavior of our code base, or dealing with the effects of the IT department upgrading from 10Mb/s to gigabit Ethernet on the servers. This is why I think way too little attention is paid to designing systems that are easy to modify. If you are not addressing the largest single piece of the software development pie, then you are not controlling your costs. Adapt or die.

This is one of the reasons why innovation seems so much easier in start-ups. They are too young, inexperienced, and immature to realize that what they're doing "can't be done". They don't have to shoehorn their new product into an existing successful portfolio. They don't have to worry that they may disrupt a revenue stream that supports the livelihood of many folks in their organization. And they don't have to carry around the legacy of their past successes, because they haven't had any. The risk of failure is large, but the cost of failure is small. It's also why large established organizations may find innovation by spinning off a tiny subsidiary and shielding it from the rest of the bureaucracy.

In evolution, the vast majority of mutations are neutral or lethal. But some become a benefit to survival. Likewise, we should expect a lot of new product development to fail. A few will create a new billion dollar industry. Two-time Nobel prize winner Linus Pauling once said "The best way to have a good idea is to have a lot of ideas." Innovation is not for the risk-averse, in either the software world or the biological world.

Evolution has (so far) chosen not to scrap the human DNA and start over, even though doing so might lead to a more efficient design without so much questionable baggage. Likewise, we are understandably reluctant to do the same with our large successful software systems.