What is a Senior Programmer really? I wish I had known this when I was Junior

October 13, 2019

Note this post is about job titles or levels. This post is not about nomenclature or the possible distinctions between a Programmer, Developer and Software Engineer. I will be using all of them to refer to the person that writes code and builds Software in general.

How can we physically recognise a Senior Software Developer? Because the front of their laptop is full of programming stickers. The more stickers you have, the more Senior you are.

Joking aside, I'd like to clarify first the myth of X years of experience. I've read many times that a Junior Software Developer is one with 1-2 years of career, a Middle is one with 3-5 years of expertise and a Senior is one with more than 5-7 of experience. I cannot disagree more. There are Developers with 10 times one year of experience, whereas others have 3 or 4 very dense years of expertise. Which one do you think is more "Senior"? I bet you get my point.

Then, what are the differences between a Junior, a Middle and a Senior Software Engineer? In my opinion, there are 3 blocks that a Programmer must have:
  1. Technical skills: computer fundamentals, programming languages, coding, design, testing...
  2. Soft skills: communication, collaboration, empathy, teamwork and leadership skills.
  3. Independence: the ability to work by themselves on well-defined tasks with little or no orientation or help.

Having those essential traits into consideration here's my definition of the 3 most common programmer levels:

- Junior: They might have some basic computer or programming fundamental skills learned from school, university or courses but their domain of the language and tech stack is very limited. They can normally code simple features and investigate and fix some kind of bugs. They communicate little and mostly to report progress or ask for help. Their independence level is very low and they need regular orientation. 

- Mid-Level: They a good understanding of languages and tech stack and can finish some complex task by themselves. They can even own a set of functionality, a component or even a whole project. They usually have no problems to communicate well and they speak up when is necessary. They are not fully independent yet but can have a good impact on their team but at an organisation level. They're starting to learn some leadership skills. One of the problems some intermediate programmers have is that they think they know more than they know. That's because they're in a stage where they're have been reading many books, posts, and applying everything they've learned but lack the experience or wisdom. Might have fresh all the design patterns and they usually apply most of them, incorrectly. Inevitably, they tend to over-engineer.

- Senior: They have a solid understanding of everything related to their job, from code to toolset and even infrastructure. Normally, they're expert in one or more programming languages and knows extremely well one or many parts of the system. They communicate well and also strategically. Usually participate in technical meetings, providing not only ideas but solutions. Can help and mentor others. Have a high degree of independence and can make a significant impact on the organisation. Have developed some leadership skills already and can even wear a "tech lead" hat, leading a project or team temporarily. Their wisdom and experience are notable but some think they don't know anything, as they understand the more you know the more things are to learn. That's why some of them have impostor syndrome.

There is a popular quote that, even is a bit simplistic, I think is quite accurate. Here's my version with a little twist: 

"Average Programmers create complex solutions to complex problems. Good Senior Programmers create simple solutions to complex problems"

There are other job titles or levels I won't talk about in this post, like Principal Software Engineer (my current role), Staff Engineer or even Fellow or Distinguish Software Engineer (the real programming masters).

Now we have clarified the different basic levels and their expectations, What actions can you start doing from today to move your career to the next level? I'm going to give you some advice you can apply to all levels.

The first and most important action you should do is reading my blog posts (and watching my videos if you can understand Spanish). That's logical, for example, if you want to be a professional tennis player, you probably want to see how the great players like Djokovic, Federer and Rafa Nada (my namesake, which he is also from Mallorca) play and train. You want to follow, read, watch, study, imitate and basically learn from the best.

The second thing you can do is the following: work for an international startup. What you can learn working for a fast-growing emergent company is incredible, you won't learn that skills in the university, meetups, working for a local business or doing all the courses of the world. 

I can relate my professional career as a Software Engineer it took off dramatically when I joined an international startup. Then I was hired for a bigger fast-growing startup which ended up becoming a unicorn, that's it a billion-dollar company. When you work for a unicorn is impossible not to grow, either you and the startup success or both fail. There is not an intermediate point, there isn't room for comformity. You really want to be in this kind of environment, to work with excellent Software engineers. You don't want to be the smartest guy in a room, and in a startup, you won't be, unless you're two and you're the CTO.

Therefore, the key question is, How can I land a job into an international startup? Here are my top tips:
  • Improve your English (if your level is low or "medium", like most of the Spanish professionals have). You really need to excel at writing and speaking in English if you want to succeed in an international or an English speaking based startup. You should speak fluently and be able to communicate without any issue during an interview or meeting.
  • Have an attractive Online Profile. If you're good but are invisible, is very unlikely you'll get contacted from the top talent hunters. You really need at least a decent profile on LinkedIn (kind of your CV) and AngelList (where most of the startups are). Also, ensure you have some code and contributions in pages like Github and Gitlab. Having a nice account on StackOverflow and a personal (programming) blog can also help a lot. 
  • Sharpen your Technical and Soft Skills. Invest in yourself, it does no matter if you're Junior and has a low salary, you'll get paid interests in the future. And don't forget about grooming your interpersonal skills, learn to communicate well to be a good team player. Nowadays companies don't want to hire brilliant jerks but people that share the same values and work nicely in a high performant team.
  • Find a good Mentor. It is critical to have somebody that can orientate you and can provide you with regular honest feedback. Otherwise, it might be hard for you to advance efficiently. In case is not easy for you to find a mentor, start by following people that are a role model for you. You should be able to learn interesting things from them.

In summary, get out of your Comfort Zone. Magic happens when you leave the place where you're comfortable and no longer learning and challenging yourself. Make sure you can work with the best, that you make a great impact and that you can be a bit better every single day. Results will come sooner or later.

I would like to conclude with a related quote from Martin Fowler:

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand"

¿Qué es realmente un Programador Senior? Ojalá hubiera sabido esto cuando era Junior (in Spanish)

You Might Also Like