No that is ok! I thought this would happen. Here is the updated code, which should work. Good luck 
local boss = workspace:WaitForChild("NPC"):WaitForChild("Humanoid") --We need to run the code without a property changed signal for the first time it is in the game
script.Parent.Size = UDim2.new(boss.Health/ boss.MaxHealth, 0, 1, 0)
local signal = boss:GetPropertyChangedSignal("Health"):Connect(function()
    script.Parent.Size = UDim2.new(boss.Health/ boss.MaxHealth, 0, 1, 0)
end)
local deathsig = boss.Humanoid.Died:Connect(function()
    signal:Disconnect()
end)
deathsig:Disconnect()
boss = nil
workspace.DescendantAdded:Connect(function(des)
    if des.Name == "NPC" then
        local boss = des:WaitForChild("Humanoid")
        script.Parent.Size = UDim2.new(boss.Health/ boss.MaxHealth, 0, 1, 0)
        local signal = boss:GetPropertyChangedSignal("Health"):Connect(function()
	    script.Parent.Size = UDim2.new(boss.Health/ boss.MaxHealth, 0, 1, 0)
        end)
        local deathsig = boss.Humanoid.Died:Connect(function()
            signal:Disconnect()
        end)
        deathsig:Disconnect()
    end
end)