I was talking this morning with a developer about hosting their application. This application was developed on a desktop Linux box, and the developer’s boss liked it, and now they want it to run in production. I’m cool with that. Some of the best ideas we have came out of people poking around on their own.

When I’m approached about hosting an application, one of the questions I always ask is “Tell me who the audience is for this?”

The developer responded with “Oh, it could be the whole world.”

“The whole world?”

“Yeah. We need to make sure that this is running on hardware that can handle the load. This is going to get really popular.”

Yeah. Um… yeah. I won’t say what the app is or does, but there’s about a zero chance it’ll be used by anyone but the specific target market. It’s neat, but very specific. I was going to host it in my VMware infrastructure. So I try to be polite.

“I think I’m just going to host this in a virtual machine until we can get a better grasp of the size of the app.”

“Oh, no — you need to have this on real hardware. Virtualization is really slow.”

“Well, you do lose a certain percentage of performance to overhead, but it’s quite manageable.”

“We’re going to need at least a quad-CPU machine for this. Lots of RAM. Lots. This app cannot be slow at all. The customer won’t tolerate it.”

WTF? I call this “reach-into-colon-grab-pull” machine sizing.

“Okay, we can do that, but my involvement and the hosting goes from nearly free to about $25,000 then.”

“What the heck for?”

“Well, a nice Dell with four CPUs and lots of RAM starts in the $25K range. I can order one if you want, but we really should have two, and load-balance them. Maybe a pair of dual-CPU machines. Does your app work when it’s clustered?”

“Um, uhh, it needs to be on one machine.”

“Why? An application with these requirements should be made redundant so we can patch and maintain the systems without a service outage.”

“What do you mean outage?”

“We need to patch and reboot the machines once in a while.”

“Oh, this cannot take an outage. No downtime at all.”

“No outages? Okay, well, let’s cluster it.”

“We can’t cluster it. It’s not designed to be clustered.”

“Okay, so let me get this straight. This app needs to be hosted on a single machine that has at least four CPUs, an unspecified-but-copious amount of RAM, and using an OS that never has to be patched, in a data center that never needs a maintenance outage, on a network that never goes down?”

“That’s a little extreme, don’t you think? I thought you folks were supposed to be the experts at this!”

“We are. How about you write up exactly what you need and schedule a meeting with you, me, your project manager, and the customer? Then we can get this sorted out.”

“Oh, well, we need this in a couple of days. Why do we need my manager or the customer?”