Article points it out but to put a little emphasis on it. Its a good idea to implement a software level keep alive instead of relying on the TCP level one. Some ISPs drop keepalives, especially cellular carriers (support is optional and not guaranteed per rfc). Keeping a persistent connection over some of these networks are tricky and require different minimum timeouts... and some charge by amount of data so you want to keep it as minimal as possible in IoT land.