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.


Our papers on Active Documentation, Mixed Human-AI Authoring of Code Patterns, and An Exploratory Study of Live-Streamed Programming will appear in VL/HCC 2019.

Our paper on Teaching Explicit Programming Strategies to Adolescents appeared at SIGCSE 2019.

Our paper on Microtask Programming appeared in Transactions on Software Engineering and was presented at ESEC/FSE 2018.

My paper on Maintaining Mental Models: A study of Developer Work Habits was rated a classic by Google Scholar. CS Department news.

Our paper on Crowdsourcing for Software Engineering appeared in IEEE Software.

I served as Co-Chair of the Fourth International Workshop on Crowdsourcing in Software Engineering. We had a great program, including two keynotes by Rick Kazman and Mark Harman.

Programmers Are Users Too: Human-Centered Methods for Improving Programming Tools . IEEE Computer. doi preprint

I gave a talk at the CS Seminar at Mason on Information Needs in Programming. It's a good overview of my research. Slides.

Join Us    I am always recruiting motivated students at all levels — undergraduate, masters, and PhD students — to support this work. Send me an email if you'd like to discuss possible opportunities.
Get involved. Participate in a research study online.   

Research Projects

Microtask Programming
Microtasks are short, self-contained units of work, leveraging the "long tail" of casual contributors to enable large tasks to be done quickly through massive parallelism. What if this model could be applied to software development? We have explored this question through the design and development our CrowdCode web-based IDE.
[TSE18] [SOFTWARE16] [VLHCC15] [ICSE15] [UIST2014] [CHASE13b]
Reifying Design Decisions
While planning and implementing code changes, developers ask questions about design decisions to understand the rationale behind the code. Developers percieve answering these questions to be a serious problem, as they are hard-to-answer, reduce confidence in changes, and can lead to defects. Our work has begun to investigate reifying design decisions into artifacts integrated directly with code.
[VLHCC15] [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.
[TSE15] [CHASE13a] [PLATEAU10] [CHASE10b] [FSE07] [ICSE06]
Methods for Knowing
How can software development work be understood? Are developer tools benefiting developers? In our work, we have developed methods for using field observations, lab studies, interviews, surveys, and controlled experiments to learn about how software developers interact with their software development environments and programming languages.
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 a tool called 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.


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