Strategy: The Art of the Product Manager

Most of my life I’ve been a fan of strategy games – Risk®, Age of Empires, even Checkers. These games all demand that the player has a solid strategy, or they will likely be defeated by their opponent. Anyone playing without a strategy is just executing random actions based on feeling or intuition (or luck), without a plan, and more often than not, won’t even see their defeat coming. In my experience, the words “strategy” and “tactics” always lead to a great conversation. In one of my previous places of employment, there was so much pressure to be “strategic” that the words strategy and strategic became overused and meaningless – everything was presented as a strategy because that was the perceived path to promotion. Telling someone that their “strategy” was actually tactical execution would lead to heated debates. I have seen people ask for strategy documents and then criticize them for their lack of specifics (which was code for ‘where are the tactics?’).


The word “strategy” is derived from the Greek word strategos, meaning the “art of the general.” Simply put, a strategy is a plan to enable you to achieve a desired result. For a military general this is their plan for how they will deploy troops and resources. Conversely, tactics are the specific actions that will be executed to achieve the plan, such as flanking a building in our example.

In a previous post I explains how a Vision sets the overall direction; it is the compass for an organization (or even an individual). With a defined vision you can define the strategies that will enable the vision to become reality. Only once you have defined one or more strategies can you define the tactics that will be used to achieve the strategy (thereby achieving the vision). Take for example a person with high cholesterol who has a vision of being healthy. Their doctor may recommend several strategies for them to bring their cholesterol down and help them achieve their vision of health. One strategy might be to manage weight and/or drive weight loss. Another strategy might be to create a more healthy lifestyle (Note: these are simplified for the purpose of discussion). Each strategy will be achieved by executing a set of tactics, such as engaging in 30-minutes of cardio exercise 3-days a week by running or swimming, or by reducing the amount of animal fat intake, by having vegetarian meals a couple days a week.

Strategy v. Tactics

The difference between strategy and tactics is the difference between a plan and an action. A strategy is the plan–an adaptable plan–for how you will achieve a goal, and the tactics are the executable actions you will perform to achieve the result outlined by the strategy. In military usage, a distinction is made between strategy and tactics. Strategy is the utilization, during both peace and war, of all of a nation’s forces through large-scale, long-range planning and development, to ensure security or victory. Tactics deals with the use and deployment of troops in actual combat ( Unabridged. Based on the Random House Dictionary).

Strategy and Tactics are the plan and the actions.

Creating a Strategy

Creating a strategy, whether for a business, product or person, begins with the Vision; how can you create a plan without a vision of what you want to be when the plan is achieved? Assuming you have a good, concise and specific vision, then defining the strategy or strategies you will use is an exercise in planning. Start by identifying what has to happen in order to make the vision a reality. In the example of the person with high cholesterol who has a vision of being healthy, what has to change is their cholesterol level.

To identify the strategies available you begin identifying concepts that could change the “system” – where the system is the business, product or person. In our example case, the system is the person – what concepts could change this system from its current unhealthy state to a healthy state by lowering their cholesterol? In this case, a lot is known about how to lower cholesterol, so the strategies become apparent quickly:

  1. Manage weight and/or drive weight loss.
  2. Improve lifestyle health (e.g. eating, habits, etc.).
  3. Introduce cholesterol management medication.

With one or more strategies identified you can begin to evaluate them and decide which ones you want to employ. Our example patient may not want to introduce medication at this time, and will commit to the first two strategies. The strategies offer measurement milestones to determine their effectiveness, such as annual physical examination. The measurement milestone is designed to identify if the strategy is working, or if a new strategy is needed.

Measurement is Key

One of the most critical elements to a strategy is the ability to measure its effectiveness. You don’t want to continue burning resources executing against a strategy that isn’t working. With each strategy you identify you must identify a means to measure its success. For example, when we were preparing the initial beta release of Icenium we wanted to attract net-new customers to the company. One of the strategies we developed was to drive awareness through trade press that targeted audience profiles that were different than the current customer profile at the company. We developed a couple of measuring sticks.

When we created the beta release plan we decided that we would allow new users into the system through an invitation code (so we could control the inflow), and to aide the strategy we negotiated an exclusive announcement of the beta (with a couple thousand beta codes to giveaway) with TechCrunch, a publication that targeted the type of user we were interested in. This tactic was designed to support the higher level strategy of driving awareness to new user profiles. Within our system we created a reporting mechanism that would tell us the number of people responding to the invitation who were using email addresses already in our customer database. While not foolproof (because people have multiple email addresses), this did give us a good indication about the number of net-new customers we were bringing into the system, and since they were tied to their invitation code, we could tell where they came from. As we added more press outlets, and gave out more invitation codes, we could tell if our strategy was working or not by evaluating the percentage of net-new users coming from specific trade press.

In some cases your measurement may not be as easily instrumented. In another example from Icenium, our vision was to be a one-stop-shop for building cross-platform mobile applications and one of our business objectives was, as I said, to grow the company’s user base. To support both the vision and the business objective, we defined a strategy to attract web developers with an all-in-one tool and service stack. Our strategy was to build a development tool that was approachable and intuitive for web developers. We focused our execution (tactics) on building a light-weight code editor that worked similarly to other code editors, and that eliminated the need to manage platform complexities by abstracting them to the cloud. We replicated the web developer’s normal workflow of code-and-refresh by pairing the code editor with a device simulator. This enabled them to work in the same way they had been working with the browser, but with a focus on mobile applications. We built our app model on open source software that supported technologies they were already familiar with (HTML & JavaScript).

In other words, we defined strategies that would help us achieve the vision, and identified specific actions, or tactics, that would help us execute the strategies. The measurement sticks we created were less analytical and slightly more subjective – a review of support issues, overall community tone about the product, and a survey of users after they had used the product. We even ran a survey of users that abandon the product to find out why they left us (was our strategy failing or were they the wrong user profile?).

