game.Players.PlayerAdded:Connect(function(Player)
wait(2)
local Part = Instance.new("Part",workspace)
Part.Position = Vector3.new(Player.Character.Head.Position)
end)
Does not work, it does not give any errors, it spawns at a random place in the workspace.

2 comments
To wait until the character has been added without having a Player.CharacterAdded:Connnect(function() end) you can just use Player.CharacterAdded:Wait() :) it works really well!
Just if you want it.