When constructing a spec for your client, starting from scratch can be a little painful as it’s very easy to forget the “boilerplate” functionality you need to know about. Here’s a little bootstrap to get you started on what you need to ask:
- Target Devices – What devices does the app need to run on? Does it require the hardware advancements of iPhone 4 (retina display or gyroscope)? Should it run on iPad? Must 1st gen iPhones and iPod Touches be able to run the app? Many of these answers logically lead to answers for the next question…
- Target OS – What minimum iOS should be supported? If 1gen hardware must be supported, you need minimum support for v3.1.3. If you don’t need to support that hardware, you can safely require v4.0. The iPad currently requires 3.2, but you can’t make an iPhone/iPad universal build unless you support v3.1.3. (This will soon change when iPad upgrades to v4.1.) The later the better. It’s not just about new API’s, but a lot of basic ones have been extended with useful stuff as well, including blocks.
- Orientation – Should the app support portrait or landscape? Do any individual screens have different requirements? This question helps determine how specific you can be with your UI design.
- Multi-Tasking Support – Does the app need to be able to run anything in the background? If the user leaves the app, do you expect them to continue from where they left off when they re-run it or should the app state reset?
- Local and Push Notification – Will the app need to support push notification from Apple? This necessitates how you create your provisioning profile. How about local notifications?
- App Size – Is there a concern about breaking the 20MB barrier for 3G download ability? A user may want to download an app while on 3G but be refused, possibly leading to them not bothering later. How large an app is a user willing to install or update? (Size is usually not an issue, but users may remove an app rather than update a 500MB app again.)
- App Iconography – How many icons and default screens need to be done? Do you need custom sizes for iPad, Spotlight, and iPhone 4? In what orientations are the default screens needed?
- Data Persistence – Will data need to be persisted? Should this data be SQLite or plists or NSUserDefaults or Core Data? Are there any other systems (or ports) that use SQLite already? What possible future functionality might be required? Use the simplest possible, but keep the future in mind.
And finally — what does the app do? Now you’re ready to rock! Investigate every last piece of functionality required for this app and leave no stone unturned. Everything you miss now will cause you delay later and possibly leaving you in a position where you never know when the app will be considered complete. Protect your contract and your sanity and take the time now to spec your app!