Monthly Archive for March, 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.

Actions tracking in Stuffed Tracker

One of the new features that we introduce in version 2.0 of our ROI tracker is actions conversion tracking. This is by no means a new feature on the market, but current version of Stuffed Tracker can only track sales, and this limitation is due to initial design (that is more then 3 years old already!).

With some creativity it is possible to track actions using even current version of the tracker, but with the new version this process becomes very easy and convenient. I think Ivan has come with a brilliant design for this process.

Let’s say, you have a web site on which you have installed ST’s tracking code into all pages (via SSI or PHP include) and then you want to understand how many visitors coming from your Google AdWords ad have actually signed up for your newsletter.

In the upcoming version 2.0, to do this, you go into ST administration interface and specify the URL of the “thank you” page* that is displayed right after the successful conversion. And that’s basically all. ST will notice when this URL is loaded and will count one more conversion for the action that you’ve defined. This approach is much easier then a standard one, when you have to insert a specially generated javascript code for the sign up action on the “thank you” page in order to track it.

* “thank you” page is so overused in documentation to different trackers, including Google’s one, that I think it can already be called something like “thank-you-page” or TYP.

Number 3

I like number 3. And it has just occured to me: 3 guys in the company, 3 introductory posts, 3 photos in each post.

We definitely need a 3rd product!

Introducing Sergey Smirnov

Finally, the time has come to introduce myself. My name is Sergey Smirnov and I am the owner of Stuffed Guys (and the author of this blog).

Sergey Smirnov Sergey Smirnov Sergey Smirnov

I am working with web technologies from 1998. Through these 7 years I’ve tried several roles: an account manager in a big web development company, a project manager in a publishing house responsible for several parts of a portal site (that was back in the “bubble” days) and finally a web programmer, working on my own primarily with English-speaking customers outside Russia.

In Stuffed Guys, besides being responsible for the boring legal work, I also supervise the developement of our two products: a project management system and an ROI tracker. Both products are based on my own initial concepts, I take part in usability testing and what I call “pre-designer design” — the interface design that we do before we handle everything (at the final stages of the development) to a professional designer.

Oh, and I also communicate with our customers, so if you will submit a query via our feedback facility I will be the one who will reply to you as soon as possible.

:)

Introducing Shal Jacobs

Shal has recently returned from Israel where he has spent 4 years studying and working in several hi-tech companies, including famous Zend (the creators of the Zend Engine that powers PHP) where he was a part of a group that optimized strings processing in PHP.

Generally, thanks to him ‘this line’ and “this line” are processed with almost identical speed in PHP :)

Shal Jacobs Shal Jacobs Shal Jacobs

Besides PHP, Shal knows C/C++ and Action Script. In Stuffed Guys, he is responsible for Factory Nova, our upcoming project management system. He is also our resident Flash guru and has already contibuted several lovely dynamically generated Flash charts to Stuffed Tracker 2.0.

Shal has his own open source project on SourceForge called “ppC++“.

It is an HTML-embedded C/C++ language which is adapted especially for active web pages programming. This preprocessor lets you write server-side programs in C++ inside your HTML code and brings new additional features which make web programming very easy.

Introducing Ivan Kuindji

With this post I am starting a series of introduction posts of everyone who works in Stuffed Guys. Right now there are only 3 of us. So, without further ado:

Meet Ivan Kuindji

Ivan Kuindji Ivan Kuindji Ivan Kuindji

Ivan has more then 4 years experience in creating corporate sites, mostly as a developer of his own Content Management System. In Stuffed Guys he is responsible for a complete re-write of Stuffed Tracker, our ROI tracking tool.

His family name “Kuindji” comes from his far ancestor Arhip Kuindji, famous Russian painter. Ivan also expresses his creativity in music, you can check out his compositions here.

When I asked him to write a small introduction for himself for this blog, he suggested to post a tale by Toon Tellegen instead. He said it describes him better. I couldn’t find the tale in English, so here is my amateur translation from Russian.

Early in the morning, when Squirrel was still in bed, someone knocked at the door.

- Who’s there? – asked Squirrel.
- It’s me – replied a voice. – Elephant.
- You want to come in? – asked Squirrel.

For several minutes there was silence, and then Elephant asked:

- Let’s dance?
- Dance? – asked Squirrel. – Now?
- Why not?
- Well – replied Squirrel. – Actually it is so early.
- So you don’t want to? – asked Elephant.

Squirrel thought for a second and said:

- And where do you want to dance?
- Why not here, on the branch, near the door – replied Elephant.
- But there is no space there!
- We will snuggle up together – decided Elephant.
- But then we will fall down!
- Oh – said Elephant – So you don’t want to dance.