Here is a visualization of a couple of these examples:


Strategies Focus on Concepts, Tactics on Specifics

As you may have realized from the examples, a good strategy doesn’t have a lot of specifics about the actions. In fact, a good strategy should be adaptable to start or stop using specific actions, or tactics, at any time. A strategy for managing cholesterol doesn’t specify jogging or swimming, it identifies an amount of cardio recommended to achieve the desired result. If the patient executes the strategy with jogging, and either doesn’t like it, or gets injured, the strategy is flexible enough to allow them to introduce an alternative tactic—swimming—that is still in line with the strategy. Strategies are all about what you can do at a conceptual level – a planning level – to achieve your vision, and the tactics are the specific execution – the specific action – you will take to fulfill the strategy.


All too often we see people executing with no idea of the over arching strategy. This is when motion is confused with progress. Executing tactics without a strategy to drive them is simply motion. It’s business masturbation. You’re very busy, but nothing useful is going to result from all the effort.

I personally put a huge value in companies and organizations that measure result instead of action; those that value what is accomplished instead of how active people are. You can identify these companies by who is getting rewarded and promoted – is it the people who are thoughtfully developing a plan and executing methodically against it, or is it the people who are very busy with projects that look good, but drive no real measurable advancement toward the vision?

As a Product Management professional I feel strongly that my value is in being able to define a product vision and a set of strategies that will make that vision a reality, and then identifying tactics that I, or others, can execute to fulfill the strategy. More often than not, the execution is done by others, by the troops (engineering, marketing, sales, support). For my product I am the general, and the product strategy is my art.

A Vision is Not Enough, and a Poorly Defined Vision is Worse

For any product group or organization to be successful they must know where they are going and how they are going to get there. I’m not talking about the product backlog or the release schedule – I am talking about something more abstract than that. Within the DNA of any product group or organization there needs to be a driving force and a code of conduct. The compass that guides the group. I am talking about a vision and a set of principles that guide a product group, organization, or even a company (from here on out I’ll use ‘organization’ to refer to all of these).

The organizational vision provides direction and informs all constituents – employees, partners and customers – what the organization is trying to achieve. In partnership with the vision, a set of organizational principles provides working guidelines and informs all constituents how the organization will operate.

Defining a Vision

A vision statement is something that needs to be taken very seriously, with time and effort put into it. The vision statement becomes the North Star for the organization. It defines WHAT the organization is attempting to do or become. Pithy, jargon-filled vision statements provide no value; they provide no direction. As a member of an organization how can I make decisions about my work and how I use organizational resources if the vision doesn’t provide me any guidance or direction? If the vision statement says something as trite as “We strive to build great products” how am I armed to make good decisions on a day to day basis, or even in strategic planning? Conversely, complicated, all-encompassing vision statements provide equally little or no direction.

A vision statement should succinctly define the future you see for the organization – it should say a lot in as few words as possible. A good vision statement is easy for every constituent to remember and provides direction. Conversely, generic vision statements, especially those that provide no clear differentiation from others in the market, don’t help the organization align and head in the same direction.

Take for example the following:

“Be a highly effective, lean and fast moving organization that builds high-quality products that customers love.”

This sure sounds great. Who wouldn’t want to be a highly effective, lean fast moving organization? Who wouldn’t want to build products that customer love? Does this really provide much direction? Does this really provide much differentiation?

Imagine the alternative vision statement from a competitor:

“Be an ineffective, bloated and slow moving organization that builds mediocre products that customers simply tolerate.”

No one is going to have that as their vision statement. The fact is, the first one is simply too generic and vague. It’s a vision statement of common sense, not direction. No one in the organization is going to make better decisions based on the first vision statement (can you imagine – “Well, I was going to ship the product with this critical bug, but our vision is to make products that customers love, so I better get it fixed”).

A good vision statement both directs the organization and identifies what sets it apart from its competitors.

For example, consider the vision statement from

Our vision is to be earth’s most customer centric company; to build a place where people can come to find and discover anything they might want to buy online.

With this vision statement it’s easy to understand what the company wants to be, and for the members of the organization to make decisions about how to use company resources. Any decision that needs to be made can be evaluated against this vision. Answer the following question and you will have the answer:

Will allocating resources to a given idea move the organization closer to the vision?

As we began the journey to create and bring to market Icenium, I set forth a vision that defined what Icenium should become.

Icenium is all you need to build applications for the most relevant mobile platforms in the world.

The vision for Icenium is clearly targeted at mobile devices – but not all mobile devices, only he most relevant ones. Additionally, Icenium should be all you need; in other words, it should enable coding, testing and publishing an application for the devices it targets. Every decision we make about features and capabilities are evaluated on how they enable this vision.

If the vision defines WHAT an organization is trying to become, then the principles define HOW it will get there.

Defining Principles

When I say that the principles define HOW an organization will achieve its vision, I am not talking about the execution plan – the sequence of steps to go from A to B. Rather, I am referring to the way in which an organization operates in order to achieve the vision. I am referring to the day-to-day behaviors of everyone in the organization. I am referring to the culture of the organization.

Without principles there is no common ground – no way for all the members of the organization to come to terms with one another. How does an organization make decisions when there is not guidebook for how to behave? How does conflict get resolved when there is no common code of conduct?

Imagine if you lived in a world without principles? What would guide you as you made decisions? If, by principle, you don’t steal, then this is an absolute. You can’t live by this principle, and then steal a little bit. You either live by the principle, or you abandon the principle. In the worlds of the immortal Yoda,

Do. Or do not. There is no try. has very public Leadership Principles that guide the company in how they achieve their vision. These principles are well known (or at least very public), and every employee has their performance measured by both what they accomplished (the results they got) and how they fulfilled the Leadership Principles along the way. While I won’t go into all 14 Leadership Principles, I will examine a few to demonstrate how principles are used to guide an organization.

