Traits of good developers
Thomas Maximini / November 02, 2019
9 min read
What are traits of good developers?
Photo: @peteriveyphotography unsplash.comconst developer = { isLit: true };
This is an opinionated piece and by no means a complete list. The understanding of what is considered a good developer is a highly subjective topic. These are some of the traits that come to my mind when I think about the people that inspired me and sparked enthusiasm and productivity at my projects. If you disagree or have anything to add tweet at me to let me know
-
Don't panic
Funnily this was one of the first concepts I was taught in university at my CS degree - Don't panic! Why? Because for new developers it is very common that when they are confronted with a complex problem that they don't understand entirely right away. Not understanding the whole problem or knowing the solution for it leaves us feeling overwhelmed - which in turn often times shuts down our thinking process completely. More experienced developers break down complex problems in smaller work units (sub tasks) and create a roadmap in their head. This way they can solve the puzzle step by step, prioritising sub task depending on importance and leaving out the question marks for later. Even if they don't know the solutions for each subtask right away (that is rarely the case) they know how to find the necessary answers and where to dig. Depending on schedule, this might involve delegating some of the tasks to other team members. Sometimes the best ideas come late at night when lying in bed and thinking about something completely different.
-
The ability to abstract
The ability to abstract complex problems into implementations might be the most important trait of a good programmer. What is the data model? How do we transform things from one state to another? What is the desired control flow? How can we describe a real world system and its processes with code and data? Yes, with abstraction. Many times this is also where your computer science theory will be helpful, because knowing design patterns and theoretical concepts can help you to think about a solution that otherwise might not occur to you. This can be self-taught just as other parts of software engineering of course. A general problem solving mentality and logical thinking helps here as well.
-
They know their tools
Programming is a craft. Many things are just trained eyes combined with muscle memory and experience. Some things become automatic after some time. As with any profession this requires a high level of familiarity with the tools we use regularly. These include but are not limited to: The command line, Git, your favorite IDE, your programming language, tools such as bug trackers, profilers, your favorite frameworks, developer tools and so on. You name it. These tools obviously vary from programmer to programmer, the important thing is to master the ones you need in order to be productive.
-
They have a beginners mindset
The tech world is constantly evolving. If you are not actively trying to stay up to date and curious to learn new tools, features, frameworks and keep your eyes open, you might feel left behind quickly. Good developers are usually eager and motivated to stay up to date but as it is impossible to learn everything they also have the ability to filter and judge quickly if something is relevant for their business / career or not.
-
Good communicators and listeners
Developers don't just sit on their desks with headphones and nerd away all the time, they have to actually communicate. There are meetings with project managers, stakeholders, other developers where we discuss timelines, estimations, ideas, features, problems, implementation details. It is important that we are able to express our ideas, visions, problems and so on cohesively with our co-workers. This means explaining our own opinions as well as listen and consider other opinions in order to find the best possible solution for everyone. And because our job is not just technical but involves people and emotions we all should aim for a non violent way of communicating and show empathy and compassion towards others.
-
Good mentors
Everyone started somewhere. Without mentoring there would be very few experienced programmers out there. Most of us will still remember the early days where we knew next to nothing and ... It is important to be inclusive and to mentor everyone as well as accept mentoring from others (create a shared ownership of the code). This can be done through pair programming, code reviews, team chat, or in person.
-
Best practices
Great developers know and try to enforce best practices for themselves and their teams. This might be things like static code analysis (code style, linting, prettifying) or things that affect the processes inside a team like git workflows, code reviews and so on. A code review is also a great place to share best practices that are code related with the team - it is important to note here that there are always multiple correct ways to solve a problem and that it is best to decide in the team, which best practices should be followed.
-
Comments
Many people think coding is just adding more and more code until something works. But most of the time is actually spent maintaining, refactoring, rewriting and improving an existing codebase. Therefore a small comment here and there can make all the difference. Of course we should aim for self documenting code by choosing useful method and variable names and writing readable, concise code. Nevertheless it is necessary sometimes to just annotate what some code does. It might also be useful for yourself before actually starting to write the implementation to write down the different steps of what needs to be done in comments. Nothing is worse than trying to figure out what someone was doing in a 500+ LOC funtion without any comments.
-
Testing
This is a tough one. Most people know or have heard about the importance of testing even early in their career. But the point where you actually start writing tests because you are convinced they will save your ass in the long run again requires a certain experience. Many projects run for years without tests, and every time they get deployed people start praying that everything runs smoothly. These projects tend to have much more problems with bugs, unforeseen errors and site reliability, because it is easy to introduce new bugs when there are no tests in place. When a codebase grows, it will get more and more difficult to maintain. When we make changes to or refactor large files it is easy to introduce bugs - the feature we are working on might look good but maybe we broke something on the way at a different place in the app? Without automated tests it is hard to tell, because testing manually everything each time is tedious, time-consuming and error-prone. Often times teams are not writing tests because of time pressure from project managers early on (it takes too long) but they forget about the huge benefit in the long run.
-
Automating
Imagine you have to do the same task day in day out all over again? Like "oh I have to manually deploy the webserver each time after we changed something or we have to resize all these images the client gave to us to fit the desired size of our website...". Sounds like a waste of time and energy? Yep. This is where automation comes in, and programmers love to automate things. Luckily, today we have so many tools we can use to automate most of our processes, but even today sometimes it might be necessary to spin up a little shell script and cron job to do the automation we are looking for. If you find yourself doing the same repetitive task over and over think of a way how you can automate it!
-
Invest in themselves
Good developers invest in themselves, because they know that their skills and knowledge increases their demand on the market. And also because they tend to be curious about new technologies. Investing means both time (meetups, networking, watching tutorials) as well as money (paid memberships for online learning resources, attend trainings online or in person, paid mentorships). So for those who don't feel they are learning enough on their day jobs or in their current projects it is always advisable to invest a bit of time and / or money and improve your skills, learn a new language or a new tool. Time between projects can be spent wisely to pick up new things. I personally keep a list of things that I want to learn or at least experiment with because I feel I want to add it to my arsenal, so whenever I feel motivated or have some free time at hand I start looking for the resources to learn it and try to apply it in a side project.
-
Soft Skills
Last but not least I think great developers are great team players. The best programmers I have worked with used to be very humble even though they were highly skilled. The "rockstar" or 10x engineers that pretended to know everything were usually good at what they do (programming), but not listening to other team members and stakeholders and insisting on doing things their way they were unpleasant to work with. This often led to less-than-optimal outcome for the project. I find it important to aim for a good mood in a team, that means a high level of empathy, good listeners, sense of humor, humbleness, helpfulness, reliable, openness, curiosity, you get the idea. If you show these traits it will usually help you to become a better developer.
Thanks for reading! Agree or disagree? Missed something? Tweet at me @tmaximini