How to design future proof tables? I am new to database design and have started developing my first schema.

Some of my tables (e.g. user_profile) I am struggling to come up with an exhaustive list of fields for the table. A particular use case could be that a user wants to add an additional field to their profile e.g. favourite color.

I have read a few articles that say the way to capture this use case is to include an 'other' field to the database. This field then maybe contains a json string of additional fields.

Is this method the best practice way to add additional fields to a table? It seems somewhat hacky to me. The obvious con is that the additional fields will not be as accessible when the database runs a query.

Note: I can see that there may be two different scenarios here. One where users have a personalised list of fields (in which case i think the method above will be the only way). Another where over time I realise all users would benefit from having an additional field in their profile. Comments on both scenarios would be appreciated.
Where info is personalised it should be normalised into linked tables that only join to rows where that optional column has been added.  Also if you might be adding many columns or long data it is common to have a core user table with extended info tables mapped on a one to one basis.  These methods allow for smaller indexes more specialised to each query scenario.  

Generally, good normalisation and matching tables well to real world entities rather than theoretical ones gives the most adaptable and future proof design.