I want to write down in a couple of tutorials how to write a Windows Phone 8 app with the new SDK. In these tutorials I don’t want to spend too much lines on explaining C# language characteristics or new features of the SDK. Instead, I would like to focus on the following points:
- How to start planning a Windows Phone 8 app?
- How to structure the project?
- How to get great maintainability for future extensions?
- How to get clean code?
So how to get started? In my opinion, learning from a complete real-world example is much better than studying small incoherent examples.
The idea behind the app is the following: The new SDK allows custom apps to change the lock screen image. Thus, it would be nice to get nice lock screen images with pictures of the user’s friends. The lock screen image would be changed by the app in the background from time to time, so that the user would get varying lock screens during the day.
The whole Windows Phone experience is a lot about social media, so the lock screen should be too! One of the first things that developers usually do is thinking about the name. I like that because a great name is part of the product’s vision. Well, let’s call the app Hello Friends. This name is short and simple. I chose the term “Hello” because of the idea that you get some new pictures of people on your lock screen almost everytime you turn your smartphone on (Supposed that you won’t watch your lock screen more that once per 30 minutes ;-))
You can find the final version of the app in the Windows Phone marketplace:
I will explain how to build (and design) this app:
Since we have the vision behind the project, we should be planning the next steps:
- Gathering requirements
- Setting up the project: Project Structure, Getting useful libraries
- Designing: Building logos, mock-ups
- Implementation & Testing
1. Gathering requirements
Gathering requirments means to identify requirements the user would like to have and also to figure what he doesn’t really need. What are the characteristic behind well-selling apps?
Let’s start collecting:
- The app looks interesting when exploring the store
- It comes with a well-defined scope of functionalities. Easy to understand what the app can do and what not.
- Using great apps makes a lot of fun, the app is reliable, gives feedback after user interactions etc. For getting started a list of non-functional requirements can be found here: http://en.wikipedia.org/wiki/Non-functional_requirement
In general, one can say the following: A great app fulfills the requirements of the user and comes with some extra stuff that wasn’t expected. The Kano model shows exactly that behavior:
That means the customer will not be satisfied by just getting the basic requirements. Give him more that expected. At the same time, the implemented features should be really well done.
Well, let’s collect the functional requirements:
- The app shall display a first preview image for the lock screen when the user chooses the option “Start creating”.
- The app shall offer different styles of lock screen images with different layouts.
- The app shall offer an option to navigate between these different layouts.
- The user shall be able to set the lock screen by tapping on the “Save lock screen” option.
- The lock screen that is created by the app should show a collage of pictures from the user’s contacts list.
- The app shall change the lock screen from time to time, so that new people appear on the image.
- The app shall show details like the app version, author’s name, author’s email address and the twitter handle
- The app shall encourage the user to rate the app by giving the option to go to the app’s marketplace page.
- The app shall show other apps of the same author that are already available in the marketplace.
We should also specify which non-functional requirements are really important for this app:
- Usability: “The extent to which a product can be used by specified users to achieve specified goals with effectiveness, efficiency, and satisfaction in a specified context of use.” (ISO)
- Robustness: To cope with errors during execution
- Maintainability: To cope with a changed environment and make future maintenance easiert
- Extensibility: A system design principle where the implementation takes into consideration future growth
What do we have so far? We have a vision and we do know what we want to build. And we have very well defined scope of the app: The functionality is easy to understand for the user. In the next part we will start caring about the structure of the project and proceed the planning.