In their quest to become earth’s most customer centric company, has defined a principle to support the end goal – Customer Obsession.

Customer Obsession – Leaders start with the customer and work backwards. They work vigorously to earn and keep customer trust. Although leaders pay attention to competitors, they obsess over customers.

At the very core of is customer obsession. Not only is it part of their vision, but it is part of their guiding principles that define how they work on a daily basis. Every decision they make should be evaluated against this principle. In every decision they should be asking themselves, “Are we doing this for the customer?” and “Will this improve our customer’s experience with us?” If both answers aren’t a solid, clear and concise “Yes” than their decision is made for them – don’t do it.

Principles often come from the founder’s or the organizational leader’s personal beliefs. For, another principle is Frugality, which has been a well documented personal belief of the founder, Jeff Bezos.

Frugality – We try not to spend money on things that don’t matter to customers. Frugality breeds resourcefulness, self-sufficiency and invention. There are no extra points for headcount, budget size or fixed expense.

Again, this principle can and should be applied in the daily life of every employee. This doesn’t mean that is cheap – I don’t believe they are. In fact, I believe they spend money very wisely when they need to. Here in Seattle, Amazon has bought up a lot of property and built or bought some very nice buildings for their employees. This is money (a lot of money) spent on things customers don’t see, but it enables the company to operate more effectively. The frugality is revealed in the superfluous detail, in the lack of extravagance within the buildings. The desks are simple constructions of 2×4’s and doors. The wall paper isn’t some fancy design – it’s maps or newsprint in some cases.

In another case of frugality, Mr. Bezos spent over $700 million to acquire some robotic shelving technology so that the shelves containing product could be moved to the warehouse worked, rather than the other way around. This is a huge amount of money – but it wasn’t spent simply because they could do it. It was spent because, in a pilot they found that packing and shipping was more accurate and efficient using this technology. In other words, the expense directly benefitted customers.

Having a set of principles enables all employees to make good decisions in their daily work. In some ways it gives each of them a WWJD (What Would Jeff Do) barometer.

As we defined the vision of Icenium, we established some core principles. Some directly influenced by the corporate culture, and others define by me and the team, to guide us in creating the right product.

  • Simplicity – Every feature and capability added to Icenium should serve to simplify the developer workflow of building, testing and publishing an application.
  • Decouple Platforms – Developers should not be restricted to target only platforms that are compatible with their development platform (OS, Hardware). We should strive to decouple the two ends of the application spectrum whenever possible.
  • Skills Reuse – Icenium should enable developers to use the skills they already have, rather than require them to learn new skills. Whenever possible Icenium should provide the option for a developer to use technology or languages they already know.
  • Start Fast – A developer should be able to get started with Icenium in under 5-minutes. Any tools that a developer is required to download to use Icenium should not prevent them from creating a new project and writing code almost immediately.
  • Developer Choice – Icenium should enable developers to chose the technology they prefer and never lock them into our technology stack.
  • Customers Drive the Roadmap – Our customers are who we build Icenium for and thus their needs are the primary driver of every product decision we make. We strive to have strong communication with our customers to better learn about and understand their needs so that we can build solutions that meet and exceed their expectations.

This set of principles armed us with the ability to make decisions and trade-offs along the way to deliver to our customers a product they would love (and isn’t that everyone’s goal). As we set out to make a product that was all a developer needed to build applications for the most relevant mobile platforms in the world, we could make decisions about how we built the product by evaluating those decisions against the principles. Should we package the platform SDKs into the development environment, or should we abstract them as services? Test that question against the principles of Simplicity  and Start Fast  and you have your answer. Should we base our projects on Apache Cordova? Consider that the most common technology skills among developers in HTML and JavaScript, and overlay that on the Skills Reuse  principle and you have your answer.

Principles define how we behave, as individuals and as an organization. Without principles we have no guidebook for how to fulfill our vision. We are left to figure it out along the way, which ultimately leads to churn and, in many cases, unresolvable conflict. By defining a set of principles everyone knows how to operate, and while conflict may still occur, it is resolvable by discussion the conflict with the principles in mind. In fact, i n the book Getting to Yes: Negotiating Agreement Without Giving In, 3rd Edition by Roger Fisher and William Ury, the authors states:

Conflict is an inevitable—and useful—part of life. It often leads to change and generates insight…The challenge is not to eliminate conflict but to transform it. It is to change the way we deal with our differences—from destructive, adversarial battling to hard-headed, side-by-side problem solving. We should not underestimate the difficulty of this task, yet no task is more urgent in the world today.

Principles are the tool that enable an organization to resolve conflict more easily. They are the objective criteria that everyone in the organization is aligned to, and the only real discussion to have is about the interpretation of the principle(s) on either side of the conflict. For example, in the case of, I’m sure they frequently get into discussions of what the Frugality principle means, and whether or not a spending proposal adheres to the meaning and intent of the principle. With this in mind, it is easier to resolve the conflict by focusing on the meaning of the principle, and not the pressure or influence from the other side. With Icenium, for example, if a new feature proposal makes the developer workflow more complicated without a significant trade-off, the decision is an easy one.


The combination of (1) a well thought out vision, and (2) a set of principles you are willing to live by could very well be the most important two artifacts you create for your organization. They are so fundamental to everything you will do. Without a clear and concise vision it is difficult to know where you are going. Without an agreed upon set of principles, it is difficult to know how to act.

Don’t fall into the trap of defining too generic or a vision. If you can Ctrl+F / Ctrl+R your name with your competitor’s name and the vision holds true, you need more work. Your vision should be specific and clear and differentiate you. Don’t have the vision to “always put customers first” – have the vision to be “earth’s most customer centric company” – and if you competitors strive for the same vision, then beat them at it while also differentiating yourself.

