All Articles

When can I consider myself a good software developer

This is based on a post published originally on Quora in Spanish

This is a very good (and often) question, and this reminds me of another question from Quora: As an 18-year-old with 2 years of experience, can I get a job as a senior developer?

This post walks through something called the Dunning-Krugger Effect, and this can be summarised with the following graph:

There is an interesting effect that happens to junior developers, who very often thinks that they know everything about development, but after a while, they start realising that there is a lot more to learn. This sometimes drove them to feel overwhelmed about how little they know. Some of them even feel bad because of this, and their growth gets truncated.

If you feel like this, you are not alone! In fact, for some time I felt like this myself!

For me, my learning experience in Software Development was something like this:

  • First I learnt Excel, how to use functions like IF and VLOOKUP (at this point, I wasn’t even thinking on pursue a career in software engineering, I was only a data entry guy)
  • Then, I learnt Java, (if, case, for, OOP)
  • Then, I got my first job, maintaining and developing forms with .NET (in this gig I was the only developer in the team, with zero experience working professionally. I was even versioning my code in Dropbox because I didn’t know that SVN or GIT existed!)
  • Then I learnt libraries and frameworks such as Spring, Struts, myBatis and the MVC architecture (at this point, I was in the peak of the mount stupidity, thinking “Now I know everything about software development”)
  • Later, in a job interview, I was asked about design patterns such as Factories, Facades, DRY, KISS (and I felt stupid and overwhelmed since there was much more to learn).
  • And then, SOLID (this is the part I realised that I knew nothing about software development, and out there are people WAY better than me). Here I was in the lower part of the curve.
  • And because of this, I learnt that the Architecture is more important than languages and frameworks (and how pointless is engage in fanatic discussions about which language is better)
  • Nowadays, I’m using Clean Architecture and Hexagonal Architecture whenever I can.
  • And there is a long way of learning, DDD, BDD, Event Sourcing and so much more to know.

A decisive point was, got over the fight of “Java vs .NET vs PHP vs Python vs Javascript” and understand that languages are just a tool to achieve a goal, not the goal itself. Every language excels in something, and some of them are really good in a very specific domain or context.

So, personally, I think you can consider yourself a good developer when you truly assimilate that languages don’t matter that much, but having a clear specification is more important.