Interactive programming using notebooks (such as Jupyter), is probably one of the most productive ways to write software. More specifically, it’s an amazing tool to use when you’re learning new things (like with data research), and specifically when learning a new shiny technology. I think this is kind of paradoxical because in my own experience most libraries do a poor job of making it easy to use them in an interactive environment. This is a story about my own python library that did a very bad job as an interactive tool, and how I solved it by creating custom auto-completion tools. We’ll go into why and how you can use the same methodology to improve your own favorite libraries, and even dive into using the same ideas for non-interactive development using VSCode language servers.