stones, Japanese maple, and flowers

Component reuse and snippet remix

My current work looks at the contested space between the extremes of "free and open" and "proprietary and closed" models of software development. Most individuals and organizations don't have the ideological luxury of choosing one of these positions, and instead must work with the constraints and resources available. This middle ground, which I call "hybrid source," is where the bulk of professional software developers work. They often use the web and sometimes use open source components, but they usually don't share their own software assemblages. Hybrid source offers a site of cultural production to test claims about sharing of knowledge and transnational circuits, to investigate the effects of novel computational tools on how software is constructed, and to study the entanglement of social and computational systems.

This research grew out of my work on internet-scale code retrieval, which examined how software developers search for source code on the web.

Using Narrative to Account for Work

From a young age, we hear and tell narratives. Consequently, we develop a highly tuned sense of what makes a good narrative. Consequently, narratives are a familiar form that can be adapted to a variety of purposes, including coordinating work, capturing requirements and modeling users.

My work on narrative has included studies of users studies in agile, war stories from requirements engineers, use of narratives to coordinate work, and how requirements engineers sometimes appropriate the voice of users.

Agile Software Development

Early this century, the Agile software processes emerged and became popular among industrial software developers. Agile is best understood as a family of software process models and development techniques that include User stories, pair programming, test-driven development, retrospectives, Extreme Programming, and Scrum. Family members differ in emphasis and scope. For example, Extreme Programming is primarily concerned with implementation activities, while Scrum is primarily concerned with management. Agile processes are iterative and incremental, where requirements, architecture, testing, implementation, documentation and other activities happen in parallel. (In contrast, a software process that is phased completes requirements engineering before moving on to design, and so on.)

I have conducted field studies of software teams using agile in Southern California and Colorado. As well, I have hosted and helped to organize Agile Open SoCal for the last two years.

Previous Research