Define your principles now. It’s never too late. Decide who you want to be as an organization and write it down. Don’t have a principle that says “we will be transparent” – that’s too ambiguous. Have a principle that says “One-up, one-down and all around – we strive for transparency through by ensuring all team members can articulate the product strategy (one-up), the customer needs (one-down), and what is happening in the organization (and all around).”

Now go make great products.

Icenium v1.1 Now Available

Today I am proud to announce the first update to Icenium since our v1 launch a month and a half ago. As a cloud-based solution, we have always planned for a regular cadence of product and service updates – continuous delivery of value, if you will. This v1.1 release represents our first step toward establishing a regular cadence of updates that include new features, improvements in existing features and fixes for any issues discovered (thank you for reporting them to us in our forums). As we continue to develop Icenium, we expect to deliver updates on a regular schedule, starting at about every 6-10 weeks, and eventually accelerating to where we can deliver product and service updates at high frequency.

With this release we have added a few new features, updated support for Apache Cordova and fixed some bugs reported by you. To summarize this release, I will categorize the changes into four buckets:

  • General – Changes and updates to the back-end services, or changes that apply to all client tools.
  • Icenium Graphite – Changes and updates to the installed client for Windows.
  • Icenium Mist – Changes and updates to the browser-based client for all platforms.
  • Icenium Ion – Changes and updates to the iOS development and testing utility.

The complete release notes can be found here.


Apache Cordova v2.2

All Icenium projects may now use Apache Cordova 2.2. All new projects will be created using Cordova 2.2 by default. Existing projects can be upgraded to the new version in by opening the Properties settings for a project.

ChildBrowser Plugin

The ChildBrowser plugin has been updated to version 4.0. This version is compatible with Apache Cordova 2.2.

Kendo UI Mobile

The new project template (Kendo UI) has been updated to use Kendo UI Mobile v2012.3.1114.

jQuery Mobile

The new project template (jQuery) has been updated to use jQuery Mobile v1.2.0.

Android Hardware Acceleration

In the project properties you may now select to enable or disable Android hardware acceleration. Hardware acceleration will improve the rendering of UI animations.

OS Version Support in Device Simulator.

OS version selector has been added to the simulators. Changing the OS version can affect behavior of the app.


Icenium Graphite

Cut/Copy/Paste/Select All

Cut, Copy, Paste, and Select All commands have been added to Code Editor’s context menu.


Reload Project in Simulator

New ‘Reload’ button in the device simulator reloads the current project.

Reorder Open Documents

You can reorder open documents by dragging and dropping the tabs in the order you prefer,

Icenium Mist

Version Control

The version control capabilities of Mist have been improved to parity with Icenium Graphite, including the ability to Clone projects from a URL-based Git repository, such as GitHub, and push and pull changes to and from the parent repository.


Find Function

A keyboard shortcut (CTRL+F) will open a Find dialog enabling you to search code files for specifies text. Additional shortcuts have been enabled during Find operations – Find Next (Enter or F3), Find Previous (SHIFT+Enter or SHIFT+F3).

Case-sensitive search and search with RegEx are supported. When RegEx search is enabled case-sensitive search is disabled.

Device Simulator Improvements

Status bar and orientation properties have been added to the device simulator.

Reload Project

New ‘Reload’ button in the device simulator reloads the current project.

CORS Requests

When a CORS request is executed via the device simulator an information message is displayed letting you know what is happening.

Icenium Ion

Ion works with Cordova 2.2 only. A warning message is displayed when attempting to use older versions.

Mobile MeetUp at the Movies

Last night I had the great pleasure of introducing a few hundred mobile app developers to Icenium, and then treating them to a pre-release private screening of The Hobbit: An Unexpected Journey in High Frame Rate 3D. I have to say, I had a blast. The energy level was high, I meet a lot of very cool, developers, and learned a lot about some of the start-ups in the area.

Hobbit Splash - Telerick

I want to thank the organizers and members of some of the Seattle area MeetUp groups for coming to the event, and generally being pretty awesome:

From talking to lots of you as you were coming out of the theater, it sounds like the movie was great – especially in HFR 3D (Sony was onsite ensuring the 4k projectors were in top shape!). Thanks again for attending – see you next time!


2012-12-13 19.22.39

2012-12-13 19.30.19


Configuring Icenium LiveSync with the SGS3

Icenium LiveSync enables you to easily deploy an app in development to one or more devices and see changes made–in real-time in both the integrated device simulator and across all connected devices–without having to recompile. In order for LiveSync to work, your development environment must be able to communicate with the device. For Android devices this requires communication using the Android Debug Bridge (ADB). This video shows you how to set up your development environment to enable LiveSync between Graphite and the Samsung Galaxy S III.

This video shows you all the steps outlined in this blog post.

What to Do

The steps outlined in the video are simple and easy to complete.

  1. Install the Samsung Android USB Driver for Windows
  2. Enable Debug Mode on the Device
  3. Optionally Verify with ADB

Install the Samsung Android USB Driver for Windows

This is pretty straight forward. Go here and download the Samsung Android USB Driver for Windows. This is the driver package for many of the Samsung devices, including the SGS3 and other smartphones and tablets in the Galaxy product line.

Enable Debug Mode on the Device

For any device that will be communicating over the ADB, you must enable USB Debugging. On the SGS3 this is in Settings > Developer Options. Check the box for USB Debugging so that there is a green check mark in the box.

Optionally Verify with ADB

When you installed Icenium Graphite part of the installation package included the Android Debug Bridge, which is used for LiveSync communication between Graphite and the devices. You can use ADB in a command line to verify that your SGS3 is visible to ADB (this isn’t necessary, but can be useful if you are troubleshooting any device connection issues).

  1. Open a command line end enter:
    cd %USERPROFILE%\AppData\Local\Temp\ADB
  2. Enter:
    adb devices

