Exploring data input options for tasks

Although I am still in the process of requirement gathering, I know that tasks will definately be a part of the final system, as a large part of project management is knowing what needs to get done, which is represented as a set of tasks.

Therefore, it is important that the method for entering tasks is as simple and streamlined as possible. This post will explore some of the possible ways to allow data input for the tasks.

Before we can begin, we need to plan what items we need and what items are nice to have when adding tasks to the system.

Must have:

  • A name for the list of tasks
  • One or more tasks

Optional:

  • Description
  • A user/group to assign the task to
  • A date the task must be completed by
  • Any links to other tasks, milestones, tickets etc

Read the rest of this entry »

Posted in Tasks. 5 Comments »

Meeting – 19 October 2009

Just had my second meeting with my supervisor (and 2 other students). We discussed what steps need to be taken to move the project research phase forward.

The main things I need to do are conduct surveys and some interviews. The surverys will be sent out in bulk (but not spammed) to people in the correct target market, and I will conduct interviews with several project managers.

I also need to carry on anaylsing existing PMSs, and rate them using some common method. Will produce a table at the end with a score for each site for each piece of criteria.

Aim to get a week by week plan to my supervisor in the next week or 2.

Analysis of an existing site: Basecamp

Basecamp by 37Signals is by far the most popular and well known web based project managment system. It has been around since 2004, so is well established, and as with my project, it was initially created to solve a real business need. The 37Signals team used to be a web dev agency, and they created basecamp to help manage their own projects.

The following is a summary of the sections they talk about in their product tour, which will obviously highlight the key benefits of their system.

Customization

