About a month ago I paid $19 and bought myself a years subscription to the Windows Phone Dev Center. I've been toying with the idea of becoming an "app developer" in the loosest possible sense of the word for quite a while now, and with the Dev account on sale and Windows Phone 8 finally looking like it's gaining (some) traction, I thought why not, I'd give it a try.
Why Windows Phone? Several reasons.
- Windows Phone 8 apps are written in c#, and since I'm already a c# geek there's no new language to learn.
- The Windows Phone App Store is pretty devoid of apps right now, so there's less competition as I get started.
- I liked the look of the platform and the Lumia 1020 had such a good camera I simply couldn't resist buying one - developing for the 1020 is as good a justification for that purchase as any.
My first app will be a tool to help people find and enter online competitions. People love to do this kind of thing apparently, and I previously wrote about a winforms app I built as a prototype of the idea. This means I already have some code to start me off in the right direction, so that can only be a plus.
By failing to prepare, you are preparing to fail.
My first instinct as a programmer is always to dive straight into Visual Studio, however, before I get too involved in coding my app I have to work out what it is I want to build exactly. The surest way to fail on a project is to not design it properly and I have no desire to mess this up. The first thing I do when I'm formulating a software design is to sketch it out on paper. This means sketching the system architecture, how I want it to look, and writing up ER diagrams for my objects.
Below are some rough v1 sketches I did for how my app will hopefully look. They conform to the Windows Phone style guidelines and kind of show the flow through the app. I want a user to start seeing all competitions, I want them to be able to swipe through various filtered categories of competitions and I want them to be able to press on a competition and end up in a browser within the app able to enter the competition.
That's the app I'm planning in a nutshell. A series of several lists of competitions, scraped lovingly from the web and sanitised such that a user can easily see what each competition is for.
I'll want to keep the bandwidth of the devices running the app to a minimum, so the web scraping and processing of lists will all be done "in the cloud" in a web service I build to run on something like Windows Azure or (Mono permitting) Digital Ocean. My working theory is that I'll have to run web scraping on a timer, in some kind of background thread, and have that thread push any competitions I find to a data store of some kind - probably a cloud hosted SQL Server Database. I envisage my final server side set up to look pretty similar to the following.
And my final system to look pretty much like this:
In part two I'll continue the design discussion and get into more detail as to how I intend to implement this.