Desktop Application Development Takes Time
I have been very busy for the past two months, working relentlessly to shape “The Application” and have it finished before July 2018. Development has been slow but steady. I initially projected a very rough first version to be ready by December 2017. For that I’m using OmniPlan, which is a great tool for project management. The more I adjust the tasks the more I can reliably predict a launch date. But December has arrived and I haven’t been able to finish half of the features. There are several reasons for that.
Features, Minimum Viable Product
The minimum feature set I devised includes activities, clients, projects, tasks, invoice generation, charts and reporting. I could probably do without charts and reporting for version 1.0, but the rest of the features are absolutely necessary. Implementing a feature involves: data modeling, developing the model, designing and implementing the views, developing the view controllers, testing, fighting with Core Data. The models are the easy part. On the contrary, views and controllers take a lot of time to implement and test.
There is a lot of work involved in between, and certainly a whole lot more once I have reached beta and need to prepare a web site, integrate with DevMate, write documentation, design icons, hire translators, etc.
What is Already Done?
Activities are fully implemented. Clients are almost complete: there is a single table view with a half implemented inspector panel; I could probably flesh out the rest in a couple of days. Projects are mostly finished. They have a nicer view, with cards for each project arranged in a Collection View:
One part of creating a project is also assigning tasks to it, so tasks are also mostly implemented. They don’t have a specific view as they are integrated in the project configuration. In fact, there is going to be an inspector panel to edit them, but I haven’t started that yet.
The Missing Parts
Invoice generation, charts and reporting are missing. They together are perhaps 50% of the total work. I will start implementing invoice generation in January 2018; the rest of the missing functionality will have to wait. It is possible I will be spending a lot more time polishing than implementing features.
Swift is a Great Language
I am in love with Swift. It is easy to read and write as Python but without its defects. Much as Python, it is a practical language, cleverly designed to write reliable desktop software. Seems like all the troubles I get with Cocoa are related to the dynamic behavior of the platform, such as bindings and KVO. While great features, they become a nuisance sometimes. None the less, it is a pleasure to work with both Swift and Cocoa.
The overall experience of starting a new project, carrying it through almost six months of development, and watching it grow is great. Both the platform and the language are new to me. Therefore it takes more time to make things work. I wouldn’t say it’s all nice; there are days I scratch my head for hours before I get something done.