Archive for the 'Factory Nova' Category

Priorities and Joel Spolsky

From an interview with Joel Spolsky:

JS: I would never have the chutzpa to say that I have the answer for all teams. However, in most cases, the key thing is to have a constantly-updated, real-time, highly detailed list of features and tasks, with priorities and estimates for each item. Then at any time everybody knows what they should be working on and in what order, and if you have good estimates, you should be able to say “if we do all priority 1 features, we’ll finish on date X, and if we also do priority 2 features, we’ll finish on date Y.” Now it’s a simple matter of setting a date that gets the optimal balance of features and shipping (shipping is a very valuable feature).

This highlights a problem I am currently thinking about in context of the project management system that we develop.

In a perfect world you can easily put a proper prioroty for any task in the project at the same moment when the task is being created. But isn’t a task priority — a relative thing? I mean, a task with the highest priority has this highest priority among all other tasks, no? If another task appears that has a higher priority then a task with the highest priority then what should you do? For some reason, I don’t like the idea of changing priorities of potentially tens if not hundres of tasks just to put a new task at the top.

Another problem with priorities is that you always end up with a lot of tasks having the same priority assigned. How can you decide what task to do or how can you tell a developer (if you are a manager) what task to do, if 20 of them are of the same high priority (or the same normal priority — doesn’t matter)?

So, my current thinking about this is that it is impossible to understand what task a developer has to do next just using the priorities concept. Priorities are good for some general understanding of how important is the task, but that seems to be all.

We have some interesting ideas regarding this issue that we are going to implement in Factory Nova. I don’t want to describe them now, just want to first make sure that they will work out as I expect. More about this later.

Project’s dashboard page in Factory Nova

Another screenshot from the alpha version of Factory Nova. This time this is a project’s dashboard page. Usually you see this page first, when you go inside a project.

Current interface of Factory Nova

Just a quick update about Factory Nova development.

We are getting closer and closer to beta version. I am almost happy with how our dynamic tasks trees are working and looking now. Below is a snapshot of the current FN’s interface. I had no desire to show it in all details because it is still not ready for public viewing, hence the size of the picture.

Project Management Software

Trees and project management software

In our quest to create the best project management software (for online services-oriented company) we’ve recently stumbled upon a big problem.

You see, we have a schedule which generally outlines the whole roadmap for version 1.0 of Factory Nova. Some of the features on the schedule appeared to be taking much more time then we’ve originally anticipated. What was even worse — we’ve had to come back to previous tasks after they have already been marked as complete.

This mainly was happening because we’ve originally made a choice to inject as much flexibility in the Tasks module as possible (because we need flexibility in this functionality ourselves!) and so unsurprisingly we’ve ended up with tasks trees. In Factory Nova tasks can have children tasks, and those children tasks can have their own children, the level of nesting is not limited.

When you use trees to display data relationship you usually have a lot of additional difficulties: it’s hard to display complex trees effectively (ie. fast), it’s not clear how exactly to sort the branches, normal methods, like clicking on one of the table’s header cells do not work that well.

So after a lot of experimenting we’ve ended up with using Ajax and DOM a lot. We are now pretty good experts in this! We really love that we can apply modern techniques in our product and that these techniques help us to deliver a much better experience to the future users of our product.

But, these techniques also impose a lot of challenages that we have to handle and that, most importantly, take a lof of our time. Our time that we haven’t originally scheduled.

So, facing the problem of completely missing our original schedule, running out of money and starting coding for food, we’ve reconsidered our methods. Now we concentrate on the deliverables. We’ve split the whole schedule into 7 major parts, each part has its own deadline. If any part misses its deadline we abandon it and continue to the next part.

This way our perfectionists minds suffer, but we expect to get a complete product according to our current schedule. If we will have a complete product according to our schedule and it will miss some less important features (because we always do the most important first!) we can then make a decision based on the current situation if we can spend some more time adding that less improtant features or we better just release the product as it is because it is already “good enough”.

