One-way constraints have been incorporated in many graphical user interface toolkits because they are simple to learn, easy to write, and can express many types of useful graphical relationships. This paper is an evaluative paper that examines users' experience with one-way constraints in two user interface development toolkits, Garnet and Amulet, over a 15-year time span. The lessons gained from this examination can help guide the design of future constraint systems. The most important lessons are that (1) constraints should be allowed to contain arbitrary code that is written in the underlying toolkit language and does not require any annotations, such as parameter declarations, (2) constraints are difficult to debug and better debugging tools are needed, and (3) programmers will readily use one-way constraints to specify the graphical layout of an application, but must be carefully and time-consumingly trained to use them for other purposes. 1276 B. T. VANDER ZANDEN ET AL.interfaces [1][2][3][4][5][6][7][8][9][10][11]. In turn these implementations have spawned many articles describing algorithms for solving these constraints or evaluating the trade-offs among these algorithms [5,[11][12][13][14][15][16][17].A pair of 'retrospective' papers have also been published recently that report on longer-term experiences with constraints. A companion paper to this one provides an empirical comparison of the performance and design trade-offs of various constraint satisfaction algorithms based on our experiences with the toolkits described in this paper [18]. A second paper mentions briefly two of the observations described in this paper: (1) the fact that programmers have found constraints useful for graphical layout and (2) the fact that many programmers find constraints somewhat difficult to master in other settings due to their declarative, rather than imperative, nature [19]. However, it provides no documentary evidence for these observations, does not explore them in any detail, and does not report the other findings reported in this paper.Despite the wealth of papers on one-way constraints, none of them has provided an in-depth account of programmers' experiences with these constraints after the toolkits have been released and in use for several years. This paper remedies that gap in the literature. It describes: (1) what programmers like and dislike about constraints; (2) how programmers use constraints in applications; and (3) how we learned to make constraints easier for programmers to use. The results are based on 15 years of experience gained from working with users of the Garnet and Amulet toolkits [3,4] and from surveys of these users. Garnet is a Lisp-based toolkit for developing interactive graphical applications that was first released in 1989 and Amulet is a C++-based successor to Garnet that was released in 1994. Garnet can be downloaded from . Both toolkits incorporate one-way constraints and have been used by over 1000 programmers. Garnet runs on the Unix and Macintosh platforms, and Amulet runs on t...