The history of hillmaker#

The very first version of hillmaker was written for analyzing a hospital based Short-Stay Unit (SSU) when the author was an undergraduate interning at a large health care system. That very first version was written in BASIC on a DECwriter!

DECwriter, Tektronix, PDP-11 (192826605)

Over the years, hillmaker was migrated to FoxPro, and then to MS Access where it lived for many years on SourceForge. The MS Access version got a lot of use in numerous healthcare capacity planning related projects.

In 1999, I left industry and joined Oakland University as a faculty member in the School of Business Administration. This prompted me to write a journal article about hillmaker.

Isken, M. W. (2002). Modeling and analysis of occupancy data: A healthcare capacity planning application. > International Journal of Information Technology & Decision Making, 1(04), 707-729.

This article gives several examples of how hillmaker can be used in actual hospital capacity planning projects and shows what the original MS Access based implementation looked like. Unfortunately, development on this version languished as it become increasingly difficult to support an MS Office based application due to changes in the how add-ons were managed in MS Access along with corporate IT security policies looking unfavorably up things like registry changes on Windows systems. So, hillmaker continued to get a lot of use but no improvements were made.

In 2016, I moved it to Python. The first Python version was pretty slow as I was (sadly) doing a bunch of pandas DataFrame updates due to my somewhat limited Python experience at the time.

I did a few hillmaker related blog posts in 2019 showing how hillmaker could be used to analyze cycle share data and how it could be called from R using the reticulate package. I also did a few updates motivated by some projects that were using the new Python version of hillmaker.

In 2022, I was annoyed enough with the poor performance of hillmaker to totally overhaul the way the computations were done. Almost everything got moved into numpy arrays and that led to dramatic performance improvements.

A former student of mine, Jake Norman, had taken a job at a large healthcare system and was using hillmaker for a few projects. Another longtime colleague was also using hillmaker as part of several projects at another large healthcare system in Michigan. These two things motivated me to make a serious push to do a bunch of hillmaker improvements. Jake had already made some improvements and he joined the hillmaker project as a collaborator. Over the last year or so we’ve made a number of improvements and enhancements. These include:

  • customizable plots,

  • added numerous input parameters for better control of hillmaker,

  • added an object oriented API to go along with the legacy function based API,

  • added a CLI that had all the same functionality as the other APIs,

  • added ability to specify inputs via a TOML formatted configuration file,

  • implemented a Pydantic model to centralize input validation,

  • added various conservation checks to try to avoid erroneous results,

  • finally wrote documentation,

  • finally implemented formal unit tests.

Future plans#

A GUI for hillmaker#

This is uncharted territory for me. Python has a number of frameworks/toolkits for creating GUI apps. A GUI would definitely help non-technical users to use hillmaker. Certainly the MS Access version benefited greatly from the simple form based interface - make some choices, push a button, get some hills.

Support for more data source types#

Currently hillmaker just supports CSV files and pandas DataFrame objects. It would be nice to add others such as directly from databases via SQL, polars DataFrames, Apache Arrow, Dask DataFrames, and who knows what else is out there.

Features#

  • ability to omit holidays from the analysis,

  • better support for accumulating workload in addition to occupancy to support staffing analyses,

  • scenario management tools including serialization,

  • new analytical features.