The High Cost of Cheap Hosting

We have a number of clients who regularly ignore our advice, usually to their detriment. The latest debacle involves a client who sought our advice on hosting. We told them to just spend the money to get a Rackspace dedicated server. We also told them that under no circumstances should they use a GoDaddy solution.

Naturally the client chose to use a GoDaddy Virtual Dedicated Server. After all it only costs $50 a month! That’s $250 per month less than Rackspace! And besides, we don’t need all that horsepower!

So they signed with GoDaddy, but not before we told them that we washed our hands of any server related issues. If we were called in to deal with an issue that was determined to be server related, they would be obligated to pay our full ad-hoc rate.

You can imagine my (lack of) surprise when I opened up my Gmail this morning to find panicked emails from the client. The site was behaving strangely. After a bit of snooping, I found that both PHP and MySQL were running out of memory…no great surprise since this great GoDaddy deal only came with 256MB of RAM and since this web application involves some very complex queries on some decent sized tables.

The client called GoDaddy to see if they could upgrade their RAM allocation to 512MB, which they can…provided they move to a different server.

Let’s run the numbers on this deal: I’m dinging them for $125/hour, not excluding taxes. They’ve already used about 6 hours of time this month on server related issues, not counting the two hours I spent this morning. The server move will probably take another 6 hours, especially if they ignore my advice (again) and refused to spend the money and migrate to Rackspace. That brings us to 14 hours, or just under $1900 with taxes. I know for a fact that their guys have spent about 20 hours (not just on this issue) trying to get the server to play nice…say their guys make $35 an hour, that’s about $700. The annualized cost of the server is $600.

That comes to $3200 invested into this server, they’ve not yet been up two months, and it’s been one thing after another with this GoDaddy Virtual POS. Rackspace would have come to $3600 per year.

I have several other clients on equivalent Rackspace platforms and guess what we’ve had to deal with for server issue? Zip, nil, nada, null. Factor in the incredible customer service that Rackspace provides, the ridiculous connection speed, easy scalability, managed backup and it should be an easy decision.

(I don’t work for or have any affiliation with Rackspace other than being an extremely happy client).

Viva La Vida

The project about which I posted in March was a cluster learning experience and is the reason I’ve neglected this blog for so long.  At some point here I’ll pontificate about what went wrong and how I can (or have) learned from it.

In the meantime, I’m going to try to be more consistent with this thing.  I even went so far as to set a reminder in my Google Calendar.

In unrelated news, The Steampunk Workshop is a really cool website.  I’ve never really been into the steampunk thing, but I could see myself getting into it. I like working with my hands and it would be fun to engage in some less cerebral activity.

Taskix

I just stumbled across the most marvelous little utility. And by “stumbled across” I mean I read about it in PC Magazine and wondered why I’d never Googled for such a thing:

http://taskix.robustit.com/

It allows you to move taskbar items in Windows XP. For example, I like to have Visual Studio 2005 always running in the far left, Firefox to the immediate right of that, and then whatever else. Pretty cool.

Lasso: Hang Yourself With It

This current project has been one challenge after another. This is the case with every project, which is why I love developing software…never-ending challenges. However, the challenges in this project do not come from needing to find better/faster/cooler ways of accomplishing goals. No, the challenges come from the searing incompetence of the programmer who started the project but was fired before he could complete it.

Here’s a short list of grievances:

  1. No functions. The entire website, which contains some very complex functionality, is one gigantic if/then/else statement.
  2. No comments. Not a single one in what has to be 30,000 lines of very sloppy code.
  3. No foreign keys. He referenced discrete fields, like a user’s name, to create a relationship with another table.
  4. Three SQL datatypes were employed: integers (for the unused primary keys), datetime (for the odd occurrence when he actually decided to timestamp something) and varchars with a length of 255 for everything else, and I mean everything.
  5. Fulltext indexing on every single varchar field. Every. Single. One.
  6. Goofy character based flags. After all, why use a boolean or an tinyint 0/1 pattern when you can have flags like “enabled/disabled/Enabled” or “yes/no/NO.”

