Monthly Archives: October 2012

This week I’m attending //BUILD conference in Redmond, WA on Microsoft’s main campus alongside thousands of other .NET / Windows developers. The keynote ended about an hour ago and I wanted to publish my thoughts on some of the important takeaways from Ballmer’s talk.

Microsoft’s Points of Emphasis

1. “Microsoft can only win by training consumers to expect consistent behavior, availability, and synchronized data across all of their different devices”

WinRT isn’t just about tablets – it’s also about fundamentally changing the way desktop software is consumed and unifying mobile / desktop / tablet and probably console apps all under one consolidated platform.

The unification of these platforms is the future of Microsoft; training consumers to expect consistent behavior and access to data across all of their devices is the only way Microsoft will be able to dethrone Apple and Google in mobile / tablet and protect themselves in desktop / console in the long-run.

Ultimately, Microsoft is really the only company that can execute well on native software, services, and devices. They are playing to their strengths (ecosystem and platform) and are doing it well here.

2. “The fate of WinRT is in the hands of developers big and small.”

Microsoft desperately needs developers to make WinRT a success.

Microsoft, for the first time since Win32 emerged as the victor in the desktop wars of old, is in a position where it needs developers more than they need Microsoft.

The unified vision behind WinRT will not work without the buy-in of developers both big and small, from Facebook to the individual hobbyist developer.

Microsoft will do the hard work of putting devices in the hands of consumers that bring WinRT applications to the forefront (which I suspect is the real reason why the ARM-only Surface shipped so far ahead of the Intel one.) But it is totally reliant on developers to put the content in-store that consumers actually want to use.

3. “Microsoft and Nokia will work themselves to death to win the support of developers.”

Compounding key takeaway #2, Microsoft and Nokia both made commitments to put hardware (Nokia phones, Surfaces for us //BUILD attendees) into the hands of developers who build apps.

Having worked at Microsoft Developer Platform Evangelism throughout the entire WP7 push, I can tell you that this is no joke – Microsoft will find a way to arm its developers with hardware now that it’s all generally available.

But they’re not stopping there – Microsoft is going to continue to push training events, hackathons, webcasts, and everything it can possibly do to train developers and make it easier than ever to learn a new platform and actually ship an app on it.

I think this is tremendously positive and every developer who’s interested in the platform will have multiple opportunities to learn it on Microsoft’s dime.

4. “Don’t ship apps that don’t leverage the platform.”

Reading between the lines in some of the keynote speeches and the first couple of sessions I poked my nose in, you can interpret the following from Microsoft:

Developers who carbon copy their work byte-by-byte from previous platforms, including web apps, are doing themselves a disservice and will have their lunch eaten by developers who take advantage of charms, live tiles, and all of the other unique built-in features to Windows 8. Please take advantage of the platform if you’re going to build an app for it!

Here’s why: the success of Microsoft’s entire consumer software ecosystem rides on consumers adopting the Metro UI and getting used to the rest of Microsoft’s services ecosystem, which includes your apps in the Windows Store.

However, without a significant presence in mobile, Microsoft and Windows will always have the threat of a unified iOS / OS X ecosystem there to sweep the desktop market out from underneath it. Windows Phone 8 is not a side show – it’s part of the core front Microsoft is forming against Apple on consumer computing.

Parting Thoughts

This is a really exciting time to be a Windows developer. The opportunities for developers to build sustainable businesses around Windows 8 and Windows Phone 8 apps are huge and there for the taking.

On top of that, the ecosystem has never been more accessible – you can build native apps for Windows 8 and Windows Phone 8 with C# or C++, and I suspect we’ll eventually see WinJS apps make their way onto Windows Phone 8 too.

That’s why our team at MarkedUp is excited to be doing what we’re doing

We’re going to update the statistics daily and help developers track how quickly Windows 8 is picked up by the community at large, using our entire data set.

Sampling Methodology

