Redo From Start?

I was supposed to write a blog post this weekend just past, but I didn't. Normally I would be writing one right now, but my mind is occupied. There is a system we use here at the library, based on an ancient iteration of a GPL'd open-source software package. Of course our system has been customised a whole lot over the years, and has deviated from its original fork almost as much as the official package itself has, albeit in completely different directions. And, of course, it's rubbish. Well, not rubbish, but it's not great. Our requirements have shifted over time, technology has moved on, and as inevitably happens to old software packages – especially when software engineering best practices aren't necessarily at the forefront – the code has started to develop a texture somewhere between spaghetti and concrete. The only features I can add now are relatively small, or – more significantly – localised, and my most common changes are costmetic updates and bugfixes. For some reason the bugfixes never seem to end.

In short, I want to rewrite.

Before I undertake such a large ... undertaking, I want to be sure of what I'm doing. Let me enumerate some concerns and risks:

  1. I've been known to slightly overengineer solutions, especially when they can be construed as broad or potentially complex (read: fun).
  2. I also have a fairly strong case of NIHism, not (entirely) because I think other people's code is rubbish, but because I love writing code. I may (or may not) believe I can write it better, but I want to write it anyway. Coding is fun!
  3. It works. The current system may not be the best engineered or the most responsive or the easiest to update, but it's still working. It still meets our requirements, and lives up to its spec. For now. The serious question that has to be answered is: do we need to update it so much that a complete rewrite is required? Is the outcome worth the effort?
    I'm glad I managed to avoid writing "ROI" there.
  4. How much effort would be duplicated? This is similar to the previous point, but with different fore-knowledge: one of our newer (but fully capable and trusted) developers is currently working on an alternative version of the site, designed from the ground up to be the mobile web-based interface for the service. It re-uses very little of the existing code and is, I believe, built on the CodeIgniter framework. Which means controllers and models and views (oh my!), which (hopefully) means modularised development and support. Assuming it's built well, and I am making that assumption, it should be quite easy – once the mobile site is finished – to piggy-back non-mobile versions of the views onto the framework and replace the entire old site in one fell swoop. And that will also be fun.

These points are specific to me and to this project, but I believe they can be generalised and applied to any significant works. Please comment below if there is a point or concern you (or your boss) usually consider before leaping into something.

And, with those points expressed and rationalised and evaluated, I can conclude that I should not, in fact, rewrite our service's front end, no matter how much I may want to.

At least, not while I'm at work.

Matthew Kerwin

CC BY-SA 4.0
development, software

Comments powered by Disqus