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.


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.

Our paper on Advancing Open Science with Version Control and Blockchains appeared at SE4Science 2017.

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.

I taught a new graduate course in Spring 17 on Software Engineering Environments.

I served as a Guest Editor for the IEEE Software Theme Issue on Crowdsourcing for Software Engineering.

I served as Co-Chair of the Seventh Workshop on the the Evaluation and Usability of Programming Languages and Tools, co-located with SPLASH 2016 in Amsterdam. We were delighted to have Alan Blackwell deliver a great keynote.

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.

Should software developers be replaced by the crowd? On the IEEE Software Blog.

Crowdsourcing in Software Engineering: Models, Motivations, and Challenges. IEEE Software Special Issue on the Future of Software Engineering.

CodeExchange: Supporting Reformulation of Internet-Scale Code Queries in Context.   ASE 2015.      Try it out!

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 paralellism. What if this model could be applied to software development? We have explored this question through the design and development our our CrowdCode web-based IDE.
[CHASE13b] [UIST2014] [ICSE15] [VLHCC15] [SOFTWARE16]
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.
[ICSE06] [FSE07] [PLATEAU10] [VLHCC15]
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.
[ICSE10] [VLHCC11]
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.
[ICSE06] [FSE07] [CHASE10b] [PLATEAU10] [CHASE13a] [TSE15]
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.


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