Our methodology for sampling the data displayed in the charts is straightforward: we take a seven day rolling average of all active users and new installations detected from an app and calculate rate of change between them.

There are some other things we do to try to prevent outliers from spiking the graph (i.e. apps that acquire a large number of users rapidly, usually popular titles ported from other platforms) but generally it’s all just rate of changes against a moving average of new devices activated and daily active users.

You’ll notice a big surge on the 19th – that’s due to a trend that started on the 15th of October where the Windows Store approved nearly 20% of the current apps that are in market now (roughly 5000 apps in market,) which subsequently lead to a big surge in our numbers.

If the Windows Store goes through another sustained round of high-volume approvals that will similarly spike our numbers again.

We’re working on refining our methodology for the “Windows 8 by chipset architecture” graph at the bottom since we expect it to change radically with the availability of new ARM devices.

Aaron Stannard, CEO of MarkedUp, says that this is a step ahead of what other apps analytics tools do, and that it’s the natural progression of analysis tools for applications and user activities that are escaping the web browser and living on any device.

“The diff between a four star and a five star app is something that people can use offline. Look at a news reader that people are going to be able to use on an airplane. You can use MarkedUp to take a look at how many people try to start the app when they have no connectivity whatsoever,” says Stannard. This is vital intelligence for developers.

Although the overwhelmingly majority of apps in the Windows Store are currently free MarkedUp wants to do a first-rate job supporting premium apps and apps that leverage in-app purchases and make it trivial for developers to measure important commercial metrics like average purchase size, total daily revenue per source, and so forth.

So here are the changes we made to MarkedUp’s Commerce API over the weekend:

Automatically detect and report trial conversions

MarkedUp Analytics now supports the ability to automatically detect paid conversions from trial licenses to fully purchased apps, without the developer having write any code whatsoever. We accurately capture both the price and currency directly from the marketplace too!

If a user starts the app in a trial mode and then resumes the app with a full license, we automatically convert that to a trial if we didn’t already detect the user’s change in license status via a developer’s explicit TrialConversionCompleted call (more on that in a moment.)

Automatic detection of currency and price for in-app purchases and trials

The original signature for TrialConversionCompleted and InAppPurchaseCompleted required the developer to specify a price, currency, and all sorts of other data that we would use in our currency charts. Let me show you what the new method signatures look like:

Overview

In Windows 8, Windows Store (formally known as metro style) apps have the ability to define background tasks that can perform tasks that run even when the app isn’t in the background. Though to make sure the user’s battery doesn’t cry uncle prematurely these background tasks are resource constrained. In this post we’ll take a look at how Windows 8 does resource management for background tasks.

The Constraints

Windows 8 performs resource management for background tasks through the use of resource constraints. There are two main types of constraints a background task needs to worry about: CPU time and network usage. The amount of CPU time and network usage an app’s background task is allocated depends on if the app is on the lock screen or not.

A Windows Store app is considered a lock screen app if it occupies one of the seven available lock screen slots on the lock screen.

When your app is a lock screen app Windows will give your background tasks a higher quality of service over resources then a non-lock screen app. The CPU time constraint is enforced regardless of the current power state of the device but the network usage constraints only come into play when PC off of AC power.

Note: Windows will dynamically adjust the network usage constraint based on the power usage of the active network link. Typically, Wi-Fi connections use less power than the cellular connections and will be allowed to send more over the link over a given period of time than cellular connections.

The Elite

Among all the possible triggers available to an app to trigger their background tasks the following triggers are considered “critical” as far a Windows is concerned.

Push notification trigger

Control channel trigger

These triggers are meant to be used during real time scenarios like receiving a VOIP call. These background tasks are given guaranteed app resource quotas according to the resource quotas listed previously. Meaning Windows will not try and terminate these tasks early even if the system becomes resource constrained. These triggers require an app to be a lock screen app in order to be used.

The Hook

