Archive for the 'Software Engineering' Category

Different kinds of Simple

I was watching an almost complete collection of Apple keynotes since 1997 (when Steve Jobs returned to Apple) and for some reason I formulated this.

There are different kinds of “simple” in software engineering and actually in any kind of engineering.

  1. Simple, which was made simple without background “domain” knowledge, basically with the only reason that “it is easy to create this thing this way”, just blindly following the mantra that “every solution should be simple”.
  2. Simple, which is a result of a lot of work and background analysis.

The first one is worthless, the second one is genius and is a result of a very hard work. It could be very hard to distinguish between the two. The first one can be easily disguised as the second one.

Excessive way of creating software

It’s a popular theme these days — make your software as simple as possible; instead of implementing something, make a shift in your mind and think of what NOT to implement.

Well, we do it kind of differently. We implement everything we can imagine while we have time. This is done on purpose. I need to see everything that is possible before I can understand which features are really exessive and which features are ideal for the software.

This makes the software messy at some point. A lot of stuff is in it, a lot of features of different quality. But I think it is very important to see and be able to use them all. This allows me to see the big picture, to understand how the software should work to feel perfect (at least for some of the users).

When I see that we’ve tried all the ideas, it’s time to sit down and thouroughly think through all the features and decide which of them should go away, which should be changed or combined together. It’s not an easy task, but after finishing with it we get an excellent software product.

Currently, Stuffed Tracker has already undergone this polishing phase and Factory Nova will only reach it in around 1 month.

Process of creating user interface

I personally think that user interface is the most important part in any software. You can have the best functionality on the market, but if the UI in your product sucks then no one will buy it. Who needs software that is impossible to use?

In Stuffed Guys, we have a 2-tier process of creating user interface.

The first version of the interface is created during initial product development. It is done only by us; professional designer is not involved. The first version evolves a lot during the time when the product is developed. We constantly test it on ourselves as the first users of the product and make improvements where we can.

At the end of the product development we usually have an overall good UI, that as we think is easy to use and it usually looks good too. But we realize that since we were involved in the development of the product and know everything it does and how it does it we probably don’t see things that are still inconvenient for a new user.

So then we handle functionally finished product to the professional designer. One of the best advantages for us is that this designer is completely new to the product, he hasn’t used it yet. Based on his fresh look on how things work and should work, he creates an improved user interface, adding all required eye-candy to it in the process as well.

With Stuffed Tracker, we are currently at the last stages of the second tier described above. Professional designer is almost finished with his version of the UI and we are currently implementing it in html. Now, since the new version of Stuffed Tracker is build on our own Nova System framework that supports skins, we decided to keep both versions of the interface as two different skins both of which would be available in the final product.

1st version

1st version of the interface

2nd version

2nd version of the interface

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.