I study how humans interact with code and design new ways to build software. I work at the intersection of software engineering and human-computer interaction.

I use behavioral methods to study developers as users of their programming tools, understand what makes designing, implementing, and debugging software hard, and re-envision the relationship between developers and code. A key focus of my work has been designing new techniques to view and manipulate code. I have pioneered the design of crowdsourced programming environments, which reify developer’s design knowledge, strategies, and mental models in explicit forms which can be manipulated by program analysis tools and connected to code.



News

My student, Emad Aghayi, successfully defended his dissertation.

Our paper on Hypothesizer: A Hypothesis-Based Debugger to Find and Test Debugging Hypotheses appeared at UIST 2023.

I served as General Chair of VL/HCC 2023 in Washington, DC.

Our paper on What's (not) working in programmer user studies appeared in ACM Transactions on Software Engineering Methodology.

Our paper on A Survey of Tool Support for Working with Design Decisions in Code appeared in ACM Computing Surveys.

Our paper on A qualitative study on the implementation design decisions of developers appeared ICSE 2023. Our paper won an ACM Distinguished Paper Award.

I gave a talk at Never Work in Theory on Programming Strategically.

My student, Abdulaziz Alaboudi, successfully defended his dissertation. This summer he'll be starting as an Assistant Professor in the College of Computer and Information Science at King Saud University.

Our paper on ChatGPT and software testing education: promises & perils appeared at the Software Testing Education Workshop.

My student, Sajed Jalil, was the runner-up in the Graduate Division of the CEC Innovation Week Poster Contest.

My paper on Connecting design to code appeared in IEEE Software.


PhD Students

David Samudio
David Samudio
Maryam Arab
Maryam Arab
Sahar Mehrpour
Sahar Mehrpour
Sajed Jalil
Sajed Jalil
Ruochen Wang
Ruochen Wang
Mainul Hossain
Mainul Hossain

PhD Alumni

Abdulaziz Alaboudi
Abdulaziz Alaboudi
Emad Aghayi
Emad Aghayi


Research Projects

Programming Strategies
Developers solve problems by applying programming strategies, describing sequences of steps to debug, reuse, design, test, and understand code. Experienced developers work better by using more effective strategies. We've been exploring ways to capture and make explicit the strategies developers use, helping uncover how developers work differently and to create new ways to help developers benefit from the hard-earned wisdom of experienced developers.
[ICSE23] [CHI22] [VL/HCC21] [EMSE20] [SIGCSE19]
Debugging Mental Models
As developers debug, they use their mental models to formulate hypotheses about the cause of a defect. Unfortunately, when their hypotheses are wrong, developers can waste time and get stuck gathering information that does not lead them any closer to the cause of the defect. We've conducted studies to understand how developers debug and the role of hypotheses in debugging and are exploring new forms of debugging tools which enable developers to find, use, and test relevant hypotheses from similar defects.
[UIST23] [VL/HCC22] [PLATEAU21] [VL/HCC21] [VL/HCC20]
Microtask Programming
Onboarding on a new project is often a long, hard process, dissuading casual contributors from ever starting. What if you could contribute code to a new software project in a few minutes? How would enabling many transient contributors change software development? We've been exploring these questions through building web-based programming environments which enable microtask programming and conducting studies to understand how they change software development work.
[EMSE23a] [JSS21] [FSE-IP20] [TSE18] [SOFTWARE16] [VL/HCC15] [ICSE15] [UIST2014] [CHASE13b]
Working with Design Decisions in Code
Good documentation has long been argued to be the key to helping developers work more quickly and consistently with design decisions. But our studies have found that documentation is left largely disconnected from code, making it hard to write and update and causing it to become out of date and untrusted. This leaves developers to instead reverse engineer design decisions from code, causing rationale questions about design decisions to be some of the most challenging to answer. We've conducted studies to explore the nature of this problem and have invented new techniques to make documentation active and bidirectionally synchronized with code.
[CSUR23] [SOFTWARE23] [EMSE23b] [PLATEAU21] [FSE20] [VL/HCC19a] [VL/HCC19b] [VL/HCC15] [PLATEAU10] [FSE07] [ICSE06]
Information Needs in Software Development
What does this do? Will this work? Who uses this? Asking and answering questions is central to programming, software design, and coordination in programming teams. Our work has examined the most frequent questions developers ask and the challenges that they face.
[VL/HCC22] [SOFTWARE20] [TSE15] [CHASE13a] [PLATEAU10] [CHASE10b] [FSE07] [ICSE06]
Methods for Developer Experience Design
How can we understand what software developers do? Do developer tools really help developers? In our work, we have developed methods for using field observations, lab studies, interviews, surveys, and controlled experiments to learn how developers interact with their development environments and programming languages.
[TOSEM23] [SOFTWARE20] [CHASE19] [VL/HCC19] [COMPUTER16] [EMSE15] [PLATEAU11] [CHASE10a]
Answering Reachability Questions
What can make debugging in large and complex codebases so hard and time-consuming? We found that developers ask reachability questions, searching across control flow for statements matching search criteria. For example, developers debugging a deadlock may reconstruct control flow describing where resources are acquired and released. We designed Reacher, which uses a static analysis to automate control flow searches, enabling developers to query for statements on paths and interactively construct an interprocedural control flow visualization.
[VL/HCC11][ICSE10]

Resources

What do we know about human aspects of software development? Bibliography

How has software engineering research evolved over the past 4 decades? Tag Clouds

Evaluating programming languages and tools in studies with human participants Paper, Slides from tutorial