We have a handful of procedure files that we use. They are grouped by functionality / commonality. We've also added things like ZIP functionality to our apps (using 7-Zip), for example, and we use common shared classes for things like that. So, we use both.
For generic code, we typically have a small number of separate PRG files with many functions contained within. We probably have 150 separate custom functions we use that are shared. Ways to process a messagebox() and log it to our logging system. Determining if a value is KB, MB, GB, or TB, etc. All kinds of things.
I can't see why anyone would hate SET PROCEDURE TO. At any point in source code, even foreign source code you're debugging, it's easy enough to know what all is in scope with SET("PROCEDURE"). Pass the output through a beautify function (in one of those procedure files) and it can be a nice list if need be.
In any event, there are definitely strong views on both sides. I look at things as being tools in the toolbox. Some people are partial to a certain set of tools, others to other tools, but all of the tools are there and all of them work. VFP is truly amazing like that.
In the company I work for, I use more XBASE than other people do, because I grew up in FoxBASE+ 2.x. I learned how to do everything using that tool, and those deep roots still permeate my code. There are some tasks where a SET RELATION TO is the right solution. Others where it's not. But having the ability to do the same task in multiple ways ... just an amazing feature of mighty VFP.
Microsoft committed a sin by killing it. They removed from the world a most powerful system, and they did it because it is a tool of freedom and not as much revenue as what they've evolved into over times. They harmed the people of the world by what they've done with regards to VFP.
--
Rick C. Hodgin