On top of it all, the legacy code is written in an absolute abortion of a language known as Lasso. Lasso is this…idiosyncratic, we’ll call it…language favored by “programmers” who favor Macs. Here are a few of the neat “features” of Lasso:

  1. Rather than following that boring old void function myFunc(args) pattern that every other language on the planet uses, Lasso eschews “functions” for “custom tags” with this sweet prototype syntax: define_tag: -myFunc, -required=’arg’;
  2. Passing variables to functions…I’m sorry, custom tags…by value as the default behavior must be passe to Lasso; variables are passed to functions (custom tags) by reference by default . You’ll need to root pretty deep into the language guide to discover documentation on this little gem of reality.
  3. It has its own middleware server and site administration tool that sits between the web server and the code. Every web language out there has a parser or JIT compiler that sits in the same place, but Lasso does it differently. Admins have to create sites, then create database connection entries, designate which tables can be accessed by which users, decide which filetypes can be accessed, etc. etc. ad naseum. It’s no wonder my predecessor was the worst coder in the galaxy: he didn’t have time to learn anything as he was to busy trying to get a new website set up in Lasso’s SiteAdmin tool so he could actually then start writing the damn thing.
  4. Nobody uses it outside of seven people in England. Therefore if you are looking for community help…you’re screwed, unless you’re willing to wait for someone to answer a question on the one Lasso forum that exists on the entire internet at Nabble.com.
  5. You can’t buy a book on it, since, you know, publishers exist to make money and you can’t make money selling books about a language that seven people use. Well, there is one book published on Lasso 5 (current rev is 8.5).

I need a gun with one bullet.

Taking the Plunge

This day has been years in the making. I started learning to write code as a kid when my Dad brought home an Apple //e. A few years later I graduated to a book on 8086 assembly language. I studied engineering in college. Seven years ago I left a very good job to focus on becoming a programmer. There have been a few detours along the way, turns off of the road caused by poor choices and some bad luck.

So here I am, 7:00 in the morning on the Friday following my last day in someone else’s formal employ and I cannot be more confident in my choice. I’ve saved as much money as I could afford. I’ve worked evenings and weekends for the last few years to develop the necessary connections, reputation, and skills. I’ve turned down investors offering relatively handsome sums of money because I’m not willing to give away equity that has little present value but massive future value.

I’m stoked, amped, jacked…insert the superlative synonym for excitement, it’ll fit. I open up my IDE and…

Macs and Me, Part I

One of my current projects is a “Rescue Ranger” deal where a project has been abandoned and I’ve been brought in to save the day. Literally. If this project doesn’t get done my client, a large ad agency, will lose one of their top accounts.

A stipulation of the contract is that I do as much of the work on-site as possible…on a Mac. Now I have absolutely nothing against Macs. I’d buy one to use myself except for the fact that I rely on too many Win32 programs to get my work done, Visual Studio 2005 and VS.PHP being the most important. The Mac in question is pretty cherry. It’s a G…5? Whatever is the latest and greatest, big processors, lots of RAM, and one of those ridiculous 30″ flat panels…the best Mac money can buy. It still has OSX rather than the latest operating system that Jobs just released a few months back.

I now have about 16 hours total on a Mac and…well, I’m underwhelmed. I’ve heard and heard about how they’re so easy to use, they’re so intuitive, anyone can use them, yada yada yada yackety schmackety. I haven’t found them to be any easier to use than Windows XP.

Easier than Vista? Yes, definitely. *nix from the bash shell is easier that than steaming pile, but then that’s what happens when you design by automated tests rather than by UAT.

But I digress. I found installing programs to be a pain. I needed the MySQL GUI Tools package as well as OpenOffice. Using Windows XP I download, double-click, and go. Using this Mac I had to download, double-click, drop into the shell, tweak settings, re-install, and go. Easier? Not so much. My time is worth a nice chunk of change, and I blew half an hour of it on the Mac.

