Moving a Company Out of the Closet: Our First Azure Migration

The server room at this particular client's office was a repurposed coat closet behind the receptionist's desk. I know this because I could see the old coat hooks through the cable runs. The server — singular — sat on a wire shelf next to a UPS that beeped ominously if someone ran the microwave at the same time as the label printer. This was their production environment. This was also, technically, their disaster recovery plan.

When I first brought up Azure as an option in early 2011, the owner looked at me like I'd suggested moving their filing cabinets to the moon. By the time we were done, their monthly infrastructure cost had dropped, their uptime had improved, and nobody had to drive in on a Sunday morning to reboot anything. Let me show you how that math worked.

What We Started With

The client was a 15-person professional services firm. Their critical infrastructure was:

  • One Windows Server 2008 box running SQL Server 2008 Standard, their line-of-business app, and file shares
  • A second box running their accounting software (different vendor, different support contract)
  • A business-class cable internet connection at $420/month — required because their LOB app was browser-based and staff occasionally worked from home
  • A backup solution that was, in practice, a Western Digital external drive that someone plugged in manually on Fridays

Hardware was three years old and due for refresh. The SQL Server Standard license was tied to the box. Any upgrade meant re-buying the license. DR meant "we hope nothing breaks."

The Azure Side of the Equation

In early 2011, SQL Azure (now Azure SQL Database) was available in Web and Business tiers. For a database the size theirs actually was — about 4 GB — the Web edition at roughly $9.99/month covered everything the LOB app needed. Add an Azure Storage account for file access and you had their core infrastructure for under $30/month.

The LOB vendor supported SQL Azure. That was the non-negotiable check I ran first — if your application vendor doesn't support the connection string changes and the SQL Azure compatibility constraints, stop here and fix that before doing anything else. In this case, we were clear.

The Migration

The actual data migration was straightforward. BACPAC export from the on-prem SQL Server, import into SQL Azure. Three hours, two validation passes, one evening of parallel running both environments while the staff tested the hosted version against their normal workflows.

The less-obvious part was the connectivity model. SQL Azure in 2011 required connections from known IP ranges — the firewall rules lived in the Azure Management Portal and you had to explicitly add each client IP. We added the office IP, the owner's home IP, and the range the LOB vendor used for their hosted version. Then we tested every connection scenario before cutting over.

There's also the retry policy problem, which I'll cover in a separate post — SQL Azure would drop idle connections faster than SQL Server would, and the LOB app wasn't written expecting that. The vendor had a connection resiliency update available. Apply it before you migrate, not after your first support call at 9 AM Monday.

The Numbers After 90 Days

Here's what actually changed:

  • Broadband: Downgraded from $420/month business-class to $89/month residential (their staff didn't work from home anymore — the LOB app was already cloud-hosted). Net savings: $331/month.
  • Azure SQL Database: $9.99/month for the Web tier. Azure Storage: ~$3/month. Total Azure: ~$13/month.
  • Old server: Still running for the accounting software, but no longer carrying the SQL Server load. Stayed on the existing hardware another two years without the stress of the full workload.
  • Backup: Replaced with Azure SQL point-in-time restore (7 days, included) and a weekly BACPAC export to Azure Blob Storage for longer-term retention. The WD drive went home with the owner as a souvenir of a different era.

Net monthly change: saved roughly $318/month while gaining automated backups, geo-redundant storage, and the ability to scale the database tier without buying new hardware. The hardware refresh they'd been dreading simply didn't happen.

What They Gained Beyond the Cost

The part that's harder to put in a spreadsheet is operational freedom. Nobody drove in on a Sunday because SQL Server crashed. Nobody called me at 8 PM because the UPS started beeping. The owner stopped worrying about the server room — which she'd been quietly dreading for two years — and started thinking about the business instead.

Azure's built-in redundancy meant the database had three copies running at all times. That's not something you could buy your way into on a small-business budget in 2011. It's what you got by leasing compute at Microsoft's scale instead of owning a $3,000 box in a closet.

This was the first Azure migration I ran end-to-end, and it set the pattern for a dozen more over the next two years. The specifics varied — different app vendors, different data sizes, different connectivity constraints — but the economics were consistently in Azure's favor for workloads in this range. The tipping point was usually the broadband bill: once you moved the server, you often didn't need the expensive connection to support it anymore.

If you're staring at a server room that looks like this one did, I'd love to talk through the math for your situation. As always, I'm here to help.

Read more