Enhance the Diagnosability of your Apps with Windows Azure

Hosted Software, Windows Azure No Comments »

Windows Azure logo bl In the last few posts, we have been discussing how running your application in Windows Azure allows you, with minimal incremental code, to cloud-enhance your application with capabilities such as elasticity, automation, and diagnostics.

My colleague, Sumit Mehrotra, dives into the diagnostics capabilities on his blog – describing how Windows Azure offers rich centralized diagnostic capabilities without making you change how your application does its logging (e.g. System.Diagnostics.Trace, IIS logs, application crash dumps, etc.).

Run and Enhance Client-Server Apps with Windows Azure

Hosted Software, Windows Azure 1 Comment »

In the previous post, we discussed that you can not only run some of your favorite technologies in Windows Azure but that you can easily cloud-enhance them with capabilities such as automation, elasticity, and diagnostics.

My recent post on the official Windows Azure blog introduces an example, describing how to run a client-server application (e.g. a relational database or distributed memory cache) in Windows Azure and then add elasticity to the server tier. Elasticity allows you to minimize your costs by dynamically adjusting capacity to meet demand. Let’s dig a bit deeper, diving into what the corresponding code would look like:

Service Definition

To get started, we need to define the server tier and declare an internal endpoint.

<WorkerRole name="MyServer" enableNativeCodeExecution="true">
  <Endpoints>
    <!-- Defines an internal endpoint for inter-role communication that can be used to communicate between worker or Web role instances -->
    <InternalEndpoint name="MyEndpoint" protocol="tcp" />
  </Endpoints>
</WorkerRole>

Client Code

Note that only three lines of Windows Azure specific code, highlighted below, are needed to a) initialize the client and b) reinitialize the client when server instances are added or removed.

private MyClient InitializeClient() {
    var client = new MyClient();
    foreach (var inst in RoleEnvironment.Roles["MyServer"].Instances) {
        client.Add(inst.Id, inst.InstanceEndpoints["MyEndpoint"]);
    }
    return client;
}

public void Go() {
    // Initialize the client
    var client = InitializeClient();

    // Reinitialize the client when there is a topology change
    RoleEnvironment.Changed += (sender, args) => {
        if (args.Changes.Any(chg => chg is RoleEnvironmentTopologyChange)) {
            client = InitializeClient();
        }
    };

    // Use the client as you would outside Windows Azure…
}

Server Code

Finally, we add one incremental line of code on the server tier, highlighted below, to discover the IP address and port to bind to.

// Discover the IP address and port assigned by Windows Azure
var ep = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["MyEndpoint"];

// Start the listener -- in this case another process -- passing in this info
var startInfo = new ProcessStartInfo
{
    FileName = @".\MyServer.exe",
    Arguments = "-l " + ep.Address + " -p " + ep.Port,
    UseShellExecute = false,
    CreateNoWindow = true
};
Process.Start(startInfo);

My PDC09 Talk, and Takeaways about Cloud-Enhancing Your Apps

Hosted Software, Windows Azure 2 Comments »

Windows Azure Logo I, along with Tushar Shanbhag, recently gave a talk @ PDC09 on using PHP, memcached, and MySQL to build applications with Windows Azure. The video and slides are now available.  We used the technologies in the talk to reinforce some key Windows Azure benefits, specifically how to:

  1. Easily get started with these (PHP and memcached/MySQL) and a variety of Windows Server-compatible technologies on Windows Azure.
  2. Maintain, scale, and more broadly cloud-enhance these technologies by leveraging platform primitives in Windows Azure.

Ray Ozzie, Microsoft’s Chief Software Architect, talked to similar points at a recent Financial Analyst and Investor Briefing this past Wednesday:

The way that we kind of think about it is, most people will do a move, extend, and then transform. They’ll move something to the cloud, then they’ll start to mess around with it, and understand what it’s like to be in the cloud. And then they’ll extend it by starting to take some aspect of it and take advantage of the cloud.

