For the last decade people close to Microsoft have watched, often with consternation, as the software giant sat out the first phase of several major sea changes in the technology world and then played a sometimes unconvincing and at times underwhelming game of catch-up. Even with the cloud, Microsoft was not the first out of the blocks with a public offering, but sometimes not going first can have huge benefits because it lets you get a sense of the market.
Such is the case with Microsoft’s cloud platform, at least in terms of application development, as it has navigated first by matching and then surrounding Amazon and other cloud providers. In fact, there is so much in Azure for developers that it makes it hard for other cloud platforms to keep up. Ian Culling, CTO of VersionOne pointed this out, saying that “What Microsoft is doing with Azure seems counter to their behavior and philosophy of the past—not just tolerating but embracing open source and other technologies, for example.
“It is also very encouraging for the classic/career Microsoft-stack developer to get outside the bounds of their MSDN Subscription and get the exposure, knowledge and skills to remain relevant in an increasingly polyglot development experience.” This last part is critical to understanding Azure today. Microsoft provides Linux images in the Virtual Machine gallery, provides tools for developers using non-Microsoft technologies, and has been embracing open source of late.
Not last year’s Azure
Azure is arguably the most dynamic product offering Microsoft has ever produced. Today, no more than a few weeks can pass without an announcement of a new capability or improvement, often in batches. A quick look at Scott Guthrie’s blog shows this track record clearly.
Before his promotion to Executive Vice President, he was always the first place to find news about improvements and added features. We will see if that continues now that he has moved up the line, but it is unlikely he will shy away from announcing the most interesting and awaited expansions and improvements.
“Since our initial Azure-based project, we have seen very rapid (but coherent) evolution of Azure capabilities, services and its marketplace,” said Culling. “Some recent valuable additions are Deployment Slots and WebJobs. We feel like the aggressive pace being set, and the genuine, thorough support of so many open-source and non-Microsoft technologies, is pretty unique in comparison to alternatives.”
Part of the reason for this continual drive for enhancement is that the public cloud has turned into a bit of an arms race between Microsoft and Amazon. There are also many other companies hoping to grab some of this huge potential market, and there is strong evidence that Microsoft is following through with its promise to make Azure the foundation of the company.
Microsoft has always done better with a viable competitor breathing down its neck or, better yet, out ahead. One has only to look at the history of innovation with early versions of SQL Server or Internet Explorer to see that when its status as the market leader is threatened, Microsoft turns on the urgency, and the winners are usually consumers of the products regardless of which company ultimately wins said arms race.
In the case of public cloud, Microsoft is fighting it out with deep-pocketed giants like Amazon and Google, meaning the fight will most likely be long and fierce.
The versatility of Azure
Vishwas Lele, CTO of Applied Information Sciences (and an Azure MVP), talked about the versatility of Azure’s offerings. “In addition to the typical scale, cost and the agility benefits, Azure offers a breadth of services from Platform-as-a-Service to Infrastructure-as-a-Service and the ability to mix the two; cloud native apps to cloud hybrid apps (on-premise connectivity); and a growing array of app services from Media Services, AD Premium, to most recently Machine Learning,” he said.
Machine Learning is new and an example of what it means when we say that Microsoft is surrounding other cloud providers. It would appear that the influence of Microsoft Research helped get the Machine Learning capability into Azure. The Web-based ML Studio (see Figure 1) walks the subject-matter expert through developing the models and uploading the data sets required for the Machine Learning implementation. There is even a tutorial with data that walks you through detecting credit-card fraud, which is one of the first widely applied commercial applications of Machine Learning.
By this time next year, you can expect a great deal of the semantic Web to be running on Azure due to this new service. Semantic Web is hailed as Web 3.0, where systems like Siri and Microsoft’s voice assistant software Cortana anticipate needs and actions based on the situation, circumstances, preferences and all the other things a really good friend or first-class personal assistant would use to make your life better in the moment. If other cloud providers do not build something comparable, then Azure is the clear choice for any startup that wants to provide semantic Web experiences but does not want to reinvent the wheel in terms of machine learning systems and supporting components.
Cloud type choices
Private cloud is one use of the term that is adding confusing across both the IT space and for developers. For almost every organization on the planet, a private cloud is just a rebranding of corporate IT.
It might represent better run and aggressively consolidated data centers, but if everything runs on your own hardware, it is like running generators for all your electricity and claiming that you benefit from the grid. In this way private cloud is at best an attempt to spin the use of the term while resisting the forces that make the cloud so attractive.
Hybrid cloud is another term that is much more important for developers, because unlike private cloud, it provides a path toward adoption without as much risk of dying from the transition. Hybrid cloud for Azure means having some servers and systems on-premises, and under the watchful eye of your own IT organization working seamlessly with Azure-based systems and services. These on-premises servers would run Windows Server 2012 R2, which specifically supports this integration across the Web. Hybrid scenarios include Web servers in Azure having access to on-premise databases and VMs hosted on Azure being members of the on-premise domain.
In an open letter to the staff at Microsoft, CEO Satya Nadella said, “The combination of Azure and Windows Server makes us the only company with a public, private and hybrid cloud platform that can power modern business.”
There are also advanced VPN configurations that allow Azure systems to transparently appear as part of the local network. All of this taken together means that a Windows Server-based private cloud can be a prelude to hybrid cloud. The validity of any cloud strategy depends on the whole plan and the ultimate objective. Microsoft plans to be a contender no matter how much or how little an organization seeks to embrace cloud in their approach.
Paths to cloud development
Developers of different stripes will use Azure differently, but all benefit from the underlying scalability and reliability just the same. To understand the various paths and tools that go with each path for getting the most out of Azure, we talked with a range of very experienced developers who are using it to do their thing.
Developers working with Microsoft technologies have the expected easy transition path with Visual Studio, including everything needed to target developing and deploying to Azure via the Azure Software Development Kit (SDK). John Brooks, vice president of global delivery at Shinetech Software, said, “From the development viewpoint, the biggest benefit I have experienced is leveraging developer familiarity with Windows technologies and programming languages. Developing applications for the cloud, especially cloud-native applications, is a new paradigm for many developers, and since the Azure environment is similar to Windows, it is easier for developers to make that transition.”
As a consultancy that delivers solutions on a regular basis worldwide, Shinetech seeks to use technologies that make transitions easier. To that end, Brooks noted, “One of the great things about Azure is the ease in which developers can migrate existing .NET applications to the Azure platform. I have had developers tell me that dealing with architecture and state management on Azure feels like a natural extension of developing .NET applications on the Windows platform.
“Even though they are moving into a new environment in the cloud, they are still comfortable with the development techniques and tools they have been using for years.”
For these reasons, the tooling for .NET developers does not change much at all. Visual Studio is still the center of the universe so long as the Azure SDK is present. Brooks emphasized that the Windows Azure SDK for .NET “seamlessly integrates as a part of Visual Studio,” and he listed the AzureTools as “a utility that our engineers rely on in troubleshooting Azure VMs.”
(AzureTools is a utility that can be downloaded inside an Azure VM to easily bring down and deploy other tools, including Netmon, Fiddler, or various debuggers.)
Not all developers live in the .NET world, even if they are Microsoft-centric developers. There are still quite a few software companies that use C++ as their primary language, and NTP Software is among them.
To get perspective on Azure for developers from this world, I spoke with Dave Gochnauer, chief engineer at NTP Software. He recently led the effort to take all of the infrastructure requirements for an enterprise file-tiering solution and make it so that customers would only need an Azure account and a local agent to communicate with their local storage system.
In light of this effort, Gochnauer said, “The ability to have multiple configurations easily provisioned has been a huge benefit. Moving parts of our NTP Software Precision Tiering product to Azure Web Roles and Azure Databases has removed the customer’s worry about manageability and scalability.”
Like Brooks and his developers, Gochnauer said that Visual Studio 2013 and the Azure SDK were the primary tools needed to get the job done. But, Gochnauer “used the Azure Compute and Storage emulators to test components locally prior to uploading the roles to Azure.” These are tools that the average developer does not need, but for an enterprise-scale product like NTP Software Precision Tiering, it is essential to know that the system can handle potentially billions of files. This is the kind of scale that the cloud promises, but it is still incumbent on the developer to ensure the goal is achieved.
What about those looking to be agile and have Software-as-a-Service offerings? Who better to ask than a company that offers Software-as-a-Service products targeted at helping with agile development itself? This describes VersionOne. Culling explained that his company offers several products hosted on Azure, including Estimably, which he described as “a node-based service, which is a mobile/tablet-friendly offering that provides a free real-time estimation service providing planning poker-style estimation for distributed teams.” Figure 2 shows one of the Estimably interfaces.
Culling talked about why his company uses and recommends Azure for projects like these. “From a process and practice perspective, we believe the following are huge benefits to developing on this platform,” he said.
“First, Azure streamlines/enables continuous deployment, and as a result, we have found that this really forces the DevOps discussion as the barriers between dev, test, staging and production are virtually non-existent. Second, Azure allows for greater focus on the code and less on the infrastructure. In comparison to other stacks, iteration-zero activities are much simpler due to the instant, no-effort infrastructure.”
Culling concluded by saying that “Given sensible design, [Azure] obviates the need to worry about scaling too early. We also really appreciate how well it supports experimentation/prototyping and accelerated learning in a production deployment.”
openAgile team lead Josh Gough (another member of the VersionOne team) summed up what he believes Microsoft is doing right for those who are not interested in being hemmed in to using just Microsoft products in their development. “We have been able to quickly build, deploy, monitor and change applications because of the deep integration between Azure, Node.js and GitHub,” he said.
“We can commit a change to a staging branch in a GitHub repository in GitHub, and almost instantly the source-code changes propagate to our staging deployment slot in Azure. When smoke-tests pass, we simply push the changes from the staging branch to master, and the production site gets the same updates.”
The paths to Azure are varied, but developers want what they have always wanted, and that is for the platform to get out of their way and let them deliver value. For that reason, Azure is a solid foundation for Microsoft and any company looking to bring their solutions to the cloud.
Choices within the platform
The effect of having too many choices can often be paralysis. Amazon offers many features, but in simplified terms it offers Infrastructure-as-a-Service. This means that if you want a virtual machine, you can get one or a hundred, and Amazon takes care of the provisioning.
The problem is that there is more to the care and feeding of a virtual machine than just provisioning. With any IaaS offering, the patching and upgrading of the operating system is not handled by the cloud provider. This is ideal for some situations, especially those where the systems are transient (such as those used for QA testing), but not for all or even most.
PaaS is something fairly unique to Azure. With this option, Web or Worker roles are chosen based on whether the task is to show a UI or perform calculations. The advantage to this implementation is that all of the patching overhead is taken by Microsoft. The developer can just focus on providing code that works on a predictable platform. These roles have been renamed to Cloud Services.
“CommitStream is an upcoming service for the integration of VersionOne with various source-code repositories,” said Culling. “It combines a number of different Azure deployment options: a Web Site for the administration front end, a combination of a Cloud Service and Virtual Machine for event-store persistence of all commits for all configured source-code repositories.”
(The Web Site refers to the ability for Azure to host a website in much the same way that other hosting providers have done for years. This means that choices across the range are available.)
If you want to spin up a wiki quickly, then odds are a Web Site is the right choice. If you need to test your component with 20 different configurations of SQL Server 2012, then VMs are the way to go. If you want to deploy a service that calculates something complex based on inputs, then a Cloud Service is the way to go. There are many, many iterations, but that is the gist. It takes some time to really know when to use each of these options, but moving from one to the other is not so onerous that it would be deadly to pick wrong at first.
Staying out of trouble
There are moving parts included in the way Azure works that are beneficial by design, but these same moving parts can also be hazards if you do not pay attention.
The biggest item in this category is that the underlying technology of Azure is like a conveyer belt. Microsoft does not let more than two past versions of their operating systems run on the system. Old versions of stuff are the root of all evil and often the root of security problems, and this is a belief that is taken to heart by Microsoft when it comes to Azure.
To that end, the OS versions supported are not the only things that can go out of style. Versions of Visual Studio supported by the Azure SDK are also in the line of fire. Word is that Visual Studio 2010 will not be supported in future versions of the Azure SDK. For an organization that is on the march as an early adopter or regular upgrader, then this is not a problem. But if you did not expect to move to a new version of Visual Studio, then the conveyer belt of technology required by Azure may catch you off guard.
Documentation is a boring thing to talk about, but another hazard for a fast-moving platform is that either the information available might be out of date or it might just be lacking. There is really nothing that Microsoft can do about blog entries and articles being out of date, and so as with every other product, it is up to the reader to ensure that the blog or article is current. If it is more than a year old and about Azure, then look for another more current source, or test the waters before banking on things remaining the same.
As for documentation, there is a great deal to like about how Microsoft has accommodated, but there are back alleys and rough spots if you are doing something out of the ordinary. For example, there can be periods where there is very little official documentation that is easily found regarding integrating the latest features. This is to be expected, but it is still frustrating when working against a deadline. All of these items should not be a surprise, but they bear mentioning because they could be unpleasant if they impact your project or operations.
In our discussions about picking how to use Azure to provide a solution, Culling said that at VersionOne they use this calculus: “It is really a combination of economics and going with the simplest (lowest overhead/complexity) option possible given the immediate need.” Good advice for staying out of trouble and the research done to make this decision should help reveal these kinds of pitfalls.
Licenses as an advantage
A huge advantage that Microsoft has over any other cloud provider is that regardless of how they do their accounting internally, Microsoft does not have the burden of paying for OS licenses. There are of course Linux operating systems that are free and Windows licenses that competing cloud providers must pay Microsoft to use. Another advantage for Azure is that Microsoft has leveraged its MSDN user base to offer additional big advantages for developers choosing Azure over other options, especially if they have an MSDN subscription.
The first of these is that each MSDN subscription includes cash credit that can be used for anything provided by Azure. At first this benefit was constrained to providing X hours of an image of size Y and Z transactions, etc., but eventually Microsoft realized that this was causing a great deal of analysis paralysis among users, and they just converted it into a credit.
The second benefit of combining MSDN with Azure has to do with the licenses included with MSDN. MSDN provides a great deal of software licenses, but they are only allowed to be used for development and testing, never for production. Lele said that one of the biggest advantages of using Azure over other cloud offerings is “MSDN license mobility, because it allows a developer to leverage MSDN benefits in the cloud. This is huge.” Microsoft allows these licenses to be installed onto Azure Virtual Machines.
This integration of MSDN with Azure has removed a raft of barriers to adoption for traditional Microsoft development shops. If you have MSDN, then you are wasting money if you do not do something on Azure, even if it is just your testing.
Azure helpers and must-haves
Azure has many constituent parts and services, but there will always be key programs or components that will make using the system to deliver better solutions easier and faster. SCVMM is almost always at the top of the list for any organization managing any non-trivial Azure or Windows Server implementation.
In that same vein, scripting and command lines are back in vogue with Azure. PowerShell is an indispensable tool for managing a large estate of Azure-based systems. “Azure CLI is something our developers strongly encourage other teams to take advantage of for automation tasks,” Culling pointed out.
For third parties there are many that bear mentioning, but in the interest of space we will discuss two: Telerik and Xamarin. Since 2011, Telerik has been paying attention to Azure as a development target with its ASP.NET controls and other offerings. A quick search shows documentation on the Telerik website for topics like “Deploying Telerik UI for ASP.NET AJAX to Azure,” and pages with names like “cloud-upload-azure-blob-storage.” The latter talks about the RadCloudUpload component and represents a control specifically designed to provide upload capabilities to cloud storage with support for Amazon’s S3, Azure’s Blob Storage, and Telerik’s own services, which used to go by the name Everlive.
Microsoft has been preaching since the release of Windows 8 that mobile experiences need a cloud-scale back end to host data and services. The problem is that most organizations want to have native experiences on all three of the main mobile platforms (iOS, Android and Windows Phone), and that has been a major distraction for the last few years due to the tradeoffs required to make that happen.
However, the stars seem to be aligning for a new renaissance where developers can get wide support for the applications with a reasonable amount of effort. Xamarin has been working closely with Microsoft of late and has made some great strides to enable the scenario many have been waiting to see materialize.
Russell Fustino, Xamarin developer evangelist, explained that “Xamarin allows you to write iOS, Windows Phone and Android apps in C#, and share virtually all the business logic (around 75% for many customers), all while delivering a high-quality, performant native mobile app.” The promise of this latest release of Xamarin’s tools (dubbed 3.0)—including Xamarin Forms—has reinvigorated the idea that companies can write once and deploy everywhere.
Fustino pointed out that, “because of the extensive code-sharing opportunities, Azure Mobile Services logic can now be written only one time, instead of for each platform, saving massive amounts of time and delivering a consistent user experience across multiple platforms.” To enable this, Xamarin has opened up its own Component Store.
With the platform matured and distractions being handled, it is reasonable to expect adoption to accelerate. The key to managing this is understanding what Azure can and cannot do at any given time.