I have tried a variety of methods (books/audio/DuoLingo/Memrise), and the problem I find is that there is always plenty of vocabulary that is not relevant to me. The method that I have settled on is making my own flashcards in the free AnkiDroid app, thus only having to study words and phrases that I actually use, and can be very specific to my profession or interests.
Mandarin is classified as one of the most difficult languages to learn, taking 4 times longer than Spanish. (Source: https://www.state.gov/m/fsi/sls/c78549.htm)
One thing I recommend avoiding is mnemonics. Some people use a mental image, for example: “train station” --> “Garfield the cat at a train station” --> “gare” [French word for train station]. But this is bad because it adds an extra layer instead of just converting directly to the information that you want, so is too slow to be used in real life outside of a classroom. I made a similar mistake when learning Bulgarian, adding an extra layer by first converting from the Bulgarian alphabet to the English. Example: “Здравейте.” --> “Zdraveyte.” --> “Hello.”
If I have a specific question, I ask in the Italki community section to get an answer from a native speaker for free. (https://www.italki.com)
The ideal way to adopt new vocabulary (though not grammar) is to treat everything that you say as a single language. For example, you are already comfortable with the idea that the words “small” and “little” are different but have the same meaning, so there is no reason that you can’t add another word, such as “petite”, to this list. In this way, there is no translation, only memorisation.