Squirrel got out of the bed.

Then she put one arm on the Elephant’s shoulder and another on his waist. Elephant warned that he will count till three, scratched his head and counted till three. They made only one move, stumbled and crashed down. Shocked from hitting the ground, they laid in the wet grass under the beech.

- It was a silly idea, right? – asked Elephant.
- Not at all – said Squirrel. She rubbed a bump on the head and thought that they danced very well.

Take a cookie when they’re passed?

I keep thinking about Take a Cookie post by Joe Kraus. There is something wrong with this idea.

What if my mouth already full with the cookies (and my pockets) too? Should I still take the cookie?

What if I am eating a spicy hotdog, should I also take a cookie?

With opportunities in your business you can’t just take every one as a cookie and put them for later use in your pocket. This doesn’t work like that. You should actually work for every opportunity that you take, you can’t work on it later.

In other words, you should not take a cookie unless you are ready to digest it right away. If your stomach is already fully occupied you have to pass it.

Also, this idea doesn’t work well with goal setting, which I believe is a very good thing to do for any business. If you see that chocolate cookies have a greater potential for your business, then vanilla cookies and you decide to concentrate only on chocolate cookies, you shouldn’t take a vanilla one when it is passing you. It will only distract you from your main goal.

Having said that, in the original Joe’s post he is talking about a chain of events that was started by him reading a book and getting in contact with the author, which eventually led to his company getting first funding. In my “cookie” examples above, this situation can be described as taking a chocolate cookie at the moment when you are very hungry.

So, I would rephrase the saying to “Take a cookie when they’re passed if you are hungry” (otherwise pass them to your friends) :).

Joe Kraus is a star

Well, I’ve just discovered Joe Kraus (Excite co-founder) and his excellent blog on entrepreneurship.

Unfortunately Joe posts infrequently, but I’ve just spent an hour or so to read all his posts with all comments. Just coudn’t stop! Last time this happened to me was when I discovered Joel Spolsky several years ago.

Joe’s new company is called Jotspot and they have an interesting Wiki-based product service in beta.

Self extracting web installer

An interesting post by Jeff Moore about how web applications installation could be simplified:

Drag and Drop Web Applications
I think a drag and drop PHP web application should meet the following criteria:

  • Make no requirements for PHP_INI_SYSTEM or PHP_INI_PERDIR configuration.
  • Make no requirements for .htaccess configuration
  • Work with default application level configuration
  • Not require writable filesystem permissions
  • Not require installing external software
  • Not require unarchiving (a wish, i know)
  • Not require obscure PHP modules

I was toying with a Perl self extracting CGI archive long time ago. I was doing this with a colleague. We actually managed to create a working prototype that was able to pack an application inside one CGI file, this file could be run later from a browser, it asked several questions about database parameters and then unpacked everything contained inside of it to proper directories.

I’ve also seen several other implementations of the same idea, even in PHP. In Perl with have a special “__END__” mark that we can place inside a file to tell Perl that this is the end of the code. Perl will also allow us to access everything after the __END__ just as a normal file, so we could do all sort of things that we do with normal files (open, read, etc). In PHP we don’t have __END__, but still the same could be achieved. For example, by enclosing the archive inside a very long comment in a PHP script. It might be required to encode the binary data in the archive as a string (using base64 encoding, for example). So in PHP this is also possible. And we actually considered creating a special installation system for our upcoming products that will be able to pack the whole product in one file and then interactively extract and install it.

But we’ve found out several complications in the concept itself:

  1. Most of PHP web applications have an open source and it is a standard today that a power user of the product could tweak its code easily to match his needs. If we distribute only a self-extracting archive a user would have to first install the product on the server through a web browser and only then he will be able to download the code on his local machine to play with it. Not convenient.
  2. PHP scripts are normally run with the server access rights, because PHP itself is usually installed as a server module. This means that if we will try to extract our product from an archive with a script that is accessed through the browser (as opposed to the shell) we a) might not be able to create directories and files at all on the server, because we won’t have enough rights or b) we might be able to extract everything, but all of the extracted files will belong to the server user — this means that any other PHP script on the same server could easily access them and do something bad. Not good too.

So, considering the above, the self-extracting PHP archive could only be offered as an alternative to a standard distribution (a zip file, that should be unzipped first, then uploaded to the server, then an installation script on the server is launched).

This appears to be a costly alternative (without a ready-to-use solution we will have to create such installer ourselves) and I am not sure right now if it is worth the trouble.

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.