Tuesday, December 13, 2011

Predicting Corporate Failure

Bob Lewis of IT Catalysts has a compelling essay in which he predicts the failure of a company, Business failure in progress.  Worth a read.

Wednesday, December 07, 2011

Don't Go There

A few years ago, I worked for a company that had a pool table. It was cool and different. A lot of edgy companies had Foosball tables and Ping Pong tables, but a pool table is a different beast altogether. This baby had three or four huge slabs of slate over an inch thick apiece that were laid out on a bed of stuff -- mud, clay, something -- and carefully leveled over the better part of an entire day. Then the stuff was left to set over night before the felt was applied.

We played pool to ease tension, introduce new employees to the company and, finally, to determine who was the "best". That is, we started a ladder.

As we played, we realized that we regularly getting ourselves into situations that were just tough to work out of. We didn't know what to do. Sometimes we tried to force our way through, sometimes we tried to finesse our way out. Usually, our efforts were too little and too late and our opponent trounced us.

So we got training. We brought in an instructor. A Pool Shark. The movies had nothing on this guy.

He wowed us and explained many aspects and strategies. At the end of his session, the inevitable question came up; "What do you do when you find yourself in a situation like this?" Then we would layout some of the most challenging plays in which we found ourselves.

He looked at the table and the balls laid out on it and a pained expression crossed his face. "I wouldn't let myself get into this situation," was his reply. "Never."

He knew enough about the game to know where the danger areas lay. He had played and practiced enough to know how to keep is game in the area where he can control it.

This story occurred to me as my colleagues and I struggle to stand up a large and complicated release that was pushed into production too soon. We know better. We know where the danger areas lie and how to avoid them. But we were pushed right onto them. A mandate was given and we did our best to march to it. Sometimes you just have to do that. But if and when you do, it is helpful to remember that you chose to ignore the evidence that it probably wouldn't work smoothly.

Just don't go there. Don't set things that aren't highly likely to succeed, especially when lots of dollars are on the line.

Sunday, December 04, 2011

Combine Wolfram Alpha and Siri

