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 Icenium.com, 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.

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)

We Need Developer Tools, Not Platform Development Tools

It’s been almost a year since I left my role at Microsoft as Director of Product Management for Visual Studio. Ever since I left, I’ve had lots of people asking what I am working on now, and I’ve been pretty quiet about it (the running joke is that I am the VP of Black Ops). The truth is that my team and I have been very busy solving what we believe to be one of the biggest challenges facing developers today and building a new product that I believe will dramatically reduce the barrier to entry for developers wanting to build applications that run natively on mobile devices.

I firmly believe that mobile devices are the single biggest opportunity today for developers. Cell phones are ubiquitous, and smartphones are becoming so common place, it’s surprising when someone doesn’t have one. According to the March 2012 U.S. Mobile Subscriber Market Share from comScore 234 million Americans age 13 and older used mobile devices, and more than 106 million people in the U.S. owned smartphones. That’s roughly one-third of the US population, and if you are anything like me, your smartphone is the only computing device you have with you at all times, from the time you wake up, to the time you go to bed. While a smartphone (or tablet) may not be your primary productivity device, it is arguably your primary device –the only one you always have within reach.

From a developer’s perspective, this represents a huge opportunity. While lots of developers have already entered the mobile device development arena, only a fraction of the entire developer population is actively doing development for mobile platforms. As businesses embrace mobile devices and start to extend their line-of-business applications, business-to-business applications and direct to consumer applications, more and more developers will have to transition into mobile platform developers.

While mobile platforms are one of the biggest opportunities for developers, they are also one of the biggest challenges for developers. Like the browser-wars of the 90’s, the mobile platform arena is hugely challenging. Every mobile platform provider has their own SDKs, uses a different programming language, and different tools. In fact, if you want to target all of the mobile platforms out there, you need multiple development machines—one for Mac OS X and one for Windows (at the very least you need a Mac and a BootCamp image of Windows). To build one app that runs natively on all platforms requires significant duplication of effort—essentially building and rebuilding the same app on different platforms. None of the platform providers are eager to solve this problem for you—they don’t make developer tools, they make platform development tools.

When I was at Microsoft, my job was to ensure Microsoft built the best platform development tools possible As a result we created awesome tools for development on the various Windows platforms (client, server and phone). What we didn’t do was build great developer tools—tools that made developing applications easier and more enjoyable regardless of what platform was being targeted. The only way to do that in the Developer Division would be to secede from Microsoft and become an independent software vendor (ISV)…and DevDiv would be a big one. Since that wasn’t going to happen I decided that it was time to find an ISV that had the ability to create great development tools regardless of platform. That quest led me to Telerik, where my team and I have been doing just that.

I’d like to invite you to join the Icenium private beta. Icenium is a work in progress (hence the private beta) and steadily becoming the product that I envisioned—a development tool that makes building applications easier and more enjoyable regardless of platform. With Icenium, we intent to build the worlds first Integrated Cloud Environment (ICE) that combines the power and flexibility of the cloud with the convenience of a local coding environment to massively eliminate the complexity of building cross-platform mobile applications. In its current beta state Icenium enables you to build applications for Apple iOS and Google Android, and more platforms will follow. My team and I are very excited about this beta, and we are looking forward to getting your feedback.

D7

PaaS Me the Next Web, Please

Over the past few years the software development industry has been struggling to define Cloud Computing in a way that a mere-mortal could understand. I like the explanation of Cloud Computing from IBM:

Cloud computing enhances business agility through consumable services for infrastructures, platforms, and applications. It can be loosely defined as using scalable computing resources provided as a service from outside a company’s environment on a pay-per-use basis.

While a concise and decent explanation, it does use some jargony stuff that can scare away mere mortals. As everything becomes “consumable services”—as the explanation describes (or what we know as the “as-a-Service” model)—how do we understand the difference of the “aaS”es? What actually is Infrastructure-as-a-Service (IaaS), Platform-as-a-Service (PaaS) and Software-as-a-Service (SaaS), and why should you care? How are they different? What can PaaS do for you that IaaS can’t?

It’s clear that the industry is intent in furthering cloud computing, and for good reason. Cloud computing (all of these aaS offerings) enables companies of all sizes to pay for only what they use, and to access their resources from anywhere without having to worry about behind-the-scenes maintenance.  So what are the differences?

 

Infrastructure-as-a-Service (IaaS)

Vendors of IaaS are in the business of providing the core infrastructure for applications to run on. This includes the required hardware and bandwidth. As a customer of an IaaS offering, configuration of the infrastructure, including such things as installing operating systems, and other required software, is left to you. You pay the vendor for the hardware and bandwidth management, and manage the development, deployment and management of your applications the same way you always have. IaaS gives you a way to outsource your core IT department – no more load balancing to worry about, no more servers to maintain (other than software updates).

 

Platform-as-a-Service (PaaS)

PaaS providers enable you to build, deploy and manage your applications all from their Internet-based solution. According to Wikipedia