You should see a device ID for your SGS3 (for example, in the video mine is 4df1d84539005ffd).

That’s it – you are all set. When you create or open a project in Icenium and your SGS3 is connected, you should see it in the Device list.

Setting Up the Kindle Fire HD 7 for Icenium LiveSync

Since we released Icenium a couple weeks ago, a few folks have asked me if it could be used to build apps for the new Kindle Fire HD. The simple answer is “Yes.” The Fire HD is an Android Ice Cream Sandwich (v4.0.x) device, and Android (v2.2 and greater) is a supported operating system for Icenium projects.

In order for Icenium to communicate with devices over USB, and deploy and update apps, the device drives for those devices have to be installed and configured on the PC. For Apple iOS devices, the device drivers are included in iTunes. For Samsung devices, most of these are in Samsung Kies. For HTC devices, these are in HTC SyncManager. You get it.

But what about Amazon? They don’t have a utility like this.

Setting up the Kindle Fire (1st Generation) to work with Icenium LiveSync was pretty straight forward – download the USB driver, update an INI file and wham-o, it works. Then Amazon released the Kindle Fire HD, which included an updated operating system (the original Kindle was based on Android Gingerbread – v2.3.4) and it was proclaimed to be unhackable. This meant that for developers it was going to be a challenge to work with it as a development device in any way not prescribed by Amazon. Of course the official guidance is to use the Android SDK, platform tools and Eclipse as your development environment. Yuck.

When you plug in a Fire HD, it installs a driver that enables you to copy media files to and from the device, but it doesn’t enable the Android Debug Bridge (ADB) to access the device to install apps. Icenium LiveSync uses ADB for the communication to Android devices to enable deployment and updates on devices (don’t worry, you don’t need the Android SDK for this, ADB is installed in C:\Users\<usernmae>\AppData\Local\Temp\ when Icenium Graphite is installed).

I bought a Kindle Fire HD 7” and began following the unofficial steps to connect to it as a development device. Turns out it was very troublesome, especially if I refused to download the Android SDK. I found a few blog posts that all pointed back to a forum post on how to root the Fire HD, so I gave it a shot. Unfortunately for me when I followed the steps it didn’t work. No matter what I tried, the correct driver would get installed, and the Fire HD wouldn’t show up in the ADB device list.


Rather than get discouraged, I experimented and got it to work. The steps in the forum post may work for you, but they didn’t work for me right away. The only ADB driver that I could get to install was the Android ADB Interface (not the Android Composite ADB Interface driver as outlined in the forum post). I had to manually install a different driver (a generic USB Composite Device driver), and then the Kindle Fire HD was recognized by ADB.


After that, I connected the Kindle Fire (1st Gen) that I previously had working, and the Android Composite ADB Interface driver magically appeared. I disconnected both Kindle devices and reconnected them and both of updated to the Android Composite ADB Interface driver.


Now both the Kindle Fire 1st Gen and the Kindle Fire HD were visible to ADB…


…which meant that both devices are ready to by used by Icenium LiveSync.


Now when I click on “Run on Device” the app is compiled in the cloud for Android using the Icenium Compiler Service and pushed through Icenium Graphite and over ADB to the devices.


That’s it. Now you can test your Icenium project on either a Kindle Fire or Kindle Fire HD. As soon as the Fire HD 8.9” arrives, I’ll give that a test.

And stay tuned for a video series on Icenium LiveSync called “Getting to 50’ where I will add various devices to see if we can successfully support simultaneous LiveSync to 50 devices.


What About Windows Phone?

In the past couple of days since I announced the release of Icenium, I’ve had a number of people asking me if it supports Windows Phone in addition to Apple iOS and Google Android. I suppose that is because nearly all other Telerik products are dedicated to the Microsoft technology stack, so it would be almost expected that Icenium would get on the band-wagon.

Its All About the Data

Allow me to let data do the speaking: 


In the past year Apple and Google have grown in market share by nearly 17% (Source: comScore, U.S. Mobile Subscriber Market Share). In that same period, Microsoft dropped nearly 2% – meaning Apple and Google are outpacing Microsoft by nearly 20%. In fact, Apple and Google are the only two mobile platform providers that have been consistently growing in market share during that period.

So I decided to focus our efforts on Apple and Google. Microsoft will have to wait.

What Will Windows Phone Do?

I used to be a Windows Phone user. I loved my Windows Phone (I missed a lot of the apps from my old iPhone, but I LOVED the operating system and the Live Tiles). In the last year I have regularly switched phones every month or two, trying out several Android devices in addition to the iPhone 4/4S and now iPhone 5. I’m a believer in Windows Phone – I think it is a great operating system. That is completely separate from the business decisions I make.

With Windows Phone 7 already on death row, and the success of Windows Phone 8 nothing more than speculation (like this and this), I didn’t feel like WIndows Phone warranted our time…yet. I am bullish on Windows Phone. Like I said, I love the OS and the new hardware is looking pretty good.

I have maintained a wait-and-see stance on adding Windows Phone support to Icenium.

We’re Not Waiting Idle

Of course, Telerik has a lot of knowledge in Windows Phone, which means we’ve already done some research. We’ve done a proof-of-concept to learn more about what it would take to support Windows Phone, and we know what we need in order to give Windows Phone the Icenium treatment. We’ve already engaged Microsoft to work out some of the details, in the event we decide to move forward.

Over the next few weeks we’ll be watching the early adoption of Windows Phone to see what the consumer reaction is, and use that to make some decisions about how we prioritize our backlog for the remainder of the year, and early 2013.

OK, What About Windows 8?

Having worked on Windows 8 tooling before I left Microsoft, I feel like I know the app-type Formerly Known as Metro (FKM) pretty well. I’m curious to see how consumers and enterprises react to both the app-type and the new hardware. Clearly Windows 8 will be successful in the PC market – although I’m not sure how well PC users will take to the FKM style apps.