Having served as CTO of a startup where we leased our own rack and burned lots of time on both software- and hardware-related “I.T. stuff”, I get especially excited about the extend/cloud-enhance point. In addition, it reinforces that Windows Azure is much more than a hosting provider.

Here are just some of the ways you can cloud-enhance your applications with Windows Azure with minimal incremental code:

  1. Elasticity (Even for Client-Server Apps): As we demonstrated in our talk, you can continue to use client-server apps (i.e. memcached) as you do today. However, by leveraging Windows Azure’s new topology discovery API’s, you can add elasticity with just a few lines of code to automatically update your clients’ connection tables when server nodes are added or removed.
  2. Diagnostics: You continue to log and trace as you do today. However, with Windows Azure Diagnostics, you can choose to direct the output (from potentially multiple nodes) to a centralized location in Windows Azure Tables. By doing so, you get a durable and queryable way to detect & troubleshoot problems, measure performance, etc.
  3. Automation: You continue to use the configuration mechanisms (e.g. .ini file) you use today. However, by writing incremental code, you can have the ini file populated from a Windows Azure configuration setting. In doing so, this configuration, which could be living on 1000s of your nodes, is now updateable via a single change in the Windows Azure management portal.

Same Blog (Mostly), a New Name, and SEO

Hosted Software, Windows Azure 2 Comments »

Rebranding from This Hosted Life to Cloud MouthAs you may have noticed, I have rebranded this blog from This Hosted Life to Cloud Mouth. A few weekends ago, I decided I would like to start blogging again and with a greater emphasis on Windows Azure, the cloud services platform I am working on at Microsoft. So, I went to GoDaddy’s domain name search and decided not to get up until I found a domain name I liked. I sort of knew I wanted “cloud” in the name, and it eventually hit me that I could play off the fact that “cloud” rhymes with “loud”. Unfortunately, cloudmouth.com was unavailable. But, I was okay with a .net domain name instead, and thankfully cloudmouth.net was available!

SEO Implications

Having been through a rebranding before, I knew one of the most important next steps was to make sure every inbound link to the old site is 301 redirected to the new site. With this type of redirect, search engines (in theory at least) know to automatically transfer page rank from the old url (e.g. http://thishostedlife.com/about) to the new url (e.g. http://www.cloudmouth.net/about). This is not always the case with other forms of redirection.

You can do this with IIS or Windows Azure with the following set of rewrite rules that tell the Web server to 301 redirect all requests for anything other than http://www.cloudmouth.net/… to http://www.cloudmouth.net/….

<rewrite>
  <rules>
    <rule name="Imported Rule 1" stopProcessing="true">
      <match url="(.*)" ignoreCase="false" />
      <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" pattern="" ignoreCase="false" />
        <add input="{HTTP_HOST}" negate="true" pattern="^www\.cloudmouth\.net" ignoreCase="false" />
      </conditions>
      <action type="Redirect" url="http://www.cloudmouth.net/{R:1}" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

If you aleady have an equivalent set of rules for Apache, such as the ones below, these can be easily converted by Microsoft’s IIS Manager for consumption by IIS or Windows Azure.

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.cloudmouth\.net
RewriteRule (.*) http://www.cloudmouth.net/$1 [R=301,L]
</IfModule>

Finally, you can use a tool such as Web-Sniffer, one of my favorites, to confirm all your old pages return HTTP Status Code: 301 Moved Permanently and that your hard-earned page rank will be (hopefully!) retained.

Faves.com – Successes and Lessons Learned

Entrepreneurship 1 Comment »

I recently gave at talk at StartPad.org chronicling some of our successes and lessons learned — dare I call them mistakes:) — from my time as co-founder and CTO at Faves.com.  The lessons I shared were:

  • Find and/or develop a product lifecycle checklist to keep you grounded and to know where you need help.
  • Understand your business drivers.
  • Understand (and choose wisely) your target market.
  • Refine your positioning until it is a) crisp and b) reinforces what you are best at.
  • Segment your user base, and potentially address each segment uniquely.
  • With respect to technology, design things in a way that minimizes your “maintenance tax”.

