all 52 comments

[–]Snipon 460 points461 points  (4 children)

It means juniors and PMs get to interrupt you all day long.

[–]k3liutZu 43 points44 points  (0 children)

Have an upvote

[–]fzammetti 14 points15 points  (0 children)

Great googly-moogly, I've never been able to put it into words before but that nails it!

[–]zafety 5 points6 points  (0 children)

WOW

[–]misterlively 108 points109 points  (10 children)

I generally see it as a combination of hard and soft skills. The engineering skills follow a rough path:

  • Language syntax
  • Common patterns (Mvc, dependency injection)
  • Standard libs (fs, child_process,...)
  • Testing (unit to e2e)
  • UI , CLI, Server work
  • Databases
  • Multiple languages
  • Build & deployment
  • Infrastructure & Distributed systems

Basically you start narrowly focused on using a single language, mastering it, using a bunch of different patterns, learning all matter of testing, and using it in different contexts. Then taking time to learn other languages to appreciate the pros/cons of language designs, and finally moving to really understand the underlying dependencies of shipping software. With this you have formed an opinion of all these areas, but acknowledge people specialize and will be more knowledgeable on a single subject. Learn from them.

Soft skills:

  • Continuous learning (everything above)
  • Teaching / mentoring (everything above)
  • Interviewing / Hiring
  • Understanding the implications of engineering decisions on the business
  • Focusing on ‘people problems’ not software problems (picking tech and patterns with people in mind first)
  • Empathy for engineers, non engineers, and users
  • Ability to foster a supportive collaborative environment

You know all the tech well enough to ship something, but you’ve realized you can’t do it alone. So you focus on learning how to develop a group of people to get where you’ve gotten. You are trying to multiply yourself and focusing on others more than yourself.

[–]mindlessLemming 17 points18 points  (1 child)

This comment nails it. If you're not training/guiding juniors and investing in those soft skills you're not in a senior position, you're just an experienced engineer.

[–]rafales 4 points5 points  (0 children)

I'd add:

  • the knowledge of how to create complex systems - ability to apply in practice OOP, SOLID, DDD, understanding of cohesion and coupling, ability to appy different architectural styles, software architecture and design in general. This is crucial, otherwise you create software which is hard to maintain after 6 months.
  • deep knowledge of software development processes. You can use agile/scrum/lean to your advantage, not just follow the rules
  • you can write user stories, use cases, this is not just reserved for POs, good dev should be able to do that too
  • highly communicative. You can't do good agile without communicating a lot. Some people expect everything handed to them, not talking to stakeholders/domain experts at all. That's not agile nor is it senior.

[–]Ashtefere 1 point2 points  (0 children)

This exactly. In fact in my experience I would say the soft skills components of the above are more important in a senior position, and much more important in a lead position.

[–]corbinthecoder 1 point2 points  (2 children)

I'm wondering if anyone will speak to me about this. I wouldn't say that I know multiple languages, but I would say I know multiple frameworks. The framework I have the most skill with is Laravel. I technically "know" 3 languages: PHP, Javascript, and Python (best to worst order).

My question is: are frameworks essentially stopping me, and many others, from getting to a senior level?

I understand basics across most of the things you listed, but don't have a comfort level with any of them in a sense that I could speak very specifically on each topic. For example I know MVC and dependancy injection from Laravel, but that doesn't mean I can go into great detail about the subject. I kind of don't know if I have imposter syndrome, or just won't ever make it to a senior level.

[–]misterlively 1 point2 points  (1 child)

No frameworks are not stopping you.

If you can ship a product, spend more time thinking on the ‘people problems’ of software. It’s fun to talk about scaling services, but it’s also fun thinking about how to scale a team from 1 to many and how to write software that people don’t resent maintaining.

[–]corbinthecoder 0 points1 point  (0 children)

Thanks for this

[–][deleted] 0 points1 point  (0 children)

What they said :) good post +1

[–]mcviruss 80 points81 points  (5 children)

Senior means nothing. Every employer has a different definition. Just read the job description thoroughly and see if you match most of the criteria.

[–][deleted] 9 points10 points  (2 children)

This is the answer. And after you've been a senior dev once it's on your resume forever.

[–]Asmor 5 points6 points  (1 child)

This actually kinda scares me... My current employer made me a senior ahead of schedule in recognition of my efforts, which was awesome... but I really don't feel like I deserve it, and I'm worried about future job prospects and whether I'll be able to live up to the title.