ImageFor the mobile device market, the success of the Surface with Windows RT (Surface RT) and the OEM tablet form factors will have a huge impact on the success of FKM apps on devices. If the hardware isn’t sexy, the Windows 8 tablet will suffer the same fate as Windows Phone 7.

If the Surface RT and its cousins do well with consumers (and even in the enterprise), then the FKM app-type has a shot, and it would make sense for Icenium to support it. The advantage we have is that FKM apps can be built with HTML and JavaScript, which work through a projection layer into the Windows Runtime (WinRT) – basically the exact same way Apache Cordova works (in concept), making adding FMK app support to Icenium very achievable.

Like WIndows Phone 8, I am bullish on Windows 8, and the Surface RT – I’d say I am even more bullish on Windows 8 than Windows Phone 8. I’ve already pre-ordered my Surface RT and a Windows 8 Ultrabook with a touchscreen.

Keep Your Fingers Crossed (and Buy a Surface RT)

I hope that helps you understand some of the decision making process I used for deciding what platforms to support in the initial offering of Icenium. We have aspirations to support all relevant platforms – and right now that definition excludes Windows 8 and Windows Phone 8. Let’s hope that changes.

I’d love to see a three-horse race in the mobile market.

Introducing Icenium – an Integrated Cloud Environment for Hybrid Mobile App Development

Today is a day that my team and I have been looking forward to for a long time. Today I am happy to announce that Icenium, an Integrated Cloud Environment (ICE) for hybrid mobile app development, is now available to everyone!

Icenium Logo (1416x321, 54k)

The Story Begins

Back in July 2011, I left Microsoft and joined Telerik to take on an ambitious idea. In my time at Microsoft I had spoken with hundreds of developers and was able to witness first-hand the frustration that many of them felt working with Integrated Development Environments (IDEs) – they were big, bloated and most were designed with only one platform, or one platform vendor in mind (e.g. Visual Studio, xCode, etc.). For developers that targeted multiple platforms, using these IDEs meant downloading, installing and managing multiple platform SDKs and two or more separate development environments. For example, targeting the most relevant platforms in the world today – iOS and Android – meant using xCode with Objective C and Eclipse with Java, along with all the SDKs and tools that go along with them. Nearly 3 GB of downloads to install and maintain (not to mention, you have to have a Mac OS X environment, automatically excluding Windows-based developers). I was no different from the developers I talked to. I used these tools all the time. They took up a lot of my time to download and configure, they took up a lot of hard drive space, and they required a powerful development machine.

I also observed that while I was writing code, I was also listening to music from Pandora, saving documents in DropBox, and keeping notes in Evernote. Nearly everything I used daily was not only cloud-connected, but the cloud played a significant role in enabling the technology; that is, the technology wouldn’t have functioned without the cloud. Everything except my development tools (OK, maybe I’d deploy an app to the cloud, but the cloud didn’t aid me in my development efforts).

An ICE Age is Coming

The idea that a development environment required all of the SDKs and platform dependencies to be installed locally on a development machine with massive RAM and a big hard drive felt so antiquated compared to the other apps I used which were light-weight and used the cloud in a meaningful way. This made me want to redefine what a development environment was. I wanted to build something that enabled developers to build across a variety of platforms, and now that cloud connectivity was ubiquitous for developers, it was possible.

I left Microsoft in pursuit of a company that would allow me to chase my crazy idea, and Telerik is just that crazy (talking to you Forte). I didn’t want to build just another IDE. I wanted to build something different; I wanted to build an ICE – an Integrated Cloud Environment. I believed that we could improve cross-platform development by decoupling the gestures of writing code from the platform dependencies required when building apps. Specifically I wanted to decouple coding from the big, bloated SDKs that limited the development experience to one where the coding environment and the target environment required affinity.

The primary objective in building an ICE was to enable developers to build apps that targeted any relevant platform from any development. My theory was that we could extract the SDKs from the local coding environment and turn them into cloud-based services that could still function as part of an integrated workflow for developing apps. In other words, it still had to be an integrated development experience, and the cloud – not your OS and RAM – would become the enabling technology. The experience had to be functional, capable and simple. The age of having to master multiple complex development environments and SDKs is coming to an end. The new ICE age will usher in a new type of development tools, and the dinosaur IDEs will die off soon enough.

Welcome Icenium

Icenium™ is the realization of that vision. Icenium combines the convenience of a modern coding environment with the power and flexibility of the cloud to manage platform dependencies. Icenium enables you to build applications without being limited by the development environment having to be compatible with the run-time environment (e.g. Mac OS X to iOS). It enables you to focus on the content of your application without the headache of managing multiple SDKs and development environments. With Icenium you can use Windows, Mac OS X, Linux, or even device operating systems, like iOS on an iPad, to build hybrid applications that are distributable through the app stores, and run natively on iOS and Android devices.

I believe web developers are looking for ways to move from mobile-optimized web sites to building apps that run on devices, so we built Icenium with web developers in mind. We leverage Apache Cordova (aka PhoneGap) to enable you to use HTML, CSS and JavaScript to build your application. When your project is compiled, we build the iOS and Android native bits in the cloud, which means you don’t have to think about SDKs, Objective C or Java. Just focus on your app and leave the platform dependencies to us.

We also tailored the development experience to web developers. Most web developers (me included) prefer to work with capable, text-based code editors (and not WYSIWYG tools that modify your code without your consent), a browser and some debugging tools, such as WebKit Inspector, so we designed Icenium to work the same way. The Icenium coding environment is a simple text-based code editor, packed with advanced capabilities including syntax coloring and formatting, real-time error detection, refactoring, code navigation, and more.

Iterate quickly on your design with the integrated device simulator.

