Symptoms of a Good Developer
In my career I have met, worked with, and even taught many good developers and they have certain things in common. Here I do not intend to give a piece of advice but to simply make an observation about what is symptomatic for good developers. Replicating these “symptoms” is as futile as pretending to be autistic - it does not mean you are or will become one, no matter how glorified it is for some reason (as if it’s a superpower). There’s a long and individually nuanced path they all walk to acquire these characteristics (no, I don’t mean autism).
Confident With The Unknown
Are you really having fun if you know everything you need to build the software? Most average developers fear and tremble before the technical difficulties in which they are not well versed. There’s always the problem of self-esteem, or rather - self-efficacy. Good developers tend to develop this special sense of confidence where “if they can do it” is not an issue, it’s just a matter of “when they can do it”. In fact, they are always drawn to these kinds of challenges - it’s the thrill of exploring something you have no idea about (yet). There’s a certain inner need in them that drives them outside their comfort zone. I find it’s not always pleasant or exciting, but the lack of such challenges is somehow more unbearable to them.
My last group of students (as of writing this) were exceptionally talented and hard-working, but one of them did something very ambitious that exceeded my expectations (I have had many students so usually I am very realistic with my expectations). She decided to build a completely different project than the one we had built together with the rest of the group throughout the front-end development course. Most students usually choose to build something very similar to the learning app we build together, because it’s a very secure foundation. It isn’t to say that the students that tend to play it safe do unimpressive or unoriginal projects, in fact a secure foundation allows them to build and expand to very interesting directions. Nevertheless, choosing a completely different basis is far more challenging, because even the starting point gives you trouble and hinders the inertia you might build up with a more familiar starting point. Granted, her project wasn’t finished when she presented it, but the technical feats she achieved were more than impressive. The app idea itself was quite interesting and useful, but it’s the fact that she combined many technologies that I barely even mentioned throughout the course and they were integrated very well with the core of what she had learned. When asked why she chose such a difficult and different project, she replied: “Well, it wouldn’t be much fun, or educational, if I had built the same thing we learned already.”
Usually good programmers struggle too, but do not despair - in fact they have fun. Continuing with the example of the same student, looking through her code was an absolute joy. Just like in any beginner’s code, it had weird parts, where she clearly had no idea what she was doing, but there was no sign of despair. Usually beginner’s code is full of traces of dozens of unsuccessful attempts where one eventually (and probably accidentally) worked. Her code was not only leaning towards best practices - which is beside the point anyway - but full of joke comments and funny notifications on the user’s end. An obvious indication that she was having fun, even though she was treading in the unknown territory.
Good developers are very attracted to the software, tools and concepts that are foreign to them. One of my colleagues (who is overqualified for his side-gig position) keeps complaining that he isn’t learning anything and is considering leaving, even though the salary is pretty good.
Developer Experience
They are not just writing code to please the users or product managers. Exceptional developers tend to build software that makes sense not just to the users, but to the developers as well. It’s not just the importance of simplicity I am talking about, but the mindfulness of the developer. Good developers expect their code to be looked at, modified, and extended, so they account for that. They might implement a solution but spend a lot of time on refactoring it in a way that makes more sense.
I honestly think that this is one of the key factors that separates people who can code from the actual software developers. Code isn’t really the instructions for the machine - that would be machine code that is compiled from the code we write. Code, therefore, is a medium for communication between the developers. Writing code that is not only performant, but easy to understand and extend requires a certain skill. I would even claim that it is actually a soft skill, because you need to put yourself in other developers’ shoes. Speaking of soft skills, I noticed that good developers enjoy showing off and explaining what they made. They are very keen on communicating the technical aspects which some developers keep to themselves.
A Bit Unhinged
Unhinged is the closest word I know on top of my head that translates well to the Georgian word: “მოცურებული” (motsurebuli). It means that something in one’s head has slid away from its place, just like a door with its hinges removed. Obviously, I do not mean they are mentally unstable or deranged, but rather that they are unpredictable. One day they might come up with the most ridiculous idea for a project and in a few days they not only follow it through but create a technical masterpiece. Completely uncalled for, but somehow still impressive and (sometimes) useful.
For example, a colleague of mine who was a newcomer in the team decided, out of the blue, to build lazy-loading in a legacy Angular.js router that loaded Angular 16 components. He even received a bit condescending remarks from one of the core developers, claiming this wasn’t really possible. Nevertheless, he made it work. With a surprisingly simple solution, even.
A famous (and extremely talented) twitch streamer tsoding recently built a 3D Doom-like game engine in JavaScript. No, not with WebGL like a sane person would, but with good old JavaScript canvas. He faced ridiculously difficult challenges, because canvas was never meant for such things. Did that stop him? Of course not, not only did he make it work seamlessly, but he also integrated a multiplayer feature. There were points in the recordings of his stream where I thought he would eventually give up, but he didn’t.
Concluding Notes
It’s always fun to come across good developers who show these “symptoms”. I like to think that some of them rub off on me. I am not going to recommend imitating them, because - frankly - I don’t think it’s going to work. All I know is that if you haven’t gotten to the stage where you have at least some of these traits, you still need to keep going. Then again, good developers keep growing anyway and don’t let anything stop them. Maybe you are a good developer in some unique way? Or maybe not. I wanted to make an insightful conclusion here but I think I am too tired to do so. There isn’t probably that much to conclude here anyway - just some observations I wanted to share.