What Does It Mean To Be A Great Developer?
As I've started to invest in my career and outline my goals and ambitions, I've begun thinking what I can do to move beyond being a good developer to being a great developer.
After some introspection, listening to others' opinions, and reading some well written articles, I've been coming to the conclusion that it means more than just great hard skills.
I read an article the other day on the myth of the 10x engineer and the reality of the distinguished engineer written by Fintan Ryan.
What the article was saying, was focus on soft skills. Not just hard skills. Such as developing others, helping & inspiring others, which the author thought was the most important quality of all.
Technical skill is just one set of measurements, but not the only set of measurements. Soft skills are just as important as hard skills. You may never feel the consequences for many years, but you will eventually. You will hit a ceiling on the value you contribute, it will be limited.
In that vein, I've decided to list and explain some of the soft skills I believe are important in going from good to great.
If you're not a team player, you'll never be a great developer. You might be a technical wunderkind, but if you can't: work with others, offer help, training, have an open mind, learn, check your ego at the door, you'll only be good. Not great. If a teammate asks for help and all you can offer is silence, you're not helping. How could you be? You limit your productivity. You limit your contribution and your value to the project at hand.
Meeting expectations is not enough, exceeding expectations should be your goal. That is not to say work free hours. It's not to say take on the whole project by yourself if you are working with others. It does mean to not just stay within the confines of your assignment. Help your teammates who may not have the technical or domain knowledge you possess. It means taking the lead when someone needs to step up. It means being willing. Just be willing.
Be humble. Check your ego at the door. Be willing to seek input from others. Involve others in the decision making process. Sometimes people who are not as skilled or as knowledgeable as you have ideas you haven't thought of. This happens to me all the time.
Take a leadership role and be responsible. Not only lead, but take responsibility. Don't throw anybody under the bus to protect yourself.
Don't make any technical decisions that may incur technical debt without involving others, explain why and get the team to agree before moving forward.
Have strong communication and interpersonal skills. Don't be the stereotypical, grumpy, socially inept or antisocial engineer. It's important to communicate with others who aren't as technical, such as project managers and analysts.
Understand project management. Don't dismiss requests for project estimates and timing by saying something like "It'll get done when it's done." Businesses can't run like that. We all know estimates are very difficult to predict and meet, and a good project manager will understand this and work with you on timelines. I'd be lying if I didn't say I was constantly battling timelines myself. No one who isn't lying can say they always meet or beat their deadlines.
Understand the customer needs. Think like a customer when designing and implementing software. You may want to implement something a certain way or with a certain technology to satisfy your nerdy curiosity, but the customer won't understand why it took longer or what exactly you're trying to achieve. Think on how to deliver for the customer and not for you.
Of course, keeping up with technology is crucial to a sustainable and adaptable career. Be in and expect to be in a constant state of learning. The world of web development moves very fast and new technologies can bring greater advantages, greater productivity, and greater value.