Rational for any security software follows from taking a risk management approach - identify risks to your computer and then what mitigation measures are appropriate/required. Nevertheless it can be interesting to explore capabilities of firewalls, anti-malware, etc.
Regarding the macOS firewall, do you have significant risks which it can address and preferably without inhibiting your computer use? You presumably want your apps to work as intended, and don't want any firewall to inhibit them, though very few apps accept incoming connections.
And, if your Mac is connected to your home LAN, then you already have a firewall in your home router which is most likely quite sufficient for protection against outside attacks.
The case for turning on a firewall is if your Mac is used in insecure networks - for example, hotel Wifi. But to address threats in that situation it is arguably better to make sure that the Mac connects via a VPN service.
So I am making the case that 'normal' practice is not to enable the incoming network firewall included in macOS. 'Best' practice is dependent on situation and risk profile.
Regarding firewalls, if one is required you are much better looking for one that a) controls both outgoing and incoming connections, and b) has distinct profiles for different network connections (home LAN, work LAN, public wifi, etc.).
So I get to 'best' product which is to use more advanced firewall software. In my case I use Little snitch which fulfils the two requirements in the last paragraph. But in addition it has 1) a more advanced graphical interface for firewall rules, 2) comprehensive application based network monitor, and 3) some knowledge of applications, developer signatures, and so on.
At present I use Little Snitch in monitoring mode - that is without any active blocks. Whilst it is very capable as an incoming firewall, Little Snitch is most often used to block outgoing connections where the user feels that an application is making more outgoing connections then are really necessary (Adobe might be considered guilty) or don't make clear what content is being sent via outgoing connections.
Note, I am a user of LS, and have no other connection with the vendor.