Platform as a Service (PaaS) is the delivery of a computing platform and solution stack as a service. PaaS offerings facilitate deployment of applications without the cost and complexity of buying and managing the underlying hardware and software and provisioning hosting capabilities, providing all of the facilities required to support the complete life cycle of building and delivering web applications and services entirely available from the Internet.

While this definition is good at describing what could be a Platform-as-a-Service offering, it fails to be specific in terms of what specifically makes up a PaaS offering – the min-bar. It seems the only thing that is consistent about the definition of PaaS as you read the marketing information from one vendor to the next is the first and last part of the Wikipedia definition:

Platform as a Service (PaaS) is the delivery of a computing platform and solution stack as a service…entirely available from the Internet

 

The Platform-as-a-Service Components

While there are a lot of different definitions of PaaS (depending on who’s marketing you’re reading), this is one of the consistent truths – PaaS is the combination of a computing platform and a core set of tools and infrastructure exposed as services entirely available from the Internet. The minimum (min-bar) appears to be that there must be at least a computing platform, deployment infrastructure, development tools, application monitoring and management, and a pay-as-you-go billing model to be considered truly a PaaS offering.

 

Computing Platform

PaaS offerings are generally hosted web application development platforms that rely on an underlying computing platform that doesn’t require anything on-premise or installed locally. Windows Azure, Amazon EC2, and Force.com are examples of computing platforms that could be part of a PaaS solution. While some feel that to be a true PaaS offering, all of the components must be provided by a single vendor, I think its fair to say that with white labeling you may never know. It is feasible to have a PaaS offering from a vendor leverage the computing platform from another vendor. I could provide a PaaS offering that uses Windows Azure or Amazon EC2 as its computing platform, even if as my customer you weren’t aware of it because I adequately abstracted it). This is not unlike how Apple’s iCloud cloud computing platform manages links to uploaded content in Windows Azure and Amazon Web Services.

 

Deployment Infrastructure

A true pass offering provides the infrastructure and tools to deploy an application to the computing platform, and should simplify the deployment process by handling as much of the “heavy lifting” as possible.

 

Development Tools

Depending on the provider, a PaaS offering could provide simple, browser-based development tools that enable you to do everything from modify a template-based solution to edit source code. Some PaaS offerings will include design and testing tools in addition to the basic development tools, but it appears there is no requirement to have these tools to be considered a PaaS solution.

 

Application Monitoring and Management

Once you’ve developed and deployed your web- or cloud-based application you need to be able to monitor it and manage it in the wild. A PaaS offering includes a monitoring solution (e.g. a dashboard) and tools to manage the application (add users, allocate resources, etc.). These should be self-service tools enabling the PaaS user to manage their own applications.

 

Pay-As-You-Go Billing

One of the advantages of PaaS is the significant reduction in capital expenditures (e.g. not having to buy servers, data centers), but also the ability to manage costs effectively. Using a PaaS offering enables you to only commit financial resources as they are needed (in other words, pay monthly and scale up when and if needed).

 

Software-as-a-Service (SaaS)

SaaS is the great vision of how software will be delivered in the future, and has some historical ancestors. In the 1990’s there was a class of software businesses called Application Service Providers (ASPs). These were businesses with an expertise in hosting, managing and providing software – typically from other vendors – for businesses that didn’t want to or couldn’t do it themselves. The key difference between ASPs and SaaS is that SaaS vendors are not typically middlemen like ASPs. SaaS vendors are typically providing the software they produce in the form of a service, rather than shipping a DVD and having the customer install, host and manage the software themselves. Office 365 is a fine example of SaaS. For years Microsoft has created and shipped versions of Office. With each new version you would upgrade from the previous version by uninstalling the old software from your computer, and installing the new software in its place (or just buying a new computer and starting from scratch). Office 365 provides an Internet-based alternative to the traditionally client-based software, including hosted versions of Exchange and SharePoint, as well as browser-based version of Word, Excel, PowerPoint and OneNote.

 

The Killer App PaaS

While a computing platform, deployment infrastructure, development tools, monitoring and management tools and pay-as-you-go billing are required to be a true PaaS offering, the capabilities for software design (UX, prototyping, etc.), testing (functional, regression, etc.) and team collaboration are not required and are likely to become differentiators for vendors who can provide a more complete solution.

PaaS

Many of the PaaS vendors, including Force.com (SalesForce) and emerging players like LongJump, are claiming to have complete lifecycle offerings, including project management tools, team collaboration capabilities and at least some design and testing capabilities in addition to the min-bar for PaaS. This is likely the battlefield for PaaS in the near future. Just as we saw the battle for Application Lifecycle Management (ALM) playing out between a variety of players, including Microsoft, IBM Rational, HP and niche players like Serena, we’re likely to see a battle for PaaS that has these “differentiator” capabilities at the center of the war.

Its not clear who the players are yet, although we can all make some pretty good guesses. The real question will be, who can provide the best set of capabilities to The Right User™. As this war looms on the horizon, determining what the war is over (who is The Right User™) will be equally, or perhaps more important, than how big the guns are.

D7