Guo, P. (2021). Ten Million Users and Ten Years Later: Python Tutor’s Design Guidelines for Building Scalable and Sustainable Research Software in Academia. In The 34th Annual ACM Symposium on User Interface Software and Technology (pp. 1235–1251). Association for Computing Machinery

Reflecting back on the past decade, the way I’ve been able to keep this project going for so long is by ‘sneaking it into’ a more traditional Ph.D., postdoctoral, and early faculty career path. There would be no way for me back as a grad student to somehow get a magical ten-year grant to build Python Tutor since the idea wasn’t at all novel – code visualization tools had existed for nearly 30 years even back then 130. In fact, I doubt that I could even get long-term funding nowadays to work on a new research software project with similar ideals – focused on providing direct value to users rather than on producing publishable papers right away.

So why try to do this in academia at all? Wouldn’t this kind of ‘product-oriented’ software development work be better done at a company? No. In my experience, there are many kinds of highly- useful software that do not have marketable value, so companies do not fund their development. A code visualization tool like Python Tutor is one of them. Over the past decade I have been closely tracking what technology companies have developed in terms of tools for learning to code. Even with billions of dollars of collective funding (within big companies, from VCs for startups, and from philanthropists for nonprofits like Khan Academy), to my knowledge no company has ever built its own code visualization tool. (But a few have integrated Python Tutor into their products.) This suggests that such tools are not marketable and will likely not be developed in industry. But clearly they have proven to be very useful for both learners and researchers, as Python Tutor has shown with its mil- lions of users and dozens of papers built upon it. I believe if Python Tutor wasn’t developed in academia, then it wouldn’t exist. An alternative is to develop it as an open-source side project while working in an industry job (which I seriously considered), but such indie efforts can be immensely hard to sustain long-term 37.

Software-based researchers often strive to build systems containing high-level ideas that are likely to generalize, since those make for more compelling academic papers. However, we believe that trying to be too general actually hinders scale and sustainability. To build long-lasting software that can organically grow a large userbase, one must instead start specific.

In 2009 we created Python Tutor with a very specific goal in mind: to provide a convenient way for students and instructors (such as ourselves) to walk through Python code step-by-step and see the values of variables.

Instead we started it as a super-specific and non-researchy project to ft a niche user need and then only generalized later as it built momentum. We definitely did not start this project thinking about how we were going to get papers published from it.