Guy Shahine's Blog

Seattle Times article about startup culture at Microsoft

I had a chance to meet with Janet Tu from the Seattle times newspaper to talk about how Microsoft is shifting the culture to be more innovative and quick similar to a startup culture.

The article “Startup culture stirring at Microsoft” turned out to be fantastic.

2021362211

Here are the sections where I was mentioned:

Guy Shahine works at a multibillion-dollar company that has dominated the software industry for decades and has nearly 98,000 employees worldwide.

Yet, he insists, he also works at a startup.

Shahine, in Microsoft’s Online Services Division, believes a just-launched project his Bing Advertising team is working on — linking customers’ credit cards to discount deals offered by restaurants and retailers — is essentially a startup.

“We have these ideas out there that, to some people, might sound awesome, and, to others, they think might not work out,” he said. “The only way to know is to put out those ideas, see how the market, how the customers, react to them. It’s all about experimenting, learning from those experiments, iterating.”

and…

Acting on idea

Shahine, a development lead with Microsoft’s Online Services Division, is working on Bing Offers Card-Linked, which electronically links a user’s credit card with discount deals featured on Bing Offers. When someone purchases a deal, the discount is automatically applied to their credit-card statement.

That means the user doesn’t have to carry easily misplaced coupons; or, if the offer is for 50 percent off if a customer spends $20 at a certain retailer, the offer is automatically redeemed when you ring up $20 at checkout.

“The idea was about how we can make this simpler, more customer-friendly,” Shahine said.

There were questions team members didn’t have answers to, he said, such as whether they should first attract merchants or customers. So they decided to just try putting the idea out there and getting a pulse on what works and what needs changing. Card-Linked is now up on the Bing Offers beta site.

Bing Offers, which also will be featured on Outlook.com and Skype (for customers who use the no-fee version of the service), is an example of how the company is integrating its products.

Such collaboration “is a rallying cry. We all feel it,” said Ben Gilbert, who runs The Garage, Microsoft’s initiative to encourage innovation among employees.”

Thank you Janet for this great opportunity to be featured in one of your articles.

Here’s a link to the article

http://o.seattletimes.nwsource.com/html/businesstechnology/2021362205_microsoftstartupxml.html

text only: http://seattletimes.com/text/2021362205.html

Azure User Account Management

“Necessity is the mother of invention”

The Windows Azure Platform currently offers the ability to have an administrator and 10 co-administrators associated with every account (Thanks to Steve Marx’s help to figure out that number), which introduces a limitation when 11 or more team members want to share the same account. In this post, I’m going to illustrate the different ways to avoid this limitation, and I’m pretty confident that at some point in the near future the platform will support a much more sophisticated user management interface.

Some rules of thumb: Treat the account as your online banking credentials. Whoever is paying the bill should frequently keep an eye on the consumption for any suspicious activity. Periodically renew the password or refresh the management certificates, and remember that the more people that share a secret, the less secret it is 🙂

Even though we all know the rules, sometimes (in some cases, many times) we don’t follow them. So here are the different ways I’ve used to share the same account.

Share Co-Admin Credentials

One of the light overhead ways to share the account is to create a single LiveId account and give the credentials to every team member. This way everyone can login to the Windows Azure Portal as a co-administrator. To add an additional layer of safety, you can periodically change the password, this way you can avoid cases where someone left the group and still has the password or probably someone engraved the password in their favorite pub’s bathroom on a drunk night (yes ladies, you would be surprised with what’s in there)

Share A Jump Box

A jump box could be a dedicated machine or virtual machine where you save the co-admin credentials in the browser, then anyone who needs to deploy a service will have to login to the jump box with some operating system credentials. This technique is painful (imagine the process: package your service –> remote login into the machine –> copy the package and config file –> deploy through the portal) but more secure because the jump box could live under the corporate network and the credentials of the Windows Azure account are not shared with the users. Ohh by the way, only one user can be logged in to the box at a time, so depends on your team size, you might need more jump boxes.

I followed this process for like a couple of weeks until the team wide bug bash day arrived where I had to apply few fixes and deploy multiple times, and trust me I wasn’t in the best mood afterwards, the extra step of copying the files and deploying through the portal felt like ages

Share A Certificate And Subscription ID

(My favorite and most practical way)