In any case, we expect to release a handful of upgrades after version 1.0. We have a lot of ideas that we would really like to have in a project management software that we use ourselves. Plus we are expecting to hear back from the future users of our product. What can be more valuable then ideas from people who will use Factory Nova to manage their own projects?

Currently, Factory Nova beta version is expected to be ready in June 2005.

Bug trackers evolving into project management tools

During my recent conversation with a customer regarding our project management system I’ve noticed a trend that happens with specialized software related to project management. Eventually bug tracking software or support software gets more and more general project management features and people start using it to manage their whole projects.

I think that this happens because “bugs” and “tickets” concepts are very close to “tasks” concept which is usually the core of any project. Bugs, for example, as well as tasks have priority, description, comments, they are assigned to a particular person, though they usually don’t have a deadline (why, btw?). Very similar situation is with support tickets.

So we can see now bug tracking software that is used as an email client to gather all customer inquiries in the same place where the company is tracking bugs. FogBugz even employs a Bayes filter to identify spam. Support software has a calendar and to-do lists and an email client too!

But for some reason I’ve never felt comfortable with the idea of using, for example, a bug tracker to manage all of our projects. I think this happens because until recently Stuffed Guys was a services-oriented company — 95% of our revenues were coming from custom web programming and only 5% from our ad tracker product.

As a services-oriented company we don’t feel comfortable using one specialized tool to manage our projects. We either need a bunch of different specialized tools to cover all communications and interactions in the project, or one general solution that will be able to replace all of the needed tools with one integrated package.

For the past several years we did try the easiest path — just used 4-5 different tools in the projects (bug tracker, forums for discussions, forums for knowledge base, email for general communication, email for support, msn messenger). But eventually this became inconvenient, since information about the project was stored in different places. So now we try a different approach — creating a general purpose project management system that we hope will be useful not only for us, but for other service-oriented online companies.

During the conversation with that customer I thought that if we will succeed with the first version of Factory Nova, we might as well see it evolving into a solution that will be able to handle specialized scenarios as good as current specialized software mentioned above. If a bug tracker could be used for managing whole projects then why can’t Factory Nova be used to manage bugs and customers support requests (among other things of course)?

Time will tell.

Factory Nova’s concept: Relative Links

Continuing from my previous post about Factory Nova, I want to explain another important concept that we are implementing. It is called “relative links”.

According to our design any data entity from any module inside one project could point to another data entity possibly in a different module in the same project. What this means in practice is that an email stored in the “Emails” tab in the project “Factory Nova Development” could be linked for example to a task in the “Tasks” tab in the same project.

We believe this is very important and makes managing projects even more easier and convenient.

Imagine the following scenario:

You have a customer who has a dedicated server. Your company was hired to administer this server. The customer writes to you an email asking to install a new application on the server. The email arrives to your standard mailbox and it is picked up by Factory Nova automatically, it adds the email to other emails from this customer. It also sends a notification to you.

You go into the system, look at the email and decide that this is yet another task in the already existing project “Server administration”. You move the email to the “Emails” tab inside this project and then you create a task based on this email for a system administrator (or for you personally, if so you desire). While you create the task, Factory Nova notices that it was originated from a particular email and places a link in the email to the newly created task and in the task to the original email.

Next time when someone looks at the task she can immediately see that it was originated from an email and there will be a link leading to this original email. The same with the email — if someone will be looking at the email she will see a link to the task which was originated from this email.

This is just a simple scenario, but you should get the idea. Relative links show how all data entities inside one project relate to each other.

Factory Nova’s concept: Project is the King

I was thinking about a project management system for about 2 years before I was able to actually start working on it. Initially my main goal was to create a system (both a software product and a set of rules) that will allow me to manage contractors effectively. At that time I’ve had big plans of using contractors in the projects of my clients and the issue of proper management was my main concern.

