What is the difference between a graduate, a junior, a senior and What is the difference between a developer, engineer, a team leader and an architect in software development?

Let’s start with the obvious and correct answer.
There is NO A CLEAR LINE when you become junior, mid-level, senior developer/engineer. There is NO CLEAR LINE which decides when you are a developer and when you are an engineer.

So .. How to answer questions?

  • What is the difference between Junior / Mid / Senior Developer?
  • What is the difference between Developer and Engineer?
  • What does mean from a company point of view?

Well … My eyes start to bleed when I read some emails from recruiters with some cutting-edge vocabulary from ‘marketing bulls**t’ dictionary to tell me how great role and company are without the focus on the description of what is a Junior role I should apply for (I saw Junior role with 5 years experience in some technology that exists for 4 years and so on).

I know most recruiters (80%) do not care about what they talking about it as they care about commission and Christmas bonus so I can understand them but companies description can be super confusing too.

I did some pseudo-research about it and I realized that there are no clear definitions for junior, senior, developer or engineer. I mean there are many definitions and answer to these question on StackOverflow but … they feel incomplete and incorrect.

I decided to write this to show my ‘loose’ definitions of these word with some explanations and examples.

Let’s start with seniority. Seniority varies from Graduate, Junior, Mid to the Senior role.

The main reason why there is much confusion about distinguishing when you start to become mid-level or senior person due to blurry understating of “Seniority”. For me: Seniority role based on the variety of experience in problem-solving not on expertise in particular language, framework or technology. Seniority does not depend on time duration. For example coding, 5 years in Java do not mean you become a senior person. Yes, you may be an expert in the syntax of that language but still, struggle to solve a simple problem.
Whole life cycle looks more less like this:
  • Student when you learn about problem-solving through exercise.
  • The graduate is a first professional role after you finish learning (at university, at home or online course) where you learn about solving real problems, life cycle and methodology. They are guided by senior and tech lead on how to be a better gamer … I mean … programmer.
  • A junior role is a place in your career when you focus on having fun with writing software and get exciting when you get more and more experience with solving problems and get much help from senior people.
  • Mid-level is a sweet spot where you solve interesting problems and write lots of clever code.
  • Senior Role is when your focus more on leading and helping graduate/ junior developers to become an epic programmer by guiding them through solving the problem and help them to make decisions and trade-offs and you focus less on writing code (you usually solve most complicated problem cases and enjoy more and more meetings).

That’s all.

What’s difference between developer and engineer?

At university* where I studied it means in practice it usually means clever students are engineers and less gifted students are developers who in teamwork behave as engineer’s slavers that perform simple repeatable tasks. In real life is not like that.
(*) It sounds bit negative but my overall impression of study computer science in Aberstywyth was great. I highly recommend.
What it means in the real world? Well, I will start with a conclusion that for me it is the same thing and I can use exchangeably because I  didn’t see any pragmatic reasons to distinguish between developers and engineers. I did some research and I understood that both developers and engineers write software. The difference is that Engineers write software (framework, library and/or fundaments for the platform) that is used by developers to write software that is built on it.
That’s all.

Where is an architect in this?

Software architect* focus on leading architecture solution for the platform and contribute code like engineers (yes, I believe software architect role should exist and they should write software too).
(*I apologize for all ‘Agile’ orthodox for swearing here.)
    It does not mean it follows strict mediaeval hierarchy where that junior developer does donkey work by taking order from tech lead who is a senior engineer who took part of software development build on fundaments of the platform created by Veteran Architect because the success of delivering great software in given time depends on collaboration and knowledge share between all of them in the team.

What about Team/Tech leader?

    For me, It is a person who is most experience with project, domain and has the ability to provide a bridge between business (Product Owner), Software Architecture (Platform) and team.

Summary.

    When you describe your seniority and when company define who they are looking for then they should treat describe Seniority role based on the variety of experience in problem-solving and how this person will fit in the team. If you feel, you can distinguish between engineers who build core platform/ framework and developers that build functionality on your the platform.

Who am I in this context?

I am Sarcastic (mid-level) Java Developer. Why ? Because I have some experience with problem-solving using Java as my a primary language.
This is my view on what junior/mid-level/senior developer/engineer role means on the team.
What’s your point?
Share with me in comments her or on LinkedIn.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s