Wednesday, August 27, 2008

Developing under severe time constraints

So here am I, joining the ranks of OSS developers, feeling on my own skin what it means to have time as main limitation. In a sense, it's the most useful of the experiences of working on Manent: it forces me to prioritize brutally, really doing things that really matter. So how do I do it and still make some progress?

The answer is automatic testing. Writing automatic tests sounds like a lot of work, and indeed, I had to go underground for a lot of time until I got the tests working. But now, it's the best asset Manent has. In normal (read: full-time) development, it is possible to keep all the important details on the program in memory, but not when my development consists of an hour here, half an hour there.

Tests has saved my butt many times already, when I decided I made major destabilizing changes. For example, I have recently switched to using Unicode file names internally, otherwise, files with Unicode names were completely unaccessible on Windows. This is an all-encompassing change, with lots of little fixes all around the code. My experience in working with Unicode file names has been nil at that point, and OF COURSE the code became broken immediately when I tried doing that. But the nice thing is, instead of an incomprehensible mess of broken stuff, I got a neat list of small problems to fix. Each problem took anywhere between 1/2 hour to a hour to fix, perfectly fitting my uneven development schedule.

I have done many large changes to date, and the whole software is now in the third generation of architecture, but if not for the unit tests, I would be afraid to do 90% of the changes I did.

... off to releasing a new version.

1 comment:

Ronnie Maor said...

Hey Sasha, nice post.
haven't thought about that particular effect of automatic testing. for everything else, that's been my experience too. who would have thought testing could be fun...