A agree with what Mike says. Also there is no best way and all these possibilities of locking manually vs automatic only, buffering or not.
Andy Kramek has an article about the subject of locking and buffering. He opts for optimistic table buffering as the best option, but it depends on the case.
The first thing to learn is, he buffering option of FoxPro mixes two things into one: Locking and buffering are separate things. They are closely coupled, but are two things to consider separately. I agree wholly on Andy Krameks point of view [1] but one thing is more true than anything else: You can always use table buffering instead of row buffering and have more control about when to commit a single row, have more freedom to move around in the buffered table, than when doing row buffering only.
Also don't be lead to wrong ideas because of the terms optimistic and pessimistic, this has nothing to do with your overall view on life. Just read about the mere technical meaning of these things, they are all explained very well, and so you can decide by taking each single part into consideration. You can really make good use of a decision matrix about what best fits your need.
I can ttll you about experience, but it's not necessarily valid in your case. For example I made both bad and good experience with RLOCK and FLOCK: Good experience was usage of these for exclusive increment of an ID counter, bad experience with them was for locking out secondary users from editing. Either the locks weren't respected in parts of a larger network - which means due to bad syncing and forwarding on the OS level secondary users were able to edit locked records - on the other side locks persisted longer than they should even when you closed tables and used FLUSH FORCE, again bad syncing of the lock info on a file or part of it. But that really also depends on hardware and software settings. We nowadays know about the bad influence of OpLocks for one thing, but it surely is not the only thing, which can hit your theoretical plans.
So overall I got a bigger fan of not locking manually, but you may need it, if you need to only allow one change at one station at a time. A good example for that is lending books from a library. What you finally do does not only depend on how it should work theoretically and how it really should work theoretically, not only in your understanding, but also depends on how it work practically.
There really is no best practice here. There is your needs - and only you or your customer can tell that - and what practically works.
You can consider hoe the non FoxPro world works: Disconnected. If you go to web or the client server, you make a request, get a response and are then disconnected again, SQL Server work that way, Web Servers, too. So thinking in that direction is not wrong and if you do that, you would rather need to forget about the option to lock and reserve something. If you consider that restriction and still find a way to make your application work, it will be easier to later migrate to one of these technologies, when you will need to move away from FoxPro. It can make it harder to fulfill your needs, but it will also leave you with less options and make it easier to decide.
Bye, Olaf.