Siri is seriously cool (c'mon, have you told your iPhone you love it?).

Wolfram Alpha is seriously cool.

Here are some fun hints on how to combine them: http://www.tuaw.com/2011/10/28/10-cool-things-you-can-do-with-wolfram-alpha-and-siri/

How about this: Say to Siri, "Ask Wolfram what flights are overhead" to find out which jet contrails are over head.

Wednesday, October 12, 2011

The Perfect Engineer

For reasons that should be shortly entirely obvious, I have been thinking about job interviews. It was so bad that instead of typing "routes.rb" while looking for a file, I typed "resume.rb". Heh.

And, in thinking about this I realized what I think companies want out of the perfect engineering candidate.

We've had a good deal of changes where I work. Let me state right now that I have a tremendous amount of confidence in the leadership, their vision and the work that we're doing. However, when things change, folks get all shook up. First, after a sizable push to get new infrastructure up and running on an accelerated schedule, we lost a bunch of folks. Some were contractors that wrapped up and others were stalwart members who accomplished something really great and felt it was time to move on to new challenges.

Then, we had a change in team leadership. This caused more unrest and another flurry of departures. Although we're looking for replacements, they are hard to come by and a linear extrapolation of our head count over the past year shows no one left by next July. We mostly look at that downward progression as gallows humor.

So, thinking about my departing colleagues and having had to do due diligence myself, it occurred to me that companies seem to be looking for an engineer with the following qualifications:
  • Amazing Abstract Thinker: Software architecture, design and algorithms
  • Rock-Solid Concrete Contributor: Code structure, comments, testing, source code control, branches, merging. Master of multiple languages
  • Top-Notch Manger of the User Experience: Site flow design, UI design, HTML, CSS, JavaScript implementation
  • Unshakable Foundation Provider: Schema architecture, database configuration, SQL wizard across multiple databases both commercial and open source
  • Deployment Master: development, staging and production system configuration and management, deployment processes and scripts
  • Systems Genius: Unix, OS/X, Windows, Networks and OS internals
  • Unparalleled Business Analyst: Business needs analysis, specifications, requirements documentation, feature prioritization, cost estimation, ROI projections
  • Zen Guru: personable, calm, professional, communicative, approachable, polite and respectful, unflappable
  • Project Management Prodigy: team management, task estimation, assignment, prioritization, budgeting, conflict resolution, risk management
  • Strategic Wonder: project current business realities into future business needs and align technical infrastructure, staff and supporting resources to meet tomorrows needs today.
  • Workaholic: Put in a solid 40 hour week plus full time availability for emergencies and fire-fighting
  • Hero: Take critical business needs and urgent projects, pull out all the stops and deliver them ahead of all expectations
  • Inexpensive: after all, we're just talking about friggin' writing code for a web site. How friggin' hard can that possibly be? Plus, there are a ton of engineers and they're easy to please. Give 'em a fast computer and lots of free food and they're fine.
Ja, this is pretty snarky. But as I review it, I'm gonna stick by it. I recently realized that I started managing folks when I was 16 and ran a ballet studio for the summer while the owners were traveling out of the country. I've been doing this management stuff for over 30 years. Holy cow!

BTW, I can lay legitimate and concrete claim to most all of the aspects identified above and feel darn good about that. However, I've worked with a lot of folks and know that really good engineers are really hard to find; may be 1 out of 20. They have the ability to sustain an entire company and turn it around on a dime as needed.

Like I said, I feel good about where I am. I know the value I bring and know that I continue to work with some very talented engineers whom I respect tremendously. I also know that I would be hard pressed to replace them and hope I don't have to any time soon.

Thursday, May 19, 2011

Customer Relationship Failures

Here are a few instances of where companies are failing to meet my expectations. For each company and product, I am actively looking for acceptable alternatives.

Bank of America: I just downloaded my recent activity. I had been royally annoyed that BofA signed me up for paperless statements and then claimed that I had requested that. Never. I rely on the monthly statement to remind me to reconcile and I like the security of holding onto paper records for this purpose.

So, I logged on and searched and searched and searched until I found where I turn OFF paperless statements.

Imagine my surprise when I saw monthly maintenance fees on all my checking accounts.

A new payment schedule now declares that because I am not a eBanking customer, because I get a paper statement, they are charging me nearly $30 in monthly fees. And, I couldn't even call them at 9:20 pm to ask about it, because their customer service centers were closed.

I hate surprises from Bank of America. Bank of America; you suck.

Verizon Wireless: I hate my phone. It's an HTC Droid Eris and its just underpowered, weak and pathetic. As a software engineer, I hate using it, especially since I did some iPhone development and had an iPhone for a while. But phones apart, I hate Verizon Wireless more.

At one point a few years ago, while doing iPhone development, I was also helping get a start up off the ground (shout out to Star Street Sports!) and my wife and I blew away our minutes. Me on AT&T and her on Verizon. We had over $1000 in additional fees.

I called AT&T. They asked if I would upgrade to the unlimited minutes plan (only $20 more per month) and, if so, they would waive all the overage fees. I agreed in a heartbeat.

I called Verizon. They asked if I would upgrade to the unlimited minutes plan (only $20 more per month) and, if so, they would -- are you ready? -- give me a 30% discount. What? Excuse me? Your competition waived all the fees and left me feeling really great. You gave me a sucky deal and I had already been a customer for over 14 years, plus added four more additional lines.

Then I discovered that they have a policy that they won't discount more than 50%. So why did I only get 30%? I called back. You see, it's up to the representative who takes the call. So, for what ever reason -- I'm a jerk, the rep was having a bad day -- I got 30% off of the egregious over charges instead of 50%. And I'm still seething because they didn't give me nearly as good a deal as AT&T.

Verizon Wireless; you suck, too.

Callpod Keeper: I used to like my Callpod Keeper. I found it while using an iPhone. Callpod offered a free mobile password safe and I needed a replacement for my old one, which was open sourced and no longer being maintained. For $30 I could buy the desktop and then sync between mobil and desktop. Sweet!

When I switched to my sucky HTC Droid Eris (seriously, this phone is crap), I found Callpod has an Android version, which I installed.

Not long thereafter, having upgraded the app, the app kept asking if I wanted to try a 30 day trial of their premium service, wherein I could sync to the cloud instead of my own desktop. No. No, I don't.

Finally the friggin' pop-ups stop and I get around to syncing my devices. But I can't. Because now, without telling me, Callpod changed the rules. Now, I have to upgrade to their premium service to sync at all. They hid this change -- it was never mentioned anywhere I could see in the upgrade summaries. Now I can't sync my mobile password safe with my desktop safe and the two have inevitably drifted apart.

Callpod: you suck too. I'm chucking your ass out on the street as soon as I find another password safe.

So, there you go. Three examples of different companies pissing me off so royally that I actually spent my time to complain about it publicly.

This is why it was so important to me to make my Hold-it! Game Card Organizer an outstanding value. First, it is great to use and really helps make dozens of games play faster and better. Second, it is seriously sturdy -- I had a 400 lbs. fellow stand on one at a game convention without damaging the unit at all. Finally, I offer an unconditional -- yes, without any conditions -- guarantee for your money back if you don't like my product. Return it for your purchase price.

OK, so the Hold-it! hasn't made me wealthy and it really sucked that the hobby-game industry was deflating at the time I was trying to get my product into the marketplace, but it taught me tons about how to make something that customer will value.

I do no marketing or advertising at all. Nothing. And the Hold-it! continues to sell from my old, ugly website all on its own. Word of mouth. Because the folks who have purchased it (and I've sold it to nearly every continent on the earth) know they have a really good product.

If I could do it, then I really expect Bank of America, Verizon Wireless and Callpod to figure out that pissing off the customer is not good business.

Wednesday, May 04, 2011

Join.me is a winner

We have a contractor who works remotely and I was chatting with him on the phone about the project to which we are both assigned. I was trying to talk him through some of the specifics of our administration tool when he said that this would be a lot easier if he could just see my screen.

First thought was iChat, but I already had Colloquy and Adium running and last time I tried iChat it wouldn't connect to the AIM server. (I've since fixed that by connecting to the AIM server on port 443).

Next, I remembered getting an email from LogMeIn about a new service for free screen sharing. I went to the LogMeIn site and found Join.me and clicked on it. It started up Java, and I downloaded some Java code and a small tool bar appeared at the top of my screen. It didn't seem to take even a minute. I pasted the link provided in the tool bar into my Colloquy chat window and my colleague clicked on it.

He didn't need to down load anything. The Java code runs on my system, pushes my screen data to the server and he got a Flash driven experience, complete with zooming and screen resizing right away. We never had any lag, though he was working from home quite a few states away.

Fast, Easy, Free, Unobtrusive, Highly Functional: Join.me is a winner

Tuesday, January 25, 2011

Deja Rue - I know again that I will regret this

Chatting with a colleague about parenting. He says, "You know how you're always talking about how much you like your kids? Well, I've gotten to that point!" "Oh," says another colleague, "your kids are finally interesting?" "Yes, " responds the first, "they're old enough to be interesting now. My wife and I aren't talking about orphanages so much any more."

I chime in, "I think you're up to at least 150, maybe 200."

My colleague is puzzled and it appears on his face.

"Thousand dollars in psychotherapy bills to help your kids recover" I clarify.

Comprehension dawns on the first as the second says, "Oh, sure, as in 'I just ruined the kid for month with that!'"

"Yes, " I agree, "we call that 'deja rue', as in 'Once again, I know that I'll regret this.'"

Friday, January 07, 2011

Engineering Prioritization

Welcome to the Engineering Department.

So we can respond to your request, please let us know the priority of the request:

  • High
  • Higher
  • Urgently High
  • Wicked Urgently High
  • Higher Than That
  • Critically Wickedly Urgently Higher
  • I'm the CEO
Thank you

Wednesday, January 05, 2011

Bundler Install issue with Nokigiri on OS/X

I finally have an opportunity to move into the Ruby 1.9.2 and Rails 3.0 world having spent some time in earlier versions while supporting our main applications. Let's note that I know some other folks who are in a similar situation, which may have been predicated by our moving from OS/X 10.5 Leopard to 10.6 Snow Leopard by using the automatic migration rather than by manually re-installing all of our libraries, tools and applications. I had to do some rebuilding and patching just to get my Snow Leopard system up and running. However, this may be an hold-over from that process.

I used RVM to keep my Ruby 1.8.6 and 1.9.2 versions playing nicely. After installing Ruby 1.9.2 (wicked easy), I downloaded Rails 3.0.3, got the code base and ran 'bundler install' to install all the needed gems.

The process failed while building nokogiri. The error was:

libiconv is missing. please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.

Popping over to the supplied URL showed that I probably needed the libxml2 and libxslt libraries. I didn't think so because I was sure nokogiri was working in my other ruby environment, but nonetheless I ran:
sudo port install libxml2 libxsl
After doing so, I tried the bundle install again only to have the same error.

Now I was looking at a crisis. One colleague who has successfully navigated this waterway recommended that I rely on homebrew for package management. However, I've used port and fink, plus homebrew doesn't link to system directories by default, so I knew there would be some pain. I briefly considered uninstalling port and moving entirely to homebrew, but I have nearly 200 installed packages. Didn't want to go there.

Simultaneously, I was working in another terminal when I realized that my subversion was no longer working. It was complaining about a newly installed libiconv, which was installed with the libxml2. This actually was a good thing.

Now cutting to the chase: The Berekly DB needed to be updated in order to make all these things work. So I uninstalled Berekly DB, which involved uninstalling apr-util, python26, subversion, serf, and gone-doc-utils (using port for all of this). Then I did a 'port clean ' on all those packages and reinstalled everything.

Subversion now worked, but the bundle install still failed. Confident that the problem lay elsewhere, I cast around and found Chris Roos' post on Libxml2 Problems when Installing Nokogiri.

The solution I chose was to do a universal install of the libxml and libxlst libraries with

  $ sudo port upgrade --enforce-variants libxml2 +universal
 $ sudo port upgrade libxslt +universal
The bundle install worked after this, Subversion still works and I'm back in business.