Browsing articles from "November, 2011"

+1 feature trap

Nov 20, 2011   //   by jIRI   //   Blog  //  Comments Off on +1 feature trap

There is a trap in every release. And its name is one more feature.

Well, the plan was to do one thing for the 1.1 release. One simple thing: I wanted to replace WPF TextBox with something better. After spending couple of nights on researching licenses, I decided to go with AvalonEdit from SharpDevelop, which is LGPL, which means that until I release my changed version of the AvalonEdit source codes and keep it in separate assembly I should be safe and all.

So I spent some time to replace the editor, then some more time to adapt AvalonEdit, which is, generally speaking, source code editor, to be suitable for needs of writing text editor, and then some additional time on fixing bugs.

OK, in total I’ve spent around 4 weeks working on this, and I had all the goodness which AvalonEdit brings.

AvalonEdit in naracea

But then I started thinking: while this is cool, is it enough? Shouldn’t I add something more to naracea to make it a bit more useful? And this is where I fell in the “+1 feature” trap for the first time.

I started looking for some low hanging fruit in my feature list, and I quickly convinced myself, that enabling regexes in find&replace dialog is really easy, and that it is something I can do in couple of hours. Honestly: naracea is using regex for find and replace from the beginning, the search term was just escaped right before the processing, so from user point of view it seemed like plain find&replace. And it was really easy: some 3 weeks later I got it fully implemented, and even crazy scenarios like “find two words separated by comma and swap them” were working. Great!

naracea supports regex

But then, something horrible happened. I’ve fallen in the +1 feature trap again. For some time I was suspecting that timeline is just not enough to get good overview over changes made to the document, and because I had plan for improvement ready for some time, I said to myself: hell, I can do this. I can implement change stream quickly. And I started coding little control, which shows all of the changes in more understandable way, and it proced quickly and all. But then I’ve found some performance issues, so I had to change couple of things, and then there were some new problems caused by the fact, that change stream is being built on the background, and then there were synchronization issues between the timeline and the change stream, and some other problems, which needed to be fixed.

In total, it took me 3 more weeks to get all things ready.

Changestream in naracea

So now I’m happy with 1.1 content, and I have everything I want. Except for the help, which needs update. And scripts update, which will publish my version of AvalonEdit on every release, so I’m following the LGPL license. And of course there are still three tests failing in my test suite, because I changed order of things in document intialization, and until I fix these, I cannot release even beta, because to be able to release, I must have all my tests passing.

So, 1.1 release looks good. It looks good on my machine. But don’t worry: I’m working hard on fixing those remaining bugs (which are from the “annoying” but not “showstopper” category), I’m fixing failing tests, I’m writing new help sections, I’m going to update my build scripts.

And I’m not going to fall in the now dreaded +1 feature trap again. Not for 1.1 release. I’m sure about that.