I played a ton of chess in my high school / college years, progressing to just over 2000 USCF before taking a break from the tournament circuit. In my opinion, if youre not an expert / A - level player and want to progress rapidly, here is where you should focus:
1. Tactics, tactics, tactics - So many games under the expert level are decided by a tactical slip. A strong knowledge of opening or endgame theory means nada if you walk into a combination midgame and get mated or lose a ton of material. Work on exercises to train yourself to look for tactcial opportunities in game. The exercises on apps like LiChess and Chess.com are good places to start. Chess training pocket book by Lev Alburt is a handy reference too (although this isn't entirely focused on tactics)
2. Pick 1-2 openings as white and black and focus on them. Don't try to master a dozen openings. Focus not just on the moves, but the key ideas once the opening is over. Also, and the OP pointed this out, focus on the key ideas for both white and black, so you will have an idea of what your opponent is (or should be) trying to accomplish. There a bunch of Opening Explorer type apps that will let you save a few of your favorite openings and walk through the different variations. Practice not just going through the variations but playing and analyzing the positions these openings create.
3. Run your games through an analysis program or go over them with a stronger player than you. As I mentioned before, frequently when starting out you will win or lose games based on tactics. Having a program or stronger player point out these opportunities in YOUR OWN games is a very effective way to learn to recognize them in the future. Any time you play a close, hard fought game where you arent quite sure what went wrong, you should be looking to run that through an engine or review with a strong player to find the turning point(s)
4. Play. Just like best way learning to program is to program / build stuff, playing more games will give you that experience to quickly recognize and evaluate a position. Also, one of the keys learning to program is not getting frustrated when nothing works when you start out. Same principle applies to chess :)