If your app doesn’t require the increased resources or trigger capabilities of a lock screen app you’re better off sticking with triggers that don’t require lock screen capabilities. It’ll simplify things but from a programming and certification standpoint and from a user standpoint in terms of battery life.

If you do require lock screen capabilities for your background tasks here’s what you need to know. To be on the lock screen you’ll need to provide an additional image asset, a 24 by 24 pixel png image, for the badge that gets displayed on the lock screen. As there are only 7 slots available on the lock screen for apps you’ll be competing with other apps for those slots so you’ll have to make a compelling case to the user to add your app. Which brings us to our next point, the app will needs to be added to the lock screen explicitly by the user.

That last point is key, there is no programmatic way to add an app the lock screen. Windows does toss the app a bone by giving a way for the app to programmatically ASK the user to add the app to the lock screen though the BackgroundExecutionManager.RequestAccessAsync() method but it comes with a big caveat. It’s a one shot deal. No matter the outcome: yes, no or dismissed it will only work once.

Hi there, average Windows 8 developer – take a seat right over there. Can I offer you some water or coffee perhaps? No, ok well let’s get down to business then.

The reason I asked you to step into my office today is because we need to have an honest conversation about the way you’ve been working with the Windows Store.

No, your apps are ok – plenty of live tiles, colorful squares, et al. We’re not here to talk about your apps. We’re here to talk about the fact that you’ve confused the Windows Store for a mobile marketplace and you have made a massive mistake in the process.

The iOS App Store is a Race to the Bottom

The first thing we should talk about is the current thought leader behind curated native application marketplaces – the iOS App Store. For all intents and purposes, this market sets the tone for all of the others.

However, as you may have noticed, there are some not-so-nice things about this App Store for the overwhelming majority of independent app developers:

There’s a tremendously negative pressure on prices since the novelty of the app store wore off years ago, self-inflicted by developers who wanted to make up for the loss in margin by achieving greater scale. It’s much harder to achieve that scale in an App Store with 500,000+ apps and tens of thousands of apps in each category.

In the process iOS developers birthed a consumer expectations monster, where users balk at paying $1.99 for an app but don’t think twice about paying $4.99 for a 12oz cup of gourmet coffee.

The short of it is: the iOS app store is not a model that should be emulated on a new platform like Windows 8 – developers completely screwed up the economics of iOS app store.

Now, shall we take a second look at how we price our apps and market them in the Windows Store?

The Windows Store Will Have Very Different Market Fundamentals from a Mobile Marketplace

First and foremost, we should call attention to the fundamental differences between how Windows 8 and iOS will be used in practice.

Windows 8 will be run primarily on the large form-factor, Intel devices initially

The number of users running Windows 8 on large form-factor devices like desktops and laptops will vastly outnumber the people using Windows 8 on ARM tablets and phones for the foreseeable future.

The reason for this is simple: Microsoft has a gargantuan 90% chunk of the traditional PC market; barely a toehold on mobile; and no established presence in tablet at all. Of the three markets, which one will move the most devices initially?

iOS, on the other hand, is used entirely on small form-factor devices like phones, mp3 players, and ARM tablets.

The larger the form factor, the higher the perceived utility of the software that runs on it, and the more people are willing to pay for access to said software. iPad prices are higher than iPhone app prices (I found an even better link but haven’t been able to relocate it), and desktop software prices blow iPad app prices completely out of the water.

The reason for this is simple: big form factor devices have more utility, and in the case of laptops / desktops people actually do work with them!

I use my iPad for watching Netflix and reading books on Kindle; I use my MacBook Air and ASUS G60X to get work done. Apps on small devices are closer to toys than tools.

Most consumers are willing to spend a lot more money on an application if it provides me with some utility that integrates into their value-producing workflows every day; in fact, let’s talk about that.

Windows Store (Metro) applications can be run side-by-side with Office, PhotoShop, and all of the tools people use to create value every day

