jQuery vs NicEdit

Just ran into a problem I thought I’d document here as I will innevitably hit it again and would rather not waste an hour trying to solve it again!

When viewing an individual message, you have a comment form at the bottom so you can reply to the message (just like in these posts). I then want to submit the form via AJAX and have the textarea replaced with the response.

The relevant Javascript code should have simply been

$('#message-comment-form').submit(function(event) {
		event.preventDefault();

		$.ajax({
			type: 'POST',
			data:$(this).serialize(),
			url: SITE_URL+'messages/ajax/add_comment',
			success: function(response) {
				console.log(response);
				$('#comment-form').html(response);
			}
		});
	});

But that wasn’t working, and when I received the post array in the controller, the body (of the comment) was always null.
This is because I was using the NicEdit WYSIWYG editor for comments, and it doesn’t actually store the contents of what you write in the text editor, but instead in a div overlaying the textarea, so I had to get the contents of this div and manually create the serialized form contents as follows

$('#message-comment-form').submit(function(event) {
		event.preventDefault();

		$.ajax({
			type: 'POST',
			data: 'body='+$('.nicEdit-main').text(),
			url: SITE_URL+'messages/ajax/add_comment',
			success: function(response) {
				console.log(response);
				$('#comment-form').html(response);
			}
		});
	});

Unfortunately, this loses the inline styles (for bold, underline, italics etc) which kind of defeats the point of the WYSIWYG editor. If anyone has any thoughts how to solve that part I’d appreciate it.

Extending jQuery with jQuery UI

I will also be using the jQuery UI libary to extend the functionality for jQuery and can be found at http://jqueryui.com/ and is released under the both MIT and GPL (here and here respectively)

Edit in place with jeditable

I will be adding the functionaslity to edit textual content in place. This means the user doesn’t need to go to a seperate page to edit some text, but casn click on the relevant text to replace it with a textarea which will then save it back to the database.

For this, I will be using the jeditable plugin for jQuery which is also licensed under the MIT license (license included in source code)

WYSIWYG – NicEdit

In order to give rich text editing capabilities, I will be using the NicEdit WYSIWYG editor. This gives the end user the ability to easily add bold, italic, underline and lists among other features.

NicEdit can be found at http://www.nicedit.com/ and is released under the MIT license. The license is at http://nicedit.com/license.php

User roles and permissions – Communicating with the client

User permissions is  avery important part of any multi user system, such as this PMS. One issue which has been raised in both my interview with Dave Blencowe and in the comments by David Ferguson is the issue of who should be able to communicate with the client.

The 2 options are to allow everyone involved on the project communicate with the client, or to restrict access so that only the project manager (and selected team members) can communicate with them.

In the case of allowing everyone access, it means that communicate is more open and encouraged, but is there need for the customer to interact directly with all the members of the team? The general response from people is no, and David made another great response in part of a comment, which is shown below

Tickets:
Good idea but obviously should not be visible to the other users, only the PM. The customer shouldn’t be able to just throw something new in. It should be communicated to the PM and then pending the PM’s approval, the PM can add the needed tasks. The customer throwing a new requirement in can create a new for new resources, require additional funding, adjust the schedule, or adjust the scope of the overall project.

Basically, if a client can communicate directly with the team, they may try to get changes into a project which need to be reviewed by the project manager. This can happen in both tickets and tasks. As a result, it is best to initially restrict access to everyone but the PM and allow them to choose to allow certain users access or to share certain messages.

This adds another layer of complexity as before showing any message, it needs to be cross referenced with a list of users that can see that message. Although this is not much of a cost in terms of implementation, it may have a negative impact on performance.

Nested projects vs related projects

This post is a follow up on one of the points Dave mentioned in his interview last week. When we where discussing hierachical projects, he mentioned that having the ability to nest projects wouldn’t be off much use to him as most of his projects tend to only last a matter of days or weeks, so aren’t the sort of scale which would really benefit from this. He did mention a possible alternative, which would be much more useful which he referred to as “cross project viewing”.

He then went on to explain it using the following example.

such as the design of a site and system for the site. May have things like different developers or even different clients. But can still have the option of tasks that span the two, etc

It turns out Dave wasn’t the only person to think having related/linked projects is a good idea. In my interview with Sundeep, he mentioned he’d make use of both nested projects and the ability to have related projects.

Read the rest of this entry »

Interview with Dave Blencowe

