by Scott Meyers
This is the web page for an all-but-abandoned book project, The Keyhole Problem. The would-be book explains how some kinds of constraints in software systems decrease the quality of those systems in many ways. It proposes practical steps programmers can take to avoid these constraints.
I call the constraints I'm interested in keyholes: arbitrary restrictions on your ability to see or express something. The name is motivated by the analogy of looking at a room through a keyhole in the door. I'm especially interested in keyholes that programmers can easily avoid, i.e., in gratuitous keyholes. The book defines a number of such keyhole types, gives a variety of examples of how they manifest themselves, explains why they are harmful, and describes how they can be avoided or mitigated.
The best overview of the book is the draft paper from which it is derived. I encourage you to read the paper, but please bear in mind that my ideas have matured considerably since I wrote it.
This is an ambitious project for me, because it calls for technical knowledge in a range of areas, including user interface design and implementation; client-server and web-based computing; database design and implementation; and security issues in network-based systems. Furthermore, I have to consider these matters on many platforms, e.g., Win32, .NET, J2EE, SQL Server, Oracle, etc. I know something about many of these topics, but I'm far from an expert in all of them. As a result, my plan for this book is to post draft chapters as I write them, then solicit feedback from as many people as I can. I expect that the first draft of many chapters will include open questions (things I don't yet understand well enough to write about), and I'll be relying on my reviewers to help me gain the necessary understanding.
Instead of sending comments directly to me, I'm hoping that people will post them to the mailing list I've set up for this purpose. With luck, that will foster discussion of the material in the book, and from that I'll be able to better improve both my understanding of the underlying issues as well as future drafts of the book.
Please sign up for the list, read and comment on book drafts, and participate in discussions of keyhole-related material. Also, please publicize the list and this page to people who you think may be interested in the topic. For this kind of project, I want to get feedback from as many viewpoints as I can.
If you don't want to participate in the list, but are still interested in reading drafts and offering feedback, feel free to email me your comments instead, but I really encourage participation in the group discussion. That will be of the most help to me in producing a book that is technically solid and that offers practical advice.
Work on the book is currently suspended, and I don't know if I will ever return to it.
The tentative outline for the book is shown below. Chunks of the book that are ready to be read are linked to the appropriate PDF. If something below isn't a link, it means I don't yet have a draft that's worth reading.
The abbreviations in the first column are cross-reference placeholders I'm using until I get the missing material written. You may see references to these abbreviations in my drafts.
Abbrev | Book Section | Current Draft |
Pre | Preface | None |
Ack | Acknowledgements | None |
Int | Introduction | None |
P1 | Part 1: Visible Keyholes | None |
FSW | Fixed-size window keyholes | None |
LSW | Limited-size window keyholes | None |
LB | Listbox keyholes | July 24, 2003 |
FSEC | Fixed-size edit control keyholes | None |
LFSEC | Lying fixed-size edit control keyholes | None |
LTE | Limited tree expansion keyholes | None |
S | Serialization keyholes | None |
FWWP | Fixed-width web page keyholes | August 26, 2003 |
P2 | Part 2: Invisible Keyholes | None |
TFB | Too few bits keyholes | None |
RFS | Restricted field size keyholes | None |
RD | Restricted domain keyholes | None |
RR | Restricted range keyholes | None |
P3 | Part 3: Keyholes and More | None |
BI | Beyond inconvenience | None |
CK | Cornucopias of keyholes | None |
GK | Generalizing keyholes | None |
Bib | Bibliography | None |
Idx | Index | None |