We recently revisited the document management in one of our inherited projects. The workflow was a good example of "it works, until it doesn't".
Users uploaded a ZIP file containing all documents. The system extracted it to a directory on the server, and the application read that folder to display them.
As the number of documents grew, the limitations of this approach became impossible to ignore.
🚩 Updating or adding a file required re-uploading the entire archive
🚩 Finding a document meant digging through a massive list for normal users and multiple levels of directories for admins
🚩 Old files accumulated if the names were different
🚩 Deleting files required someone with server access
If those people weren’t available, work stopped. Granting wider server access would have introduced security risks, and not everyone had the technical know-how in the first place.
Our goals were to move away from "server-level" management, give users more control, and reduce lost productivity.
We replaced the large combined ZIP upload with smaller ones, indexed the documents in the database, and added the option to manage individual files directly in the Django admin. We added file management for admins, including categories, filtering, and the ability to set the display order of uploads manually.
During migration, we discovered outdated files that had quietly lived on the server for over a decade.
The Result: 10 years of data were now searchable and manageable in seconds, no server credentials required.
Software should empower teams to work independently. Sometimes the biggest improvement isn’t adding something new, it’s removing the friction that everyone has quietly learned to live with.