I just released the first version of QwikTime for iPhone and I want to tell you about what it took to get this product out the door in a short period of time.
QwikTime is a time capture software for the Legal Industry. It was originally written for Blackberry smart phones and it allows its users to enter time while on the go. Time entries captured on the smartphone can be submitted for final review and posting in the enterprise’s time recording system if a network connection is available. When the time recording system is not reachable for any reason, time entries remain cached on the handheld .
Requirements For The iPhone Client
In order to build a version for iPhone fairly quickly, I went through the list of features available in the BlackBerry client and picked only the ones that are essential for the application to exist:
- Ability to manually create time entries on the phone through a simple and easy to use interface.
- Ability to store time entries on the phone, either for later review, or when an immediate upload cannot succeed due to an unreliable connection.
- Ability to modify or delete entries cached on the phone.
- Ability to upload time entries to the time recording system on a server behind the firewall.
- Ability to download lists of recent projects, activities and actions that can be used to populate a time entry’s fields.
Reusing the Server-Side Software
I didn’t have to worry about the server-side piece because I am reusing the server software my team wrote for the BlackBerry version. This considerably reduced the effort needed to ready the iPhone client.
Knowing what features were going in this version, I used Balsamiq to create mockups of the screens or views of the application:
Writing the Source Code
The minimum requirements and UI mockups gave me a good idea of what I needed to do code-wise. I conceptually broke the source code into three distinct pieces: user interface, data model and network connectivity, and started writing them.
The UI piece was first. It takes care of displaying a few table views and dialogs, and controls the navigation from one view to the next. I found the UI so simple that I chose not to work with Interface Builder. Being used to writing BlackBerry code without a UI designer also helped me feel comfortable and I did not miss Interface Builder at all.
Next, I created a few classes representing the data model: time entries, matters, activities, actions and a few more. I also wrote some CRUD routines that operate against the on-device cache of time entries, recently used matters, activities and actions.
When the data model was ready, I connected it to the UI and was able to run the application with all its functionality, except the network calls, which I coded last.
The challenge when writing the network code was that I could not work with background threads like we are used to in the BlackBerry platform. But I quickly learned the alternative approaches and found myself enjoying writing the networking code as well.
I’m very happy with how QwikTime for iPhone was built. A list of essential features, focus on simplicity, and reuse of existing assets resulted in a nice product that was put together in a very short period of time. The app is now being evaluated by a few users and I expect to get helpful feedback really soon.
What do you think? Are you writing or planning to write mobile applications? Want to share your experiences?