You know what makes a Metro application inherently more valuable than any iOS app, in my eyes?

The fact that I can use them side-by-side with Word, Excel, PowerPoint, Visual Studio, Sublime Text, SmartDraw, or any of the other Win32 apps I use every day to get my job done.

Think I’d be willing to spend a lot more (compared to iOS) on a Python reference application in the Windows Store knowing that I could pull it up on a second monitor and copy-paste examples directly into the REPL or text editor I’m using? Or how about being able to syndicate out an image I was editing in PhotoShop on the same machine using MetroTwit? Hell yes.

Having your Windows Store apps sit alongside the traditional, business-critical desktop applications that people use to do their jobs every day inherently makes them more valuable.

Developers’ Windows Store apps sit on the same device that people depend on for work every day, and if those apps can help customers complete their work or their accounting or anything else that they traditionally use a PC for, then you can expect that your Windows Store apps will benefit from the same kind of price lift that traditional desktop applications have over mobile ones.

If developers like you don’t screw it up, that is.

Windows Store apps offer greater utility to end-users, by virtue of the WinRT runtime and the traditional Windows Ecosystem

The first app that I paid for in the Windows 8 store, and one of my absolute favorite apps so far, is Router .CoCPit – it’s a simple little app that monitors all the speed and performance of any UPnP router on my network. I use it at home and at work whenever something goes wrong with the network.

Now why is that cool? This is an app that was put to market before Windows 8 was ever sold to a consumer, at a time when documentation on WinRT’s capabilities was and still is really quite scarce. The developers didn’t have to write their own UPnP client or do anything crazy like our iOS friends.

WinRT and Windows 8 give you a giant chunk of the Windows ecosystem to play with out of the box; capabilities normally reserved for big desktop apps. You can do more with Windows Store apps without having to implement drivers and codecs yourself!

This means you can build bigger apps that do more things (utility, for which people pay a premium), and still do it cheaper than you can on other platforms. People will pay more for that!

How Not to Screw Up the Windows 8 Economy: Do More, Charge More

So now, Mr. Windows 8 Developer, we get to the call to action. Your goal is to not do what your careless friends in iOS-land did and create a hopeless ghetto of a marketplace.

You are to take advantage of the rich, unique platform capabilities offered to you by WinRT and do more interesting things with it than you ever could on iOS, Android, or Windows Phone. Take advantage of the fact that your Windows Store Apps will ride shotgun with PhotoShop, Office, QuickBooks, and more – create apps that are designed to produce value and work alongside those big, sustainably profitable desktop apps.

And once you’ve done both of those: actually charge your users to use your software. Take advantage of the fact that users can try your premium apps for free on Windows 8, or the fact that in-app purchases can expire! You can even use your own payment engine if you don’t want to give Microsoft a 30%-20% cut!

I know what you’re thinking: but this is the way things are – ship free apps and hope people click on ads, or charge $0.99 and hope millions of people install them.

Look, you’re a developer – not a rodent in a maze. You should be able to recognize the pattern and the habit-forming behavior from a distance: if you bring iOS’s terrible economics to Windows 8, then Win8 will have similarly terrible economics.

One of the most useful use-cases for MarkedUp is the ability for it to log and analyze all of the crashes users experience when consuming your apps in the Windows Store. As a developer, your number one priority is to ensure that your users are able to consume your app!

Rather than just give you a big crash dump file, MarkedUp gives you some context around why and how the crash occurred. We have a bunch of new reports and stats built around this feature specifically that we’ll be rolling out over the next few weeks

MarkedUp writes the crash dump to disk on your user’s machine when the app crashes, and the next time the user starts your application we transmit their crash dump data back to our servers for analysis and reporting.

We preserve the time that it happened locally on that user’s machine so you’ll always have completely verifiable data to accurately correlate when a crash did or did not happen.

Once you’ve added that code into your application, you’ll start seeing these session events show up on your dashboard once you or any other user runs your app and triggers the custom event.

