Are there any things to consider before granting VIEW SERVER STATE and VIEW DEFINITION to Developers? I would like to grant below to permissions to Developers group, on Production SQL Server:
VIEW SERVER STATE
VIEW DEFINITION (server level)

This is done to make them able to query some of dynamic management views and functions, view performance data, as well as see code (definitions) of all stored procedures and functions
Are there any drawbacks or any reasons why this is not good in certain scenarios ?
Any possible unwanted side effects of granting above permissions ?
Second question - if I grant VIEW DEFINITION in master database, that makes it server-level and it doesn't have to be granted in any user database ? Same with SHOWPLAN ?
VIEW DEFINITION is a database permission.  There is a corresponding server permission VIEW ANY DEFINITION you can add.  If you want grant some logins access to view server state and any all object metadata, you can do it like this:
create server role developers
grant view any definition to developers
grant connect any database to developers 
grant view server state to developers

You can grant SHOWPLAN for each database, or grant ALTER TRACE at the server level.  ALTER TRACE also allows the user to create SQL Traces which you might not want to allow developers to do on a production server.  This is all documented under Permissions.