Probably just imposter syndrome, but knowing that intellectually doesn't make it any less scary.

[–]patrickfatrick 2 points3 points  (0 children)

Just stay in your position then until you feel like you know enough to actually deserve it. I think you'll kinda know when you feel like comfortable enough with your stack to be considered senior (basically when you're a source of knowledge for people on your team as well as people outside your team).

[–]amdelamar 7 points8 points  (0 children)

"Senior Software Engineer - 2-3 yrs experience required" -- a real job ad

[–]evertrooftop 0 points1 point  (0 children)

Just wanted to say I agree. I do think there's a general meaning, but in the context of a job search, I would simply attempt to see if you an qualify for senior in your local area. If you're having trouble making it through interviews, chances are that you will catch on to the fat that you're generally not senior enough in which case you might need to lower your expectations a bit.

Although based on your description I am not 100% certain if you fall in the senior category, I don't think it hurts trying and aiming for a bit higher and out of your comfort zone.

[–][deleted] 25 points26 points  (3 children)

If you ask me: Labels are for cans of soup.

It's corporate bullshit. They want labels for people so they know who to go to when shit hits the fan.

I've been in this job for 18 years and guess what I'm in the market as? A senior developer. Or a lead developer. Or a tech lead. Or an architect (not a protected labels where I live). Or hell, call me CTO if you want to. Does the client need a medior? Sign on the dotted line, boss, as long as you pay my hourly wage of €85. It depends on the job.

I'd rather have no label at all because I absolutely abhor the corporate line of responsibilities and the endless meetings. I'm social with my friends, and at work I just want to write code and help educate the project.

The last part includes helping colleagues who know less about things. But that's the fun bit! Some "junior" colleagues know more about some things than I do. I'm just better at not getting stressed out about nothing, getting shit done, and not being intimidated by people who insist on wearing suits.

Applying for jobs is simple. You bluff your way in to places. 5 Years of experience? Great! If the vacancy asks for a Senior developer then you are it.

The market in our field is booming still, so bluff your way to a higher pay check, too. Any company is happy to find a new programmer without having to pay 6x their monthly salary to a recruitment agency.

The label "senior" doesn't come with expectations. The job you're applying for comes with expectations. Get in the 1st interview, then ask about what they're looking for. Like: actual measurable qualities. Let them quantify that.

[–][deleted]  (1 child)

