Tech Blog

Jay's Technical blog

Tampa Code Camp WP7 Thoughts: Business Lessons

17 November 2010
Jay Kimble

[WARNING! This is an archived post and as such there may be things broken/missing here.. you have been warned.]

At the Tampa Code Camp last Saturday Kevin Wolf morphed his session into a panel discussion on Marketing and Business practices for Phone Development. This might seem like a task that one could put off some, but you need to think about it. There were some good things that came out of this.

How it came to be

I actually prompted the session. I wrote 2 quick little apps for the marketplace mainly to get my feet wet and to try a couple different models (the apps aren’t vastly different just a little different). After getting the first one in (an ad-supported freebie called ZoomIt), I got a bad review. The reviewer was complaining about my lack of features in 1.0. I had plans for my paid version to add a few features to it. So I asked the Florida Windows Phone Developers list what they thought. I had a couple guys respond. Most notably Chris Kluis told me that we should talk privately.. so he scolded me publicly. I took some mental notes and decided to make a quick “brain dump” of them.

Lesson 1: If You Begin to Think about Marketing Your App After it Goes Live Then You are in Dangerous Waters

Seriously, if you have not thought of what other competition looks like, how you will differentiate, and how you will do simple things like write up your app in the MarketPlace then don’t be surprised when you don’t make much money. I had no competition in the MarketPlace when I released (at least nothing that was a “magnifying glass”). [BUT there is an exception to this rule.. coming below]

Lesson 2: Check Competition on MarketPlaces Other than the Wp7MarketPlace

Here’s what I did wrong if my intention was to actually make money on ZoomIt (or the paid EnhancedVision). I forgot that the WindowsPhone 7 marketplace is NOT the first marketplace in the world. So, my bad review probably came from someone who had used a similar app on another SmartPhone (like say Android, since to my knowledge there’s not “an app for that” on iTunes, but I have now seen the one for Android).

Lesson 3: Look at the Design of Other Non-Competing Apps for UX/Features

One of our panelists was from the company that develops “Executive Caddie” which is the “World's best golf analysis software” (I know I am copying the marketing, but from what I understand I believe them). He had some really interesting thoughts. One of which was that you should download and look at the highest rated apps. Oftentimes they have less features, but because of the UI people use them anyway. An example of this is the Cocktail Flow app for WP7. It does not have the most extensive list of cocktails, but the presentation is beautiful, you just want to use that app. That is what you want to evoke in your apps!

Lesson 4: Start Small and Learn

The idea here is that you want to pick something small to do for your first app. Something that you think will be a cool little app, and get it in the marketplace, so you can gain some experience (This is what I did.. I was exonerated at this point). You don’t want to start with something like an ebook app or some kind of integrated service offering. Do something small that you can learn WP7 programming as well as to start to figure out the whole marketing of a WP7 App.

Lesson 5: Web Presence Beyond the MarketPlace

Chris was pretty adamant that you need to have a presence outside of the MarketPlace with links back to the marketplace. The idea is that you need to create your own marketing for your apps. Another great idea by the Android developer who we brought in (I forgot his name.. sorry, man) was to advertise for yourself in your other apps. The ideas is that you have a splash screen that shows the user additional apps you have written (trying to get them to click through and get those apps too).

Lesson 6: Ad Revenue will not make you Rich, so Look to do Something that Someone Would Pay for

Let’s face it. This one could be up for some debate. The marketplace has been up for 8 days. I have earned like 6 cents. I don’t think is a huge indicator of how much we will get paid via ads. But if you are expecting to quit your job based on Ad-revenue.. think again. It probably won’t happen.

Bill Reiss actually added a store on Amazon that he advertises within his “Get Bacon” app. So he has normal ads and an Amazon Ad as well. There will definitely be some other options in this arena so you need to watch it closely.

Lesson 7: This is Commercial Software, Not Business Software Like You Are Probably Used To (Higher Quality)

This is a big deal. You are building Commercial Software. It should not break. If every time you did a spell check and then a Save in Word Word crashed, you are going to label Word as buggy and you will think twice about upgrading and if there is an alternative you might move to the alternative. Stuff has to work in a released version. You need to test it well.

Also,a nice looking app will almost always beat out one with better features. A good feel for the app is also important. Business users are tolerant of some warts. Consumers aren’t.

Here’s an example. I can remember borrowing notes from a friend when I was in college because I had missed the class. I was OK with a few scratched out words because I needed the information to pass my class. The notes were useful in and of themselves because I missed the class. Now, I would NEVER accept a book that was written in the same manner. Why? Because I expect a certain level of quality for something I have paid for or where my actions are making the publisher money.

Lesson 8: The Long Tail

The idea with this one if you don’t know what the long tail is that you can make a lot of money by being a niche. You will quickly eliminate customers and can’t target keywords, etc. What you want to go after here are things you are interested in. For instance Kevin Wolf’s wife is passionate about their dogs. SO, Kevin created a solution called “My Dog Rocks.” It’s a WP7 app with a Facebook app tied to it. If you are a dog lover and are looking at the apps you either might run into it or might find it by a search.

Another big idea about this is that you can now target search. For instance when you are buying adwords “bicycle” will get you a lot of hits and cost you a lot of money without getting you much in the way of sales. Buying “Red Schwinn™ bicycle” will get you less hits and the people who land there will be more than likely to buy (since they typed in those exact words). This idea goes hand-in-hand with Lesson 5 (have more than just a marketplace presence)

Lesson 9: Facebook Looks Like a Powerful Enabler

