Musings


How much money is a dollar?  To a single person, it’s just a dollar.  To the economy, it represents much more.  When a dollar passes from person John to Jane in a transaction, Jane now has a chance to spend that dollar.  The same dollar may then pass repeatedly to multiple other people.  Yep, it still has the same value, but a bunch of people all had their wealth increase by temporarily by a dollar.

In a broad sense, economies are built on the same logic.  A tax break crediting $100 to the taxpayer is intended to create a ripple effect of spending that adds a much large amount of wealth to the economy at large.  Spending is a chain reaction that brings economic prosperity and higher standards of living to all involved.

This is what I have in mind when I consider the present economic problems caused in large part by risky mortgage investments.  Mortgage lenders underwrite mortgages to people and then sell their mortgages upstream to bigger investment banks.  These mortgages often pass through the government sponsored enterprises (GSEs) of Freddie Mac and Fannie Mae as part of building a healthy secondary market in mortgages.  In other words, the same chain of spending exists as when folks repeatedly spend that same dollar, except it’s on a grander scale.

The mortgage fallout is bad enough that it has hamstrung a lot of large banks, investment and otherwise.  Their so-called diversified positions were in fact full of risky toxic waste.  Yes, their balance sheets are being crippled by the fallout from being over-leveraged in stinky mortgages.

So, what now?  Well, the financial problems of large companies and GSEs will effectively reduce the amount of money in the economy available for borrowing.  This will trigger the opposite of the chain reaction described above.  For every dollar no longer available for borrowing, the overall pool of money in the economy shrinks to a larger degree.  In this sense, the troubles of the larger investment entities can trickle down to smaller companies and individuals.

So what’s the fallout?  Well, it’s not a great time to sell a house.  Market values are tough to ascertain and buyers are having a harder time getting mortgages at favorable rates.  It’s also probably not a great time to look for a job.  On the other hand, if you’re an investor with money in his pockets, this is a great time to buy up stocks that have been beaten up badly in the last few weeks.  Beyond that, it’s hard to predict the future, especially with the government looking at spend close to a trillion dollar in handouts to keep some of these beaten investment entities afloat.

My puppy has a sensitive stomach.  We’ve tried a few different kinds of food and gone through a lot of trial and error trying to select the perfect dog food.  The food has to be something that she will both eat and will not upset her stomach.  She is clearly  allergic to something in these foods, but it is difficult to isolate the particular ingredient bothering her.  (The fact that she eats grass and dirt does not help!)

The prevailing wisdom is that one must perform trial and error feedings with the puppy.  You pick a brand, feed it to her, and see if she will eat.  Then you wait a few weeks as the dog’s stomach adjusts to the food to determine if she can digest it properly.  In other words, you become deeply invested in studying the amount and composition of the dog’s poop.  Seriously.  Squishy?  Oh, my poor doggy’s belly is upset.  It would be easier if she spoke English and could tell me how she is feeling, but alas, she has proven stubborn so far in my attempts to teach it to her.

Anyway, what we need is a piece of software that will automate the process of narrowing down what ingredient makes my dog’s poop nasty.  One could put together a database of popular dog foods that contained a list of all the ingredients by weight in each food.  Then the user could check off which of the foods their dog has tried and whether or not each made them sick.  The software could use a  very simple machine learning construct, a decision tree, and determine which ingredient is most likely making the doggy sick.  The system would simply look at the common ingredients among all the food that make the dog sick, and determine the commonality between them.  This will allow the user to strategically choose new foods to try that avoid the ingredient that the program thinks is the culprit.

Of course, the potential for humor in this program is there.  One could be asked to rank the “disgustiness” of the poop when poor puppy can’t digest a given food.  As the user base grew, one could implement a top ten list of the dog food brands most likely to cause disgusting poop.  I’m not sure how that would help the software attract advertisers, but it would at least be entertaining

Yeah, I’m half kidding with this whole idea, although if such a thing had existed when I started trying to figure out what was upsetting my puppy’s tummy, I sure would have used it.  There apparently is no scientific method for finding a food that your dog will both enjoy eating and be able to digest well.  Everything I’ve read says that high quality food will increase a dog’s energy and lengthen its lifespan.  All puppies should have a chance at a high quality life!

I Hate My 30s?