It was also s…l…o…w. There were two databases that I needed to back up from my client’s network. I hooked up my XP powered Lenovo to do the larger one and used the Mac to do the smaller one. The Mac took 20 minutes, my Lenovo took 2. Why on earth would a shiny new Mac be an order of magnitude slower than a year old PC, and a notebook at that? Everything else took longer too. Opening Dreamweaver on the Mac took twice as long as on my laptop. Opening a website in Firefox took about three times as long.

The other minor annoyance is that to use a right-click context menu I have to hold down the Ctrl key on the incredibly tiny impossible to use if you have hands larger than a midget’s keyboard.

I’m less than impressed to this point. Maybe it’s like when your friends talk about how awesome a movie is and then when you see it your reaction is, “Seriously? That wasn’t that cool.” Perhaps there’s no way a Mac can live up to the hype.  My gut reaction is that for neophytes, a Mac might be better. If all you do is use Firefox to surf the web then it might be marginally easier. I dunno…I’ve been on computers since my dad brought home an Apple //e (PR#6 FTW WOOT!), so I have zero perspective on what it’s like to be totally new to computers.

Marketing Mathematics: The Importance of Standard Deviation

Averages and Standard Deviation

Adrian Peterson rushes for 96 yards per game...with a standard deviation of 78 yards.I frequently deal with marketers and marketing departments and am just as frequently astounded by how ignorant most marketers are of how to apply mathematical and statistical practices to their trade.One fundamental stands out most prominently: the meaning and power of calculating standard deviation when examining averages.

Marketers love to talk about averages. However, the most important part of an average is almost always overlooked: standard deviation.

The best way for marketers to look at standard deviation is to view it as a measurement of consistency.

Let’s say you’re the coach of a football team and it’s fourth down with four yards to go to the end zone. You have two running backs, one who averages five yards with a standard deviation of two yards and another who averages seven yards with a standard deviation of five yards. (Kudos to MathGeek for this example).

Which back do you choose? The correct answer is the first back, because he’s more consistent. While he’s not likely to bust a run for big yards, he’s also not as likely to get stuffed at or behind the line of scrimmage.

A more applicable example is average order size. Companies LOVE to talk about average order size. One of our clients’ average order size is about $160. But the standard deviation is $256!

What’s this mean to a marketer? It means that in this case average order size is totally and completely meaningless as order sizes are all over the place. It means that if you look at 1000 orders very few of them will be close to $160. Any effort focused on increasing average order size would be a waste of resources because the focus would be upon a segment that doesn’t exist…there simply aren’t very many customers making orders at $160.

A better practice would be to examine a frequency distribution of order sizes to determine the ranges in which most orders are placed…but that’s an issue for another posting.

So how does one calculate standard deviation?

Simple! It’s the square root of the sum of the squares of the differences from the statistical mean divided by the degrees of freedom.

Ok, so it’s not so simple, but spreadsheet software packages like Microsoft Excel or OpenOffice Calc make it simple for you.

You know how you can highlight a range of numbers, say A1 to A10 and somewhere else on a the spreadsheet, maybe A11, type “=SUM(A1:A10)” and you get the sum of those number? Just do the same thing, except instead of SUM put “STDEV”…so you’d have “=STDEV(A1:A10)”.

It’s that easy. Excel or Calc does all the heavy lifting.

Just Say No To Cheapskates

I was a salesperson before I was a software engineer; now that I’m starting a company, I’m once again a salesperson. I’m happy to say that I’ve learned quite a lot in my hiatus from sales; being on the receiving end of the pitch has taught me quite a bit and I’ll be a much better salesman this time around.

There is one lesson, however, that I’d like to communicate to anyone that is listening: don’t do business with cheapskates.

Cheapskates will hammer you on price until no profit margin remains. Cheapskates will raise absurd post-sale objections and insist that your pre-sale answers were different. Cheapskates will fill your voice mail with ludicrous questions and complaints about your product. Cheapskates will create a negative association with your name among post-sale support staff and when you need a favor from them (you will) you’ll be out of luck. Cheapskates will never be happy with your product and at best you’ll have a marginally satisfied client from whom you will never receive referral business…and if you do, it will be the undesirable business of other cheapskates.