At the moment, the Windows Azure Portal allows you to deploy a maximum of 10 certificates to your account, which will allow you to use the service management APIs to manage your account. You can create a single password protected certificate and share it with everyone on your team or you can have multiple certificates for different employees status (for instance, you can have a certificate for your full time employees, another one for contingent staff, another temporary certificate for developers who are not on the services side of the house but decided to experiment with cloud based services part of their out of the box projects. Once a user has the certificate installed on their machines and the associated Azure account subscription ID, they’ll be able to use the sweet visual studio publish button to package and deploy their service, or any of their favorite Azure Service Management Tools

Finalement (finally in French)

Sharing a certificate and subscription ID is my favorite approach because I mostly use the client side tools to deploy and manage my applications.

Please share any other ways your team applied and what you like and don’t like about them.

Azure Service & Storage Management Tools

In your day-to-day efforts to build a cloud service on Windows Azure, it’s crucial to be aware of the currently available tools that will facilitate your job and makes you more productive. I’ve created a table that will illustrate the different aspect of each tool, then I expressed my opinion about each one of them.

Azure Tools Table

See the table in Zoom.it

UI tools

Cloud Storage Studio

A tool developed by a company called Cerebrata, It’s currently my favorite tool which I extensively use for service management and browsing storage accounts. Even though the name is confusing, the interface is really nice, the application is stable and the team is very receptive of feedback . The only thing that annoys me, I can’t retrieve storage accounts information. Plus, it’s not for free but the team is actively adding new features and rolling fixes.

UPDATE 5/29/2011: The team read my blog post and they implemented the ability to retrieve storage accounts information. Now, I wish I had the ability to right click on a certain storage account and connect to it.

Windows Azure MMC tool

It has the richest set of utilities and It’s for FREE. Now, If you can bite on the wound and accept a blend interface, plus you expect it to hang here and there, then this tool if for you. Also note, that the tool is lightly maintained and I’m not aware of any planned new releases.

Azure Diagnostics Manager

Another tool developed by Cerebrata. This tool is more focused on managing your diagnostics. It includes a bunch of utilities that will definitely help you a lot in browsing through the logs, getting performance counters, trying to figure out some weird issue…etc It also includes a storage explorer (that I haven’t used because I already have Cloud Storage Studio)

UPDATE 5/29/2011: I’ve been using this tool more lately, and besides the fact that it gets stuck when I connect to a certain storage account once in a while, it’s very useful, and I really like the graphs that gets generated for the performance counters over time.

Visual Studio Tools For Azure

There are multiple parts: It has a nice interface for configuring your service. You’re able to build, package and deploy your service when you ask Visual Studio to publish your app. You can also build, package and run locally in devFabric. There is also a readonly storage explorer. The downside is that you can’t manage your services or storage data but I believe there are plans to allow you to (at least for storage data)

Windows Azure Portal

The portal is required for many things that are usually done very rarely like creating and deleting a storage account. It’s slow and poor on features, but there was an announcement at PDC2010 that there will be a redesigned portal built on top of Silverlight.

Cloud Storage Studio /e

A web based storage explorer built by Cerebrata. It’s still in beta and for free. I personally haven’t used it in a while.

UPDATE 5/29/2011

Thanks to all the readers that brought to my attention other tools that I’ve missed, here’s another set of tools:

Azure Storage Explorer

A FREE open source tool published on codeplex that allows you to manipulate your Azure Blob, Queue and Table storage

AzureXplorer

Developed by a company called clumsyleaf, it’s a paid product and I haven’t used it myself but it’s worth checking it out, it might suite your needs, check out the website for all the details/screenshots/pricing …

CloudXplorer

A Clumsyleaf free product, it let’s you browse through your Azure blob storage account in a similar fashion as the Windows file system explorer.

TableXplorer

Another Clumsyleaf free product, it offers a simple way to retrieve your Azure tables.

Windows Azure SCOM Management Pack

Here’s a nice blog post that enumerates the features of the SCOM (System Center Operations Manager) Management Pack for Windows Azure.

As far as I’m aware, it’s currently the only enterprise level monitoring tool for Windows Azure. If you’re already using SCOM then it’s perfect, you can immediately start monitoring your Azure services.

Here’s what I really like about it :

  • Setup alerts to get notifications by email, phone call, IM, … for the following cases:
    • Service status changed .
    • Performance counters crossed some specific threshold.
    • A Windows Event with a certain ID is detected.
    • Critical, Error, … logs are observed in the logs store.
    • and more…

What I don’t like about it:

  • You need to have a SCOM license to be able to use the Management Pack.
  • If you’re not familiar with SCOM, I found it cumbersome to set it up.

Script based tools

Windows Azure Service Management Cmdlets

Even though I haven’t wrote any scripts that make use of the cmdlets, I know the test and operations team rely on them to automate different kinds of services management.

Azure Management Cmdlets

Didn’t also get the chance to play with it, but I believe it’s very similar to the Windows Azure Service Management Cmdlets. I’ll leave it for you to figure the difference 🙂

Azure SDK command line tools

The SDK command line tools are essentials for automation. There are multiple ways you can find those tools useful, I’ll name a couple 1) Write a custom script that will allow you to package then run your service locally (or perform other actions) using cspack.exe and csrun.exe. 2) Integrate cspack.exe part of your build system to automate packaging the service.

The Windows Azure Bed Time Story

These days, everyone is getting excited about the cloud. You here them talking about how it became easier to deploy, manage, and monitor your services, and how much money your company will save (IF, of course, they know how to use it). Plus, most of us started understanding the concept of the cloud and how it is different than the old way of running services (even though different people see it differently).