Not really, but the show is certainly a winner.  I hit 30 last year and entered a period of confusion about my career path.  The challenge of programming was waning and as such, I was having a more difficult time remaining focused on it.  For months I thought the problem was simple burnout and blamed my employer.  Later on I took another gig  and the same feelings resurfaced, so I realized my initial conclusion was incorrect.

The truth, more likely, is that I’m not burned out.  I’m just less interested in the actual act of programming than before, but I remain passionately interested in software and technology.  To this end, I’d like to find a balanced, challenging outlet that allows me to pursue my interests in software and technology without getting bogged down in doing all of the implementation.

I used to look around and scoff at the lack of older programmers, assuming that older people can’t hack the ever-evolving technology landscape.  I no longer really think this is the case, but rather that as programmers gain experience, they obtain more perspective about the industry.  From the dawn of the computer science age in the 1960s to the present, most problems have been simply recycled with new implementations of the same solutions.  True innovation is more rare and the more experienced programmer gets weary of the same problem solving.

If I can find a career operating at a higher level in the software production process, I think I’ll be a lot happier.  It’s the repetitious problem solving in everyday programming that makes me bored.  In the past I’ve enjoyed architecture and design work as well as mentoring new hires out of college.  I don’t know what my exact niche in the ecosystem should be yet, but I certainly would like to stay within the software industry.  I’ll be re-examining career opportunities with a more open mind.

NFS, the ancient network file system, somehow still persists in today’s data centers. Apart from sophisticated technical arguments about why NFS sucks, why create additional network overhead to handle a request?
Each NFS mount is shared with multiple machines, each connecting to a single server. This is an unnecessary network bottleneck!

Here’s a newsflash: disk space is really, really cheap. Push files to the edges of your network instead of creating ridiculous bottlenecks that slow down your application and poop all over its uptime. The old argument that NFS is great for system administrator convenience is complete crap. Performance rules. Deal with it. Push your content to the edge of the network for better speed and availability.

My current poster child of NFS crapola is Dreamhost. For reasons unknowable, they have decided to host all user accounts on a variety of NFS mounts. Thus, my photo gallery website is served off of hard drives that are remotely mounted. So painfully slow! I mean, we’re talking about the addition of seconds for each page load. WTF? Why is this protocol not dead yet?

Conventional marketing wisdom has it that customers form loyalties to brands. This is the basic idea that a Ford owner is likely to buy another Ford based on a loyalty to the brand. I think the Japanese car companies would agree that it was not terribly difficult to lure American customers away from the cars of the red, white, and blue. From this is it is clear that there are more forces at work in a purchase decision than brand loyalty.

Modern thinking in marketing talks more about experience engineering. This is an interesting idea, which basically boils down to the creation of an a comlete experience that makes customers feel good about themselves. This is a concept that Apple has gotten right with the iPhone. The all-in-one device, feature-ridden as it is, is really a little bit of the American dream distilled into a 7×4x0.5″ package. It represents freedom, fashionability, and the open road. You can go anywhere with that bad boy and still have you lifeline back into the techno-sphere. It makes you feel good about yourself. It works without an instruction manual. You feel like a wizard.

More than the product itself, though, Apple has captured the full lifecycle of the customer experience. It was extremely simple to order online. They sent me beautifully crafted emails with tips and instructions for what to do when it arrives. It comes boxed in simple, but elegant black. When I removed the tape from the front of the unit, it automatically turned on and told me to plug it in for setup purposes. The entire process of acquisition and setup makes you feel warm and welcomed. It is reminiscent of my wife’s shopping excursions to the Coach store where they hold her hand and cheer her through the process of acquiring new handbags.

So, in short, Apple is a company that gets experience engineering. This is extremely apparent when contrasted with their partner, AT&T/Cingular/whatever. When we walked into a Cingular store, there was no mention of the iPhone whatsoever, which was confusing enough. I mean, maybe they only sell them in AT&T stores, but I really don’t think I should have to care about mundane details like that when it’s the same lousy telco. I’m very glad I ordered it directly from Apple where the entire process of dealing with salespeople and outdated phone setups was eliminated.

To the companies out there in the process of getting products into the marketplace, please think about the full lifecycle of the experience. Make customers feel good about themselves and you will succeed.

High availability means redundancy, right? If a piece of hardware or software fails, a backup kicks in immediately to carry the load so that users do not observe the failure. At worst, a transient error condition is seen to the client. This, at least, is the conventional wisdom now in an era of hardware with short MTBF (mean time between failures).