The very first thing they talk about is the ability to change the colour scheme and logo of the UI. Useful for branding the system as your own (premium paid plans also remove the basecamp logo from the footer

Dashboard

Next up is the landing page, the dashboard is the first screen you see when you login. Everyone has their own view of the dashboard based on the projects their involved in. It lists your clients and projects in the sidebar, and recent activity accross projects in the main part of the page. It also flags any overdue milestones and upcoming in the next few days.

Read the rest of this entry »

Problem with nested messages client side

The relevant table is shown below:

+----+------------+---------+------------+-----------------+----------------------+
| id | account_id | user_id | project_id | title           | SUBSTR(body, 1, 20)  |
+----+------------+---------+------------+-----------------+----------------------+
|  1 |          1 |       1 |          1 | Damians message | Should only be visib |
|  2 |          2 |       2 |          2 | Roms message    | Should only be visib |
|  3 |          1 |       1 |          3 | Branding Info   | A message in a share |
+----+------------+---------+------------+-----------------+----------------------+

The first message should be visible to the first user, the second message to the second, and then thrid to both. This works fine when viewing just a single project which is a leaf node in the hierachical representation of the project structure, but if viewing a project with one or more sub projects, the message from the sub project should also be displayed.

Read the rest of this entry »

Storing hierachical data in MySQL

I will need to be able to store hierachical data in a number of parts of the project management system, such as nested projects, nested tasks, comments etc. A standard relational database, MySQL in this case, isn’t optimised for storing hierachical data unfortunately.

There are 2 main ways to store this data in the database, which will be discussed here in brief. I will skip a lot of the technical details about both implementations as I would just be repeating what I found in the following 2 articles which where the basis of this research.

http://articles.sitepoint.com/article/hierarchical-data-database

http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

Read the rest of this entry »

Adding a client usecase

There are several possible flows for adding a new client to the system. We need to have a client added before we can create any projects which are not internal. This entry will discuss the various ways of adding a client and how they get linked to your accounts.

The following is meant to be a casual use case and will not worry about technical concerns such as the database or web server crashing, notification emails failing to send etc, but it will discuss alternate flows

Preconditions

The use must be logged in and be an administrator of the account

Main flow

  1. The administrator goes to the add client page
  2. Fills in all the form fields and submits the form
  3. Based on the submitted form, a new user is added to the system and a new account is created, and the 2 are linked together
  4. The newly created account is linked to this account
  5. An email is sent to the new user informing them they now have an account and have been added as a client of the current account

Alternate flows

    1. The administrator doesn’t fill in all the fields
    2. Assuming they filled in the required fields (users email and account name) then the form submits successfully, otherwise the form is redisplayed with an error
    3. The newly added user is prompted to add any missing information when they first login
    1. The users email already exists in the system
      1. Instead of adding a new row in the database for the user, we us that users ID for the links
    2. An account with the name already exists in the database
      1. This may or may not be the same account (many accounts can have the same name) so we create the account either way
      2. The user then has an option to merge the 2 accounts together if they are both the same
    1. If they already have a user account, they login with their existing credentials and will see the new account
    2. Otherwise, they will need to set a password and fill in any information missed when the administrator added the account

Initial project meeting

Had my initial project meeting with my supervisor today. It was an hour long meeting involving me, my supervisor and 3 other students doing web based projects.

We just discussed what our projects where about and any ideas we had. We also talked about th structure of the project and what needs to be covered. The remainder of the meeting was discussing the alternatives for 2 of the students who hadn’t done any programming before, and how they could tackle the implementation portion of the project.

The next meeting is scheduled for Monday the 19th of October, 1pm

3rd party libraries

For completeness (and so I can’t be accused of plagurism), every 3rd party library, image etc will be listed in this category.

CodeIgniter

This is by far the most used 3rd party library. It’s a light weight PHP MVC framework. It’s used for all server side implementation.

http://codeigniter.com/

960

This is the CSS grid framework I’m using for the front end.

http://960.gs/

jQuery

This is the javascript framework I’m using for front end enhancements

http://jquery.com/

jQuery Notice

This is a jQuery plugin for notification messages

via http://webtoolkit4.me/2009/08/13/jquery-growl-likenotification-systems/

http://www.sandbox.timbenniks.com/projects/jquery-notice/

Note: I modified the CSS to make it have a variable height as oppose to a fixed height of 60px, also changed the positioning

Modified profiler for CodeIgniter

The CI profiler modified by Nillian also shows session data, as well as the standard profiler data

http://codeigniter.com/forums/viewthread/60066/

It was further extended by Gabe to work with AJAX requests

http://dragffy.com/blog/posts/making-codeigniters-profiler-ajax-compatible

Users and accounts ER diagram

How users and accounts will be modeled in the database

How users and accounts will be modeled in the database

This ER diagram shows the database implementation of the tables modelling the users, accounts and groups.

With the accounts table, there is no seperate between if an account is a company account (account which leads a project) or a client account (the account on the receiving end of the project) as this distinction is made at run time, as descipbed in this post on modeling accounts.

When describing the diagram, I’ll skip all the trivial fields, such as first_name, email etc

Key points:

  • In the users, accounts and groups tables, the primary key is simply an auto incrementing ID.
  • In the accounts table, the user_id field is a foreign key of the ID column in the users table, and this represents the account owner.
  • In the users table, the password will be a SHA1 hash, and it will be salted as well, more on this later
  • A user can optionally have a set of contact details, but at most only one entry in that table, so the users ID will act as both a primary and foreign key
  • The user/account relation is many to many, meaning each account is made up of 1 or more users, and each user can belong to more then one account. This was discussed in this post about linking users and accounts

Initial database tables

The following is an initial list of database tables. A lot of the tables for sections (messaging, tasks, milestones etc) are likely to change as those sections evolve. The users, account and project tables seem pretty fixed.

I’ll get an ER diagram up in the next few days for the first couple of tables, which will also explain more about the choices I’ve made and what fields will be included.

Accounts and users
users
accounts
account_users
groups
group_users
contact_details

Projects
projects
project_categories
project_category_projects
project_users

Messages
messages
message_categories
message_category_messages

Tasks
tasks
lists
list_categories
list_category_lists
task_priorities
user_lists
user_tasks
group_lists
group_tasks

Tickets
tickets
ticket_messages
ticket_tasks

Milestones
milestones
milestone_categories
milestone_categories_milestones

Files
files
account_files
project_files
file_versions
file_folders
file_folders_files
file_tags
file_tags_files

Comments
comments
comment_comments
project_comments
message_comments
file_comments

Times
times