Your curiosity led you to surf the web for information about Microsoft Windows Azure, you read a whitepaper from here, a blog post from there, (ohh if you’ve checked out the MSDN documentation, let’s just say it needs improvement) but you still feel that something is missing. Suddenly, you realize that you still didn’t get your hands dirty with it, you didn’t get the A to Z experience, where A is an empty file and Z is a running service that you can interact with from anywhere in the world. Your journey is kinda straight forward at this point. Assuming you’ve got the expected Operating System, Visual Studio, IIS, … You download the Azure SDK et voila, now you’re ready to run an Azure service locally on your machine. Then you get an Azure account (let’s hope you’ve got a limit on your credit card 🙂 ), go through the Azure portal and you deploy your service that’s up and running in minutes. Wow, a process that used to take you hours, days or even weeks (depends on how large the organization and the type of process, at Microsoft it used to take weeks) to run your application in datacenters, now it became a matter of minutes, isn’t it amazing? Well, it is amazing, that’s why most of us are excited about this new technology and business model.

Most of us agree that Azure is still catching up, there are areas that needs improvement, features that are missing, and others… but the team is working hard (as we would expect) to improve things and stand strong against the competition. While we’re waiting for these improvements to see the light, here are some areas that I’m planning on writing posts about sometime soon to give you guidance on how you can make your life easier:

Sleep tight 🙂

Windows Azure: Why is my service not starting?

Have you found yourself in a situation where your service goes from Initializing…Busy…Stopped…Initializing… when you deploy to Windows Azure? That’s when I value the “hint button” that pops up in some games after struggling to figure out how to go to the next level. Unfortunately, there is no hint button on the Windows Azure Portal, so this blog post will help you put a checklist of things to go over before you give up.

Deployment Initializing Busy Deployment

Possible Issues

Deploying With Local Service Configuration File

A typical mistake is to deploy your service with your local configuration file where usually the diagnostic store and/or other storage endpoints are pointing to the local development storage. To avoid this problem, always create separate configuration files, e.g. ServiceConfiguration-Local.cscfg, ServiceConfiguration-Staging.cscfg and ServiceConfiguration-Production.cscfg…etc

Local Service Configuration

Wrong Service Configuration Settings

There is a range of wrong configuration settings which could cause your role to crash. I’ll enumerate the most common mistakes:

  • Wrong storage name: You should be aware that the storage account name is not your LiveID alias. When you create a new storage account, you usually choose an account name and it’s displayed in the following fashion “http://[account-name].blob.core.windows.net”.
  • Wrong storage account key: The storage account key is not your LiveID password. When you create a storage account, you should get two base-64 keys primary and secondary key.
  • Regenerated account key: When you regenerate your primary and/or secondary key then the old key will become invalid.
  • Unreachable endpoints: Many factors could cause your endpoints to be unreachable, for instance, power failure, network failure … etc (that’s another reason to move those services to Windows Azure 🙂 so you don’t suffer from downtimes ). When an endpoint is not reachable and your service is relying on it, then your service will crash.

Administrator Privileges Required

Today, Windows Azure doesn’t allow you to perform administrative actions within your role, so if your service requires:

  • Installing some software
  • Installing/Configuring a DCOM service
  • Editing Registries

Or anything that requires admin privilege then your role will crash and your service won’t start.

ATTENTION: When your service is running locally in Full Trust in DevFabric then administrative actions will work and they won’t crash your role. This is caused by the DevFabric running in administrator mode on your machine and the Windows Azure team hasn’t implemented yet a way to block those actions when running locally. So this will make it harder locally to identify that your service will not work when deployed to the cloud.

Full Trust vs Partial Trust

In Windows Azure you’re allowed to run your service in Full Trust or Partial Trust so if you set it to run in Partial Trust, then Full Trust assemblies will cause your service to crash.

.NET Trust Level Option in Visual Studio

ASP.NET Custom Error Page

By default, custom error pages are enabled when creating an new Windows Azure web role. The custom page is meant to hide the ugly crash details from the end-user (ugly to some people, very beautiful and informational to others 😉 ). It’s possible to turn off the custom error page in the project web.config, check out the documentation: http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx.

Windows Azure Web Role with Custom Error Page On:

ASP.NET Custom Error Page

Windows Azure Web Role with Custom Error Page Off:

ASP.NET Page Details Crash Information

Key Takeaways

The key takeaways from this post is to double check your application’s settings and to be aware of what’s not supported by Windows Azure before contacting the support team.

  • Always make sure to run your service locally in the DevFabric, as it will identify many of the issues that might cause your service to crash when deployed to the cloud.
  • Maintain separate service configuration files for each environment: Local, Staging, Production, … etc
  • Make sure to keep your settings file up-to-date in case you renew storage keys or you rename resources (e.g. rename the queue instance that your service relies on)
  • Make sure that other services that you rely on are up and running.
  • Turn off ASP.NET custom error pages as you’ll get more details about the crash, which will allow you to get more traction on the areas to focus on to fix your service.

Good Luck!