The Keyhole Problem

by Scott Meyers

Quick Links


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.

Research, Writing, Feedback, and Discussion

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.

Book Outline and Status

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