When can I consider myself a good software developer?


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

This is a question I hear a lot, and it reminds me of another one I saw on Quora:  As an 18-year-old with 2 years of experience, can I get a job as a senior developer?

Both of these questions touch on something called the Dunning-Kruger Effect, which can be summed up in this graph:

It’s funny how this works. Junior developers often think they know everything, but then they realize how much they don’t know and start to feel overwhelmed. Some even get discouraged and stop growing.

If this sounds familiar, you’re definitely not alone! I’ve been there myself.

Here’s how my own learning journey went:

  • Early Days: I started with Excel, learning basic functions like IF and VLOOKUP. (I wasn’t even thinking about a career in software then—I was just a data entry clerk!)
  • Java and First Job: I learned Java (if statements, loops, OOP), landed my first dev job maintaining and building forms with .NET. (I was the only developer, totally green, and even versioned my code in Dropbox because I didn’t know about SVN or Git!) Looking back, I was probably at the peak of “Mount Stupidity” on that Dunning-Kruger graph!
  • Frameworks and the Valley of Despair: I learned frameworks like Spring, Struts, and MyBatis, and the MVC architecture. Then, in a job interview, I got hit with questions about design patterns (Factories, Facades, DRY, KISS). Suddenly, I felt like I knew nothing. Welcome to the “Valley of Despair”!
  • SOLID and the Slope of Enlightenment: Learning about SOLID principles really drove home how much I still had to learn. But it also pushed me to start thinking more about architecture and less about specific languages.
  • Clean Architecture and Beyond: These days, I use Clean Architecture and Hexagonal Architecture whenever I can. But I know there’s still so much more to learn—DDD, BDD, Event Sourcing…the journey continues!

A big turning point for me was getting over the “Java vs. .NET vs. [insert language here]” debate. I realized that languages are just tools. Each one has its strengths, and the best one depends on the job.

So, when can you consider yourself a good developer? In my opinion, it’s when you understand that languages are secondary. What really matters is having a clear specification.

What makes a specification “clear”? It means it’s detailed, unambiguous, and accurately reflects the needs of the users and the business. It includes things like:

  • Clear and concise user stories: What are users trying to achieve?
  • Well-defined acceptance criteria: How do we know when a feature is done?
  • Detailed technical requirements: What are the constraints and dependencies?

A good specification is the foundation for building good software, regardless of the language you use.

If you’re feeling lost in the “valley of despair,” here are a few things that helped me:

  • Focus on fundamentals: Master the core principles of software development (data structures, algorithms, design patterns).
  • Find a mentor: Learn from experienced developers who can guide you.
  • Embrace continuous learning: Stay curious and keep exploring new technologies and approaches.

The journey to becoming a good developer is ongoing. Embrace the challenges, keep learning, and you’ll get there!