By Martin Brampton, 4 May 2004 10:15
COMMENT Good design is the essence of sound systems, says Martin Brampton. It also makes testing more effective and allows projects to be reused.
There is an awful tendency in IT to take short cuts. This applies especially to software development, despite all the talk of engineering. It is as if an engineer building a bridge, faced with a big workload of welding, decided to use Superglue instead, so as to achieve an early delivery.
So it is gratifying to see that at least some people resist this damaging tendency. Recently, the Metropolitan Police force has distinguished itself by settling on an architecture within which it will constrain its systems to conform to consistent standards. Given the importance of policing our capital city, one can only hope that the design is sound and that developments will adhere to it.
For there is always a tendency to take the Superglue approach when it comes to project work. The typical project manager is wholly committed to making progress and overcoming obstacles. That is all to the good, until the design principles for the system start to be seen as obstacles. If deadlines are at stake, the temptation to abandon principles in favour of rapid progress seems almost irresistible.
Yet it should be resisted, at least up to the point where the design principles can be shown to be infeasible. And that brings us to the important question of the quality of design. It is an area that receives too little attention in a world that emphasises feature lists and time to market. But good design is the essence of sound systems.
Important judgements are made in the design of a computer system that will be fundamental to its usefulness. Too much abstraction, and the system will be impossible to implement. Too specific a solution, and it will most likely be obsolete before it is implemented. The best designs solve immediate problems, but are also flexible and robust enough to be adapted for the inevitable future changes.
Recently, there has been a good deal of hand wringing over testing, or rather the lack of testing. Like design, though, testing is not only a matter of how much, it is also a matter of how good. Testing, too, is tightly linked with design, depending heavily on the quality of the latter for its effectiveness.
Black box testing has a useful role and good testers will probe a system hard to find weaknesses. This is significantly more powerful if tools are used to make tests repeatable, saving effort as failed software is remedied and retested. Testing software without knowing how it was constructed has severe limitations all the same, and unless the software is already pretty sound, it will only uncover a proportion of the faults that are lurking in the code.
Initial testing of units of software is only effective in relation to an understanding of its detailed design. It must concentrate on boundary issues where the behaviour of the software should change in specified ways. The better the design, the fewer the boundary issues and the more generally applicable the software.
But then, the larger scale quality of design becomes critical as software units are brought together. Design principles that stress reuse are well known but have often been ignored in the heat of project work. There are difficult organisational issues to solve if long term reuse is to be achieved. Yet many projects are large enough that good design will allow extensive reuse within the project, contributing both to productivity and quality.
Finally, there is the implementation architecture, which is the area recently addressed by the Metropolitan Police. Ensuring that systems are implemented within an agreed structure is a vital element for longevity, reuse and practical maintenance. Most systems have a surprisingly long life and before they are discarded are used in quite unexpected ways.
We cannot ignore the time pressures that arise because a project is needed quickly. But it is no use wringing our hands about unreliable, inadequately tested systems if we have not tried our utmost to spend enough time and intellectual effort on the design stage. Quality is not something that can be retro-fitted.

Comments
There are 4 comments. Join the discussion
1. anonymous
Are you kidding me? You can't even get most programmers to comment their code so someone else can work on it! It's sad.
2. Chad Bradley
Testing: Yes
BUFD (Big Up Front Design): No
Martin, your analyst background is showing, but you are not a software developer, nor an architect.
The 3 most successful projects I have ever been a part of were eXtreme Programming projects (see http://extremeprogramming.org).
An adaptable software methodolgy is far more important than a "perfect" design. Change will happen regardless of how well it is designed. The key is being able to adapt to that Change - not forsee the future.
3. Dharmesh Mistry
If what the Met has done works, hooray. The problem generally arises in that the people designing the architecture and standards, aren't the ones that have to implement real applications. Next comes the problem of ENFORCEMENT, and they should know, just because there are laws, doesn't means everyone will follow them !
I believe that IT has constantly tried to create architectures and standards from a technical stand point, and as such enforcement relies on code reviews (standard reviews or the Extreme Programming approach.
So this comes back down to people, their emotions, ego's and experience, not really a recipe for success or being able to scale this up across many developers.
I believe the best and only way to achieve this is to use a toolset that enforces an architecture, such that you can not create database access logic in the presentation layer, or presentation code in the process layer.
Such tools exist, we have used them sucessfully, the only discussion about design, is looking at "business re-use" and selecting deployment platforms (a deployment not development issue).
Such an approach has given us consistent repeatable success, and significant advantages in time to market, allowing us to compete with big systems integrators.
To make a change in IT, you can't make step wise improvments, we need to think different (thanks for the quote Mr Jobs ;o)
4. Joseph Knecht
As a software QA and testing guy, I have been asked to test software with absolutely no documentation. Just given a link and been told - test this. Xtreme programming or not, a bit of a clue as to how the software is supposed to function would be useful.