Software distribution management
The development environment I worked in involved multiple streams of development for different release dates. Software projects ran in parallel, integrating their code into one release or another. Code being developed during say October for release in December would naturally rely on code destined to be released in November. In addition to project streams and temporal dependencies there are also the traditional software package dependencies (product A relies on product B to be installed). Add to all this the fact that not every piece of software is destined for every machine (there are different classes of machine, right down to individual host variations when necessary) and life rapidly gets complex.
I needed a tool that would stop preventable errors, and allow its human operator to focus on high-level decision making.
I couldn’t find one so I wrote pacman (no it doesn’t eat your software ).