A software developer has two skill sets, the programming skills and the non programming skills, from all this the most important skill of a software developer is “Getting things done”. Let´s prove it.
About the design
Some may say that the most important skill is to be a good designer, well, there is no such thing as good design. How many times have you been stuck discussing what design pattern is better, if it´s better to use an abstract class or an interface, what design has better encapsulation…?
Design is overrated, good designs is like opinions, we all have one, at the end everything is about the execution. A good design always turns to be the design that complies with all the inputs of the application, and that can only be proved once that the code is done.
Keep in mind the following fact, for a given problem there are thousands of good designs that can be applied, but there is just one valid logic, no matter what design you pick, the logic behind it will be the same the only thing that will change is the structure.
There is a very unproductive type of software developer which insists in having a perfect design before start coding, that´s very common on junior developers that want to impress their colleagues, this type of developer can as well easily get stuck in a discussion with his colleagues about design.
I hear you saying… “But… We still need to have some sort of design on mind…” Yes! The idea is to spend as less time as possible on the design, just make sure that is good enough by having an informal review, once that the starting design has been outlined give a developer the ownership of that task and keep doing informal reviews making sure that the quality of the code is high by making sure that it follows the most popular principles as the SOLID principles, DRY e.t.c.
About the code
Now I hear you saying “… You just said that we have to make sure that the quality of the code is high, so shouldn’t that be the most important skill of a developer?…” Well, yes, I agree that is really important, much more important that the ability to come up with good designs, but still, there are these facts about code:
Fact 1. All the code which enters the maintenance stage will eventually become bad code.
Fact 2. Your code is always good, other people code is always not that good. The “My farts doesn’t stink, your farts do syndrome”
So there’s a point in having good code as it will improve the time you will spend fixing bugs and doing changes, but all the code is doomed to become bad code eventually, so don’t expend too much time there either.
About the testing
The development is not done if it has not been tested, and from the developer point of view that means at least unit tested with a 80-90% coverage at least.
Another very common mistake on junior developers is to think that they are done as soon as they finish coding, I can’t stress enough how wrong is that, no matter how good the code and the design are, if they are not tested.
There isn’t a a better team that the team which is focus is “Doing things”, they will take care of having good code and the tests for you, they won’t care too much about designs, they will use just the enough time to do good code and they will provide you with the right amount of tests.