John Cook of TechFlash (as well as some of the commenters) summarized the talk very nicely.

Note: Faves.com is up and running, and it is the company’s plan to keep it that way for the forseeable future.

Deriving a Game Plan from Ambiguity – Essential Resources

Entrepreneurship No Comments »

If you are a Product Manager and/or a startup founder, you undoubtedly have solid instincts about your target market.  But, if you are like myself, you have probably experienced times where it is unclear exactly what to do next.  To that end, I have found the following resources helpful over the years:

  • Everything on http://pragmaticmarketing.com.  But, the following are especially worth checking out:
    • The Strategic Role of Product Management – The focus of the free eBook is “how a market-driven focus leads companies to build products people want to buy“.  The chart on page 3 provides a great checklist of strategic and tactical tasks to help achieve this objective.  More broadly, the four keys areas are:
      1. Defining the strategy with a business case and product roadmap
      2. Enabling the technology team with a requirements document
      3. Enabling marketing communications with a positioning statement
      4. Enabling the Salesforce with a sales strategy
    • Archived Webinars
  • The Product Manager’s Handbook, especially Chapter 7 that talks about the New Product Project.  It lists specific techniques applicable to both the strategic and technology product management areas.
  • The McKinsey Way, especially Chapter 1 that talks about the “Mutually Exclusive, Collectively Exhaustive” method of enumerating all potential solutions to a problem.  This technique is useful across all four of the product management areas.
  • A positioning expert who, as an unbiased third-party, can walk you through a process towards identifying:
    • What are the highest value scenarios to your target market?
    • Are these scenarios ones that your users need to accomplish *right now*?
    • Have you identified scenarios where your product is the only, first, best, and/or most used way to accomplish something?
  • A weekly post-mortem or case study, preferably with a group!  My favorites:

Ongoing Segmentation and Positioning

Entrepreneurship No Comments »

I am part of a group of technology entrepreneurs and managers where we periodically discuss case studies.  Of all of them, the LinkedIn study especially stands out in my mind.  Why?

  • It gets at the essence of what all ventures (especially start-ups) need to deeply understand:
    • Segmentation: Who are my customers?
    • Positioning: Why do they care about me?
    • Monetization: Do they care enough about me to pay me?
  • It shows the importance of addressing the above questions periodically.  In fact, the case study profiles LinkedIn two years into their existence (mid-2005) when they already had over 4.5M members but insufficient revenues.

The segments that LinkedIn ultimately identified were

  • Relationship Managers – 90% of the user base who mostly keep up with people they know
  • Networkers – 5% of the user base who indiscriminately build relationships and often serve as intermediaries
  • Contactors – 5% of the user base who are recruiters, sales, business development folks

LinkedIn used this discovery to update their freemium model.  While Relationship Managers represented the majority of the user base, it was unclear if they would pay for premium services.  But, this large self-qualified 4M user base was an attractive target to the Contactors and unique to LinkedIn.  This motivated LinkedIn to introduce the successful paid service, InMail, which lets Contactors reach the LinkedIn user base:

Have you performed a similar exercise in your company recently?  When I relate this LinkedIn study to various points in the history of Faves.com and exploit the benefit of 20/20 hindsight, certainly a few things emerge that I would have done differently.  But, that’s for another post:)

Optimizing Web Sites for Search Traffic

Hosted Software No Comments »

I recently gave the following talk to the Chinese Institute of Engineers on the Microsoft campus.  The talk is an introduction to Search Engine Marketing (SEM), focusing on Search Advertising and Search Engine Optimization. I also explain the search business model and ranking algorithm to the extent that is needed to effectively implement SEM.

Much of the detail comes from my experience at Faves.com, where we were able to achieve over one million visits originating via organic search each month.

