Explicitly granting permissions to update the sequence for a serial column necessary?
You most probably need:

GRANT USAGE ON SEQUENCE my_table_id_seq TO writer;


Per documentation:


  USAGE
  ...
  For sequences, this privilege allows the use of the currval and nextval functions.


nextval() is the reason you need the USAGE privilege on the sequence for a table with serial column.
Details in this related answer on SO.  

Since a sequence is a special kind of table (and for historical reasons) GRANT ... ON TABLE works on sequences, too. But you do not normally need that at all.