I don’t know how you feel about tracking time spent working on different projects. It can be a tedious task if you have more than a few activities to track. I personally want it to be as straightforward as possible with the minimal amount of time spent fiddling around with a program or app. For quite some time I used simply a tabulation sheet, which is great for entering long descriptions or comments about daily activities. On the other hand you don’t have the flexibility of a mobile app that you can take with you, wherever you go – with no loss of generality to a daily standup meeting for instance. The iOS knowledge group at Zuehlke decided last year that we wanted to build an app for that purpose, as easy as possible to use and with a lean and appealing design.
How the App Works
The TimeCurl app is pretty straightforward to use:
- You can create projects, associate a nice icon with each one and arrange them as you like.
- The ‘activities’ tab allows you to create a new activity, define one or more time spans associated with it, set a project and optionally write a short note.
- In the ‘report’ tab, you are able to visualise all the activities of the current month along with a summary of the time spent on each project at the top. If you prefer to get the activities for a given iteration or sprint, then you can also define custom periods of time (with a custom start date and length).
In addition to these basic yet powerful functionalities, there is a nice set of import and export features, which you can use to move your data around.
- You can export the complete data set in proprietary format, send it by e-mail and import it on another device.
- You can export the current month or the whole data set in CSV format in case you need to view or process it in your preferred tabulation program.
iCloud and CoreData: Chronicle of a Death Foretold
Let me explain a couple of technical details about the app and in particular about its persistence layer.
Since the development of the app started last year with iOS 7 going stronger than ever, we decided to try out CoreData with iCloud integration. On paper it is a pretty cool feature: you define your CoreData model, wire it with an iCloud persistent store and you are good to go: the data you save in CoreData is being backed up to iCloud automatically and synced between several devices.
Everything is just fine. Until you notice it is not. There are unfortunately serious problems when using CoreData in conjunction with iCloud. As with magic, when it works, everything is fine, but when things go wrong, you have very few possibilities to debug the issues.
The main problems are sync and conflict issues. You enter new data on device A and do the same on device B, however iCloud is unable to sync it properly – even if there is no data conflict – and you are basically stuck. Another problem is that iCloud would just not sync the data, downstream or upstream, and there are very few possibilities to know why. You will get a basic idea of the kind of problems you can get in the link . While being an older post, it is still very accurate at describing the possible issues. We finally gave up with iCloud & CoreData and came back to a less magical yet functional CoreData local store. Further thoughts about CoreData and iCloud troubles in link .
Technically the rest went pretty neatly. The component where we spent most of our time was probably the controller to enter the time spans. Since it is a low level component where we handle ourselves the touch detections and time slot drawings, a certain time was necessary to have everything working as expected and with a good usability – the first version used multi-touch gestures to input the start and length of the time slots, but this was too experimental and not very usable and was finally dropped in favor of a more classical approach.
There are a couple of functionalities listed below that we could implement at this point. If you want to give us feedback, I would advise you to install and use the app for some time in order to gather some experience. Some of us are using it for more than 6 months on a daily basis and we are quite happy about the current development stage – including support for the iPhone 6 and 6+ devices launched recently.
After using the app a bit, please have a look at the following features and tell us which one you would vote for:
- Support for iBeacons: the app automatically detects when you arrive at work in the morning and leave in the evening using a small beacon that you put beside your desk.
- Support for geo-fencing: same functionality as the previous one, but using GPS regions.
- Smart proposal: the app notice basic patterns (e.g. spending 8 hours working on some project) and makes a couple of proposals when entering a new activity.
- Other ideas?
Thank you guys for reading this. Write me your comments and suggestions below.