The daemonization of all our services (vsmserver/vsmagent/tlwebaccess/tlwebadm) use a very basic daemonisation system. Basically, BSD's daemon() call. This mostly works, but doesn't fully conform to the proper way of doing things. In some cases, this can cause bugs or annoying behaviour.
One such example is that we don't properly signal back to the caller when we are done initialising. We always signal success, and we do so before the service is really up and running.
systemd has a nice summary of what is expected in a SysV daemonisation:
We could also decide to delegate all of this by relying on systemd to do all of this for us. It would mean worse support for other init systems, though.