I get asked all the time “how much time does it take to create
the average Windows Phone app?” Well, I’ve built a few
Windows Phone apps, but really couldn’t pin down how much
time it took me to do it, so a couple of weeks ago I decided to
see if I could consistently create new apps in a short period of time. I decided to embark on a 7 day / 7 app mini marathon. I started on the Tuesday after the Victoria Day long weekend and went from Tuesday to Monday inclusive to have a normal week.
I kept the rules simple – live my normal life, with work, family and other commitments in place – create each app from concept to Marketplace in one day. Here is a brief summary of what I came
up with and what I experienced.
Before I started on this little challenge, I made sure that I had the latest edition of the Phone SDK, the latest versions of the Silverlight Toolkit as well as the latest Phoney Tools and Telerik Rad Controls for Windows Phone.
Day One – Black Book – I decided to create a simple little contact list that you could keep separate from your standard contact list that is built into the phone’s OS complete with the ability to Call or Text a contact as well as having a rating system that allowed you to rate each contact.. It was a simple little MVVM app that used Isolated Storage to save the app’s data. I had really wanted to include a cool star rating control, but found that there was none available in any of the toolkits I have found so far. There was an example of it that I found, but I found that I could not get it properly implemented in time to release it, so the app was released without that control and the user has to enter a number between 1 and 5 for the rating,
Day Two – Hearsee – This was a pure geek exercise. I wanted to see what would happen if I took randomly recorded sounds and then basically interpreted the raw data of the file at the byte level as an image. It uses the XNA framework to access the Microphone and play the sounds. The biggest issue with creating this app was coming up with the proper math to convert the sounds to images. Due to the length of time it took me to do that, I was unable to code the part that would allow the user to save their images and/or the sounds they recorded. I still think that this was a pretty cool experiment.
Day Three – HealthCalc – After two days of less than perfect results, I wanted to try something a little more simple. I decided to create a recommended caloric intake calculator. I used the Windows Phone Databound Application template and loaded my base data from an XML that I generated from data from the Health Canada website. I then used a Linq query to pull the data once the user had entered the necessary data. This process was so quick and easy that I even had time to add a BMI calculator to the app that can calculate the BMI using either Metric or Imperial measurements.
Day Four – Recorder – I was kind of lost for something to do on day four… I had gone through the whole day without a single idea, then on the way home, I needed to remember a phone number while driving and realized that my new Windows Phone was the first smartphone I had ever owned without a recording app already on it. This was a job for an app-geek like me, so when I got home, I started making a simple recording app that allows the user to create any length of audio recording and have them listed by date. This was a fairly simple app to create which encompassed the Isolated Storage from Day One and the XNA Framework use of the Microphone from Day Two. I kept the interface very simple and straight from the Windows Phone Databound Application template.
Day Five – Destinations – The first weekend day and very exciting! I wanted to make something a little more complex because I would, theoretically, have more time on a day when I didn’t have to drive an hour each way and spend 9 hours at the office. As all of us can attest to, this is never really the case. It seemed that everything conspired to keep me and my laptop apart from each other. When I finally got to code, it was past 6:00 pm and I was left with pretty much the same amount of time I had on any of the previous four days. The app I ended up building was something I came up with while reading the classified section of the local paper and seeing the garage sales listed there. I love garage and estate sales, especially in the country and I thought it would be cool to have an app where I could store a number of locations and then pinpoint them all on the map so I could plan my routes a little more easily. Having the list on my phone meant that I could take the map with me and not get lost in my quest for great antiques! I used the Microsoft Bing Maps control and Bings great Geocoding service. I was amazed at how easy it was to get the maps up and functioning and that adding a layer of pushpins for each location was a breeze. One little hiccup I did find was that if you add the references to System.Runtime.Serialization and System.ServiceModel before adding a Service Reference, you will find that the system does not properly add the Service Reference to your project. I found that the only workaround was to add your Service Reference to your project right out of the template startup and then add the other features that may use it afterwards. Other than that, this application was surprisingly easy to create. I used the Telerik Rad Controls for Windows Phone to supply a RadModalWindow for my cool Add Destinations dialog box. This control set makes it really easy to add some pretty sweet touches to your Windows Phone app with little extra work.
Day Six – Bustin’ Ballz – One more weekend day and I was determined to get a game out of my challenge. Anyone that knows me, knows that my first XNA game WacAMole, was created in an hour and a half when I decided to learn the XNA for Windows Phone platform. I knew that games need a fair bit more graphics work than the standard Silverlight app and usually a fair bit of planning in order to provide a good gaming experience, so I had my work cut out for me. I knew that I would have to keep the premise simple if I were to be able to pull off the logic in the time I had allotted, so I came up with Bustin’ Ballz where the general idea of the game is to bang a ball against colored bumpers on the sides of the screen that match a chosen color in the center of the screen by tilting your phone. This made use of the Accelerometer for the main game play and the Touch interface for the New Game button as well as holding the all-time high score in Isolated Storage. Now anyone that has built both Silverlight and XNA apps can attest to the fact that the two follow very different models, but, that being said, the learning curve is not that steep at all. The hardest problem I had was making sure that when the ball connected to the bumper, it was only counting the part of the rectangle that was actually the circle and not allowing for some really strange hits. Adding the use of SoundEffect from the XNA framework for a crashing sound when the ball hit the bumper completed the video game effect. I love watching people play this game, I have not seen anyone play it without a big grin on their face.
Day Seven – Emoticon-ary – Back to normal work week and back to zero clue of what kind of app I was going to make. It wasn’t until towards the end of the day when my daughter sent me a text message with a pretty cool emoticon that I decided that I would put some of my ANSI art skills to use and make a dictionary of emoticons, hence Emoticon-ary. Again I used the standard Windows Phone Databound Application template and kept my base data in an XML that I generated from various websites and my own BBS chat past. It is a pretty basic app, but I added some cool style points to it by using the phone’s accent color brushes as the background colors for the title bar at the top and the application bar at the bottom. I even found out that I can use the MouseLeftButtonUp event of a TextBlock to act like a standard Click event on a button, so I can have the user tap on a title to get the cool RadModelWindow (from Telerik’s Rad Controls for Windows Phone) popup which allows the user to select a subsection of the emoticons to browse or search. All in all, this app was the easiest to make.
Conclusion – What I learned from All of This
Well, I had really extreme plans when I started all of this, I was going to post each app befor midnight each night, but that was the first thing to go. I found that no matter what I did, I couldn’t get the graphics, icons and screenshots all ready before midnight after writing and testing my app. I modified this rule slightly to accommodate this fact and decided that I had to post them before I went to bed.
I really enjoyed this exercise… I had built a few apps before, but the tight deadlines meant that I had to be efficient and effective with the research, planning and deployment of my apps.
It also prove to me that I could get apps done even faster than I previously thought. I have always said that the tools were fantastic, easy to use and the most complete I had ever seen for a mobile platform. Doing this just proved that to me without a doubt.
I am sure that there will be little tweaks to do to each one of them, (with my OCD there always is), but every single one made it onto the marketplace within a day or two of being released and have started generating some pretty healthy download numbers. Click some of the links in this posting to see them for yourself!
As you can see if you go back through my blog, I have posted actual code from some of these apps to showcase some of the technologies I used in my apps. I am not done yet, so check back often.
I am already examining the Mango toolkit and planning an exercise like this closer to the Mango release. Watch for it on my blog or follow me on twitter for updates to this and other crazy code adventures.
As a funny aside, I also half created 4 other apps during those seven days that are still not finished, I will post on my blog when they are done!!!