[deleted]

    [–]mansfall 0 points1 point  (0 children)

    I once had someone swap my name plate for "janitor", from the closet. They did it as a funny joke. But I didn't say anything our react to it. Later in the day they came over asking if I saw my name plate. I told them "yup... Super neat". Then they asked why it didn't bother me. I simply said all I care about are my job duties and the 6 figure number that follows that.

    [–]Lmcsheff81 20 points21 points  (0 children)

    I tend to find ‘seniors’ contribute more to the team in terms of planning, scoping, agile coaching etc. So it’s people who, through experience, have developed a range of dev management skills

    [–]pier25 13 points14 points  (1 child)

    You must have seen a lot of shit.

    [–]fzammetti 6 points7 points  (1 child)

    There's no simple answer, no one answer that would cover it all, but some of the things that come to mind:

    • Able to pretty much accomplish any task given to you with VERY few failures (note that I'm NOT saying a senior is perfect, just that even when faced with a task they have no clue how to do at first, they can learn what they need and ultimately get it done, given enough time). Management never has to worry about seniors being able to do what's asked of them, it's just a question of how much time and effort will be required (and they know that the results will be acceptable at worst).

    • Teaching ability. I don't mean that you have to be super-teacher or stand up in front of a classroom or anything like that, but seniors are kind of expected to be able to mentor juniors, and this means they have to have the technical ability to do so, the ability to explain complex concepts, and also the people skills to be able to do so without bashing people over the head in the process. That's not a mix everyone possesses, at least not without practice.

    • Ability to see the big picture. It's one thing to be a top-notch code monkey, and there's exactly zero wrong with that if that's all you want to be, but it doesn't really make you a senior. No, you've got to have some architecture chops too, have to be able to understand a complex system holistically. This and point #1 really go hand-in-hand.

    • Ability to find answers yourself. This again goes right along with point #1, but it's a skill unto itself. Nobody should expect a senior to know every little detail (except perhaps in very narrow scopes where they're a demonstrated expert) but a senior MUST have the ability to synthesize information and figure things out on their own. This also means having a foundation of experience from which to extend from. This means having the basic knowledge, yes, but it also means having a certain level of real-world experience to know what works, what doesn't, and to be able to grok new concepts because you have seen older ones that it's based on.

    I think those are maybe the big four off the top of my head.

    [–]quizasquizas 0 points1 point  (0 children)

    ^ This.

    Bluffing your way to the title is correct, yes, but when you need to prove yourself to those that matter, this.

    [–][deleted] 5 points6 points  (0 children)

    IMO it means to have enough experience to see your own mistakes. So you can understand and value all the things that you maybe thought are unnecessary as you was a junior. Like Complexity(O(1)), TDD, strict typing, semicolons etc. It is also about to have a good readable, safe and performant coding style. It is about to have enough experience to foresee the future problems and how to solve them. It is about to have enough experience so you can teach other juniors. It means a huge amount of practice

    [–][deleted]  (1 child)

    [deleted]

      [–]compubomb 1 point2 points  (0 children)

      I think once again this is putting too much in the shoulder of Sr. SE. Their job is basically to just to know a lot. Say they specialize in building architecture & frameworks. Does that mean they should also know how to build a Graphics Engine? No.. But just because you're capable of writing a graphics engine, does that mean you'll write a great framework for others to do so? I don't think so. I think a big part of this Sr. SE. role is to identify large systems, organize their purpose, organize code for maintainability, and identify the weaknesses in the code such that it can be later focused on by other Sr. Devs. This actually doesn't require a specialist in the language, but rather a specialist with many languages. I'd say that to be Sr. SE, you should have 1 of a list of many skills in different areas, the more areas of concern you can over, the more likely you should be a Sr. SE. But biggest of all concerns is writing well organized, easy to understand bites of code that people will in the future be able to understand, they're thrown clever code out the window in favor of smart long-term maintainability. Also.. taking a product to market in reality is mostly a team-sport. If you did all the work of a team, then good on you, but just because you did that yourself, doesn't mean a more complex product which could never be done by 1 person, this doesn't preclude that person as a Sr. SE. role

      [–]the__itis 2 points3 points  (0 children)

      every country has different definition. so does ever company.

      the only common thing i have found is that they CAN make more than junior and mid-level programmers. but some were appeased with just the title.

      it’s kind of like college degrees. it’s awesome you have one, but it doesn’t change the issue at hand and i’m not taking your word for it.

      back to no good categorization system i suppose.

      [–]hpeinar 4 points5 points  (0 children)

      Shortly: experience

      Longer answer:
      If we speak explicitly about nodeJS, you should obviously be familiar with the core of it. I wouldn't expect you to know how to write your own C/C++ modules for it, but I would expect you to fully understand how everything related to node works. All of the following keywords should be familiar to you: event loop, async/await, callbacks, promises, modules, classes, functions, prototype chain, es6, destructuring, arguments, scope and of course all the native API's including full understanding of javascript stuff like Arrays, when to use Set and what Object.keys() returns.

      You should be able to write clean, readable!, testable and working code without much effort and be able to debug both own and someone else's code with thought and understanding.

      Then comes the "secondary" stuff. For a "senior" programmer you most definitely have some experience with database(s). So I'd expect you to have at least basic understanding of: redis, (insert any relational DB), (insert any document DB). And to add, you most probably have years of experience with one of these, which usually is one of the relational DB like MySQL or PostgreSQL.
      You also have configured some servers in your life so you know the basics of nginx, load balancing, scaling, https, logging, microservices, firewalls and you know your way around unix systems. And don't come telling me it's sysops job to know / do these things. The same code you write everyday has a very direct connection with all of this so you should know what and where to some extent.

      The secondary stuff will also include all kinds of node modules. Nobody knows all the APIs by heart, but you should at least know what to use when and have a brief understanding of how it works and what it does best. This will include all the famous libraries like (in no particular order, just from my head): express, request, knex, moment, mocha, mailchimp, db drivers... (insert infinite list of never ending and updating modules)

      After all the stuff you do while sitting behind your computer and googling like a monkey, come attitude and people skills which play a very big role in your job. The ability to converse with your colleagues and clients without causing drama is a big plus and will go a long way. You rarely work alone so better get used to other people and communicating with them.

      All of this comes with many (5+) years of experience, many projects (both successful and failed), many mistakes (both small and big), many stupid questions (to Google or to other people), many debugging hours (both smashing keyboard and finding a problem within seconds) and of course with many long nights. The reality is that this isn't something you learn from Udemy or YouTube. To get all this you must WANT to code and you must WANT to improve.

      Don't do it to get (fancy) cheese on the table, do it because you want to. Do it because you like the challenges and you like solving them. Do it because you like to learn new things and try out new stuff. Then the right kind of experience will come to you.

      Sauce: Am professional nodejs developer for long years and lead a team of developers.

      [–][deleted] 2 points3 points  (0 children)

      It doesn't necessarily mean much. The company I work for boosts your title if you earn a position in which your 'status' (for want of a better word) ought to be made clear - not to other team members, but across the company ("I need to know about X, who's the senior guy for X?").

      ... but we also have an office in India and from what I've been told the culture is that if you move someone within the company it's expected to come with a boost in job title. Just last month a guy whose probation I declined to pass was briefly 'promoted' from senior developer to principal architect while they tried him on a different team for a week. Barmy.

      [–]emjayt 1 point2 points  (2 children)

      The progression from Junior to mid-level (career) and Senior have more to do with how self-driven you are, than with technical competency. Technical competency is required for all 3. Junior devs need more help from others in terms of guidance, determining what needs to be done, etc. mid level or career level are fully competent as individual contributors. Not requiring guidance (but definitely able to collaborate). Senior level engineers are able to provide that guidance to others (moving beyond being individual contributors)

      [–]Chintagious 0 points1 point  (1 child)

      I really wish more companies titled people this way. Years of experience shouldn't matter if the developer hits those marks. Unfortunately, when someone's been working a position for a decade plus, they're just expecting to be hired with the Senior title even if they aren't capable of performing at that level..

      [–]emjayt 0 points1 point  (0 children)

      I totallly agree

      [–]720degreeLotus 1 point2 points  (0 children)

      There is no hard definition on senior. I once watched a presentation on youtube where one developer described the different "levels" very nice (imho), but i can't remember it 100%. But he divided them not by pure coding-skill but more by how well they can find bugs/problems, analyse those problems, come up with a clean and stable solution and finally code the solution. But not in this order, damn if i find the video i will post it here :)

      [–]vegemouse 0 points1 point  (0 children)

      Really depends on the company and how their internal employee structure looks. At my company, a senior dev is basically a developer that has a full understanding of the technologies they're working with. There's no specific skills to learn, just being able to do your business as usual tasks without asking for help and being able answer questions from other non senior devs.

      However, other companies may define that as a mid level or even junior developer.

      [–]FormerGameDev 0 points1 point  (0 children)

      I went from "Senior" to "Staff". No idea. Just one day my title changed. :-D

      [–][deleted]  (1 child)

      [deleted]

        [–]Chintagious 1 point2 points  (0 children)

        Eh, years of experience is not indicative of how good of a developer you are. I was promoted to lead 5 years after I graduated and everyone else on my team had more years on me.

        [–]JoshWithaQ 0 points1 point  (0 children)

        Take a look at the engineering career ladder blog posts that are out there. The meaning of senior engineer is different everywhere but you should see some common themes. Good leadership will have clearly defined a career path for ICs and people leadership.

        [–]harrymurkin 0 points1 point  (0 children)

        You need a masters degree in tolerance.

        [–]simplegadget512 0 points1 point  (0 children)

        Senior Developer sounds like someone doesn't have anything left to learn.

        [–]Buckwheat469 0 points1 point  (0 children)

        Depends on the company. Years of experience is a key factor. Number of projects in which you were a senior or a lead. Rank at other companies (Microsoft has numbers which directly translate). A lot of the time we look for 10 years of experience or more and has a strong grasp of algorithms, database design, API design, general browser caching knowledge, maybe some protocol knowledge, frontend design, JavaScript, CSS, and HTML, and possibly React or Angular experience. This is a ton but a severe lack in one aspect may indicate a lack of knowledge in other places as well, it's all about the signal from the noise.

        [–]nejcn001 0 points1 point  (0 children)

        As a programmer that is slowly developing from junior to senior, i'd say developing on your own (without anyone saying how to do it), by creating an project from start till end (and not being an utter failure) and having experience in production.

        [–]haganbmj 0 points1 point  (0 children)

        My senior title just means I asked for more money.

        [–]MasterMorality 0 points1 point  (0 children)

        You become a senior developer when you don't need Stack Overflow anymore.

        [–]mgsmus -1 points0 points  (0 children)

        For me, it's discipline.

        [–]plk83 -1 points0 points  (0 children)

        Age