It is an interesting approach what you are using:
analysis_fifo and analysis_export in the sequencer.
It would be interesting what you are doing here. The sequncer is a passive TLM component which cannot initiate anything.
what is wrong with extending uvm_sequencer?
Usually I do it and add lots of information messages, debugging functions in it.
Also sometime extended uvm_sequencer is nice place to keep shared info among sequences. Kind of config_db for single agent level.
super.connect() is making the connections between the TLM interfaces ov uvm_driver and uvm_sequencer. This is neccessary for the correct functionality.
There are many reasons to not extend uvm_sequencer:
It requires the use of p_sequencer in your sequences, which significantly reduces the portability of your code.
There is the chance to break the uvm_sequencer if you modify the run_phase(). People have created their own run_phase() (out of habit for every uvm_component) and spent significant time trying to debug why things don’t work.
Anything you put into the sequencer should be in the base sequence. This further enhances the portability of the sequences between environments.