App Project Planning and Design.
Whaddup InternetI'm going to build an alarm clock app... not exactly a billion dollar idea but I think it will cover some interesting stuff without being too much work AND it pisses me off that Windows doesn't have a decent alarm clock utility - it's irritated me for years...
Now I'm not going to spend a huge amount of time on project planning and design for this app given I am doing all the work anyway and the concept is quite simple. I have a clear idea of what I want to get out of the final product but its always prudent to do some planning before embarking on any project no matter how small.
The planning approach I use is based on Prince2 project management, it's a product based planning approach which is both easy and comprehensive enough to ensure success. Normally in real application development we'd be spending quite a bit of time understanding the business requirements and forming a project team of people who have an interest in the project but it's just me and the app won't be big enough to form a committee so we'll skip to assembling a list of all the "products" or "deliverables" of this application.
To do this I looked at all the alarm clock apps I know and assembled a huge list of features which could be included, ideally I'd like to include almost all of these in the final product but we need to get on with it so I did a MoSCoW analysis (Must, Should, Could, Won't until later) and created a v1.0 list of features I must have in this app:
v1.0 list of features
- display current time
- set an alarm
- alarm plays a media file
- alarm can be snoozed
- alarm can be repeated at regular intervals (weekdays or weekends)
- alarm can wake up the machine from sleep
- alarm can sound at the specified volume even when volume turned down.
- display current time - has to be a large 'digital' clock that is easy to read, user can select 12hr or 24hr time, clock shows AM/PM, clock does not require seconds. must update every second. must be good looking and easy to read from a distance.
- set an alarm - user can set 1 alarm multiple not required in v1, the alarm will play the media file selected at the specified time even if the app is not running. Alarm time will be displayed near the clock to indicate it has been set.
- Alarm plays a media file - media file can be anything video, audio or web-link to youube video, can play in native 3rd party player but...
- Player must have a snooze option so an embedded player might be required.
- Alarm can be repeated - user can tick which days of the week the alarm goes off.
- Alarm can wake the machine - from sleep or hibernate modes... preferably can also go off in low battery modes.
- alarm controls hardware volume - to ensure alarm sounds at the specified volume no matter hardware volume state. To ensure user is alerted in the manner selected.
- Main Function() - function to run the app startup and close down
- Display clock()
- Set alarm()
- Run in background()
- Save alarm data()
- Read alarm data()
- Set 24hr time()
- setAMPM()
- Update Clock()
- Alarm Trigger()
- Alarm Snooze
- Wake Device()
- Set Alarm Volume()
- Clock page
- Alarm Settings (new/edit)
- Alarm Triggered
Now you know I'm not satisfied with just a list of products we need quality rules on the products and the last step is to guestimate the length of time to build each bit too - lets update the list with a description and any quality and time details.
- Main Function()
- Function to run the app, app must load quickly and shutdown cleanly releasing all unnecessary resources. time: 1 day
- Display clock()
- Read clock look/feel settings and display clock on the screen, clock must update every second, clock must always be visible when setting alarms. Time: 1 day
- Set alarm()
- Create alarm object according to alarm settings: time, snooze time, recurrence, media file. Time: 1 day
- Run in background()
- Run a service which monitors the time and compares to our alarm data. Time 2 days
- Save alarm data()
- The alarm data needs to persist across sessions - Time 1 day
- Read alarm data()
- Read the stored alarm data and update the alarm when service or app is restarted -Time 1 day
- Set 24hr time()
- Set the clock to 24 hr display: Time 1 day
- setAMPM()
- Turn on AMPM mode and display correctly: Time 1 day
- Update Clock()
- Update clock data every second and check for alarm trigger: Time 1 day
- Alarm Trigger()
- Function to manage Alarm trigger event:Time 1 day
- Alarm Snooze
- handle snooze button and reset alarm time to new snooze time: Time 2 days
- Wake Device()
- Control hardware to wake device and sound alarm even when sleeping: Time 2 days
- Set Alarm Volume()
- control hardware volume to ensure alarm sounds at set level despite current volume state Time 2 days
- Clock page
- Time: 1 day
- Alarm Settings (new/edit)
- Time 1 day
- Alarm Triggered
- Time 1 day
Time: 20 days
Cost: 20 days of my time or I guess we could put it on freelancer!
Scope: see above list of products.
Quality: see above list.
Risk: low risk, low impact, low cost, low likelihood of something going wrong.
Benefits: We get our first app under our belt. Increased reputation. Chance of selling later more sophisticated versions in the store.
That was a pretty simple exercise but we sort of covered the really important stuff... I don't recommend this approach if you are running a full blow development but we need to carefully tailor how much project management overhead we put on this given its just me so for my purposes its just fine and breaks up the project into achievable "chunks" which will help with my motivation and hopefully ensure get this done. If you are considering using freelancer.com or some other service I strongly recommend you have good project management skills and do something like this plus a little bit more work on quality expectations, who is responsible for checking quality, justified benefits and possible risks and you'll get a great result every time.
This really only covers the development of the app and not the subsequent uploading to app store etc ( I should have put that "out of scope") but frankly this is really the hard bit and we can cross the rest of the bridge when we come to it... we might need another plan if the app doesn't meet MS quality standards.
Sorry about the long post... Next we find out how good my time estimation skills are and build our first few functions.:
Peace
No comments:
Post a Comment