REVIEW - Designing Hard Software

Title:

Designing Hard Software

Author:

Douglas W. Bennett

ISBN:

9780133046199

Publisher:

Prentice Hall (1997)

Pages:

356pp

Reviewer:

Nigel Armstrong

Reviewed:

April 1998

Rating:

★★★☆☆

I liked this book a lot more. Although you couldn't really say that it is an exciting read, it is an altogether more thoughtful book, put together with a degree of care and thoroughness which is sadly rare amongst technical authors.

...What he means by 'Hard Software' is software designed like hardware...

I liked this book a lot more. Although you couldn't really say that it is an exciting read, it is an altogether more thoughtful book, put together with a degree of care and thoroughness which is sadly rare amongst technical authors.

Let's start with the title, which I would have to say is confusing if not actually off-putting. What he means by 'Hard Software' is software designed like hardware, that is as a set of well-defined components. He uses the analogy of pinout diagrams to show how software interfaces should be documented, clearly and unambiguously and to point out the fact that it is those interfaces that are most important, rather than the details of implementation.

From that starting point he draws on what seems to be extensive practical experience to build up an approach to developing complex software systems. This approach is unusual in that he claims that it can be used both with traditional functional-decomposition methodologies such as SSADM, as well as with OO and RAD methodologies. He achieves this by separating out the 'essential tasks' of the title, which all developments, he says, should include.

These essential tasks are nothing revolutionary; many other texts cover much the same ground. What sets this book apart is its open- mindedness. Bennett does not claim any great originality; he is happy to use notation developed by a variety of other authors, for example, but in each case he discusses the good and bad points of each style and makes a recommendation that is backed up by solid, pragmatic argument. He too has a case-study, this time of a video-rental shop, which he covers in extensive detail, showing how a design evolves through a number of iterations as different techniques of analysis are applied.

Previously I have been disappointed in many widely-acclaimed works on (generally OO) analysis and design, which spend too much time on notation and little on the actual process of designing and developing real systems. This book redresses that balance, I am glad to say. I would wholeheartedly recommend it to software project managers as a major aid in defining practical development methods.


Book cover image courtesy of Open Library.