Electricmonk

Ferry Boender

Programmer, DevOpper, Open Source enthusiast.

Blog

Software development lesson: Don’t refactor and implement

Monday, January 3rd, 2005

Well, today I’ve learned another valuable lesson about software development in the ‘real’ world. Today’s lesson is:

When working on a new version of some piece of software, do not plan on refactoring and/or reimplementing features whilst at the same time planning on implementing new features.

At my job, I’m currently working on integrating an old piece of software (ServerOverzicht) into another, newer, project (ZX Monitoring). The old software has been in use for about 2 years now, and it has become somewhat of a mess. The software and database designs are outdated and need to be cleaned up badly.

We decided to do both at the same time. We wanted to integrate the old software with the new software, clean up the code (or rewrite portions of it), clean up the data and rework the design of the old and new application, whilst also implementing completely new features. Not a good idea, I can tell you.

It’s not that it is impossible, it’s just that you totally lose sight of what needs to be done. Everything you do gets in the way of some other thing you’ll need to do. Redesigning the whole thing means I’ll have to make major changes in all the data. Changes in the data mean it’ll become even more difficult to clean it up without losing information. Cleaning up the information means we’ll have problems fitting the old data in with the other application’s data. Old features can’t be recoded due to the fact that the new features aren’t ready yet. And these are just some of the problems we’re facing right now.

This is also one of the biggest differences between Open Source development and commercial development. When working on Open Source, you can take your time doing what is most important first. It doesn’t matter if it takes a month to carefully redesign major portions of the project, since there’s no deadline. Deadlines in Open Source only get set if the software is already quite stable and the development team can make an estimate about how long it’s going to take to complete it. But commercial software needs a deadline even before a single part has been designed.

The text of all posts on this blog, unless specificly mentioned otherwise, are licensed under this license.