Building a Project Management System, Want Some Advice

Discussion in 'Mac Programming' started by ryanzec, Mar 4, 2010.

  1. ryanzec macrumors member

    Feb 23, 2010
    I have looked around and one thing that does not seems to exist is a nice full featured project management system for the Mac OS X. Since this is something I have wanted to do for a long time, it seems like it would be a project for me as I explore the world of Mac programming. It is something I can off as very simple but also build it up into a very feature full application. One thing I would like to get some opinions on is data storage.

    As I come from a web development background and I originally wanted to build this as a web application, I thought the best way to handle data storage would be a database like PostgreSQL. Another reason for the data storage to be a database is that leaves open the possibility to also create a web interface to the system.

    Now this issue that I though of would probably be an issue no matter what data source I use. The issue I am think of is that while older versions of the client would be able to connect to the database just fine, newer versions of the client would only be able to connect to newer versions of the database if there was a change in it. The one thing I don't want to have happen is if the user updates their client application but the person maintaining the database does not upgrade, the client might not be able to connect to the database anymore.

    Is there anyway around this issue with using a database like PostgreSQL as the data source? Is there anyway around this issue with using any other type of data source. The only way I can see about preventing this is by preventing the user form upgrading there client application until all stored connections are upgraded to the latest version but that does not be very user friendly.
  2. Cromulent macrumors 603


    Oct 2, 2006
    The Land of Hope and Glory
    Rather than using PostgreSQL I would suggest using SQLite. PostgreSQL is a great database but requiring customers or average users to have a database of that size and complexity is rather optimistic.

    SQLite was designed for exactly the kind of thing you are talking about. Heck, thinking about it just use Core Data.
  3. larkost macrumors 6502a

    Oct 13, 2007
    I think you may have missed some things in looking around for potential competition:


    OmniPlan by OmniGroup

    Both of these products have been reviewed very favorably, but I can't really comment much since I have only played around with them and have never used any project management tools myself.

    And if you are thinking about going into the web based side of project management.... there are some serious contenders there.
  4. ghellquist macrumors regular

    Aug 21, 2011
    Stockholm Sweden
    Now back to the original question.

    You are right that the your program might be tied to a certain version of data base. But, generally, data base interfaces changes rather slowly, so it might not turn into a problem.

    One solution which I recommend is to create an intermediate class or library inside your code base, centralising all knowledge of the database used.

    The idea is that your code never calls the actual database code directly, but only indirectly through this set of code (or classes if you do object oriented programming). The effect is that only that code knows exactly how you access the database. This would allow a "newer" program to access several different versions of the database server. Or even, if requirements change, to access a completely different database server or access method. All calls directly accessing the database is in one place, not spread all over the code base.

    This would allow a completely local database in one case, and in a different case the data base might be on the net somewhere. Nowadays, the database is typically using SQL as query language which makes things a bit easier to handle. But with a good internal layer of code, even that might be hidden from the rest of the code base.

    // Gunnar

Share This Page