So i am doing a game, and i need for it to check, if player did the obstacle course, well, i could use data stores, but it won't be as effective as it needs to.
dataStore = game:GetService("DataStoreService")
obbyStore1 = dataStore:GetDataStore("ObbyStore1")
-- and such stuff
Is there any better way?

2 comments
If the player touches the finish part, you could signal that they have completed it, no? Using that part's Touched event? Or do you aim to do it a different way?
You can also increase a number value by 1 at several points on the obby where the player touches a part and then check if the number matches the number it should. This way it is way more difficult to cheat.