I have a local script:
game.Players.LocalPlayer.Character.Humanoid.Changed:Connect(function(value)
if game.Players.LocalPlayer.Character.Humanoid.WalkSpeed >= 30 then
script.Parent.WSG.RemoteEvent:FireServer()
end
end)
Nothing happens. It's not firing the remote event because I tried adding print("Fired") in the regular script.

4 comments
For starters you need to make sure that character exists, if you aren't waiting for character anywhere in your code - chances are it will be nil when your function is set up. You should also run a check on value to make sure it is WalkSpeed, more things change in Humanoid than you realize. Other than that - I don't see anything wrong with this.
Ah - you may also opt to have your event in a different location. If your event is somewhere inside of player (other than Backpack), it is my understanding that the server cannot reach it.
Note that hackers can also change their character's part physics instead of changing the WalkSpeed to speed hack
If one of the answerers helped you, please accept their answer. It is considered good manners and shows that you no longer need help.