I’ve actually thought about this a lot and even tried to factor in bizarre situations when a contractor, a project manager and a client all speak different languages. Well, not really all. In my scheme, a project manager could communicate both in the contractor’s language and in the client’s language, thus serviing not only as a manager in the project, but also as a translator. I thought that if a project management system will support such scenarios it will make it possible to have truly international teams: a client speaking only Spanish (from Spain), a manager speaking Spanish and English (from the UK) and a contractor speaking English and Russian (from Russia). I thought that a task could have a description in all languages that are requried in the project, a customer writes it initially in Spanish, a manager translates it (the translation is saved in a separate task field) into English and only after it is translated a contractor can work with it.

This all was of course very theoretic. When I’ve got involved in a really complex project (online hotels reservations system) that needed a project management system badly I’ve started the design of the product from scratch. This time I had real experience to base my design on.

Quite soon I’ve identified the main problem with our existing communications — information about projects was scattered around different applications and mediums. With my client we’ve used:

  1. Good, old email for tasks, files, normal communications.
  2. Forums, for discussing things related to the project.
  3. A simple project management system that couldn’t do a lot but was good for some basic operations.
  4. Bug tracker for bugs and for some tasks too.
  5. MSN messenger for real time conversations.

It was quite clear that the main thing that we need from a project management system is an ability to post and retrieve information about the project always in the context of this project. We needed tasks, discussions, emails, bugs, knowledge base functionality, but we wanted to work with this functionality inside the project. Basically, we wanted to select a project from a list and be able to see everything that relates to this project.

So this is how Factory Nova’s main concept appeared — Project is the King!

A lot of other PM systems and collaborative environments treat projects as just another module in the system. A link to the projects could be listed along with everything else in the system’s menu: calendar, discussions, wiki, polls. etc. We wanted to change this. In Factory Nova a project is the top functionality, other modules could only be added to the project, they can’t exist separately. This very much sounds like Groove’s concept, but only web based. We’ve tried to use Groove, but thought that it’s tools are too simple for our needs. And of course Groove doesn’t integrate with an email and requires a client to be installed before a person could join a project. Also I believe that there is no such thing as a free Groove client and this is a deal-breaker for us, because no way we could force our clients to pay for something just to be able to communicate with us.

Factory Nova site is up

I’ve just launched a simple one page site for Factory Nova, which is a project management system that we are currently working on.

This is a very early Factory Nova interface prototype

For several years we were searching for a project management solution that we could use for our projects.

We needed a product that would not only allow us to easily and effectively manage projects, but would also help us to communicate with our customers, that would allow customers to actively participate in the projects.

All the information about a particular project had to be easily accessible by any person taking part in the project and stored always relative to the project. Finally, the product had to integrate effortlessly in our existing workflow — for example, we didn’t want our customers to study a new web interface if they didn’t want to, they could just send an email with a query to our mailbox and it could be processed automatically and stored inside a relevant project.

We’ve failed to find a suitable solution and decided to build our own.

What users really want?

There is an entertaining “use case” quote about a student that wants to get laid with the help of your software, which is currently cyling through different blogs.

Do you really want to make your software as simple as that? I am confident you can’t just say ‘yes’ here. This is only one of all the possible use cases after all! It might not be appropriate for your software. The project management system that we are developing is not targeted at students, it is specially created for small-to-medium sized businesses like ours. These businesses want to manage their work online or want to manage all the communication regarding a project (including communications with a client) in one place. Why in the world we would want to use a student as a use case?

We do need all these tasks, documents, discussions, files, bugs in one centralized place. So does it mean we are not thinking about our users and instead we create a product that “managers want to buy”? Absolutely not! We just think about different users. Our imaginary users consider Basecamp to be too simple for their needs and Microsoft Project — too complex.

PS. Just to make it clear. I am not arguing that you need to think about your users. I completely agree. Just don’t forget who your users really are.