Software development is easy. It's 2020. We can build an app. We can store and mutate data. It's all solved. Within reason if you can explain what you want a computer to do, I can make it do the thing.
Now: "The thing". That's the hard problem. What in the world are you building? What does it do? Why does it do it? Will anyone care that your thing does the thing it does?
I've been realizing a few phases between developers I've worked with in my career. It's three main levels of professional developers:
Within existing primitives, they can ship a new set of functionality on top.
For Example: "Add a way for users to like messages".
You need these people on your team. These kind of developers are incredible for continuous improvements and bug fixes.
You can build a product that's well scoped and well defined.
For Example: "Build a messaging app"
Good level two developers can take a well defined scope of work and ship maintainable code on time. They can define technical primitives from a non-technical design. They know how to break up work into executable deliverables and iterate until "the thing" is shipped. They can maintain and bugfix at the product level autonomously.
You can build a solution to a problem.
For example: "I need more customers"
Level Three developers are like Unicorns. They are designers, product managers, business analysts and full-stack coders all wrapped into one. Level three coders take abstract problems and ship concrete solutions to them. Level three coders don't ask "Should I use React or Vue?" They ask: "Should we build this at all?". A level three coder approaches the world with a ruthless bias toward shipping. Shipping small, iterating, getting their hands dirty, and pushing until their technology feels like magic to people that use it.