Study design patterns. The definitive guide, Design Patterns: Elements of Reusable Object-Oriented Software, is a good place to start.
Also study anti-patterns, which are common solutions that end up being counterproductive to the problem are meant to solve. There is much written about both patterns and anti-patterns.
Get proficient with tooling: graphical debuggers, unit testing frameworks, static type checkers, linters, scaffolding tools, build automation tools, source control. Tooling makes the difference between a coder and software engineer.
Learn functional programming if you don't already know it (shameless plug but functional programming is awesome).