Neil Hopcroft

A digital misfit

Theres got to be a better way…!


Its really a rant about configuration management but Word documents are a part of the problem…(this isn’t directly related to where I’m working right now, its something thats been running around in my head for a while – they suffer from it though)

I’ve seen so many things that are not the answer, what is the answer?

To know what the answer is you need to know what the problem is. The background is simple, there are groups of software engineers working a bunch of projects, some of these projects act as sources of code, some as sinks and some as both. Each of these groups may potentially be working on a number of parallel projects utilising the same code. Each of these projects will deliver a bunch of features, which may or may not be independent.

Now the observed problem – the capture and tracking of requirements. This is one of the big problems in computer engineering. There are a number of solutions I’ve seen to this, none of which have been successful.

The worst solution I’ve seen was to pretend that wasn’t something we needed to care about and just make some code anyway. This didn’t work at all, I hope this company is now bankrupt and not still peddling its ‘solutions’.

Some others that I’ve seen, in no particular order are:

– Use an over-elaborate Lotus Notes database that noone could understand
– Use Word & Excel documents in a big directory structure
– Use physical cards to write things down (the XP solution)
– Get everyone sat together around a whiteboard to talk about what they want (only works when everyone will fit around a whiteboard)
– Provide a prototype and ask whats wrong with it

Each of these worked to an extent, but they could all be improved.

Probably the closest to working for a large scale system was the Notes database controlling versions of a set of Word documents, but that was unsatisfactory in many ways. Searchability was one of the major problems. Another one I’d like to explore some more is the XP way of doing things – I don’t like the cards, they’re not searchable or backupable – but theres no need for it to be done with physical cards, it could be automated.

So all of this got me thinking. Would it be possible to extend the extreme programming paradigm to the point where you dissociate code from files? The vision I have works like this:

Requirements get split up into tasks (XP cards or CMSynergy tasks) by some process outside the scope of this discussion (though it should be easy to enter them in a group meeting, like XP requirements discussions), but the tasks are stored in ‘the system’.
Tasks have some code associated with them, either they generate some new code or they alter existing code (or more likely both).
There is some concept of dependency between tasks, but this shouldn’t be too strong.
Source projects then produce work based on their tasks.
Sink projects can choose the tasks included in (or required by) their project on a nearly adhoc basis (this is again something that Synergy can do).

Nothing interesting so far….

Each task has a set of tests associated with it.
The developers IDE has a mechanism which spots idle time (no input for, say, 15 seconds) and takes a snapshot to queue for building and testing locally. If he has another idle time before the build test results come in the snapshot in the queue is replaced with the later one.
There is an integration build and test system running for all platforms and configurations constantly, recording ‘good’ versions and notifying failures.
The IDE also has integration with the CM system to the point where the CM system records every keystroke. (This sounds a bit anal…)
Given that every change is recorded the system can identify hotspots in the code, where there is a lot of activity.
The editor would be able to highlight code in a number of ways, its ‘hotness’ (how much it has changed recently), the amount of thought that has gone into it, its relationship with test failures, and others.


4 comments

  1. Re: heh

    A wiki would do some of that job, but it doesn’t provide the kind of integration I’m thinking of here…I tried using a wiki as a replacement for XP cards – it suffered the usual free software problem of being ‘good enough’ that I couldn’t justify spending money on a real solution.

    As for CVS providing code hotness, thats a non-starter, it’ll never be able to do that with any kind sensible response time.

  2. Anonymous

    tasks and requirements

    I’d not actually thought of tasks as equating to requirements… In fact, I’m sure they shouldn’t.

    There is only one good way to capture requirements – a good methodology, e.g. Planguage.

    There is only one good way to control and evolve requirements, and that’s to use a proper tool, e.g. DOORS, where you have a process, roles, everything. I’m sure there’s a cut-off point below which the overheads of a tool loke DOORS aren’t worth it.

    It seems to me that tasks are a breakdown of the planned response to those requirements. It’s possible one task may meet several requirements, or a small portion of one requirement.

    Dunno. Whaddayasay?

    Chip

    • Re: tasks and requirements

      Perhaps there should be another level of abstratcion between tasks and requirements…I’m not sure about that yet, maybe I’m defining requirements slightly differently – I’m using the XP card as a basic unit here.

      There is a danger in saying ‘there is only one way’…they’re probably good ways, but they’re certainly not the only way.

      What is more exciting about this kind of system is that it doesn’t limit itself to computing – given the right testing mechanism (perhaps simulation) it can be applied to all kinds of things – this is going to start to become important as we get more nanotech development going on…

      I’ll try to put together a crude prototype to see what happens, it’ll probably be a pigs ear and I’ll give up, as I normally do when I proto such things…but will let you know how it goes…

      Rar! I’ve got gcc here too…

  3. Re: heh

    The point is not that free software doesn’t do the job. Its that free software doesn’t do the job *well*.

    The level of integration I was thinking of would be far beyond what a wiki (in its conventional sense) would be capable of, they’re too freeform, you want something which has a good structure but allows the freeformness too, so perhaps you have a layer on top of a standard-ish wiki server which controls the structure for the bits that need the structure.

    As for CVS, it can do the job, absolutely – it effectively already does that at the file level, I want to go to the line level, or perhaps even more detailed than that. But its response time is poor at the best of times and things like the hotness metric would be calculated (and cached) on the server, so perhaps CVS is again the backend to another system.

    These thoughts are so far fairly immature and brought on by being bogged down in a Microsoft Word hell – one day I’ll turn them into a real system, but that day hasn’t arrived yet.

Leave a Reply

Your email address will not be published.