The answer is: It depends. At first glance, the two look very similar and there definitely is some overlap in functionality between Groups and User-Defined Fields. The one to use depends on the needs and structure of your church, and how you want your information organized. A general rule of thumb is that User-Defined fields should be used for storing information about people or families, and Groups should be used to classify people together around a common purpose.
Let's say you need to know the date that a nursery worker had their last background check. The best solution for this type of data is a User-Defined Field. This approach makes it easy to create a Smart List of people who have current background checks or a list of those who are up for renewal. Groups don't offer an easy way to find this information.
Here are some other common uses for User-Defined Fields:
Groups are the go-to choice whenever there is a physical group or class or ministry that meets, or whenever you need to take attendance or do Check-In for an event. For example, bible study or Sunday school classes should almost always be configured as groups. However, groups can also be used as "virtual lists" of people, even if the group never meets. For example, you may create a virtual group for various spiritual gifts or talents. This allows you to maintain lists of people which common characteristics.
Common uses for Groups include:
Sometimes the best solution just depends on your needs. Let's say your church has 7 elders and each of those elders oversees a small group of members. Creating a Group for each elder and assigning people to that "group" is good solution. However, you could also create a User-Defined selection list and add each of the elders as options for that select list. This allows you to assign each person to one of the elders by selecting the appropriate elder from the User-Defined selection list. In this example, if you want to assign "people" to an elder, either option would work. However, if you want to assign "families" to an elder, the best solution is to use a Family User-Defined Field. With a family field, you can quickly change the value for the entire family, whereas with a group you would need to change the group for each member of the family separately.
Another good rule is to use a User-Defined Field when the information you're storing applies to everyone (or almost everyone) in your congregation, and to use a Group when it applies to a small(er) subset of your congregation. For example, if you wanted to track who was a member of the choir, the best approach would be to create a Group and assign the choir members to that group. It would make less sense to have a User-Defined field for this, since most people in the church are not members of the choir.