Each development client (Icenium Graphite for Windows and Icenium Mist in the browser) includes a device simulator that enables you to test your application much like you would test a web app in a browser. The device simulators include options for simulating iPhone, iPad, Android phone and Android tablet, including a geolocation simulator and the ability to rotate and flip the device. The device simulators expose the ability to use WebKit Inspector-based debugging tools – the tools you already know. We have tried to replicate the working style you already use for web apps, making the transition to mobile application development simple and intuitive.

Icenium Graphite™

Icenium Graphite with real-time syntax error detection.

Icenium Graphite is an installable development tool for Windows operating systems. It is a WPF app that provides you with the ability to build a cross-platform mobile application, test it in a device simulator, build the app (in the cloud of course) and deploy it to multiple devices at once. When you are ready, you can switch to a “release” build setting, add your icons and splash screens and package your app for publishing to the Apple AppStore or Google Play.

Icenium LiveSync™

Icenium LiveSync is one of the truly magical features of Graphite. With LiveSync you can build and deploy your app to one or more iOS and Android devices with nothing more than the click of a button. Your app is built in the cloud, and then delivered back to Graphite where it is pushed over USB to all connected devices.

Icenium integrates Apache Cordova to enable cross-platform mobile application development for iOS and Android devices.

I usually have 10 or 11 connected at once, including iPhone 4S, iPhone 5, iPad 1, iPad 3, Google Nexus, Google Nexus 7, Galaxy S2 Skyrocket, Galaxy S3, Galaxy Tab 8.9”, Galaxy Note 10”, HTC One X, and the Kindle Fire.

After the app is on the devices you can test it out and see how it works on different screen sizes and pixel densities (e.g. Retina display), not to mention different form factors (phone and tablets). If you want to make a change, simply add, edit or remove the HTML, CSS or JavaScript in your project and click “Save.” When you do, the changes are saved (in the cloud of course) and immediately pushed down to the running app on all connected devices. That means you can work in rapid iterations and see your changes on the devices in real-time, as you make them.

Icenium Mist™

Icenium Mist is a browser-based development environment..

Icenium Mist is the browser-based sister of Graphite. Mist provides nearly all of the same functionality as Graphite, and works on a variety of platforms. I use Mist on my MacBook Air, and even on my iPad, when I am away from my office. Mist also includes the modern conveniences of Graphite, such as syntax coloring, statement completion, and version control integration, as well as a browser-based device simulator that can render your app on an iPhone, iPad, Android phone and Android tablet.

Since Mist is browser-based, it doesn’t have access to deploy apps to devices via USB. Instead, you can build your app and deploy it to a device by downloading the app and pushing it to your devices manually, or simply scan the on-screen QR code and the app will be downloaded to your device.

LiveSync On-Demand

Whether using Graphite or Mist, we’ve included the option to use LiveSync in an “on-demand” way. If your app is on a device and either you’ve disconnected it from USB (when using Graphite) or you deployed the app manually or with a QR code, you can request an app update easily and the content of the app will be refreshed based on your latest saved changes in either Graphite or Mist. If it’s an iOS device, simply press three fingers to the screen for a couple seconds and you will see the download begin. If it’s an Android device, simply press the context menu and the download will begin. LiveSync on demand means you can see your changes on any device, anytime, anywhere.

Icenium Ion™

Icenium Ion enables you to forget about device provisioning during development.

If you’re familiar with Apple’s iOS development model, you know that in order to deploy an app onto an iOS device you need to first provision that device through the Apple Developer Center. Icenium fully supports working with provisioned devices – in fact Icenium can aid you in creating the Certificate Signing Request required when requesting a device provision. However, if you want to try out your app without provisioning your phone, or you want a stakeholder or beta tester to try out your app and give you feedback, then Icenium Ion is the tool you need. Ion is a development and testing utility (downloadable for free from the AppStore) that enables you to load your app onto any iOS device regardless of whether or not it has been provisioned. Simply scan a QR code provided by Icenium and the app will download and launch inside Ion. Of course, LiveSync on demand works perfectly with Ion too.

Version Control

Icenium Graphite Code Editor with Version Control-Diff Window
Integrated version control means your code is safely stored and versioned in the cloud.

Of course a development tool wouldn’t be complete without integrated version control, and a cloud-based tool better integrate with popular cloud-based version control systems, so we did just that. By default all Icenium projects are connected to an integrated Git repository in the cloud, and you can optionally configure your project to use any URL-based Git repository, including GitHub and BitBucket. Both public and private projects are supported, enabling you to collaborate and version your code safely.

Kick the Wheels (for a while)

As I mentioned, today we have released Icenium for everyone to use. In fact, I don’t want there to be any barrier in your way to trying out Icenium, so I decided to make it free for the next 6-months. We won’t begin charging anyone for Icenium until May 1, 2013. So go to, create an account and start building cross-platform mobile apps today. I’ll bet you can build an app faster than it takes to download xCode.

Cloud Living – Day 7

Seven days in and what is everyone asking? “How’s it going with your cloud-living experiment?” I’m not going to lie. It’s not going well. Instead of living in the clouds, I feel like I am living in the fog…like a cloud sitting on the ground…where things reside.

Day 1

On Day 1 of my experiment I quickly discovered that I was going to have some trouble getting onto the VPN I use daily for my job. You see, I am a remote employee in a home office. In order to access any corporate resources (e.g. internal CMS, corporate directory, etc.) I need to first establish a VPN connection. At Telerik we use Cisco AnyConnect over SSL.

Major Obstacle #1 – Cisco AnyConnect

In order for me to establish a VPN connection, I first have to install the Cisco AnyConnect Java client tool. Wait! Install! I can’t install, I live in the cloud. Certainly there has to be a way around this. As it turns out there is VPN support built right into Chrome OS. Solution found!

Solution Failed!