One of the side things that came out for me is some of the things Kevin Wolf (a man who several months replied to a Facebook friends request of mine with a short “I don’t use Facebook, and don’t plan on it".”) is doing with Facebook. He has the user login to Facebook. As a result, he gets app insight data from Facebook (he has his own built-in tracking). He can communicate with his users. We all started talking about the possibility of Facebook credits as a monetary system of sorts (BTW, credits do have a value, but they aren’t real money.. unless you are a company then you can get paid with them and get money from Facebook for the credits). The promise of checkins and deals, and being able to market to your user and their friends via the wall, etc. It’s pretty astounding.

Lesson 10: 1 out of 20 apps Could End Up Making You a Living

This was an insight that Bill Reiss quoted. If you build a decent app. It really could end up being your career for a little bit. This isn’t necessarily a business lesson, but more of a motivator to do things well.


Intro to Silverlight On Phone

23 October 2010
Jay Kimble

[WARNING! This is an archived post and as such there may be things broken/missing here.. you have been warned.]

As promised here are my slides and code for my talk at the Tally Code Camp and the upcoming Tampa Code Camp. If you wanted to leave me some feedback since I forgot to give out the feedback forms, please head back to Tally Code Camp site and find my session, and there is a link back to the Speaker Rate site.

Intro To Silverlight On Phone - Slides and Code.zip


WP7 Tip: Setting the Panorama Page After Tombstoning

09 October 2010
Jay Kimble

[WARNING! This is an archived post and as such there may be things broken/missing here.. you have been warned.]

I’m currently working on my demos for the Tallahassee Code Camp in a couple weeks. I ran into an issue with the Panorama Control and Tombstoning. If you aren’t doing WP7 development (or you have forgotten) “Tombstoning” is the process that your app goes through to save off state before it is removed in memory due to a Task Launcher or the user has hit the windows button. You are given a chance to save off your transient data as well as to persist any data that should be persisted.

Anyway, my tombstoning demo is on an interaction on page 2 of the Panorama (Page 1 is a simple navigation facility to show a different screen altogether). This is what happens:

Tombstoning BeforeAfter Resume

The before is on the left and the after resume is on the right. As you can see we didn’t end up on the right page of the Panorama. So I did some digging into the Panorama. Obviously if it were straight forward I wouldn’t be posting this. It turns out that there is both a SelectedIndex and a SelectedItem property. Both of which are ReadOnly (so you can get the value, but you can’t set it). There is, however, a DefaultItem property which sets which page is the first one that is visible when the page loads. It’s not 100% perfect, but it will do. Here’s my code to do this

protectedoverridevoid OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
    State["PanoramaSelectedItem"] = mainPanorama.SelectedIndex;
}
protectedoverridevoid OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (State.ContainsKey("PanoramaSelectedItem"))
    {
        var selIndex = (int)State["PanoramaSelectedItem"];
        mainPanorama.DefaultItem = mainPanorama.Items[selIndex];
    }
}

Here’s the net result:

WorkingBeforeAfterFixed

As you can see (left is before windows key, and right is after resuming), the presentation is slightly different, but we do end up on the same page. It’s a livable solution I think  (at least for now until they realize that they forgot about this possibility and fix it in the next rev).

BTW, this post is in response to Jeff Wilcox’ Intro to the Panorama and Pivot Controls.


My Library Port Releasing Continues: AutoMapper and Castle.Core for WP7

30 September 2010
Jay Kimble

[WARNING! This is an archived post and as such there may be things broken/missing here.. you have been warned.]

 

Consider these ports are a starting point if you need these libraries. I am delivering them together because Castle.Core is a dependency of AutoMappers. I did not port tests because before I was done the internal (company) library I wanted to get running removed its dependency on Automapper. I’m really releasing this in case someone needs it.

Castle.Core does contain some of the pieces of the DynamicProxy, but not many, and porting it is not going to be possible until WP7 gets Reflection.Emit libraries (actually it’s not even possible to port any other implementation of Reflection.Emit, so don’t bother trying.. trust me I have.. it’s locked down).

These are both on my SkyDrive.

castleproject-Castle.Core-2.5.beta2-0-gaee0f6e.zip
jbogard-AutoMapper-8cdd67f-src with wp7.zip


PowerCollections and C5 Collections for Silverlight4

20 September 2010
Jay Kimble

[WARNING! This is an archived post and as such there may be things broken/missing here.. you have been warned.]

I have been doing a lot of “hobby” porting over the last couple months. By that I mean that I have done a lot of porting of projects (mostly to WP7, but in some cases I’m porting to Silverlight 4). I just recently decided that I really need to start releasing this stuff (on my blog at first but then later I will start submitting this stuff back to the original projects).

First up are two libraries of extended Collections: the Wintellect Power Collections for .NET, and the C5 Generic Collection Library for C#. Both contain a large number of enhanced collections. Check out the documentation on each.

Wintellect Power Collections

With the Power Collections I ported the test suite that goes with it to see how my port went. I am currently passing 628 of the 650 test. The 22 tests that aren’t passing all have to do with serialization This is mostly due to the fact that there isn’t a good replacement for Binary Serialization (BinaryFormatter) in Silverlight. I have tried numerous available Open Source serialization schemes but in the end I decided just to release this getting into folk’s hands (I’m pretty sure that it should work, but haven’t had a chance to fully prove that with my tests).

Here's the zipped solution and files:Wintellect Power Collections.zip

C5 Collections

Next is the excellent C5 Collections Library. I also ported the test suite for this. There are 1422 tests in the suite of which this port is passing 1404 (only 18 fail). Like the PowerCollections, the tests that are failing all have something to d with serialization.

Here's the zipped solution and files:C5 Collections.zip