I'm looking for the good/right practices and I also wonder what advantages I can achieved when following the methodology of this. I can't seem to find many good articles addressing this.
That's a pretty broad question, but definitely a good one. Here are some things that beginners often get wrong.
Recognize that the representation that most convenient for the program might not be what's most convenient for the user. A trivial example is representing the i'th item in a list of N. Humans use 1-N but for the program it's easier to use 0 to N-1. Choose the representation that's most convenient for the program. Convert to/from human representation, immediately before/after output/input.
Structure the data to make it hard to become inconsistent. For example, don't represent the same thing two different ways. If they become inconsistent then which one is right? It's too each to change one and forget to change the other.
Programming often involves collections of things. Understand how you will access your collections and store them in data structures that are fast for that type. This is the reason that we have so many different data structures (lists, vectors, maps, stacks, queues, trees, etc). Each one provides fast access for one or more operations, at the possible code of slow access for other operations. Understand what these are.
Honestly, 85% of the practical aspects of computer science can be boiled down to a single page that describes different data structures, what they're good at and what they're bad at.
When starting a project, I usually find that it's easiest to start with the data. What do you need to store? What do you need to do with it (i.e., what methods will you need?). Once you have a good sense of your data, writing the code to manipulate it is easier.