I have successfully published my first Windows Phone 7 application and wanted to quickly share my first impressions. The idea for the application came from my wife. She asked if I could create a daily reminding application to take her birth control pill, so that's what I set out to do. I create a quick and simple application that allows the user to specify a time to receive the daily reminder. Tapping the reminding takes you to an entry page where you can specify whether or not you took your pill for that day. Another page with a calendar control color codes the days to show which days you've taken the pill, which you haven't, and which have nothing entered. All colors are taken from the current selected Windows Phone 7 theme so they vary based on the user. You can see my app here: http://www.windowsphone.com/en-US/apps/01d893fb-59f1-40e9-af27-416080ec72ea. And here are my first impressions of the development and the marketplace:
Thoughts on Development
While I do have some Silverlight and WPF background, the majority of my development has been backend. Designing for a small screen was definitely a new concept for me and it was interesting. For the calendar, I started with Sergey Barskiy's calendar control from CodePlex as a base and created my own customized version to do only what I needed for my app. You can find his excellent calendar control here: http://wpcontrols.codeplex.com/
For data storage I opted to use Local Database which is essentially SQL CE for Windows Phone. I found the process to be pretty painless and used the recommended code-first approach to build out the data classes. This made the tracking process very simple. I used a Panorama control for my primary navigation and a couple of standalone pages for data input. The navigation system in WP7 is super simple to use as long as you plan ahead and think about how you want to navigate. As an example, rather than just navigating to my primary page when the Save button is clicked, I called the NavigationService.GoBack() method to avoid polluting the back stack after data entry. The only exception to this was when entering the status of whether or not the pill was taken.
This page could be navigated to by clicking a date on the Calendar, or by tapping the Reminder. In the second case, NavigationService.CanGoBack returns false because the page was the entry point of the application and was navigated to from a reminder. This was simple enough to address by checking whether the user could go back and if not, navigating directly to the main page with the panorama. Additionally, I passed a parameter to the page telling it that I was coming from the entry screen. On the main page, if this was a newly created page load and the parameter was set, it removes the entry screen from the back stack to avoid navigating back to it without clicking on the calendar.
Overall I found the development process to be very enjoyable. The IDE made debugging a snap and the built in emulator is excellent. Anyone with a .NET background could pretty quickly and easily pick up development for WP7.
Thoughts on Marketplace
The second interaction point is the marketplace. The first thing that I cannot stress enough is that you have to read the certification requirements. There is a lot of information but it will save you a ton of time. I was fortunate to have read the documentation and my first app passed on the first try. It took roughly 4 days from submission to certification and about another 16 hours to show up in the marketplace. The turnaround time is quite good and they do an alright job of listing the current progress so you can at least see what step your app is in.
There are only a couple of complaints I have, the first of which is verbiage. The wording of the steps could be confusing to some people. For instance, when viewing my app in the list for several days it said "Certified". What this means is that your app is in the certification phase, but at a quick glance it could appear that your app is already certified and is just sitting there. I think this wording could be reworked to say something like "Pending Certification" or "Certifying".
My second complaint is a little bigger, and I found that several others are having a similar issue. The process taks several days and any misstep in the process could cost you those days again. Some things are done without warning and the remedies for these can be quite daunting. For example, after 4 days my app passed the certification process and was just waiting to be published. As I was browsing the app details I accidently tapped a bit too hard on my laptop touchpad which resulted in the Edit Catalog Details link being clicked.
No problem I thought, I just want change anything.. and I navigated away from the page. Unfortunately there are things that are automatically changed without warning. My app went back into Submission Started. I could view my list of Published apps and the app still appeared there, however clicking it would take me to the new submission. There is a "Delete Submission" link but I was unsure of whether that would delete only the new submission or whether it would remove my entire app and make me start over, especially since the original had not hit the "Published" stage yet. And finally, the edit details page claimed that there was information that needed updated to continue, even though I had changed nothing.
In the end, I opted to click the Delete Submission link and just hope for the best. All worked out in my favor as only the "updated" submission was removed and my app remained (and now correctly was listed as certified).
Final Thoughts
Having no experience with mobile development it was a bit daunting at first, but overall I found the experience to be very good. Windows Phone does have a small marketshare but if you're a .NET developer and you're thinking about testing the waters of mobile development I would highly recommend it. It is easy to get into, a lot of fun, and the available development tools could save you tons of time and frustration.