To all application developers who create a KStatusNotifierItem in their application, please consider making your icon as friendly to the user through automatic hiding as possible. The system tray is a very valuable bit of real estate and unless your application's entry there is actually useful to the user, it ought to be hidden. KStatusNotifierItem allows you to set the status of your icon to Passive, Active or NeedsAttention. Setting it to Passive will automatically signal the system tray to hide the icon automatically. The user may always override this in the settings, so if they always want it shown .. they can!
Of course, what is the meaning of "useful"? That's the trick here. We're trying to make the system tray as "quiet" as possible for the user so that the entries that do show up are a good signal to the user that they actually matter.
So now the battery icon goes away when the system is plugged in and the battery is at 100% charge and the information icon (jobs and announcements) goes away when it is empty. I've patched a few other applications such a konversation and ktorrent to also go Passive when they aren't actively downloading or there are no message alerts (respectively).
If your application doesn't have something to actually tell the user: set the icon to Passive. The system tray icon is not a replacement for the task bar. (In fact, in 4.8 it is quite likely that application entries will appear in the tasks widget instead of the system tray by default!) There is an exception (as usual ;) which is applications which provide user interface in their system tray entry, such as media players. We generally discourage such usage, but it can make sense in specific cases. Over time, we'd like to see these uses also phased out in favour of merging those interfaces with the relevant UI; media player controls and the volume control, for instance, or instant messaging accesses and a proper presence Plasmoid.