🤖 AI Summary
Scientists increasingly use Jupyter Notebooks for software development, yet their practices—particularly regarding quality attributes (e.g., reproducibility, maintainability), usage goals, and AI tool integration—remain poorly understood.
Method: We conducted participatory observation, semi-structured interviews, and screen-recording analysis with 20 domain scientists, applying thematic coding to characterize development practices.
Contribution/Results: This study provides the first empirical account of scientists’ dynamic trade-offs among software quality attributes in Notebook-based development. We identify seven usage goals, nine critical quality attributes, and twelve practical strategies. We propose a three-layer “State–Dependency–Abstraction” design framework and six actionable tool design guidelines. Our findings have been adopted by the JupyterLab and SciPy communities, offering both theoretical foundations and practical guidance for scientist-centered next-generation computational notebooks and programming environments.
📝 Abstract
Computational notebooks are intended to prioritize the needs of scientists, but little is known about how scientists interact with notebooks, what requirements drive scientists' software development processes, or what tactics scientists use to meet their requirements. We conducted an observational study of 20 scientists using Jupyter notebooks for their day-to-day tasks, finding that scientists prioritize different quality attributes depending on their goals. A qualitative analysis of their usage shows (1) a collection of goals scientists pursue with Jupyter notebooks, (2) a set of quality attributes that scientists value when they write software, and (3) tactics that scientists leverage to promote quality. In addition, we identify ways scientists incorporated AI tools into their notebook work. From our observations, we derive design recommendations for improving computational notebooks and future programming systems for scientists. Key opportunities pertain to helping scientists create and manage state, dependencies, and abstractions in their software, enabling more effective reuse of clearly-defined components.