As it turns out, the built-in VPN solution, while great for some instances, isn’t great for me. You see, as I mentioned, we use an SSL VPN (which makes sense – all my top secret IP is moving over this connection). Well, this is what I found on the Google Chrome OS support site:


Suddenly my dreams of living a cloud life are being threatened. I can’t access any corporate resources. Not even email (our Outlook Web Access requires the VPN connection). I thought about trying to use Office 365 or GMail as the client for my corporate Exchange account, but unfortunately neither of these solutions are currently supported by our IT admins, and since I am the only one (foolish enough to be) using a Chromebook, its also not a priority. Understandable.

Day 2-7

aka What I Use the Chromebook For (besides Fantasy Football)

So here’s what I have been doing for the past seven days.

During working hours I use my Windows PC and MacOS machines any time I need to (a) have a Skype meeting with my team or colleagues (since imo instant messenger failed for me when it came to anything other than text), or (b) when I need to access corporate resources, such as out internal CMS portals.  Anytime I don’t need to do either of those things for a decent stretch of time (an hour or more), I switch to the Chromebook. I’ve reconfigured my desk so that the Apple Thunderbolt display is horizontal on the right, the Windows PC has one display vertical on the left, and the Chromebook has the center display, horizontal. THis makes it easy for me to default to the Chromebook, while still having the other machines available and accessible.

I’ve been using Google Drive to read existing Microsoft Word docs that I have saved in DropBox, and to create new files, including documents and presentations. I’ve also been using my GMail to send emails to work colleagues (and I’m not sure they’ve noticed). I’m considering signing up for Cloud HQ in order to sync Google Drive and DropBox.

Lots of my time is spent doing one of three things, all of which have been possible in the Chromebook:

  1. Doing competitive and industry research, reading blogs, and other web based resources.
  2. Creating content in the form of “word” docs and presentations.
  3. Writing code in a kick-ass integrated cloud environment (ICE).

As long as I don’t need to access corporate resources (which is often the result of my research work) or read my Telerik email (which I can do on my Google Nexus phone, or on my Google Nexus 7 tablet) then I am fine in the Chromebook.

<sideNote>The Chromebook battery life and sleep mode rocks! I frequently forget to plug the device in. Since it sleeps when the lid is closed, and comes to life in seconds when opened, the battery has lasted longer than I have ever needed. Big points for the Chromebook.</sideNote>

At this point I’ve figured out most of the limitations of the Chromebook, and I think I know where I can push it a little bit. What I would really like to do next is record a demo of my new product running on the Chromebook. Apparently all I have to do is install a screen capture tool.

Wait! Install!

My New Life in the Cloud – Day 0

As a guy that is a proponent of, and who makes cloud-based software, I felt it was only prudent for me to try a little experiment. What would it be like to live my life in the cloud? I’m not talking about spending the month of October in the high elevations of Nepal like some people I know. Rather, I am talking about limiting the software I use in my day-to-day life to only cloud based software. I tried this once before, but it was too easy to fall back into my old habits of relying on resident applications when things go tough. Since the software my team and I are building is fully capable of running non-resident, I thought the ony sane thing to do was to rip off the (resident app) band-aid and get myself a Chromebook.

Samsung Series 5 550
Samsung Series 5 550

Last week the Samsung Series 5 550 arrived at my house. Its a nice little device (little, like a 12.1″ screen), but its still thicker and heavier than my MacBook Air (even though it has all those resident apps stuffed inside).  The device feels solid, and looks nice. I fired it up, and after a few seconds of booting, I had to wait ten minutes for an operating system update to be applied. Not too bad for a first boot. Subsequent boots have been wicked fast (under 10-seconds for a cold boot, and instant for coming our of sleep).

I pretty much stayed away from it over the weekend, with plans to turn off all of my other laptops (Windows X220 with two 27″ monitors, a MackBook Air with Thunderbolt display, etc.) and go exclusively cloud for two weeks. And then reality hit. I had a morning full of meetings and I simply wasn’t ready to begin my day on a new laptop. I needed Skype (which isn’t supported on ChromeOS), and I needed to access my corporate Exchange server, etc. I did my first meeting as normal, and then made the switch.

My second meeting got off to a rough start because I couldn’t get imo instant messenger to make a video call to one of my Skype contacts–I wasn’t able to get my headset to work with ChromeOS, and the video call crashed. We quickly resorted to a Google+ Hangout (chalk one up for Google–it was so hard to use the stuff we we were accustom to that we had to use their solution).

Before I knew it I was back at my Windows PC for a couple follow up meetings, etc. By the afternoon my resolve was stronger. I decided to disassemble my existing desk setup so that I could position the Chromebook front and center, and turn off the other laptops for the next couple weeks. Since the Series 5 550 has an on board DisplayPort I decided to connect it to the center monitor (which I turned back to horizontal from its normal portrait position–see below).

After discovering the Ctrl + Monitor Toggle combination I had the screen projecting on my 27″ monitor (at 2550 x 1440). Life is better now.

So far I have installed many of the apps I use regularly (the Chrome Web App versions) and some that are new to me that will take the place of old resident apps.

I also found a great list of tips for new ChromeOS users.

My next series of steps is to get all of my work applications up and running before tomorrow morning. I need to ensure I can access Outlook Web Access and Google Docs (which we don’t use, but I will need to switch to for the next few weeks). I will also need to get Google Drive and DropBox synced – I use DropBox extensively and I am not willing to give it up (especially since it’s also cloud-based).

I’ll keep you posted on my progress, and what obstacles I encounter. It’s worth noting that my product works just fine on ChromeOS 🙂

Here’s my old desk set-up (I had to use my MacBook Air to get this photo off of my Canon 40D–I couldn’t figure out how to do it with the Chromebook in 10-minutes and gave in):

My old desk setup (Windows on the left two screens, MacBook Air on the right one)