If you want to be wise, watch the actions and outcomes of others. Emulate the successful actions, and avoid the actions that cause failure. That’s true in life in general – and in technology projects in specific.
I’ve worked with several clients who have created or migrated an application to “the cloud” – meaning using Microsoft Windows Azure or another provider. Although the statement in the title of this post is trite, I cannot over-emphasize how accurate it is. In every case of those who had a great experience with a distributed computing environment (which is thankfully the vast majority of my projects),
What kind of preparation do you need to do? Here are some tips I’ve learned in the successful (and not-so-successful) deployments I’ve seen:
Follow standard recommendations for successful projects in general
You and your organization have probably done a few projects before – this one should have the same general attributes: a well-defined goal, a small, motivated team, a realistic timeline, and an adequate budget. I know, I know, you *never* seem to get those things – but if you don’t, you’ll fail. Simple as that.
Computing technology started out on a single set of hardware for a single purpose – and realizing the limits of the hardware at hand, systems designers quickly realized that scale-out and virtualization was key. No, that’s not new – mainframes almost always worked on the concept of scale-out and virtual machines. But we switched in the 1980’s to single-user systems again, and we’ve been there ever since. By that I mean you install an OS on the things you work on. Now we move back to distributed system concepts, and there are some real differences. You’ll need to learn how those work, and do things a new way. Hey, we’re IT – we LOVE learning new things, right?
Get a partner if needed
There are a few of us white-haired Gandalf’s around that remember how to work in a distributed system, but if it’s new to you, that’s completely OK. You can save yourself a world of trouble by working with someone who’s done this before – a partner you hire, someone from Microsoft Consulting, whatever.
And don’t forget support – who will handle each issue, what is the escalation model, who are your contacts at Microsoft, and what is your “light’s out” strategy?
“A new broom sweeps clean”, the old adage goes, but the old brooms know where the dirt is.
Build a model
Take some time to do a Proof of Concept on your local system and using your Azure hours from your MSDN account if you have one. Going through this build – and being willing to throw it away and try it a different way – is invaluable.
Test your theories
Three statisticians are walking in a field. They see a rabbit – the first guy raises his gun, firing far in front of the rabbit. The second guy simultaneously raises his gun and fires far behind the rabbit. The third guy yells “We got him!”
Not every theory is correct – not every attempt is the right one. Build in your success tests while you’re building your model. Then check them – don’t leave this step out.
Rinse, lather, repeat
This is advice from a shampoo bottle – which I’ve never used (I don’t really have that much hair – especially now). But in a “Cloud” project, it’s important. It’s an evolving system, that gains new improvements at an amazing rate. As soon as you deploy and stabilize you need to start the process over again. If you created your system in a Services model, with contracts for the APIs and abstracted code, this is far easier.
It’s not hard to do a cloud project right. But it’s really simple to do it wrong. Follow these guidelines and you’ll learn from the successes – and mistakes – of others.