I am a tool maker. The focus of my research is to understand and improve the human aspects of technical work, like software development, machine learning, and data science, with the goal inventing better tools. To create tools, I believe strongly in user-centered design. First, I directly engage with the technical workers I aim to help, for example through observations, interviews and surveys. Next, I design and prototype new tools, often in collaboration with their earliest adopters. Finally, I evaluate the (hopefully positive) effects the tools have on the work, which kicks off another iteration of study.
Most of my career I have focused on tools for software development. Because software development is both collaborative and complex, developers often have questions and stall in their work until they get answers, frequently from their colleagues. That is, a developer’s work day involves three interrelated activities: information seeking (to pose questions), multitasking (to manage blocked work), and communication (to learn answers and unblock work). One line of my research documented this behavior and created tools to support multitasking, particularly by taking advantage of spatial memory (Debugger Canvas, Code Canvas, Code Thumbnails) and to get answers from a recommendation system (Team Tracks). One important case of information seeking is learning to use third-party libraries (application programming interfaces, or APIs). Another line of my research documented the barriers to learning APIs and investigated moving some rules for using APIs into the programming language (Code Contracts, Boogie, Fugue, Vault). My earliest line of research helped novice and end-user programmers learn to create interactive experiences (Alice).