<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>PreEmptive Solutions Blog</title>
	
	<link>http://preemptive.com/blog</link>
	<description>Dotfuscator, DashO and Runtime Intelligence</description>
	<pubDate>Wed, 30 Nov 2011 22:35:54 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/PreemptiveSolutionsBlog" /><feedburner:info uri="preemptivesolutionsblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>The Microsoft sponsored service for WP7 ends – the PreEmptive sponsored service debuts</title>
		<link>http://feedproxy.google.com/~r/PreemptiveSolutionsBlog/~3/DlikZqUvdAE/332</link>
		<comments>http://preemptive.com/blog/archives/332#comments</comments>
		<pubDate>Tue, 29 Nov 2011 18:02:04 +0000</pubDate>
		<dc:creator>Sebastian Holst</dc:creator>
		
		<category><![CDATA[Dotfuscator]]></category>

		<category><![CDATA[Runtime Intelligence]]></category>

		<guid isPermaLink="false">http://preemptive.com/blog/archives/332</guid>
		<description><![CDATA[At 24:00 EST on December 9, 2011 the Microsoft sponsored protection and analytics service for Windows Phone 7 will be shut-off. 
A different service fully and solely subsidized by PreEmptive Solutions will take its place. This service is materially different – please read the following notice carefully for information on how to continue to work [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt; line-height:115%">At 24:00 EST on December 9, 2011 the Microsoft sponsored protection and analytics service for Windows Phone 7 will be shut-off. </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt; line-height:115%">A different service fully and solely subsidized by PreEmptive Solutions will take its place. This service is <em>materially different</em> – please read the following notice carefully for information on how to continue to work with PreEmptive Solutions technology for Windows Phone.</span></p>
<h2><span style="font-size:12.0pt;mso-bidi-font-size:13.0pt;line-height:115%">Background</span></h2>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt; line-height:115%">While Microsoft’s sponsorship expired on September 30, 2011, PreEmptive continued the service for an additional 60 days at our own expense while we explored a variety of options to continue our support for the Windows Phone development community.  Microsoft’s sponsored service has ended, but our commitment and support for this community continues unabated.</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt; line-height:115%">PreEmptive’s challenge was to find an affordable means to support for the burgeoning WP7 development community without compromising the quality and capabilities unique to our protection and application analytics technologies; we believe the following provides both a valuable set of services at little and no cost for small WP7 development efforts with a smooth “on-ramp” for larger development projects and for organizations with more demanding service levels, governance or scalability requirements. </span></p>
<p class="MsoNormal">
<p class="MsoNormal" style="margin-bottom:0in;margin-bottom:.0001pt"><strong><span style="font-size:12.0pt;mso-bidi-font-size:13.0pt;line-height:115%;font-family: &quot;Cambria&quot;,&quot;serif&quot;;mso-ascii-theme-font:major-latin;mso-fareast-font-family: &quot;Times New Roman&quot;;mso-fareast-theme-font:major-fareast;mso-hansi-theme-font: major-latin;mso-bidi-font-family:&quot;Times New Roman&quot;;mso-bidi-theme-font:major-bidi; color:#4F81BD;mso-themecolor:accent1">Summary</span> </strong></p>
<h4 style="margin-top:0in"><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">Obfuscation and Instrumentation continues at no cost through 12/31/2012.</span></h4>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt; line-height:115%">Dotfuscator for Windows Phone, the post-compile tool that obfuscates and injects application instrumentation will continue to be offered to Windows Phone 7 developers at no cost through December 31, 2012. </span></p>
<h4 style="margin-top:0in"><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">Mobile analytics endpoint (wp7.runtimeintelligence.com) will be shut-off on 12/9/2011</span></h4>
<p class="MsoNormal" style="margin-bottom:0in;margin-bottom:.0001pt"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%">The current analytics endpoint will be discontinued. However, developers have a number of options that they can consider; </span></p>
<p class="MsoListParagraphCxSpFirst" style="margin-left:.25in;mso-add-space:auto; text-indent:-.25in;mso-list:l0 level1 lfo1"><!--   [if !supportLists]--><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%;font-family: Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol">·<span style="font:7.0pt &quot;Times New Roman&quot;"> </span> </span> <!--   [endif]--><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">Subscribe to the PreEmptive Solutions commercial endpoint. This is a fee-based option that includes all of the features currently offered PLUS an advanced mobile portal, a RESTful API, and a higher service level (plus support beyond WP7). For more information, email sales@preemptive.com.</span></p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left:.25in;mso-add-space: auto;text-indent:-.25in;mso-list:l0 level1 lfo1"><!--   [if !supportLists]--><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%;font-family: Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol">·<span style="font:7.0pt &quot;Times New Roman&quot;"> </span> </span> <!--   [endif]--><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">License PreEmptive Analytics for TFS. This is also a fee-based option. This solution is an on-premises solution focused on exceptions rather than feature tracking. For more information, see </span> <a href="http://www.youtube.com/watch?v=cY4Bv1doZh4&amp;feature=player_embedded"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%">Using Analytics for Windows Phone and Azure Exception Tracking - User Community Virtual Series</span> </a> <span style="font-size:10.0pt;mso-bidi-font-size:11.0pt; line-height:115%"> and email sales@preemptive.com.</span></p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left:.25in;mso-add-space: auto;text-indent:-.25in;mso-list:l0 level1 lfo1"><!--   [if !supportLists]--><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%;font-family: Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol">·<span style="font:7.0pt &quot;Times New Roman&quot;"> </span> </span> <!--   [endif]--><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">Develop and host a homegrown endpoint. This is a no-fee option but development will be required. The CodePlex </span> <a href="http://riendpointkit.codeplex.com/"><span style="font-size:10.0pt; mso-bidi-font-size:11.0pt;line-height:115%">Runtime Intelligence Endpoint Starter Kit</span> </a> <span style="font-size:10.0pt;mso-bidi-font-size:11.0pt; line-height:115%"> repository starter kit project may be of some help.</span></p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left:.25in;mso-add-space: auto;text-indent:-.25in;mso-list:l0 level1 lfo1"><!--   [if !supportLists]--><span style="font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: Symbol">·<span style="font:7.0pt &quot;Times New Roman&quot;"> </span> </span> <!--   [endif]--><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">Plan to migrate to the PreEmptive Analytics for TFS community edition to be included with Dev-11. This is a no-fee option but is NOT yet generally available from Microsoft. For more information, see the video </span> <a href="http://www.youtube.com/watch?feature=player_embedded&amp;v=OnOPBOulpBA"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%">A Lap Around PreEmptive Analytics for TFS with Justin Marks</span> </a> <span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%">. </span></p>
<p class="MsoListParagraphCxSpLast" style="margin-left:.25in;mso-add-space:auto; text-indent:-.25in;mso-list:l0 level1 lfo1"><!--   [if !supportLists]--><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%;font-family: Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol">·<span style="font:7.0pt &quot;Times New Roman&quot;"> </span> </span> <!--   [endif]--><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">Publish their app as a CodePlex project and utilize the CodePlex analytics endpoint (this is different than the option above). This is a no-fee option. For more information, see </span> <a href="http://runtimeintelligence.codeplex.com/"><span style="font-size:10.0pt; mso-bidi-font-size:11.0pt;line-height:115%">this tutorial</span> </a> <span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%"> (note that this assumes the developer is limited to the Community Edition of Dotfuscator – but the WP7 edition has full functionality). </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt; line-height:115%">The following feature summary table highlights the three principle options available to the Windows Phone 7 development community with a comparison to the discontinued Microsoft sponsored service. (click thumbnail to enlarge)</span></p>
<p class="MsoNormal">
<div>
<p class="MsoNormal" style="margin-bottom:0in;margin-bottom:.0001pt">
<p class="MsoNormal" style="margin-bottom:0in;margin-bottom:.0001pt">
<div id="attachment_336" class="wp-caption aligncenter" style="width: 770px"><a href="http://preemptive.com/images/wordpressuploads/2011/11/wp7chart.png"><img class="size-full wp-image-336" title="wp7chart" src="http://preemptive.com/images/wordpressuploads/2011/11/wp7chart.png" alt="Click to enlarge" title="wp7chart" width="760" height="201" /> </a> <p class="wp-caption-text">Click to enlarge</p></div>
<p class="MsoNormal" style="margin-bottom:0in;margin-bottom:.0001pt"><strong><span style="font-size:12.0pt;mso-bidi-font-size: 13.0pt;line-height:115%;font-family:&quot;Cambria&quot;,&quot;serif&quot;;mso-ascii-theme-font: major-latin;mso-fareast-font-family:&quot;Times New Roman&quot;;mso-fareast-theme-font: major-fareast;mso-hansi-theme-font:major-latin;mso-bidi-font-family:&quot;Times New Roman&quot;; mso-bidi-theme-font:major-bidi;color:#4F81BD;mso-themecolor:accent1">FAQ</span> </strong></p>
<p class="MsoNormal">Q: Will developers have to republish my WP7 app on or before December 9, 2011?</p>
<p class="MsoListParagraph"><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">No</span></p>
<p class="MsoNormal">Q: Will users notice any difference in app behavior after December 9, 2011?</p>
<p class="MsoListParagraph"><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">No</span></p>
<p class="MsoNormal">Q: Will I have to re-register my installation of Dotfuscator for Windows Phone 7?</p>
<p class="MsoListParagraph"><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">No</span></p>
<p class="MsoNormal">Q: If I have only been using Dotfuscator for obfuscation, will I lose any functionality or will I have to do anything differently?</p>
<p class="MsoListParagraph"><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">No</span></p>
<p class="MsoNormal">Q: Will developers have access to earlier runtime data generated by Runtime Intelligence for Windows Phone after December 9, 2011?</p>
<p class="MsoListParagraph"><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">They will not. </span></p>
<p class="MsoNormal">Q: Where can developers ask additional questions regarding migration, upgrades or discontinuing use of PreEmptive Solutions technologies?</p>
<p class="MsoListParagraphCxSpFirst"><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">Post to the PreEmptive forum at </span> <a href="http://www.preemptive.com/forum/index.php?f=26&amp;sid=dfe90c2ba80de07692372dae962c58b2&amp;rb_v=viewforum"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%">http://www.preemptive.com/forum/index.php?f=26&amp;sid=dfe90c2ba80de07692372dae962c58b2&amp;rb_v=viewforum</span> </a> <span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%"> </span></p>
<p class="MsoListParagraphCxSpLast"><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">PLEASE NOTE – this is NOT a moderated forum.</span></p>
<p class="MsoNormal">Q: Why would a development organization upgrade to a professional SKU of PreEmptive Analytics?</p>
<p class="MsoListParagraphCxSpFirst" style="margin-left:.75in;mso-add-space:auto; text-indent:-.25in;mso-list:l0 level1 lfo1"><!--   [if !supportLists]--><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%;font-family: Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol">·<span style="font:7.0pt &quot;Times New Roman&quot;"> </span> </span> <!--   [endif]--><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">Multi-platform (WP7, Android, JavaScript, all .NET and Java, native API…)</span></p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left:.75in;mso-add-space: auto;text-indent:-.25in;mso-list:l0 level1 lfo1"><!--   [if !supportLists]--><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%;font-family: Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol">·<span style="font:7.0pt &quot;Times New Roman&quot;"> </span> </span> <!--   [endif]--><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">Private endpoint (for large-scale enterprises with demanding scalability, governance, or other unique requirements). </span></p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left:.75in;mso-add-space: auto;text-indent:-.25in;mso-list:l0 level1 lfo1"><!--   [if !supportLists]--><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%;font-family: Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol">·<span style="font:7.0pt &quot;Times New Roman&quot;"> </span> </span> <!--   [endif]--><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">Analytics for TFS option (out-of-the-box integration with Microsoft Team Foundation Server).</span></p>
<p class="MsoListParagraphCxSpLast" style="margin-left:.75in;mso-add-space:auto; text-indent:-.25in;mso-list:l0 level1 lfo1"><!--   [if !supportLists]--><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%;font-family: Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol">·<span style="font:7.0pt &quot;Times New Roman&quot;"> </span> </span> <!--   [endif]--><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">True application analytics such as custom data fields, development ownership of data, true SLA and support for developers, etc.</span></p>
<p class="MsoNormal" style="margin-bottom:0in;margin-bottom:.0001pt"><strong><span style="font-size:12.0pt;mso-bidi-font-size:13.0pt;line-height:115%;font-family: &quot;Cambria&quot;,&quot;serif&quot;;mso-ascii-theme-font:major-latin;mso-fareast-font-family: &quot;Times New Roman&quot;;mso-fareast-theme-font:major-fareast;mso-hansi-theme-font: major-latin;mso-bidi-font-family:&quot;Times New Roman&quot;;mso-bidi-theme-font:major-bidi; color:#4F81BD;mso-themecolor:accent1">Conclusion</span> </strong></p>
<p class="MsoListParagraphCxSpFirst"><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">Of course we would have preferred that Microsoft had opted to extend their sponsorship for Runtime Intelligence for Windows Phone, but that was not the decision that they ultimately made. However, over the past 12 months, we had a front row seat watching a flood of innovative apps launch. We know that a good percentage of the WP7 development community relied upon PreEmptive Solutions for both analytics and protection (in a recent analysis of the marketplace, it was shown that 17% of all apps used either protection, analytics or both). </span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%"> </span></p>
<p class="MsoListParagraphCxSpLast"><span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;line-height:115%">This experience combined with our confidence in the future of the Windows Phone platform has prompted us to extend free access to Dotfuscator for Windows Phone. We look forward to our continued support and participation in the growth and success of this exciting technology and marketplace.</span></p>
</div>
<img src="http://feeds.feedburner.com/~r/PreemptiveSolutionsBlog/~4/DlikZqUvdAE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://preemptive.com/blog/archives/332/feed</wfw:commentRss>
		<feedburner:origLink>http://preemptive.com/blog/archives/332</feedburner:origLink></item>
		<item>
		<title>60 days – déjà vu all over again?</title>
		<link>http://feedproxy.google.com/~r/PreemptiveSolutionsBlog/~3/LTFrttxG8cQ/327</link>
		<comments>http://preemptive.com/blog/archives/327#comments</comments>
		<pubDate>Mon, 10 Oct 2011 20:54:40 +0000</pubDate>
		<dc:creator>Sebastian Holst</dc:creator>
		
		<category><![CDATA[Runtime Intelligence]]></category>

		<guid isPermaLink="false">http://preemptive.com/blog/archives/327</guid>
		<description><![CDATA[Hi all – today I sent out a notice to registered Runtime Intelligence for Windows Phone users letting them know that a change would be coming to our service on (or perhaps after) December 9th. I have already received messages from some rather annoyed developers who feel like we are playing some kind of Machiavellian [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span>Hi all – today I sent out a notice to registered Runtime Intelligence for Windows Phone users letting them know that a change would be coming to our service on (or perhaps after) December 9<sup>th</sup>. I have already received messages from some rather annoyed developers who feel like we are playing some kind of Machiavellian pricing game; the basic flaw in this view is that it presumes we sit in <a href="http://en.wikipedia.org/wiki/The_Prince"><span>the Prince’s</span></a> chair – which we do not.</span></p>
<p class="MsoNormal"><span>First, let me start by stating categorically that we remain excited and committed to the Windows Phone platform.</span></p>
<p class="MsoNormal"><span>Our approach to analytics has always been squarely focused on development organizations rather than on marketing; <em>this is not a “spin,”</em> rather, this approach informs and influences our product’s architecture and business model.</span></p>
<p class="MsoNormal"><span>I’ll drill into this distinction in a moment, but first, I want to point out that it is this distinction coupled with our belief in WP7 as a platform and the value of our approach to application analytics in general that led us to invest in building out the WP7-specific service. While I cannot speak to Microsoft’s motivations (in any context, let alone this one), it is public knowledge that they funded this service so that it could be offered at no charge to the WP7 dev community (but now that’s no longer the case).</span></p>
<p class="MsoNormal"><em><span>Why was this even necessary? Why couldn’t PreEmptive just give away our analytics and protection service like Google does?</span></em><span></span></p>
<p class="MsoNormal"><span>“Marketing-centric” analytic services make their money off of your data – but first they have to cover their costs; the “back end” or analytics portal is where the majority of that “cost” sits. Today, Google or Flurry (or any other similar service) each rely upon web and other mobile platforms to generate the data volume that ultimately funds their backend service. At this early stage, WP7 app data can fund client API’s (perhaps) but is nowhere near the volume-levels required to pay for an entire service.</span></p>
<p class="MsoNormal"><span>But there’s more – focusing exclusively on resalable content (and by extension, divesting from any requirements that do not) have profound feature and architecture implications.</span></p>
<p class="MsoNormal"><span>Given a marketing-centric focus, you can readily understand why these solutions all share the following traits:</span></p>
<p class="MsoNormal"><span>·</span><span> </span><strong><span>Custom data fields and data types are limited in scope and volume</span></strong><span>(unique/heterogeneous data points cannot be easily rolled-up, sold or used to better target users)</span></p>
<p class="MsoNormal"><span>·</span><span> </span><strong><span>No built-in enforcement for opt-out policies</span></strong><span> – this is left entirely to the developer (if you do not provide user data to these services, you are of no value)</span></p>
<p class="MsoNormal"><span>·</span><span> </span><strong><span>No investment in analytics of software away from the presentation layer</span></strong><span>(this data has no relevance to advertising, profiling etc.)</span></p>
<p class="MsoNormal"><span>·</span><span> </span><strong><span>Software-specific data is only marginally supported</span></strong><span> – unhandled exceptions can be captured, caught and thrown exceptions are out of scope *same as above – does not contribute to monetization model.</span></p>
<p class="MsoNormal"><span>·</span><span> </span><strong><span>They own your data</span></strong><span> (privacy rules notwithstanding – the have full rights to monetize your data in any way they see fit). <em>This is the entire reason they are in business – if they don’t own the data, how can they make money?</em></span></p>
<p class="MsoNormal"><span>·</span><span> </span><strong><span>They can provide their analytics software for free </span></strong><span>– since they have built a monetization strategy based on your data and do not invest in any development that does not directly contribute to that strategy, they can afford to give you the picks and shovels for free in exchange for the gold you produce for them (<em>that’s big of them don’t you think?</em>)</span></p>
<p class="MsoNormal"><span>Conversely, focusing on application stakeholders as we do, we invest in features that do not contribute to a roll-up across companies and apps to monetize user preferences – in fact, some of these features can materially impede that objective – yet they are equally as important for developers who want to build better, faster and more effective software…</span></p>
<p class="MsoNormal"><span>For example:</span></p>
<p class="MsoNormal"><span>·</span><span> </span><strong><span>Supporting custom data</span></strong><span> (app-specific fields and states) and data types (other than strings)</span></p>
<p class="MsoNormal"><span>·</span><span> </span><strong><span>Built-in exception tracking</span></strong><span> (unhandled, caught and thrown) to not only send you stack traces but provide insight into user experience and runtime environments (hostile or otherwise)</span></p>
<p class="MsoNormal"><span>·</span><span> </span><strong><span>Built-in opt-out policy enforcement</span></strong><span> (local, regional, cultural, legal and regulatory rules are so complex – serious development organizations need to centrally manage and reliably enforce compliance – could you sell a gun without a safety?!)</span></p>
<p class="MsoNormal"><span>·</span><span> </span><strong><span>Analytics away from the presentation layer</span></strong><span> (want to know how your Azure or other distributed services are performing and behaving?)</span></p>
<p class="MsoNormal"><span>·</span><span> </span><span>AND LAST BUT NOT LEAST, <strong><span style="text-decoration: underline;">you own your data.</span></strong> (given the heterogeneity and specificity of each application’s data – it’s value is exponentially higher to development stakeholders and proportionately lower in aggregate)</span></p>
<p class="MsoNormal"><strong><span>So what’s the takeaway?</span></strong><span></span></p>
<p class="MsoNormal"><span>With Microsoft, we invested in this mobile platform because we believed (and now we know) that it has significant value.</span></p>
<p class="MsoNormal"><span>Given our focus on development rather than advertising, we have to innovate on both the technical and business ends.</span></p>
<p class="MsoNormal"><span>We had hoped that our previous relationship with MSFT Windows Phone division had lasted a bit longer, but it is what it is.</span></p>
<p class="MsoNormal"><span>We have a number of very interesting scenarios in mind that we think will prove to be both exciting technically and innovative from a business perspective – but we are not ready to discuss that yet (as soon as we can – we will).</span></p>
<p class="MsoNormal"><span>If you don’t care about these added value features and don’t mind the strings that come with web/mobile analytics services like Google – then you should certainly use them. They are not flawed – they are just fundamentally different.</span></p>
<p class="MsoNormal"><span>If you value the services we have been offering or have ideas on how we can improve them even further – PLEASE LET US KNOW…</span></p>
<p class="MsoNormal"><span>Registered users will be getting a survey in the next 24-48 hours – please let us know what you think and what’s working (and not) for you.</span></p>
<p class="MsoNormal"><span>As I&#8217;ve already said, we remain excited and committed to the Windows Phone platform.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>(now i have to break to prepare my wp7 training materials; i&#8217;ve got a crew from my son&#8217;s high school writing WP7 apps for independent study credit)</span></p>
<img src="http://feeds.feedburner.com/~r/PreemptiveSolutionsBlog/~4/LTFrttxG8cQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://preemptive.com/blog/archives/327/feed</wfw:commentRss>
		<feedburner:origLink>http://preemptive.com/blog/archives/327</feedburner:origLink></item>
		<item>
		<title>Runtime Intelligence and Dotfuscator for WP7 developers speak (Mikey likes it!)</title>
		<link>http://feedproxy.google.com/~r/PreemptiveSolutionsBlog/~3/O-yHWd9rAoI/325</link>
		<comments>http://preemptive.com/blog/archives/325#comments</comments>
		<pubDate>Mon, 26 Sep 2011 20:51:35 +0000</pubDate>
		<dc:creator>Sebastian Holst</dc:creator>
		
		<category><![CDATA[Dotfuscator]]></category>

		<category><![CDATA[Runtime Intelligence]]></category>

		<guid isPermaLink="false">http://preemptive.com/blog/archives/325</guid>
		<description><![CDATA[In my last post, I drew a correlation between apps that used Runtime Intelligence and their relative (positive) success as measured by user ratings and engagement. While it was fairly clear that developers who chose to use Runtime Intelligence built more successful apps than their counterparts, it really said nothing about a) Runtime Intelligence analytics’ [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://apps-are-people-too.blogspot.com/2011/09/wp7-apps-with-runtime-intelligence-have.html">my last post</a>, I drew a correlation between apps that used Runtime Intelligence and their relative (positive) success as measured by user ratings and engagement. While it was fairly clear that developers who chose to use Runtime Intelligence built more successful apps than their counterparts, it really said nothing about a) Runtime Intelligence analytics’ contribution to their success or b) developer satisfaction with Runtime Intelligence overall.</p>
<p>Well, there’s really only one way to answer these questions …and that’s to ASK THEM.</p>
<p>I sent out an electronic survey starting on Monday of last week (September 19) and have received over 200 developer responses.  Here is what they said…</p>
<p><span class="Apple-style-span"><b>Who is doing what?</b></span>
<ul>
<li>32% indicated that they are only using Dotfuscator to protect their application</li>
<li>24.5% said they were only using Runtime Intelligence</li>
<li>And 43.4% indicated that they were using both.</li>
</ul>
<p><a href="http://2.bp.blogspot.com/-mDZHmUsms24/ToDpV_QMQVI/AAAAAAAAAL4/ZzmpxrfD_58/s1600/wp7%2Buser%2Bwhy%2Buse%2Bpreemptive.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-mDZHmUsms24/ToDpV_QMQVI/AAAAAAAAAL4/ZzmpxrfD_58/s400/wp7%2Buser%2Bwhy%2Buse%2Bpreemptive.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5656777695943213394"></a></p>
<p>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div><span class="Apple-style-span"><b>Do these “smarter than the average bear” developers see the value?<br /></b></span><br />In a word, <b>YES.</b></p>
<p>Looking only at those developers <i>who indicated that they already had their applications in the marketplace </i>(representing over 100 development organizations):
<ul>
<li>60% indicated that analytics set the wp7 platform apart from all other platforms or added significant value to the platform. </li>
<li>68% indicated that protection set the wp7 platform apart from all other platforms or added significant value to the platform. </li>
</ul>
<p></div>
<p><a href="http://1.bp.blogspot.com/-tjXJaakr0t4/ToDqcwyrEJI/AAAAAAAAAMA/JlthMw8ZEUM/s1600/wp7%2Buser%2Beval%2Bof%2Bvalue.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://1.bp.blogspot.com/-tjXJaakr0t4/ToDqcwyrEJI/AAAAAAAAAMA/JlthMw8ZEUM/s400/wp7%2Buser%2Beval%2Bof%2Bvalue.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5656778911832019090"></a></p>
<p><span class="Apple-style-span"><b>Analytics’ perceived value increases by 450% with developer experience</b></span></p>
<p>When looking at those developers that indicated that analytics and/or protection “set the WP7 development platform apart from all others,” <span style="font-style:italic;">analytics’ value actually increased by 450% (from 2% to 9%)</span> as developers moved from no app, to less than four weeks to a ship date, to actually having an app in the marketplace (and getting analytics back). Interestingly, obfuscation (protection) peaked in value just prior to shipping.<br /><a href="http://4.bp.blogspot.com/-kRAVboBMNLo/ToDq-meDfEI/AAAAAAAAAMI/-xasGbgway8/s1600/wp7%2Buser%2Bsets%2Bapart.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://4.bp.blogspot.com/-kRAVboBMNLo/ToDq-meDfEI/AAAAAAAAAMI/-xasGbgway8/s400/wp7%2Buser%2Bsets%2Bapart.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5656779493176736834"></a><br /><b><span class="Apple-style-span">So what’s the takeaway? </span></b></p>
<p>In my last post, we established the user of Runtime Intelligence were more successful than other WP7 developers. In this post, we see that these developers credit their success, to some material degree, to either Runtime Intelligence or Dotfuscator protection (or both).
<div></div>
<div><b><span class="Apple-style-span">In their own words</span></b></div>
<div>(selected - <i>but unedited</i> - responses to the open-ended question &#8220;what are you most excited about?&#8221;)</div>
<div>
<p class="MsoNormal">I like being able to get crash reports without much additional work.<o:p></o:p></p>
<p class="MsoNormal">It gives the developer ability to know about usage patterns in an application. Obviously code obfuscation is a necessity, especially for paid apps.<o:p></o:p></p>
<p class="MsoNormal">It offers a unique way to see how users interact with the application, and with the latest release it also has error reporting. Awesome!<o:p></o:p></p>
<p class="MsoNormal">I&#8217;m an excitable person.<o:p></o:p></p>
<p class="MsoNormal">Fabulous data provided by RIS to analyze the performance, usage and app demographics.<o:p></o:p></p>
<p class="MsoNormal">So I can know what is happening in my app and protect my code.<o:p></o:p></p>
<p class="MsoNormal">Used correctly, the analytics really let me see how and by whom my application is being used.<span>  </span>I get more insight into this information than I could if I set up a usability lab or just did extensive user testing.<span>  </span>There is no better way to observe than to do so in production.<o:p></o:p></p>
<p class="MsoNormal">The concept of attaching runtime analytics after the compilation process is very useful for us (standard software development, single application in various customer-specific configurations), since we are able to attach this on a per-customer basis and don&#8217;t have to manage it in code. <o:p></o:p></p>
<p class="MsoNormal">UI for parameterization<o:p></o:p></p>
<p class="MsoNormal">It gives detailed statistics about the usage of all parts of the software and helps to recognize the hot features of the software are and which parts are less used. This adds great value into the effort of making software better.<o:p></o:p></p>
<p class="MsoNormal">Really gives me insight into what my customers are doing with my applications.<span>  </span>They help me to understand where I can enhance functionality and add value.<o:p></o:p></p>
<p class="MsoNormal">Quality of product<o:p></o:p></p>
<p class="MsoNormal">Analytics give me an idea on what I should work on next to improve my application<o:p></o:p></p>
<p class="MsoNormal">Runtime analytics is cool because there is no code to write.<o:p></o:p></p>
<p class="MsoNormal">I can collect the exact information i need.<o:p></o:p></p>
<p class="MsoNormal">It allows me to phase out or strengthen certain parts of my apps. I currently have seven apps and the instrumentation is crucial.<o:p></o:p></p>
<p class="MsoNormal">Because i can have a deep analysis of when and especially how my application is being used. If you add the fact that all these data are aggregated and presented in such a nice way by the portal, you end up with a great product</p>
<p class="MsoNormal">I produce libraries (DLL&#8217;s) that are handed to third parties, hence the need for obfuscation.<o:p></o:p></p>
<p class="MsoNormal">Kickass obfuscator.<o:p></o:p></p>
<p class="MsoNormal">It helps me keep track of any bugs. And it allows feature tracking. And it gives me the cool world map that shows where some of the users are.<o:p></o:p></p>
</div>
<img src="http://feeds.feedburner.com/~r/PreemptiveSolutionsBlog/~4/O-yHWd9rAoI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://preemptive.com/blog/archives/325/feed</wfw:commentRss>
		<feedburner:origLink>http://preemptive.com/blog/archives/325</feedburner:origLink></item>
		<item>
		<title>WP7 apps with Runtime Intelligence have higher ratings and engagement rates</title>
		<link>http://feedproxy.google.com/~r/PreemptiveSolutionsBlog/~3/lqulJccP6T4/323</link>
		<comments>http://preemptive.com/blog/archives/323#comments</comments>
		<pubDate>Mon, 26 Sep 2011 13:49:45 +0000</pubDate>
		<dc:creator>Sebastian Holst</dc:creator>
		
		<category><![CDATA[Runtime Intelligence]]></category>

		<guid isPermaLink="false">http://preemptive.com/blog/archives/323</guid>
		<description><![CDATA[In my last post, I lamented that only %2.5 of the apps in the marketplace were actively using Runtime Intelligence (RI). This begged an obvious question; were these developers leaders or laggards? Were RI-enabled apps more successful and effective and, by extension, worth emulating?
The short answer appears to be yes – to be clear, I [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal">In my last post, I lamented that only %2.5 of the apps in the marketplace were actively using Runtime Intelligence (RI). This begged an obvious question; were these developers leaders or laggards? Were RI-enabled apps more successful and effective and, by extension, worth emulating?<o:p></o:p></p>
<p class="MsoNormal"><i>The short answer appears to be <b>yes </b></i>– to be clear, I am NOT saying that merely turning Runtime Intelligence on increases an app’s success. What I think the following data does show is that the developers who chose to include Runtime Intelligence as a component of their development process are indeed more successful than those that did not.<o:p></o:p></p>
<p class="MsoNormal">I took a second look at the 26,469 apps that we downloaded from the marketplace and compared those apps that were instrumented with Runtime Intelligence with those that were not.</p>
<p class="MsoNormal">Specifically, apps with Runtime Intelligence (analytics) are:<o:p></o:p></p>
<p class="MsoNormal"><b>Ranked 25% higher</b>: RI-enabled apps averaged roughly 4 stars (8.02 out of 10).<span>  </span>Non-RI apps came in at 3 ½ stars (7.6 out of 10). <i>NB: apps with no ratings whatsoever were excluded from this calculation.</i><o:p></o:p></p>
<p class="MsoNormal"><b>Have a 50% higher rate of engagement</b>: 73% of the apps using RI had at least one rating while only 48% of non-RI apps had any rating whatsoever. <o:p></o:p></p>
<p class="MsoNormal">As I&#8217;ve already said, simply turning on RI will not get you a 1/2 star bump in your ratings - but clearly, the kinds of developers who are achieving higher user satisfaction are the kinds of developers who are choosing to use RI. </p>
<p class="MsoNormal"><b>Coming next:</b> Users of RI and Dotfuscator for WP7 make themselves heard!</p>
<img src="http://feeds.feedburner.com/~r/PreemptiveSolutionsBlog/~4/lqulJccP6T4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://preemptive.com/blog/archives/323/feed</wfw:commentRss>
		<feedburner:origLink>http://preemptive.com/blog/archives/323</feedburner:origLink></item>
		<item>
		<title>WP7 Marketplace share (or how we became a victim of our own success)</title>
		<link>http://feedproxy.google.com/~r/PreemptiveSolutionsBlog/~3/IRGxTf7ZmyY/321</link>
		<comments>http://preemptive.com/blog/archives/321#comments</comments>
		<pubDate>Thu, 22 Sep 2011 20:45:29 +0000</pubDate>
		<dc:creator>Sebastian Holst</dc:creator>
		
		<category><![CDATA[Runtime Intelligence]]></category>

		<guid isPermaLink="false">http://preemptive.com/blog/archives/321</guid>
		<description><![CDATA[This post tells the story of how good faith estimates of our WP7 marketplace penetration were under-reported by 500%. This is not a “gotcha blog” – there are only good actors with the best of intentions in this story; but that’s why I think it’s a story worth telling.
You see, we don’t just obfuscate – [...]]]></description>
			<content:encoded><![CDATA[<div>This post tells the story of how good faith estimates of our WP7 marketplace penetration were under-reported by 500%. This is not a “gotcha blog” – there are only good actors with the best of intentions in this story; but that’s why I think it’s a story worth telling.</p>
<p>You see, we don’t just obfuscate – we hide the fact that your app is obfuscated. We don’t just offer application instrumentation and monitoring, we inject that logic to simplify and streamline packaging and improve performance. …and therein lies the rub.</p>
<p><span><strong>Something was in the air<br /></strong></span><br />While at Build soaking up the heady atmosphere of Windows 8 and all that’s coming with it, a few MVP’s and also the <a href="http://wpdevpodcast.com/about/">Lowdermilk brothers </a>took a moment to ask me if I’d read this awesome blog post where a developer had downloaded and analyzed all of the XAPs in WP7 marketplace. Apparently the market insight was killer and covered everything from the most popular libraries to snagging cloned apps. No more guessing – the facts were all laid out. And they each mentioned to me how surprised and even a little worried they were by how few apps were being obfuscated. I didn’t think too much of it at the time as I am among the first to point out that not every app needs to be obfuscated – but I did make a mental note to be sure to check out the blog.</p>
<p>When I got back home, I finally had a chance to track this “all seeing blog” down – it was <a href="http://justinangel.net/WindowsPhone7MarketplaceStatistics#Home=JustinAngel">Justin Angel’s blog </a>and the post was <a href="http://justinangel.net/WindowsPhone7MarketplaceStatistics#BlogPost=WindowsPhone7MarketplaceStatistics">Windows Phone 7 Marketplace Statistics</a>. And it really is a fascinating post with both initiative and insight; and then I got to the obfuscation section.</p>
<p>According to Justin’s analysis, only 3% of the apps in the market were obfuscated! And as I scanned down, there were comments to the effect of “gee, since no one else is doing it, perhaps I shouldn’t bother either.”</p>
<p>Even more surprising to me was the fact that our analytics (Runtime Intelligence) was not even listed in a very long list of third party tools – when I knew for a fact that we have nearly a thousand apps sending data.</p>
<p><span><strong>This can’t be right! (and I was)<br /></strong></span><br />Given the nearly 6,000 downloads of Runtime Intelligence and Dotfuscator for WP7 and the activity that I had been seeing over the past year, these numbers just didn’t seem right. I wrote to Justin who was quick to share his detection logic (in fact he posted the source on his blog) and just as quick to invite any comments or refinements that I might have to offer.</p>
<p>To put a fine point on this, Justin was in no way defensive and was as interested in getting to the right answer as I was.</p>
<p><strong><span>Hung by our own petard </span></strong></div>
<div><strong><span><br /></span></strong></div>
<div> </div>
<div>Without going into a lot of detail, Justin’s approach was to bust open the XAP and examine the various files and manifests to separate Silverlight from XNA and to identify the presence of third party tools. This approach proved to be effective because frameworks, tools and components leave behind files and other telltale fingerprints as a matter of course. There is one limitation though; this approach cannot detect when an application is modified or extended through IL manipulation or injection. <i>And that’s exactly what we do.</i></div>
<div></div>
<div><strong><span>From Build to Bill’ed (new numbers and how)<br /></span></strong></div>
<div><strong><span><br /></span></strong></div>
<div>As I like to say, my ideas only have to be good, they don’t have to be original (<em>trademark and patent laws not withstanding</em>) and so I did what I often do when confronted with a conundrum – I asked Bill Leach, our CTO, for help. He quickly (dare I say magically?) authored our own “marketplace crawler” that populated our own XAP repository. Rather than look at XAP contents at a component level, he wrote some code that examined the binaries themselves.</div>
<div>The first pass looked for the custom attribute DotfuscatorAttribute inside the binaries. This is a good way (but not an absolute way) to determine if a file has been processed by Dotfuscator (for either obfuscation or injection of analytics). It’s not infallible because developers can remove that attribute if they chose (to further cloak the fact that they have used Dotfuscator). Here is what we found:</div>
<div></div>
<div><strong>We downloaded 26,159 XAP files and 14.5% to have been processed by Dotfuscator.<br /></strong></div>
<div></div>
<div>This is basically 5X as many apps as Justin’s analysis had found (and that does not include the developers who configured Dotfuscator to remove the attribute we were searching for – so the number is certainly a bit higher).</div>
<div></div>
<div>In fact, we were surprised that Justin had found any at all – where did his 3% come from? Upon inspection, we think it’s an unexpected side-effect of how XAP’s are assembled – there are some instances where the configuration file of Dotfuscator gets pulled into the XAP – this is unnecessary and should never happen. We will document this behavior and make sure that users know how to prevent this from happening. In short, his 3% showed the prevalence of a bug – not the use of Dotfuscator.</div>
<div></div>
<div>To determine if an application was instrumented (rather than obfuscated), we applied some heuristics that are less obvious but can be shared if someone is interested (we looked for the existence of some high-level classes).</div>
<div><strong><br /></strong></div>
<div><strong>2.6% of marketplace apps are instrumented. </strong></div>
<div></div>
<div>From my perspective, this is a low number – but to put it in perspective (or let’s be honest – I’m looking for the silver lining) we have a larger share than Google Analytics and Admob but a slightly lower number than Flurry.</div>
<div></div>
<div><strong><span>Attack of the clones<br /></span></strong></div>
<div></div>
<div>Just one more point to be made in this post. If one were to consider each family of cloned apps as essentially a single, re-skinned app – these numbers have the potential to change materially. We may take a look at that, but I think we have already gotten most of what we can from the static analysis of the marketplace.</div>
<div><em><br /></em></div>
<div><em>So – is that the whole story? (Of course not)<br /></em></div>
<div><strong><span><br /></span></strong></div>
<div><strong><span>Don’t give me (just) static</span></strong></div>
<p>As interesting as the static analysis of the WP7 marketplace is (and it is), static analysis only gives us a backwards facing snapshot of what’s already been deployed. We get no insight into: </p>
<ul>
<li>Best practices that we would want to replicate (which are different that common practices), </li>
<li>Developer motivations behind their development choices</li>
<li>Future trends especially when driven by new technology and market opportunities</li>
</ul>
<div>In the context of Dotfuscator and Runtime Intelligence, I would want to know </div>
<ul>
<li>If the developers who built the 14.5% of “Dotfuscator processed” apps leaders or laggards? </li>
<li>Do they have special requirements that set them apart? </li>
<li>In short, do they have anything to teach the rest of us?</li>
</ul>
<div><span><strong>Want to know more about the 14.5% apps and what they have to teach us?<br /></strong></span></div>
<div><strong><br /></strong></div>
<div><strong>Coming soon, WP7 Developer Survey Results.</strong> We’ve been running surveys since the WP7 launch last year (you can checkout <a href="http://apps-are-people-too.blogspot.com/2010/11/300-survey-results-from-runtime.htmlhttp:/apps-are-people-too.blogspot.com/2010/11/300-survey-results-from-runtime.html">survey 1 </a>and <a href="http://apps-are-people-too.blogspot.com/2011/02/survey-sez.html">survey 2</a>). As part of this ongoing effort, we have just closed out our third survey in the series and I will be posting results in the next few days – stay tuned!</div>
<img src="http://feeds.feedburner.com/~r/PreemptiveSolutionsBlog/~4/IRGxTf7ZmyY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://preemptive.com/blog/archives/321/feed</wfw:commentRss>
		<feedburner:origLink>http://preemptive.com/blog/archives/321</feedburner:origLink></item>
		<item>
		<title>SCHNEL! Or why patience is a virtue except when testing on Windows Phone</title>
		<link>http://feedproxy.google.com/~r/PreemptiveSolutionsBlog/~3/UcaOCblaKU4/319</link>
		<comments>http://preemptive.com/blog/archives/319#comments</comments>
		<pubDate>Sat, 20 Aug 2011 20:42:24 +0000</pubDate>
		<dc:creator>Sebastian Holst</dc:creator>
		
		<category><![CDATA[Runtime Intelligence]]></category>

		<guid isPermaLink="false">http://preemptive.com/blog/archives/319</guid>
		<description><![CDATA[

Mystery solved! As I had promised in my last blog entry, I added exception reporting to my two apps, A Pose for That and Yoga-pedia to determine exactly what was going on with the exceptions that the Microsoft Marketplace was reporting but I had never seen. I needed to know:

The cause of the exceptions (the [...]]]></description>
			<content:encoded><![CDATA[<div>
<div>
<p><strong>Mystery solved!</strong> As I had promised in my last blog entry, I added exception reporting to my two apps, A Pose for That and Yoga-pedia to determine exactly what was going on with the exceptions that the Microsoft Marketplace was reporting but I had never seen. I needed to know:</p>
<ol>
<li>The cause of the exceptions (the stack traces were too cryptic for me to figure out)</li>
<li>How to fix the problem(s)</li>
<li>Solve the mystery as to why I have never seen a crash even though there is little doubt that they are indeed happening out there in the wild. If I can’t be confident that my testing is complete, I can never be confident that my app will behave when in matters most – in production.</li>
</ol>
<p>Remember these three objectives because you will be tested later.</p>
<p>Now, I know that my entries are sometimes kind of long – so here are the conclusions…. And if you want to know how I back them up – then (hopefully) you will enjoy the rest of the post. </p>
<p>(PLUS, there’s a teaser at the very end).</p>
<p>Conclusions:</p>
<ol>
<li><strong>Always account for “loss of context” in WP7 apps</strong> – probably <a href="http://msdn.microsoft.com/en-us/library/0yd65esw.aspx">the try-catch </a>is the best approach but I will defer to “real developers” for the specific strategy. At least with Silverlight, impatient users can always force your app into an invalidOperationException.</li>
<li><strong>Culture matters in both user preferences and user expectations (and therefore user satisfaction).</strong> If at all possible, represent all relevant cultures in your test populations. How do you know what the relevant populations are? Analytics of course… </li>
<li><strong>Software quality, user experience and user profile are all intimately connected.</strong> Systems that only monitor user behavior (marketing) or only profile software stability (debugging) or only profile runtime configurations (marketplaces) are inherently weaker than an approach that accounts for the influence that each has on the others.</li>
<li><strong>Without Runtime Intelligence (or another comparable application analytics solution), no development team can be confident in either the quality of their app or their users’ experience.</strong></li>
</ol>
<p>And here’s the how and why I have come to these conclusions…</p>
<p>
<br /><strong>HOW – first I had to add my own exception reporting.</strong><br />
</p>
<p><strong>Exception Reporting:</strong> Adding exception reporting with Runtime Intelligence is very simple. All I had to do was add one exception reporting attribute as follows (from within Dotfuscator for Windows Phone)</p>
<p>
<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-s3zvZjivwDQ/TlAnT7vbpaI/AAAAAAAAAKw/HiR6HNVGJow/s1600/eb1.png"><img style="margin: 0px auto 10px; width: 400px; height: 220px; text-align: center; display: block; cursor: pointer;" id="BLOGGER_PHOTO_ID_5643053556502865314" alt="" src="http://1.bp.blogspot.com/-s3zvZjivwDQ/TlAnT7vbpaI/AAAAAAAAAKw/HiR6HNVGJow/s400/eb1.png" border="0"></a></p>
<p>Note that in the properties of this attribute I am asking that the method ExceptionExtendedData method be run. A Runtime Intelligence system probe attribute works fine during normal operations, but if I want custom data after an unhandled exception, this is a more reliable technique. Here is the method that I put in the App class:<br />
<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-USJf9fIe8sk/TlBtyYCGw7I/AAAAAAAAALo/9fALrVxznnQ/s1600/eb2.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 144px;" src="http://2.bp.blogspot.com/-USJf9fIe8sk/TlBtyYCGw7I/AAAAAAAAALo/9fALrVxznnQ/s400/eb2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5643131045307401138"></a><br />
<br />As a side note, if I wanted to track thrown exceptions or handled, I could place the exception attribute down at the method level to get much more targeted data. Anyhow, after this simple step, I deployed the re-instrumented app to the marketplace and (sadly) watched the exceptions roll in…</p>
<p>
<br /><strong>Runtime Intelligence Exception reporting</strong><br />
<br />Logging into my Runtime Intelligence portal account and selecting the date range I was interested in and then selecting “Exceptions”, presents me with the following:</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-nPGDXGpv1Js/TlAoq-8hXWI/AAAAAAAAALA/T_w0lfbv4oc/s1600/eb3.png"><img style="margin: 0px auto 10px; width: 400px; height: 295px; text-align: center; display: block; cursor: pointer;" id="BLOGGER_PHOTO_ID_5643055052011691362" alt="" src="http://3.bp.blogspot.com/-nPGDXGpv1Js/TlAoq-8hXWI/AAAAAAAAALA/T_w0lfbv4oc/s400/eb3.png" border="0"></a><br />
<br />I can see the total exceptions over time; the type of exceptions (I am only getting one – and that seems like it might be good news) and I have a list of all of the specific exceptions on the right. Clicking on any one of these shows me the detail as follows:<br />
<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-eueAHwZ8zYI/TlAo6emwk4I/AAAAAAAAALI/fYdfthZqxIQ/s1600/eb4.png"><img style="margin: 0px auto 10px; width: 400px; height: 277px; text-align: center; display: block; cursor: pointer;" id="BLOGGER_PHOTO_ID_5643055318208385922" alt="" src="http://4.bp.blogspot.com/-eueAHwZ8zYI/TlAo6emwk4I/AAAAAAAAALI/fYdfthZqxIQ/s400/eb4.png" border="0"></a></p>
<p>The graphic above shows screen captures from three different stack traces.<br />
</p>
<p><strong>Good news item 1</strong> is that (unlike the marketplace stack traces), I can see the diagnostic message. This may not mean much to the serious developers who enjoy offsets and cryptic traces – but I need these to go back to MSDN and other resources to see what is really going on and what I can do about them.<br />
</p>
<p>It turns out that there were seven different exceptions coming from my app – BUT ALL OF THEM HAD TO DO WITH TIMING – not some error in my general logic (in other words, I’m not dividing by zero or trying to display a non-existent image, etc.). For some reason my app is getting vertigo in my customers’ hands and losing track of what page was current resulting in any number of “InvalidOperationException.”<br />
</p>
<p><strong>Good new item 2</strong> is that there is a pretty standard way to manage this behavior; the try-catch statement.  I’m in no position to explain how this works, but visit the link above for a great explanation.<br />
</p>
<p>So with basic Runtime Intelligence exception reporting I have addressed my first two requirements; to diagnose my app’s problem and identify a fix. BUT – I have not addressed the deeper and perhaps more troubling issue of why I have never seen this problem myself – what’s this all about? If I can’t improve my quality control, I can never feel comfortable that my app will perform in the wild as it does for me.<br />
</p>
<p><strong>Good new item 3</strong> is that I have Runtime Intelligence to give me EVEN MORE context on my app and my users.  The fundamental flaw in almost every exception handling solution I have ever seen is that they (by necessity) can only look at the app when exceptions occur – they are too heavy-weight and/or too invasive to run all the time everywhere – no so with Runtime Intelligence.<br />
</p>
<p>If you ONLY have exception data, you are robbed of one of the most effective diagnostic heuristics available – the process of comparing populations in order to identify material differences between them and thus leading to a likely root cause. This is the fastest and cheapest way to figure out why I had never seen a crash.<br />
</p>
<p>What I did next was to compare the set of users who experienced exceptions with the general population of users and myself  – was there something specific about their phones? Their software? Their behavior?<br />
</p>
<p>It turns out that the answers to these three questions are no, no and YES!<br />
</p>
<p><strong>Process of elimination:</strong> First, I compared the system data of exception users and phone with the general population as defined in ExceptionExtendedData defined above…  I won’t bore you with all of the metrics I was able to eliminate, but I will show one; manufacturer.<br />
<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-wv2YaiXSKL8/TlApF3Q5-JI/AAAAAAAAALQ/fd8-uNm2UjU/s1600/eb5.png"><img style="margin: 0px auto 10px; width: 400px; height: 223px; text-align: center; display: block; cursor: pointer;" id="BLOGGER_PHOTO_ID_5643055513806174354" alt="" src="http://3.bp.blogspot.com/-wv2YaiXSKL8/TlApF3Q5-JI/AAAAAAAAALQ/fd8-uNm2UjU/s400/eb5.png" border="0"></a><br />
<br />The two pie charts show the relative percentages of manufacturers in the general population of my users with the population that had exceptions – one can eyeball these and pretty quickly see that there is virtually no difference. The bar chart puts a fine point on this by showing the relative difference in share; Dell had only 1% of the total share and was not statistically significant – looking at the other three manufacturers, we can see that there is no more than a 20% variance between the two populations. This kind of range was consistent across all of the metrics I had been collecting except one.<br />
</p>
<p><span style="font-size:130%;"><strong>Schnel!</strong><br />
<br /></span></p>
<p>In my last blog I had noted that there had appeared to be a disproportionate percentage of German speaking users in the exception population and it turns out that this was not a random blip – it showed up again in this latest exception data as follows:<br />
<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-77sYDrP3qwo/TlApZXdc-PI/AAAAAAAAALY/_xLpScWcaaI/s1600/eb6.png"><img style="margin: 0px auto 10px; width: 400px; height: 380px; text-align: center; display: block; cursor: pointer;" id="BLOGGER_PHOTO_ID_5643055848866248946" alt="" src="http://4.bp.blogspot.com/-77sYDrP3qwo/TlApZXdc-PI/AAAAAAAAALY/_xLpScWcaaI/s400/eb6.png" border="0"></a></p>
<p>The top bar chart shows the relative percentage of users by culture that experienced exceptions alongside the relative percentage of that culture in the general population. The second bar chart shows the relative difference in share by culture and it is truly surprising (at least to me).<br />
</p>
<p>Germans crashed my app 13X more often than norm, Austrians and the Dutch crashed the apps 4X what their relative share would suggest with the Malaysians right behind.<br />
</p>
<p>Given the relative distance between these populations and the different carriers and jurisdictions that these populations live under, it seems pretty clear that what these users have in common is their behavior. These users are simply more impatient than the rest of my users. They hit the “show pose” or “take me to the marketplace” or whatever more quickly and more often and so they are that much more likely to cause my app to lose its place.<br />
</p>
<p>Not only am I more patient (being an American and at one with the universe ;), but because I know my app and the areas where it may take a beat (or two) to respond – I naturally did not repeat my commands impatiently at those critical times – and therefore, I did not crash my app! Mysteries solved!<br />
</p>
<p><strong>Conclusions: (AGAIN)</strong></p>
<ol>
<li><strong>Always account for “loss of context” in WP7 apps</strong> – probably the try-catch is the best approach but I will defer to “real developers” for the specific strategy. At least with Silverlight, impatient users can always force your app into an invalidOperationException.</li>
<li><strong>Culture matters in both user preferences and user expectations (and therefore user satisfaction).</strong> If at all possible, represent all relevant cultures in your test populations. How do you know what the relevant populations are? Analytics of course… </li>
<li><strong>Software quality, user experience and user profile are all intimately connected.</strong> Systems that only monitor user behavior (marketing) or only profile software stability (debugging) or only profile runtime configurations (marketplaces) are inherently weaker than an approach that accounts for the influence that each has on the others.</li>
<li><strong>Without Runtime Intelligence (or another comparable application analytics solution), no development team can be confident in either the quality of their app or their users’ experience.</strong></li>
</ol>
<p>TEASER – WOULDN’T BE AWESOME IF WE COULD DO ALL OF THIS PROFILING AND EXCEPTION ANALYSIS WITH HTML5/JAVASCRIPT TOO?  STAY TUNED (IN)!</div>
</div>
<img src="http://feeds.feedburner.com/~r/PreemptiveSolutionsBlog/~4/UcaOCblaKU4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://preemptive.com/blog/archives/319/feed</wfw:commentRss>
		<feedburner:origLink>http://preemptive.com/blog/archives/319</feedburner:origLink></item>
		<item>
		<title>Runtime Intelligence Portal 2.0 now live for commercial users</title>
		<link>http://feedproxy.google.com/~r/PreemptiveSolutionsBlog/~3/vWkIIU6BBAM/312</link>
		<comments>http://preemptive.com/blog/archives/312#comments</comments>
		<pubDate>Fri, 22 Jul 2011 19:49:53 +0000</pubDate>
		<dc:creator>Brandon Siegel</dc:creator>
		
		<category><![CDATA[Runtime Intelligence]]></category>

		<category><![CDATA[Analytics]]></category>

		<category><![CDATA[application analytics]]></category>

		<category><![CDATA[end user monitoring]]></category>

		<guid isPermaLink="false">http://preemptive.com/blog/archives/312</guid>
		<description><![CDATA[The next version of PreEmptive&#8217;s Runtime Intelligence portal was rolled out for commercial Runtime Intelligence users Friday afternoon. The underlying infrastructure has been rebuilt from the ground up to provide better performance, reliability, and security. More details of what&#8217;s new in Runtime Intelligence Portal 2.0 are available in the original announcement blog entry.
As always, we [...]]]></description>
			<content:encoded><![CDATA[<p>The next version of PreEmptive&#8217;s Runtime Intelligence portal was rolled out for commercial <a href="http://www.runtimeintelligence.com">Runtime Intelligence</a> users Friday afternoon. The underlying infrastructure has been rebuilt from the ground up to provide better performance, reliability, and security. More details of what&#8217;s new in Runtime Intelligence Portal 2.0 are available in the <a href="http://www.preemptive.com/blog/archives/257">original announcement blog entry</a>.</p>
<p>As always, we deeply value your feedback. You can directly reach the Runtime Intelligence portal dev team by leaving a comment on this blog entry, posting a message on the <a href="http://www.preemptive.com/forum/index.php?f=21&#038;rb_v=viewforum">Commercial RI Portal forum</a>, or tweeting us <a href="http://twitter.com/preemptive">@PreEmptive</a>.</p>
<img src="http://feeds.feedburner.com/~r/PreemptiveSolutionsBlog/~4/vWkIIU6BBAM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://preemptive.com/blog/archives/312/feed</wfw:commentRss>
		<feedburner:origLink>http://preemptive.com/blog/archives/312</feedburner:origLink></item>
		<item>
		<title>The new WP7 App Hub reporting is great – and it’s even better with analytics!</title>
		<link>http://feedproxy.google.com/~r/PreemptiveSolutionsBlog/~3/DZmIz63XoSw/310</link>
		<comments>http://preemptive.com/blog/archives/310#comments</comments>
		<pubDate>Tue, 19 Jul 2011 14:43:01 +0000</pubDate>
		<dc:creator>Sebastian Holst</dc:creator>
		
		<category><![CDATA[Dotfuscator]]></category>

		<category><![CDATA[Runtime Intelligence]]></category>

		<guid isPermaLink="false">http://preemptive.com/blog/archives/310</guid>
		<description><![CDATA[Warning – this is a cliff hanger post. If you don’t like mysteries, come back in two weeks…
Like anyone else who has an app inside the WP7 App Marketplace, I noticed that the App Hub was down most of yesterday with the promise of a functional upgrade in the works – and today I was [...]]]></description>
			<content:encoded><![CDATA[<p>Warning – this is a cliff hanger post. If you don’t like mysteries, come back in two weeks…</p>
<p>Like anyone else who has an app inside the WP7 App Marketplace, I noticed that the App Hub was down most of yesterday with the promise of a functional upgrade in the works – and today I was very pleasantly surprised to see the result; a streamlined experience with expanded capabilities.</p>
<p>One of the first things that caught my attention was the exception reporting by app and by date; very useful indeed. Of course, MSFT is quick to point out that (and I quote) “<span style="font-style: italic;">Crash count alone isn’t a direct measure of app quality. Popular apps may have higher crash counts due to higher usage.</span>”</p>
<p>Well that seems self-evident, but without usage metrics how can I evaluate the severity of my exception report counts? …. (and now, unless this is the first post of mine that you have ever read, you must know what’s coming).</p>
<p><span style="font-weight: bold;">To the cloud! </span>(Sorry, I couldn’t resist). Using <a href="http://www.preemptive.com/windowsphone7">Runtime Intelligence for Windows Phone</a>, I’m  able to measure total sessions – by extracting these counts by day and mashing it up with exception counts from the marketplace – I can now supply the missing ingredient to make the exception count on the App Hub meaningful. (NOTE – I had to manually transcribe exception counts from the App Hub as there is no tabular option and the detailed download drops the daily count as it de-dupes the exceptions).</p>
<p>The App Hub is careful to point out that only apps running NODO (or Mango) can report exceptions, so I first had to remove the Runtime Intelligence session data coming from earlier versions of WP7 (an interesting statistic on its own).</p>
<p>Here is what I see… (and a warning here – the numbers aren’t pretty)</p>
<p>I took two apps of mine; <a href="http://windowsphone.com/s?appid=8d3fc765-308f-e011-986b-78e7d1fa76f8">Yoga-pedia</a> and <a href="http://windowsphone.com/s?appid=abc24faa-7979-e011-986b-78e7d1fa76f8">A Pose for That</a> and looked at their respective usage on NODO+ phones via Runtime Intelligence and exception reports from the App Hub and then calculated the ratio of sessions to exceptions.</p>
<p>The time period I used for this test was the two weeks from June 12 to June 25. During that time, this is what I observed:
<ul>
<li>66% of A Pose for That sessions were run on NODO.</li>
<li>58% of Yoga-pedia sessions were run on NODO.</li>
</ul>
<p>Here is the ratio of exceptions reported by MSFT and sessions from Runtime Intelligence… (click to enlarge)<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-JacEVl73nc8/TiXpapo4NcI/AAAAAAAAAKo/IDi9eu5SHw8/s1600/exception%2Bratios.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 90px;" src="http://2.bp.blogspot.com/-JacEVl73nc8/TiXpapo4NcI/AAAAAAAAAKo/IDi9eu5SHw8/s400/exception%2Bratios.png" alt="" id="BLOGGER_PHOTO_ID_5631163553159853506" border="0"></a><span style="font-size:100%;"><br /></span><span style="font-size:130%;"><span style="font-weight: bold;font-size:100%;">Ratio of session counts and exception counts by day</span><span style="font-size:100%;"></p>
<p></span><span style="font-size:100%;">Now there are three likely scenarios here.<br /></span></span>
<ol>
<li><span style="font-size:100%;">Over this two week period, both apps were crashing every 1 in 10 times they were run (<span style="font-weight: bold; font-style: italic;">HORRIBLE</span>). I don’t think this is the case because I have run these apps myself on multiple phones hundreds of times and they have NEVER crashed.</span></li>
<li><span style="font-size:100%;">The App Hub is over-reporting exceptions (or somehow incorrectly associating exceptions with these apps). This is a beta feature on the App Hub – it’s certainly possible.</span></li>
<li><span style="font-size:100%;">Runtime Intelligence is way under-reporting the total number of sessions in a given day. Certainly possible, but given the unit testing I have done, I don’t see this as being a major contributing factor to these ratios – but certainly a possibility.</span></li>
</ol>
<p><span style="font-size:100%;"><br />Now, I had already put a “feature tick” on the default unhandled exception handler to count how many times it was invoked during this same period. The counts I have are well below the App Hub numbers (which might suggest number 2 above is the culprit – BUT NOT SO FAST). It is more than likely that certain exceptions (perhaps a majority) would interrupt the normal feature tracking transmission mechanism so I would expect that count from Runtime Intelligence to be artificially LOW.</p>
<p>As is often the case when managing an application &#8220;in the wild&#8221;, an unanticipated question has arisen and I find that I don’t have enough data.  That’s why its ALWAYS so important to<br /></span>
<ul>
<li><span style="font-size:100%;">plan in advance what data is worth collecting to minimize the likelihood that you will end up in this situation and </span></li>
<li><span style="font-size:100%;">be sure that your analytic solution supports rapid and easy iterations and refinements to compensate for when your planning falls short. </span></li>
</ul>
<p><span style="font-size:100%;"><br />So how am I going to determine if<br /></span>
<ol>
<li><span style="font-size:100%;">my apps offer a LOUSY customer experience everywhere except for my personal phones or </span></li>
<li><span style="font-size:100%;">one or both exception reporting counts and session tracking counts are flawed?</span></li>
</ol>
<p><span style="font-size:100%;">Easy - I’m going to post an update of my apps to the marketplace this weekend with Runtime Intelligence Exception reporting turned on. <span style="font-style: italic;"> What</span>?</p>
<p>Runtime Intelligence for Windows Phone includes its own exception tracking capabilities – it does require that the developer activate it (that’s why I don’t have that data now), but it offers a lot more data and it can be invoked for unhandled, handled, and thrown exceptions. Further, it can be configured to collect additional information (custom for the app), AND it can be extended to offer the user a dialogue to provide additional feedback if they like.</p>
<p>I will post my results over the next few weeks – meanwhile, if anyone has any suggestions or ideas – please let me know… I honestly have no idea how this little mystery will play itself out.</p>
<p>Before I sign off – here is one more tantalizing clue (although it may also be a red herring). When I look at the limited unhandled exception data currently being returned by Runtime Intelligence (I can see tower location, device manufacturer, OS, etc.), I see that well over 50% of the phones that had an exception were localized to a language OTHER THAN en-US – and that is way out of proportion to the actual usage trends that I have been tracking (and posted in earlier entries). Further, the localizations that had the greatest “disproportionate” number of unhandled exceptions were de-DE and de-AT. Coincidence? Conspiracy?  We don’t need to guess – we will soon have the facts!</p>
<p>PS here are two links that may be of interest:<br /></span>
<ul>
<li><span style="font-size:100%;"><a href="http://www.preemptive.com/images/stories/white_papers/Exception_reporting_survey_oct2010.pdf">A developer survey</a> (PDF) we did last year on exception reporting and developer best practices… </span></li>
<li><span style="font-size:100%;"><a href="http://visualstudiomagazine.com/Articles/2011/07/01/pfven_App-Analytics.aspx?Page=1">An article in this month&#8217;s (July) Visual Studio Magazine</a> on application analytics in the development process.</span></li>
</ul>
<p><span style="font-size:130%;"><span style="font-size:100%;"><br />Enjoy!<br /></span><br /></span></p>
<img src="http://feeds.feedburner.com/~r/PreemptiveSolutionsBlog/~4/DZmIz63XoSw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://preemptive.com/blog/archives/310/feed</wfw:commentRss>
		<feedburner:origLink>http://preemptive.com/blog/archives/310</feedburner:origLink></item>
		<item>
		<title>A Webinar on Monetizing Mobile Apps with Analytics</title>
		<link>http://feedproxy.google.com/~r/PreemptiveSolutionsBlog/~3/8V9o94tDnZo/308</link>
		<comments>http://preemptive.com/blog/archives/308#comments</comments>
		<pubDate>Sat, 25 Jun 2011 14:15:49 +0000</pubDate>
		<dc:creator>Sebastian Holst</dc:creator>
		
		<category><![CDATA[Dotfuscator]]></category>

		<category><![CDATA[Runtime Intelligence]]></category>

		<guid isPermaLink="false">http://preemptive.com/blog/archives/308</guid>
		<description><![CDATA[For those who want a little more detail on the specific coding steps as well as an update on the latest application of analytics to mobile app development, we&#8217;ve scheduled a webinar. Here&#8217;s the info&#8230;.. (the first time slot of 100 filled up in a few hours - so these are additional dates. We&#8217;ll keep [...]]]></description>
			<content:encoded><![CDATA[<div>For those who want a little more detail on the specific coding steps as well as an update on the latest application of analytics to mobile app development, we&#8217;ve scheduled a webinar. Here&#8217;s the info&#8230;.. (the first time slot of 100 filled up in a few hours - so these are additional dates. We&#8217;ll keep scheduling these as long as interest is there)  Cheers.</p>
<p><strong>Title</strong>: Monetize Mobile Apps with Analytics<br /><strong>Registration</strong>:  Thurs, Aug 4th at 11:30 EDT <a href="https://www3.gotomeeting.com/register/676857398">https://www3.gotomeeting.com/register/676857398</a><br />
<strong>Registration</strong>:  Wed, Aug 17th at 12:30 EDT <a href="https://www3.gotomeeting.com/register/433412582">https://www3.gotomeeting.com/register/433412582</a></p>
<p><strong>Description</strong>: In this 60 minute webinar, we will take a live WP7 app and use real-world analytics to illustrate: </div>
<ol>
<li>The impact of try/buy scenarios on paid apps </li>
<li>The relationship between free and paid versions of an app </li>
<li>Strategies for ad-driven app design that consider page location, first time, occasional, and power user patterns, cultural trends, and other demographics including carrier and model profiling.</li>
</ol>
<p><strong>Preparation</strong>: NONE required. However, attendees are likely to get more from the presentation if they have already:<br />• Installed and are familiar with the <a href="http://create.msdn.com/en-us/home/getting_started">Microsoft Windows Phone 7 development tools </a><br />• Installed and have some familiarity with <a href="http://www.preemptive.com/windowsphone7">PreEmptive Solutions Runtime Intelligence<br /></a>• Installed and navigated around the free SKU of the sample application that will be referenced in the presentation. The free app is <a href="http://social.zune.net/External/LaunchZuneProtocol.aspx?pathuri=navigate%3FphoneAppID%3D8d3fc765-308f-e011-986b-78e7d1fa76f8">Yoga-pedia. </a></p>
<img src="http://feeds.feedburner.com/~r/PreemptiveSolutionsBlog/~4/8V9o94tDnZo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://preemptive.com/blog/archives/308/feed</wfw:commentRss>
		<feedburner:origLink>http://preemptive.com/blog/archives/308</feedburner:origLink></item>
		<item>
		<title>Improving Ad performance: Correlating ad activity with feature usage and user behavior</title>
		<link>http://feedproxy.google.com/~r/PreemptiveSolutionsBlog/~3/wEbd0TNvAqM/306</link>
		<comments>http://preemptive.com/blog/archives/306#comments</comments>
		<pubDate>Fri, 24 Jun 2011 13:57:57 +0000</pubDate>
		<dc:creator>Sebastian Holst</dc:creator>
		
		<category><![CDATA[DashO]]></category>

		<category><![CDATA[Dotfuscator]]></category>

		<category><![CDATA[Runtime Intelligence]]></category>

		<guid isPermaLink="false">http://preemptive.com/blog/archives/306</guid>
		<description><![CDATA[



In this third installment on application analytics patterns and practices I’m going to focus on how Runtime Intelligence can be used to shed light on Ad activity within the context of one or more applications. While the use cases covered here are nowhere near exhaustive, I’m going to show how to answer the following questions [...]]]></description>
			<content:encoded><![CDATA[<div>
<div>
<div>
<div>
<p>In this third installment on application analytics patterns and practices I’m going to focus on how <a href="http://www.runtimeintelligence.com/">Runtime Intelligence </a>can be used to shed light on Ad activity within the context of one or more applications. While the use cases covered here are nowhere near exhaustive, I’m going to show how to answer the following questions (and hopefully give some indication as to why you may care about the answers):</p>
<ul>
<li>What are ad impression volumes across multiple apps?</li>
<li>What are the click-through rates (the ratio of users clicking on ads to the volume of impressions) across various pivots?</li>
<li>What influence does culture (country of origin) have on click-through rates, e.g. are Germans more or less likely to click on ads versus Italians?</li>
<li>What carriers/ISP providers are giving me the most business, e.g. where are my users most likely to be found?</li>
<li>Where are users spending most of their time inside an app? Does that usage pattern correlate with a user’s likelihood of clicking on an ad?</li>
<li>Do returning users interact with ads differently than first time users or power users? </li>
</ul>
<div>Many of these metrics are valuable in scenarios other than ad effectiveness of course (knowing where users spend their time and understanding how power users behave are two obvious examples), but for this installment, I am going to focus exclusively on how Ad interaction can be viewed across these metrics.</p>
<p><font size="4"><strong>Implementation<br /></strong></font>I&#8217;m using the same trusty one line method WhatPoseWhen that I described in the <a href="http://apps-are-people-too.blogspot.com/2011/06/implementing-customer-feedback-forms.html">first installment </a>– this time, I call the method on the New Ad event (to count impressions) and the Ad Engaged event (to count clicks on ads). I could just as easily collect data on any other ad-related event and grab any data that is available to the program at that point in its execution as well.  Here is the code for that method in its entirety:</div>
<p>
<div>private void WhatPoseWhen (string page, string selection)<br />{ return; }</div>
<p>
<div>The first parameter tells me from which page the method is being called and the second parameter tells me why I might care, e.g. was a new ad displayed, etc.)</div>
<p>
<div>I pass the page name and the ad event into WhatPoseWhen and Runtime Intelligence grabs these parameters and sends them up to the repository (no programming for this). I can then correlate the ad activity within the context of sessions, feature usage, and runtime stack data that I am getting as a part of runtime intelligence.</div>
<p>
<div>For these metrics, I export my CSV data into a regular excel spreadsheet and then generate the pivot tables shown below.</div>
<p>
<div><font size="4"><strong>App background</strong></font><br />I always like to use data from true production apps rather than fabricate data sets; I am using two apps that I wrote and launched on the marketplace that are both ad driven, <a href="http://social.zune.net/redirect?type=phoneApp&amp;id=8d3fc765-308f-e011-986b-78e7d1fa76f8">Yoga-pedia </a>and <a href="http://social.zune.net/redirect?type=phoneApp&amp;id=4d994bc2-1392-e011-9210-002264c2fb72">A Free WPC Yogi </a>– the former is a free version of a yoga app that (hopefully) helps to drive sales of a for an upgrade to <a href="http://social.zune.net/redirect?type=phoneApp&amp;id=abc24faa-7979-e011-986b-78e7d1fa76f8">A Pose for That</a>. A Free WPC Yogi plays a similar role for <a href="http://social.zune.net/redirect?type=phoneApp&amp;id=b1db4a4f-8090-e011-986b-78e7d1fa76f8">The WPC Yogi</a>, a tailored version of A Pose for That targeting WPC 2011 attendees.</div>
<p>
<div>The following post uses their Ad activity over the same one week period.</div>
<p>
<div><font size="4"><strong>Impression counts</strong></font><br />The following pie chart shows the “new ad” event count by application. As you can see, Yoga-pedia has roughly 4X the number of ad impressions and given the fact that these apps are very similar (but not identical) in their behavior, this also roughly correlates to the volume of usage as well.</div>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-tYhfwVuJ2k8/TgSwM4asnII/AAAAAAAAAH8/gJ8tp-cntKA/s1600/sblog3%2B1.png"><img style="margin: 0px auto 10px; width: 400px; height: 332px; text-align: center; display: block; cursor: pointer;" id="BLOGGER_PHOTO_ID_5621811970214501506" border="0" alt="" src="http://2.bp.blogspot.com/-tYhfwVuJ2k8/TgSwM4asnII/AAAAAAAAAH8/gJ8tp-cntKA/s400/sblog3%2B1.png"></a></p>
<p><font size="4"><strong>Click-through rates<br /></strong></font>However, when I divide the total number of “ad engaged” events by the total number of “new ads,” I see that A Free WPC Yogi has a 28% higher click-through rate (1.78% versus 1.37). In point of fact the demographics of the app users are quite different (randomized consumers versus MSFT partners who are attending WPC 2011).</div>
<p>
<div><strong>Advantage: This intelligence helps to segment users by differences in their behavior and to do a better job of targeting those differences across apps.</strong></div>
<p>
<div></div>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-VVeD80Ru5Yw/TgSw3R98wNI/AAAAAAAAAIE/I5YD8d2fq6E/s1600/sblog3%2B2.png"><img style="margin: 0px auto 10px; width: 400px; height: 241px; text-align: center; display: block; cursor: pointer;" id="BLOGGER_PHOTO_ID_5621812698627752146" border="0" alt="" src="http://4.bp.blogspot.com/-VVeD80Ru5Yw/TgSw3R98wNI/AAAAAAAAAIE/I5YD8d2fq6E/s400/sblog3%2B2.png"></a></p>
<p><strong><font size="4">Impressions by country (or culture)</font></strong><br />Runtime Intelligence can grab the IP address of the sending tower – this is not personally identifiable and cannot be used to locate an individual with any precision – but it is more than adequate to identify country, state, and city. In the following graph, I simply count new ad events by country and show the top 10 countries by impression volume.</div>
<p>
<div><strong>Advantage: If your app has a cultural bias that would benefit from localization, understanding where your users are can help prioritize those localization efforts.<br /></strong></div>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-bvcv6ILB8J4/TgSxhfdFcPI/AAAAAAAAAIM/HpqIJ9FcsO8/s1600/sblog3%2B3.png"><img style="margin: 0px auto 10px; width: 400px; height: 240px; text-align: center; display: block; cursor: pointer;" id="BLOGGER_PHOTO_ID_5621813423802511602" border="0" alt="" src="http://1.bp.blogspot.com/-bvcv6ILB8J4/TgSxhfdFcPI/AAAAAAAAAIM/HpqIJ9FcsO8/s400/sblog3%2B3.png"></a></p>
<p><strong><font size="4">Click-through rates by country (or culture)</font></strong><br />The following bar chart calculates the click-through rates for the top 10 countries listed above. What is interesting here is that there appears to be a significant difference in click through rates by country (culture).</div>
<p>
<div><strong>Advantage: Understanding when/if users from specific cultures are significantly more likely to respond to (click on) ads can further help to prioritize localization or marketing investments.<br /></strong></div>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-1xwRM31WSn8/TgSyIuNL5AI/AAAAAAAAAIU/Vf0ZWnvaguI/s1600/sblog3%2B4.png"><img style="margin: 0px auto 10px; width: 400px; height: 150px; text-align: center; display: block; cursor: pointer;" id="BLOGGER_PHOTO_ID_5621814097777255426" border="0" alt="" src="http://4.bp.blogspot.com/-1xwRM31WSn8/TgSyIuNL5AI/AAAAAAAAAIU/Vf0ZWnvaguI/s400/sblog3%2B4.png"></a></p>
<p><strong><font size="4">Impressions by ISP provider (top 25)<br /></font></strong>To produce the next graph, I used an application to tell me who owned the IP addresses that my mobile clients are using (I used <a href="http://www.ip2location.com/?rid=952&amp;gclid=CO_UxNXgx6kCFc165QodI2DTgQ">IP2Location</a> – but there are many of them out there).</p>
<p>This is a nice way to see who my users favor in terms of their carrier. Here I only show the top 25.<br /><strong></strong></div>
<div><strong>Advantage: Understanding carrier popularity will help focus business development/marketing efforts and better manage potential risks associated with how your users may be negatively impacted by upgrade schedules (delays). Will your next app be dependent upon Mango?<br /></strong><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-NR_GBp9IDnc/TgTFaHAmKjI/AAAAAAAAAI8/694E6h8fbFA/s1600/sblog3%2B5.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 227px;" src="http://1.bp.blogspot.com/-NR_GBp9IDnc/TgTFaHAmKjI/AAAAAAAAAI8/694E6h8fbFA/s400/sblog3%2B5.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5621835287214041650"></a></p>
<p><font size="4"><strong>Sessions per app page</strong></font><br />In the raw CSV files that can be exported from the Runtime Intelligence portal, there is a column, ApplicationGroupId. The value in this column is unique for all signals (messages) that are sent from within a single app session. In other words, I can use this field to organize all user activity into the relative user sessions using this field. This is helpful for plotting specific user patterns.</div>
<p>
<div>The following graph simply counts the unique occurrences of ApplicationGroupId values by page name value (recall that this is the first parameter of the WhatPoseWhen method).  This avoids counting multiple views of a single page within a single session and tells me how popular specific pages are across my user base. For this posting and for illustration, I’m only showing data for five specific pages.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-W9LRh3uWd94/TgTFoH1FopI/AAAAAAAAAJE/13T1eYoURAs/s1600/sblog3%2B6.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 240px;" src="http://4.bp.blogspot.com/-W9LRh3uWd94/TgTFoH1FopI/AAAAAAAAAJE/13T1eYoURAs/s400/sblog3%2B6.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5621835527952376466"></a></p>
<p>FindAPoseDetail and BrowseSelectPose are central to the user experience (browsing for yoga poses and then drilling into a specific pose for detailed imagery and instruction). TellMeMore is the page where I describe what comes with the paid version of the app (nice to see that 10% of my users deliberately choose to investigate the upgrade possibility) and AppGuide and TopicList are essentially app documentation and I can see that these pages are not hit very often – and that’s not a bad thing – users should not need to use the documentation after their first use.</div>
<p>
<div>So – this graph is telling me that</div>
<p>
<div>a) My users are spending their time using the app rather than trying to use the app<br />b) I am at least getting my user’s attention regarding a possible upgrade – perhaps my content is not compelling enough if my conversion rate does not correlate.</div>
<p>
<div><strong>Advantage: broad user proofing can be used to validate developer assumptions about user experience and effectiveness of pages for their specific purpose.<br /></strong></div>
<div><strong><font size="4">Ads shown per page compared to volume of times viewed<br /></font></strong>Next I calculate the average number of ads shows per page by dividing the total count of New Ad messages by page (this combines the two parameters, page name and the even New Ad) by the total count of the times the page is shown. TOTAL ADS SHOWN PER PAGE / TOTAL TIMES PAGE VISITED</div>
<p>
<div>I use the same ad duration interval across all of my pages – so this is actually another means of calculating how much time my users are spending on each page (this can be done with Runtime Intelligence alone, but in this case, I don’t have to do that).</div>
<p>
<div>The graph below shows the average number of ads shown per page and maps them to where they rank in terms of how often the page is visited.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-kUM0OsJJ4YU/TgTFxU2DvzI/AAAAAAAAAJM/8h0pqQpgNGU/s1600/sblog3%2B7.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 311px;" src="http://3.bp.blogspot.com/-kUM0OsJJ4YU/TgTFxU2DvzI/AAAAAAAAAJM/8h0pqQpgNGU/s400/sblog3%2B7.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5621835686064930610"></a></p>
<p>Happily, the two core pages of my app also get the most ads (and are also where my users are stopping to spend time). I can also see that users spend more time on detailed pose descriptions than they do browsing – even though the browse more often than they drill down (which makes perfect sense).</div>
<p>
<div><em>Sadly, my upsell page is getting the least love – I definitely have to work on making this page more engaging.</em></div>
<p><em>
<div></div>
<p></em>
<div><strong>Advantage: Ad frequency by page provides insight into where users spend their time. Calculating click-through rates by page identifies where users stop to look around and may be most open to suggestion.</strong></div>
<p>
<div><strong>Returning users and sessions per user<br /></strong>Another column in the CSV extract is the ANID – this is either the result of hashing the true ANID from a user’s phone (it is not the actual ANID value), or, if they opt-out of that, it will contain a GUID generated by our software and written to isolated storage. In either case, this value acts as a unique user identifier.</div>
<p>
<div>The ANID can be used to identify new and returning users. Dividing session count (ApplicationGroupId) by ANID gives the average number of sessions per user. The following bar chart takes the 10 ANIDs with the highest session counts and compares the resulting sessions per user value to the rest of the user base (whose count is roughly 500 other users).<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-vmVtbk5afcM/TgTGFqdafYI/AAAAAAAAAJU/PbM0zsg42dc/s1600/sblog3%2B8.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 240px;" src="http://3.bp.blogspot.com/-vmVtbk5afcM/TgTGFqdafYI/AAAAAAAAAJU/PbM0zsg42dc/s400/sblog3%2B8.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5621836035464527234"></a></p>
<p>What I see is that there is a core group of users that are heavily using my apps (YAY!). Now that I know who they are, I can zero in on their specific behaviors, how they relate to my ads, what features they use most heavily, etc.</p></div>
<p>
<div><strong>Advantage: Segmenting users into new, returning, and power categories dramatically improves a developer’s ability to target, prioritize, and validate development, marketing, and support activities.</strong></div>
<div><strong>Conclusion</strong></p>
<p>I hope to have shown how using Runtime Intelligence, developers can materially improve their ability to build more effective applications and refine their advertising strategy while coordinating that strategy with complimentary upsell strategies as well.</p></div>
<p>
<div><strong>Advantage: Development!</strong></div>
<img src="http://feeds.feedburner.com/~r/PreemptiveSolutionsBlog/~4/wEbd0TNvAqM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://preemptive.com/blog/archives/306/feed</wfw:commentRss>
		<feedburner:origLink>http://preemptive.com/blog/archives/306</feedburner:origLink></item>
	</channel>
</rss>

