I found following five guidelines very useful as per my experience:-
1. All the beans stored in session scope, page flow scope,
and view scope need to be serialized. We can serialize backingBean scope as
well if any value is changing from the UI.
2. All the referenced member objects in the serialized class
should implement Serializable interface.
3. It is strongly recommended that all serializable classes
explicitly generate default serialVersionUID value from the JDeveloper.
4. Do not use any non-serializable (for example
XMLGregorianCalendar) data type in the serialize class.
5. If any object (UI components) is not serializable then it
must be marked Transient.