I realised with some embarrassment today that one of the aspects of our biomechanical modelling software I'm largely responsible for - a file format for skeletons - is a mess. I didn't try to defend it, because I already felt a twit.
What went wrong? As far as I can tell, we (not just me, but mostly!) did a few things wrong.
First off, I didn't separate prototype algorithms, application business logic and file formats from the trunk of our codebase. Because of this, I was carrying legacy problems before anything even got out of the door!
The second failing happened longer ago: I didn't clearly set out a clear enough design of what I was starting to do. I remember *trying*, but the scope of the problem remained unbounded and I failed to specify the limitations of what I was building.
The last thing we (and I really mean WE) failed to do was lay out a plan to take this work through to its natural conclusion. It was very much a case of just a little, just enough here and there when we genuinely KNEW we were leaving it incomplete. Worst of all, we knew we were neglecting a hugely important aspect of the whole picture that would leave the design fatally flawed, but an open admission to this problem would have have been laughed (nervously, knowingly) off the face of the planet. I didn't have the balls to stick my neck out.
So, what can I do? I know that the "fundamental flaw" I speak of still needs to be addressed and I have to make sure I state the case effectively and back it up with clear estimates of effort to allow our product managers to make an effective decision about the future of this area. I can also learn from this mistake and realise when I'm going down this path again and put a stop to it. A realy simple thing I'll be pushing for in the future is to do my prototyping in a completely different environment to the body of our trunk code: I'm thinking more Matlab, less C++. This also gets around file format problems also, as everything can be serialised natively in the Matlab environment, without having to do half-arsed file format designs that end up out the door in a released product. Which brings me right back to where I started...