icepack is a Python software package for simulating the flow of glaciers and ice sheets. Icepack is built on top of the finite element modeling library Firedrake, which makes it possible to describe physics problems using a domain-specific language (DSL) embedded into Python. This DSL makes the code you write look much more like the underlying math. Using this DSL, we've been able to create an ice flow model that users can easily extend and modify -- for example, substituting in your own sliding law -- while at the same time insulating them from some of the messier aspects of numerical modeling. In this talk, I'll describe some of the design decisions that went into icepack and why we made them as well as how we've involved graduate students in the development process. Finally, I'll give a live demo and discuss some future directions.