To differentiate between a cheapskate and a reasonably price conscious prospect, ask yourself, “does this prospect focus on the ‘I’ and ignore the ‘R’ in ‘ROI?’” This is key: cheapskates focus on the ‘I’ and no matter how much ‘R’ you bring them, all they will ever see is the ‘I.’

If you find yourself dealing with a cheapskate, gracefully extricate yourself from the situation and move on to another prospect.  Don’t waste time that you could be spending with a quality prospect.

Just Make It Work

One of my consistent frustrations with many other IT people (read: computer nerds) is there is a direct relationship between their personal knowledge base and expertise and their sense of self-worth. Ergo, to question the decisions or actions of many IT people is akin to questioning their identity as a human.

This leads to the type of behavior lampooned by Jimmy Fallon in the Saturday Night Live sketch “Nick Burns: Your Company Computer Guy,” where a lisping nerd know-it-all comes and treats his internal clients with condescension while he solves what to him are trivial problems.

At least Nick Burns can figure out how the problems with which he’s presented. I’m willing to accommodate a certain amount of boorish, annoying, or arrogant behavior if someone is good at what they do. I call it the “House Principle,” a la the booring, annoying, and arrogant Dr. House on TV. But the most difficult situation is when someone has behaves in that manner yet doesn’t have a clue what in the hell they are talking about.

This is where the real problems arise, because challenging this person’s statements or decision results in them taking personal affront to your skepticism because their sense of self-worth is completely ingrained with their knowledge. It becomes not an issue of (for example), “Why is our outgoing email being sent from the IP 123.456.789.0 rather than 123.456.789.1″ but an issue of them hearing your question as a statement proclaiming, “You’re an incompetent idiot, and a moron.” The result is a hyper-defensive over-reaction. There are three letter acronyms thrown about (some of which may be made up on the spot), software vendors are cursed, and excuses are made.

The situation boils down to someone refusing to accept responsibility for either making a mistake or not having had the necessary knowledge…or both. Thing is, I don’t know anyone who doesn’t make mistakes and I don’t know anyone who knows everything, so I’m not in the least shocked when such a situation comes up.

I haven’t yet figured out how to communicate to this type of individual without investing an inordinate amount of time into ego stroking. You see, I just want it to work. Whatever it is, just make it work. I don’t care if you made a mistake or didn’t know something at the time of configuration, I don’t care about why there’s no way you could have known this, I don’t care hearing about the incompetencies of Microsoft, I DON’T CARE. JUST. MAKE. IT. WORK.

Press Conference: The OS Depth Chart

After much speculation I’m happy to say that I’ve arrived at this season’s operating system depth chart. Controversy has been swirling and there have been quite a few rumors circulating so I’m hoping to put those to rest today.

First, I have some rather unpleasant news to get out of the way. As you all know there have been repeated disciplinary issues with Windows Vista. An inability to consistently connect to wireless networks, difficulties with formerly compatible software, and repeated tardiness in boot up times…you’ve all been talking about these things. I regret to inform you that Windows Vista has been permanently dismissed from the team for gross misconduct. We’re all disappointed, especially given the anticipation surrounding this operating system.

With that out of the way, I’m happy to say that I’ve elected to give the starting nod to the operating system that has proven itself successful in past seasons, Windows XP. XP has matured into a reliable OS that does what I need it do, makes good decisions, and has all but eliminated the BSOD fumbles of prior seasons. We’re looking forward to continuing successful operation into the next few seasons with Windows XP at the helm.

I know there were hopes that Ubuntu Feisty Fawn would be given the starting nod. Feisty did great work with the opportunity it was given and exceeded our expectations. However, Ubuntu still needs at least another season of development before it will be starting material. There are some weaknesses to be resolved such as poor wireless handling, but the improvement we’ve seen has been incredibly encouraging. Expect to see Ubuntu via VMWare during situations when things are in hand and the opportunity to build experience presents itself. Our hope is that Ubuntu will be ready to take the starting snap when XP steps into retirement.

That’s all for now. Thanks and we look forward to a successful season.