It’s been said that you can do things right, cheap, or fast. Pick two.
I’ve heard people substitute other words into that first sentence (such as available, reliable, and fast), but you get the point: you generally won’t get it all when it comes to deploying a solution or working on a project … that is, unless you’re willing to pony up some serious money. Even then, it still may not be possible due to some other limitation. Truth be told, of that initial list, I might argue you only get one of three (right and fast are not always friendly bedmates), and even that may be a question mark. Why? This all underscores an important point in what we do in IT as well as in life: often times, it’s about tradeoffs. The right solution or decision is often the most difficult one to make or implement. No one likes to work anymore, right?
Whenever I see offerings from various companies offering you solutions that promise you the world (unlimited scalability, five nines of uptime, we manage it for you – nothing for you to worry about, etc.), I just chuckle. Either they did the right work on the backend to make that happen (not likely) or they’re selling you a bill of goods (maybe). The truth probably lies somewhere in between.
It takes effort, knowledge, skill, budget, and often, a bit of luck for the stars to align. How many times have you joined a new company with the illusion you’ll change the world or started a project completely idealistic, only to find things like a small budget spoils the plans and you’ve got to figure out how to “make it work”? This is also why in many cases, besides them not possibly applying to your scenario, best practices are often hard to implement. They’re not always real world. “But I must have RAID 10!!!!” Keep on living the dream when your SAN guy or gal gives you whatever they have and you have no choice in the matter.
It’s nice to be idealistic. Maybe you can join Daryl Hall in Dreamtime (and as evidenced in this clip, he still looks/sounds pretty damn good in 2012 at 65!)
Here’s my reality: I live in the real world with customers that have resource, time, budget, and skill set issues (among many other constraints; every customer is different) which need to be taken into account when I deliver something. It’s not about being right (in some way it is, but standing on ceremony gets you nowhere) or saying “I told you so”. At the end of the day, you have to be realistic, and so does your management as well as the bean counters. You’re not getting 24x7x365 and great performance on things like limited budget, staff, and severe time limitations (a subject I addressed a little here). Something has to give. Sometimes it is a technical reason that something isn’t possible. Yes, we’ve come very far in the past 10 – 20 years, but everything isn’t possible. And Microsoft isn’t changing SQL Server or Windows just for you to make you work a certain way, either. Even if you offered to fund that development, I doubt it’d happen.
The worst offenders here I find are managers or C-levels. It’s not all of them, but many. They may have once been technical, but now they may be removed from the day-to-day of what it takes to get something done. I mean, don’t we worker-bee types all have magic fairy dust to create a /faster or /moreuptime switch? If I did, do you think I’d still be working? I’d be selling and/or licensing the hell out of it and retired.
What you need to do, and I do it all the time, is get everyone on the same page with the right information so you can move forward. Like I said, some things will have to give. That may mean you need more budget, time, etc., or hard cuts will have to be made to make other things happen. That’s life. When we can have the right conversation without anyone digging their heels in, the real work can begin.