My wife and I experienced the leftovers of the mainframe era at the airport on Friday. Trying to get from Chicago to Philadelphia, we discovered that not only was our flight cancelled, all flights to the east coast altogether were cancelled. The weather conditions were fine across the map, so it didn’t make a lot of sense. Later on my aerospace buddy Matt clued me in that the FAA computers on the east coast had crashed. Another friend clued me in to the fact that 3 servers handle the FAA routing for the entire country, so the loss of a single server kept hundreds of people on the ground.

I don’t argue with the policy of not launching planes when their positions can’t be adequately tracked by air traffic control, but it’s a bit of an anachronism in this day and age to see a critical industry taken out by the loss of a single server. Big iron (mainframes) should all be dead and retired by now specifically to avoid this kind of situation. User requests should be automatically failed over to backup hardware. This is a solved problem. Telecom and Web 2.0 companies alike do this many times over every day.

I understand that a rewrite of the 1960s era software occurred at some point and the air traffic controllers rejected the solution. (with good reason) I think that, rather than attempting a complete replacement next time, they should try utilizing the Strangler Pattern. The failure-prone backend infrastructure could be steadily replaced without necessarily also re-writing the front end code. By maintaining different conceptual layers, the availability of the system can be improved without forcing an all-or-nothing type total system re-write number in the billions of dollars.

Big-bang software projects rarely succeed. Break big problems into manageable little problems! Ask your users what will improve their experience. And last but not least, at least have a better story for the poor saps at the airport than, “Your flight has been cancelled. Would you like to go on Sunday instead?”

I had a recruiter cold call me at work today. I told him I was busy at the moment, but that he could email me at my cornell.edu address. I like to give a cursory glance at the pitches by head hunters on the theory that eventually one of them will be interesting. This is the approximate conversation that followed:

Recruiter: “Oh, did you go to Cornell?”

Me: “Yes”

Recruiter: “I went to Dartmouth. Ivy League for the win!”

Me: “Are you a World of Warcraft player?”

Recruiter: “Yeah, I play on the Bronzebeard server.”

Me: “Nice. I’m over on Garona.”

I’d say that qualified as the oddest conversation I’ve had with a cold caller, but the interesting thing is the extent to which MMORPG and WoW vocabulary is now transferring over to RL. (real life) Also, to be perfectly honest, I’m now far more inclined to see what the guy has to say…Hilarious.

I think PyCon could have continued at the Dallas Fort-Worth Airport this evening given the number of stranded Pythonistas I recognize here. It’s snowing back home in Chicago and I’ve already crashed and burned on standby twice. My original flight is now slated to leave 3.5 hours after its scheduled time and I have my fingers crossed.

In the meantime, I have made several observations about the DFW airport experience:

  • The software listing flights & times on screens at the rental car lot had crashed. However, it still offered degraded functionality in the form of a tattered piece of paper that listed airline to terminal mappings.
  • The PeopleMover is cool. It’s fast and it compensated for the fact that I had no idea what terminal to go to.
  • The faux authentic Texas food at the airport is serviceable enough if you have a sufficient amount of nasal congestion. (Damn this cold leftover from Chicago.)
  • The handicapped cart that keeps going back and forth has a slogan on the back: “Follow me to McDonald’s.” That doesn’t exactly seem responsible.
  • The airport has a chapel. (My sources tell me this is not all that uncommon.)
  • There is a wine bar in the terminal. If I didn’t have the aforementioned cold, I’d probably sample some of them.
  • T-Mobile wifi access may be $10/24 hrs, but it’s getting cheaper by the hour the longer I sit here. It is also bitchin’ fast.
  • Power outlets are an extremely scarce resource. There is a kiosk that offers to power up your devices for $2, but no one seems willing to pay that. Fortunately, it is really hard to eliminate working power outlets anywhere in the modern world, so a few desperate souls like me are now defending their power connections vigilantly.
  • Sometimes AA’s proritized standby list really sucks. I saw a poor family of 6 miss a flight because they didn’t have enough standby seats left. Maybe their algorithm should include some prioritization for little kids? As a single traveler I can deal with delays, but I’d stranded with 4 kids.

Okay, back to coding in Django. After taking the Django tutorials and talked to some like-minded folks at the BoFs, I now realize where I have to do some refactoring.