This is a big topic, just notes for now...

bind-key package to manage key bindings

I highly recommend the bind-key package for managing your personal key bindings.

bind-key Caveats

Quoting differs between bind-key and bind-keys

With bind-key quote command names with bind-keys do not quote command names.
;; Three ways to bind "cntl-c c" to comment-region
;; Single quote
(bind-key "C-c c"  'comment-region c-mode-map)
;; Function quote
(bind-key "C-c c" #'comment-region c-mode-map); maybe better?
;;
;; My favorite
(bind-keys
 :c-mode-map
 ("C-c c" . comment-region)
 ...
)
I usually prefer to use bind-keys to organize all my personalized key bindings for each keymap together.

No check for undefined commands

Be aware that bind-key does not check if commands are defined when bound.
(bind-keys
 :map global-map

... ("C-c m" . accidentally-forgot-to-load) )

Quietly binds the key accidentally-forgot-to-load. If you forgot to load it then you will not notice until you try typing C-c m, producing the error message
command-execute: Wrong type argument: commandp, accidentally-forgot-to-load

Arguably this is reasonable behavior; it may be convenient to be able to defer the definition of a command until after the keymap is set up.
In any case, please be aware that bind-key does not check if commands are defined.

Transition Period To Make Changing Typing Habits Less Painful

Changing the binding of a commonly used commands typically (pun intended) causes some frustration. Because it takes some time for your fingers to change their habits.

Here is an example from my own use of emacs.
After many years of using C-v with the default binding of scroll-up, I decided I wanted to use that for view-mode; and use either the PgDn key or C-. for scroll-up.
However after years of using C-v for scroll-up, I kept typing it as a habit, and found myself confused because I was unconsciously switching buffers into view-mode.

The strategy I took to ease the pain of transition was to first temporarily unbind C-v entirely with:

(bind-key "C-v" 'ignore); changes global-map
to loosen the association between C-v and scroll-up, and only later add the new association between C-v and view-mode.

How to lookup the default bindings

If you customize your key bindings extensively, you may forget the default key bindings of many commands. And good riddance, I am tempted to say when it comes to some of the less convenient bindings. However it is still quite useful to be able to look up the default bindings; because much of the documentation and commentary you might find on emacs refers to functions using the default key binding instead of the command name. For example, you may see:
Use C-x C-s to save the current buffer contents in its associated file
instead of
Use the command `save-buffer' to save the current buffer contents in its associated file
But what if you have bound another command to C-x C-s and forgot what the original binding was?

Fortunately it is easy to look up the default key binding. A fail-safe method is to use launch a new emacs process with the -Q flag which tells emacs to skip user init files.

% emacs -Q &
;; Then use M-x to call `describe-key' or `where-is', etc.

If you use the bind-key package to do all of your key binding personalization, the command describe-personal-keybindings can also be very useful.