Here is my next interview, this time with a freelance web developer. I would like to thank Dave for taking the time out of his busy schedule to help out. And remember, I’m always looking for more people to interview, so if you can spare half an hour, then leave a comment at the end and we’ll sort something out

Dave Blencowe is a Freelance Web Developer from the United Kingdom who has been involved in many projects of varying sizes. You can find his site at http://www.syntaxmonster.net and can contact him directly on dave@syntaxmonster.net if you have any questions.



Damian: So what sort of projects do you normally manage? Just websites or other projects as well?
Dave Blencowe: In the past I have managed other projects such as hardware setups and have previously worked as a project manager, overviewing a project team.
Damian: In your current role, do you still overlook a team or is it normally just you and the client?
Dave Blencowe: Normally me and another member of a team working with a client
Damian: And on the client side, do you just have one point of contact or many?
Dave Blencowe: Just the one
Damian: Are your clients reasonably tech savvy? Would they be able to use a web based PMS or would they need a simplified interface, such as just email?
Dave Blencowe: Most of my clients are designers or have jobs in other technology based roles so they would manage to cope with a web based system
Damian: Thats great
Damian: So how long do most your projects last? Days, weeks or months?
Damian: And how often do you update the client on the state of the project
Dave Blencowe: Days or weeks
Dave Blencowe: It all depends on the client, some panic if they don’t hear from you daily and others will let you get on with it (User specific status update emails?)
Damian: So a web based system they could just log into whenever they want to see the latest details would be great?
Damian: What’s normally involved in these updates?
Dave Blencowe: Yes, and standard updates can range from “Yeah I am working on it” through to a fully updated task list and timeline.
Damian: Ok
Damian: So what sort of project methodology do you currently use? Waterfall, iterative or as hoc
Dave Blencowe: Hmm
Dave Blencowe: In the past we have tended to resort to the waterfall or spiral methodologies so that we can have some form of prototype up and running asap for the client to look at.
Damian: So you normally adopt to the clients methodology of choice?
Damian: Although as an aside, iterative is considered best for getting working quality code up and running really fast
Dave Blencowe: We base our methodology choice on what we think suits the client best, as they usually don’t know about project management.
Dave Blencowe: And ok then, I’ll look in to it ^.^
Damian: So what PMS do you currently use, is it a proper application designed for project management or some system you’ve put together yourself?
Dave Blencowe: Previously we have used Basecamp and Mantis but have found existing PMS’s are too rigid in how they work or they cost too much to run for the services they provide
Damian: In what ways where the applications you’ve used too rigid… what would you say where the biggest 3 problems with them?
Dave Blencowe: Forcing you in to a methodology or way fo doing something, or not having the functions needed for the specific project/spec of work and supplying no way to extend their system.
Damian: Ok
Damian: So I know you where planning on creating a PMS of your own, I’m assuming this was to overcome some of these limitations you found… what else can you tell me about this… any really interesting features you’d like to share?
Dave Blencowe: Hmm, we planned to include some advanced design based features on our cms such as Version control integration (both local and remote) and image/file annotation for both client and developer.
Damian: Would you find it usefult to have the financial side built in, or would you rather use a dedicated finance system, perhaps with an API
Dave Blencowe: Personally I think the financial side of the project should kept seperate and maybe have a plugin. On the other hand it’s probably important for the PMS to manage the cost of resources for the project such as bricks and mortar for a house.
Damian: My PMS will be targeted at/initially support web dev projects and other software projects where the main cost is the developer time (we’ll get onto tracking time later)… so if there’s isn’t the cost of other resources such as bricks and mortar as per your example, you think it would be best to keep it seperate?
Dave Blencowe: I think it would be best to keep it seperate in that case
Damian: Excellent, make it much simpler on my end then : )
Damian: Now if I could get your thoughts on the main sections of my PMS
Damian: And if for each section, you could think of 2 things that would be the most important for you to have, and one thing that existing PMSs have you’d rather not
Damian: First up, nested projects
Damian: Specifically regarding who should see what, should someone automatically be included in all sub projects etc
Dave Blencowe: hmm
Damian: Can nested projects only be with a single client or a range of client… should a project only ever have one client? (Just a few things to consider)
Dave Blencowe: I think it should be an option on the default project whether permissions should be inherited for the parent project or not.
Damian: Would nested projects even be of much use to you? As your projects tend to last days/weeks, so they might not be the sort of scale that would benefit from it
Dave Blencowe: No, I was thinking they wouldn’t
Dave Blencowe: But maybe cross project viewing
Damian: you mean so you can link two differant but related projects?
Dave Blencowe: yes, such as the design of a site and system for the site. May have things like different developers or even different clients. But can still have the option of tasks that span the two, etc
Damian: Thats actually a very good idea : )
Damian: Do you think thats a better way to model it then having a project with 2 sub projects, one for the design and one for the system?
Damian: As that’s how I would have thought of doing it
Dave Blencowe: I’d say so. It would be more flexible beign able to select what elements of your project you want to share with another one. Can stretch from entire milstones through to single documents then too.
Damian: Good point
Damian: Next up, messages
Damian: These are designed to be a cetralised method to communicate for everyone
Damian: Couple of things to consider
Damian: Should everyone be able to send messages to the client or just the PM
Damian: Should you get an email every time a message is posted or will this just result in you getting the message twice if you check every day
Damian: Can everyone post a message or just the PM and everyone else replies with comments
Dave Blencowe: I think it should be managed by roles, and you can pick when you are emailed (daily digest, when it happens or never)
Damian: Should these roles be project specific, global or project specific, but inherited from the global ones by default?
Damian: Should these roles be project specific, global or project specific, but inherited from the global ones by default?
Dave Blencowe: I think by default the PM should only be able to contact the client or even view details about the client, and then it’s up to them who they allow access to what portions of the project, such as the client, etdc
Damian: ok
Damian: Next up, tasks
Damian: Would nested tasks be useful to you?
Damian: For such a small team as yours, is assigning tasks to someone even useful?
Damian: Once a task is done, do you want to forget about it, or a log of what was done when
Dave Blencowe: Yeah, assigning tasks is useful to even a small team, and being able to nest them would be a benifit too. Cause then you could have a task such as “Layout Design” and then sub tasks such as “Create PSD” assigned to the designer, and “Code Layout” assigned toa coder
Damian: Would you find it useful to have a deadline on a task or would you stick to just having dates on milestones
Dave Blencowe: Deadlines on tasks would be useful
Damian: Would you want the deadline on just the task, or applied to a milestone, and then the task linked to the milestone, or do you think you’d get too many milestones which would cause clutter
Dave Blencowe: I think deadlines should be to their task only. From how I look at it milestones are points for you to review progress so creating a milestone for each task would get cumbersome. Especially for large projects
Damian: (You wouldn’t actually create the milestone yourself, it would be created for you instead of having a deadline on the task, but it would still show up in the milestone view, which could get very crowded for a large project)
Damian: And speaking of milestones, they’re next
Damian: Would you find it useful to have both internal milestones as well as the ones the client sees?
Damian: Would you like the ability to have customer priorities for milestones (and tasks) or would low/medium/high be enough for you
Dave Blencowe: Yeah, as internal milestones could then be more technical (something the client might not understand) And I think that although things such as tasks and stuff should have priorities Customers shouldn’t be able to see or edit them.
Damian: Sorry, I meant custom
Damian: So you could make a priority called “Would be nice if I find the time” and give it a value of 1 compared to “show stopper” with a value of 100
Damian: (The numbers would all be relative)
Dave Blencowe: I think priorities such as Low, Medium and High should be the only ones as people may interpret what custom priorities mean differently which could lead to confusion
Damian: Good point, another benefit is that by only having the preset ones, they can be colour coded and have corresponding icons if needed
Damian: Moving onto tickets
Damian: Do you get a lot of change requests during a project? Are these reviewed formally or just tacked onto the end?
Dave Blencowe: Most of the time you only tend to get change requests if there has been insufficient communication with the client and what you have created isn’t actually what they wanted (Doesn’t matter whos fault it is) which means they aren’t discovered until the end of the project. But I think a bug tracker module a bit like Mnatis would be useful.
Dave Blencowe: *mantis
Damian: Yeah, I guess the ticketing system is more for the iterative sort of folk (like me)
Damian: Where the full specification isn’t known up front
Damian: I’ll have a look at th bug tracker part of Mantis and see if it would work well with mine
Dave Blencowe: Mantis is a bug tracker. Not a PMS
Dave Blencowe: But bugs don’t have to be bugs, they can be changes or anything else
Damian: Oh, I thought when you said bug tracker module a bit like Mantis, you where refering to a module within Mantis lol
Dave Blencowe: I meant a module for your PMS, like a bug tracker system
Damian: ok
Damian: Next up, file sharing and version control
Just to clarify, version control refers to versioning uploaded documents, not hooked up to a system such as SVN or Git
Damian: Do you often share files with the clients during a project or just at the end? Are these mainly designs?
Dave Blencowe: Clients and I often exchange several documents. For the moment these are normally designs. But in a PMS I would want to be taking things further, such as proposals, ERDs and stuff like that
Damian: Proposals and ERDs probably won;t change too much for you, but I assume versioning would be useful for you for the designs, especially if tied in with the annotations you talked about earlier
Damian: Proposals and ERDs probably won;t change too much for you, but I assume versioning would be useful for you for the designs, especially if tied in with the annotations you talked about earlier
Dave Blencowe: Yep, they would.
Damian: ok
Damian: The last of the main sections in the PMS is time tracking
Damian: I’m thinking of 2 methods of input, the traditional timesheet, or a stopclock
Damian: Where you can start a time on a task, and then stop it once you’ve finished, and it will log the duration for you
Damian: Thoughts?
Dave Blencowe: I like the idea of the stop clock
Damian: 2 things people have mentioed regarding the stopwatch method is what if you close the browser windows (the time is logged server side so it doesn’t matter) and what if you forget (there would have to be a time out)
Dave Blencowe: The combination of the two would be good, go for timekeeping on a project and personal level
Dave Blencowe: You could always build a flex application
Damian: One concern some people have had of the times is who should see it… would you want just the PM to see it, or all the team?
Damian: And should the client see the number of hours?
Damian: What are your thoughts?
Dave Blencowe: I think it should be limited to the PM, it’s then up to them to fill in a timesheet for the project itself that the client can say
Dave Blencowe: *see
Damian: Yeah, that seems to be what most people think, so it must be right : )
Damian: Thats the end of the main sections, before we move on, anything else you want to add or thing I’ve missed?
Dave Blencowe: Not that I can think of
Damian: Ok
Damian: Next up, I ave 3 little features I’ve come up with that make it a little more unique an hopefully more useful, I’d like to get your thoughts on them
Damian: Project health – Aims to be an early warning if a project looks like it might go off track, if you’re regularly missing milestones, always underestime the time for a task etc
Damian: Automated task prioritisation – Aims to take the effort of deciding whats important in a given context at a given time for you based on that persons work loads, any ending milestones etc
Damian: And natural language parsing of tasks, so you can enter a task in a single field and it will know whats the name, description, due date and person assigned to that task
Damian: What are your thoughts on these?
Dave Blencowe: I think automated prioritisation should suggest, not action
Dave Blencowe: Other than that it all sounds good.
Damian: Yeah I planned to let you override its suggestions
Damian: What level of detail do you need, in both the planning and reporting phase of the project
Damian: Minute, hour or days?
Dave Blencowe: For which one… I don’t think I quite understand?
Damian: Site wide, so if you do anything time related, such as entering time into the time sheet, reporting how long everyone worked, estimating times etc
Damian: Or to think of it a differant way, would you like to see what you have to do on a given day, or on a given time within a given range of hours (such as morning of the 20th December, Call someone) or see exactly when you should do something
Dave Blencowe: Every fifteen minutes
Damian: That seems to be what everyone goes for (including me)
Damian: And onto the last question
Damian: Would you/your clients trust a system you can’t install on your own server and what would it take for you to switch (think cost of conversion, no just the financial side, but also time and effort to get it all setup)
Damian: What would make it easier for you to get up and running with a PMS
Dave Blencowe: I think that I would prefer a non local system as then we would be responsible for maintaining it or providing it’s services. And for switching over I think it should be able to handle imports from other project managers such as Microsoft projects Gantt charts
Damian: And you just made me think of another thing to make it easier to setup… you should be able to upload a zip of files, and they’d be extracted and stored in your account as individual files
Damian: Thank you very much for taking the time out for this interview
Damian: If you come up with anything else you’d like to say, then either email me or post on the blog

Summary of interview with Sundeep Reddy

The following is a summary of my interview with Sundeep Reddy, a project manager in IBM. I’d like to thank Sundeep for taking the time to help me with my 3rd year project and helping come up with some good points which I will incorporate into the project. This post will not be a transcipt of the interview, but instead focus on summarising the key points.

I aim to do several more such interviews, so if you’re a project manager, think your current project management system is slightly lacking, work in web/software and have some ideas or just want to help, then leave a message in the comments and I’ll get in touch.

And on to the interview…

Read the rest of this entry »