As a side note, the audience was great — asking lots of questions and validating the broad applicability of SEM to a variety of businesses.  Enjoy!

Are you a “Must-Have” or a “Nice-To-Have”?

Entrepreneurship 1 Comment »

I remember being asked this — with the implication that we should strive to be a “must-have” — when we were doing our initial fundraising round for Blue Dot (now Faves.com).  At first, I thought the distinction between a “must-have” and a “nice-to-have” is somewhat arbitrary.  But, scoping the question to “Are you a “must-have” for a paying customer or would be acquirer?” has helped me get my head around it.

If you are building a straight B2B product, your customers’ ultimate goal is to increase profits.  So, a “must-have” is something that helps your customers either cut costs or increase revenues.  The more convincingly you meet this definition of “must-have”, the easier the sales pitch.  Match this approach with someone in your organization who deeply understands and has relationships with your target customer segment, and you have a reasonable shot at success.

What if you’re a B2C company?  Unfortunately, it is harder to identify what it means to be a “must-have” for a consumer.  As I learned in the most recent StartPad talk, many VCs will not fund a consumer Web company unless it is attracting 3 million visitors a month.  Yikes!  These VCs realize it is difficult, if not impossible, to predict what will and will not stick with a mass market audience.

What can you do?  One approach is to stay laser focused on the B2C opportunity, employing trial-and-error, innovative product development, and/or creative marketing (e.g. Facebook, MySpace) to cross the 3 million visitor mark.  The thinking is that a) 3M is enough penetration to make money even on low performing ads and b) you have crossed the chasm and empirically demonstrated you are a “must-have”.

An additional approach is to employ a B2B, and hence “increase profits for the customer”, angle in your B2C business.  Consider the consumer Web site example again.  This is in fact a two-sided market, in which the B2B side is the relationship between your company and the advertiser.  Design your site to offer a high ROI for advertisers, and you become a “must-have” for them.  They will pay you a higher-than-average amount for your pageviews, ultimately reducing the number of pageviews you need to reach positive cash flow.  A good example of such a site is a travel search engine, since a) the site visitor is making a purchase *now* and b) the dollar amount of the transaction is high.

Taking this one step further: by successfully creating such a revenue engine, you become interesting to other businesses.  You can then strike distribution deals with high traffic sites in exchange for access to your “must-have” revenue engine, and so on…

Corporate Structures Talk: Takeaways

Entrepreneurship No Comments »

Disclaimer: I am not a lawyer, and I cannot be held responsible for accuracy of the information below. Use at your own risk.

I recently attended a talk by Craig Sherman of Wilson Sonsini Goodrich & Rosati about Corporate Structure and Common Problems.  The event was organized by StartPad, an excellent Seattle-based entrepreneurial organization through which we rent our office space and hence get the opportunity to intermingle with and work alongside other startups.

The talk was great!  I won’t summarize the entire thing, since you can find the deck and video here.  But, I did come away with two high-level points that are arguably applicable even beyond corporate structures:

Keep things “standard”

Your time is at a premium.  You likely want to use that time to innovate in how you serve your customers or how you make money and not in constructing complicated corporate structures.  If you keep things standard, you can use your lawyer’s document templates with minimal changes.  If not, you will be spending time and money on customized documents.  Further, keeping things standard removes a source of potential friction and/or extra due diligence time when you are raising money.

As an example, consider an S-Corporation structure over an LLC structure if you are planning on raising money.  An S-Corporation is less flexible.  But, as a result, it is more of a known quantity.

Hope for the best, but also plan for the worst

The reality is that many startups fail.  Even those that succeed have hiccups along the way.

As an example, consider vesting founder shares.  This way, if a founder leaves, you have a) enough “room” in your capitalization table to find a replacement, and b) you can still raise money because investors are less likely to feel that they are overcompensating a departed founder.  Vesting is something you should consider up front, since readjusting the capitalization table later in the process can have significant tax consequences.

Design by j david macor.com.Original WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in