You can see the custom events by going to Engagement –> Custom Events on your app’s MarkedUp dashboard:

Once there, you’ll see a list of all of your app’s custom events along with some high-level data about how they’ve trended over time.

You can change the date range and see how all of your custom events trended over any period of time.

If you want to view a higher-resolution chart of a particular event, just click the event’s name and you’ll be able to view the absolute number of event occurrences and the the per-session average over time.

Note to Existing MarkedUp Users: to take advantage of custom session events, you will need to upgrade your MarkedUp installation to the latest version.

Run the following command in the NuGet Package Manager Console and your installation will be upgraded automatically:

PM> Update-Package MarkedUp

Use Cases for Custom Events

So when would you need to use custom events?

The best way to think about analytics is in terms of questions and answers.

How would you get the data to answer the following questions?

How many games or levels do my users complete each time they start my game?

How many articles do users read each time they use my RSS reader?

How many of my users successfully recommend the app to a friend using our built-in “recommend this app” dialog? To how many friends?

Etc..

Any time you need to measure something specific to what your app does, use a custom event. If you have any other questions about use cases for custom events, feel free to ask us in the comments below or at support@markedup.com.

How do I make users aware that my app exists? That’s most likely one of the most prominent questions a developer’s ask themselves when they release an app, and for good reason. No one likes to see their hard work go to waste. A little known feature in Metro IE is its ability to advertise the availability of Windows Store app (also known as a Metro style app) for the current website in the Windows Store though Metro IE’s appbar.

Metro IE allows a website to specify the following actions for an app:

Install an app if it’s not already installed

Switch to an app if it’s already installed

A website can choose to have just one of the options active or both depending on their needs. The way Metro IE recognizes a website has an associated Windows Store app is through the use custom meta tags in the header area of a website’s page.

The minimum required meta tags to light this up are:

msApplication-ID

msApplication-PackageFamilyName

Both of these can be found in the app manifest of the project once the app is associated with store though Visual Studio and are used to link the website and Windows Store app together.

When an app is launched though Metro IE in this manner a custom argument can be specified through another meta tag with the name “msApplication-Arguments”. The app can then read this argument from the OnLaunched method in App.xaml.cs.

As actions speak louder than words, if you want to see this behavior in action you just visit Relay’s website in Metro IE and give it a try. For context, Relay is our sample notification app, feel free to give that a try too while you’re at it

The Bing homepage also has this integration setup if you want to see another live example.

The MarkedUp team is looking to bring aboard an engineering intern (still in college or a recent graduate) who can help us with some of our technical content and reference applications.

If the job description and qualifications below sound like a fit for you, drop us a line at team@markedup.com!

Job Description

MarkedUp is looking for a college student or recent graduate who wants experience working with a fast-moving engineering team at an early stage technology company and wants a chance to make a difference.

During your internship with MarkedUp you’ll have a chance to learn modern software development practices like continuous integration and build automation; learn how to manage source control and project management on a team of skilled professionals; and you’ll get to learn a lot about building developer communities and building development tools.

As an intern with MarkedUp you’ll be responsible for working on some of our reference Windows 8 applications, working with our analytics reporting interface, and writing some of the technical content for our blog and documentation.

Skills & Requirements

Experience with our stack (ASP.NET MVC4, SQL Server, RavenDB, C#) is not a requirement for this internship and you will have a chance to learn those technologies if you start working with us.

That said, here are the qualifications for this position:

Strong writing skills and the ability to communicate technical concepts concisely and clearly;

Enthusiasm for development and learning new technologies;

Self-directed and able to learn new technologies independently;

Demonstrable experience working with native app development or web apps; and

Tenacious – able and eager to work through difficult and non-obvious challenges.

About MarkedUp

MarkedUp provides desktop application developers with an easy-to-use analytics service that helps them measure and improve the quality of experience customers have with their apps.